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は常に標準出力。 生成したものをどれで出力するか、の指定。
Tasks
GitHub以外の対応
今のところGitLabには対応してない。 根本的に、リポジトリを判別するロジックが雑なのでどうにかしたい。
ラベルをつける
columnを指定できるのはいいのだが、表示は内部で使ってる文字列そのままなのでどうにかしたい。
Reference
- GitHub repository
- https://github.com/kijimaD/gemat/