Rubotyのハンドラーのgemをつくるためのruboty-genを公開した。
以前、Hubotスクリプトのhubot-sushiyukiをruboty-yasyとして移植した記事のまとめで「rubotyプラグインの作成の障壁を下げたい」と書いた。
$ ruboty-gen gem yo
するとrubotyのプラグインを作るテンプレみたいなものが出来る。
∩ ∩ ∠ i’m at ~/src/github.com/blockgiven ( ╹x╹) ruboty-gen gem yo create ruboty-yo/Gemfile create ruboty-yo/Rakefile create ruboty-yo/LICENSE.txt create ruboty-yo/README.md create ruboty-yo/.gitignore create ruboty-yo/ruboty-yo.gemspec create ruboty-yo/lib/ruboty/yo.rb create ruboty-yo/lib/ruboty/yo/version.rb Initializing git repo in /Users/block_given/src/github.com/blockgiven/ruboty-yo create ruboty-yo/lib/ruboty/handlers/yo.rb create ruboty-yo/lib/ruboty/yo/actions/yo.rb ∩ ∩ ∠ i’m at ~/src/github.com/blockgiven ( ╹x╹) cd ruboty-yo ∩ ∩ ∠ i’m at ~/src/github.com/blockgiven/ruboty-yo [master] ✗ ( ╹x╹) tree . ├── Gemfile ├── LICENSE.txt ├── README.md ├── Rakefile ├── lib │ └── ruboty │ ├── handlers │ │ └── yo.rb │ ├── yo │ │ ├── actions │ │ │ └── yo.rb │ │ └── version.rb │ └── yo.rb └── ruboty-yo.gemspec 5 directories, 9 files
ハマったところ
rubotyにはサブコマンドやオプションをサードパーティが実装するためのAPIがない。
「ないならつくろう」と思い書いてみたが、ruboty
が内部で使っているSlopの出来損ないラッパーみたいなものしか作れなかった。
なので専用のコマンドを実装して解決することにした。
くふうしたところ
BundlerのCLIをそのまま使っているので同じ操作感である。gemを作成する処理もbundlerのものをそのまま使っているが、gemのテンプレートだけは独自のテンプレートで置き換えた。
やりたかったこと
ほんとはruboty-gen
だけで済ましたかったけどコマンド周りで何度かyakyakしてしまったのでサブコマンドで満足した。
あとgem
以外もひきついでるのでruboty-gen install
するとbundle install
と同じ処理が動く。
bundlerのAPIでbundle gem
後のhookなどが用意されてるかどうか調べたい。
まとめ
拡張可能なCLIを作るのは以外と面倒くさそう。拡張可能なCLIを提供するためのoptparse
とかslop
とかがあると便利な気がする。知らないだけであるのかもしれない。またかこ。