gemat

概要

gematはRubyプロジェクトにおけるGemfileをエクスポートするCLIツールである。

GitHub repository
https://github.com/kijimaD/gemat/

Goals

Gemfileを見やすい形で、有益な情報をエクスポートできるようにすること。 プロジェクトで使われているgemを、学びやすくすること。

Bundlerで取ってくる以外の情報源も使えるようにする。 たとえばGitHubの元リポジトリへのリンクがあると便利である。

Non Goals

情報表示以上のことは行わない。

Background

使っているgemのソースコードを把握したいとき、逐一検索してリポジトリを見つけるのが不便である。

Detailed Design

標準的な使用例

gemat md
Progress: |====================================================================|

| gem | Repo URL |
| ---- | ---- |
| csv | https://github.com/ruby/csv |
| httpclient | https://github.com/nahi/httpclient |
| rake | https://github.com/ruby/rake |
| rspec | https://github.com/rspec/rspec |
| rubocop | https://github.com/rubocop/rubocop |
| ruby-progressbar | https://github.com/jfelchner/ruby-progressbar |
| simplecov | https://github.com/simplecov-ruby/simplecov |
| thor | https://github.com/erikhuda/thor |
Name Phone Age
Peter 1234 17
Anna 4321 25
name repo_uri
httpclient https://github.com/nahi/httpclient
rake https://github.com/ruby/rake
ruby-progressbar https://github.com/jfelchner/ruby-progressbar
thor https://github.com/erikhuda/thor
rspec https://github.com/rspec/rspec
rubocop https://github.com/rubocop/rubocop
simplecov https://github.com/simplecov-ruby/simplecov
vcr https://github.com/vcr/vcr
webmock https://github.com/bblimke/webmock

Emacsでは折返しオフにして表示すると見やすい。

(setq-default truncate-lines t)

オプション

gemat csv -i "other_Gemfile" -o "output.csv"-f "index,name,repo,star,latest_version,current_version"
  • 第1引数(required) : 出力形式(md, CSV)
  • i(optional) : 使用するGemfileの指定
  • o(optional) : 出力ファイルの指定
  • f(optional) : 出力カラムの指定

CLI

Thorを用いる。

Bundler DSL

Gemfileの解析には、bundlerがDSLを実行した結果集めた情報を使う。 自分でGemfile読み込みを書かなくてすむ。自分で書くと仕様に追従しないといけないので現実的でない。

Fetcher

gemfileから読み取った名前を元に、rubygemsにアクセスして情報を取る。 jsonが返ってくる。

Gem

jsonで取った情報を加工して、オブジェクトに格納する。 1gemで1オブジェクト。

Column DSL

カラム指定を解析して、フォーマットするときに利用する。

Formatter

各形式でフォーマットして文字列にする。

Output

Formatterが出力した文字列を指定方法で出力する。

  • 標準出力
  • ファイル

progress barは常に標準出力。 生成したものをどれで出力するか、の指定。

技術

Memo

Tasks

GitHub API

rubygemsにはあまり役に立つ情報がない。 GitHubへ取りにいけば、面白いのがある可能性。 スター数とか、作者とか。

GitHub以外の対応

今のところGitLabには対応してない。 根本的に、リポジトリを判別するロジックが雑なのでどうにかしたい。

ラベルをつける

columnを指定できるのはいいのだが、表示は内部で使ってる文字列そのままなのでどうにかしたい。

Reference

Archives