もしかしたら、Rubyに慣れてない人には気付いていない人も居るかと思ったので、
カジュアルにRubyGemsを活用する事のメリットについて書いておきます。
普通、Rubyのgemパッケージは、gem install
でインストールできるようにrubygems.orgにホスティングしておくのが基本です。
とは言え、世界的に公開されるものなので、ちゃんとgemとしての体裁を整えておかないと何か恥ずかしいし、説明とかも英語でちゃんと書いとかないと、って考えると面倒なレベルのツールとかあると思います。
API叩くための簡易コマンドとか、社内ツールの処理自動化とか。
しかし、Bundlerとgitのおかげで、現在はそういった事を余り気にする必要が無くなっています。
Bundlerは、gitリポジトリから直接コードをクローンして、パッケージ化されたgemと同様に扱う事ができます。
参考: Bundler: The best way to manage a Ruby application's gems
そのためrubygems.orgにホスティングする必要はありません。
公開しても問題ないものならGitHubに、クローズドな情報が入っているものは社内のgitlabやGitHubのプライベートリポジトリに配置しておけばOKです。
後は、Gemfileに書けば、gemとして利用できます。
gitリポジトリから参照しているgemはGemfile.lock
でこんな感じで管理されています。
GIT
remote: git://github.com/joker1007/ghost_writer.git
revision: bdee7051d5555d8be92045c1d45cd4ac0dee40b1
specs:
ghost_writer (0.2.0)
activesupport (>= 3.0.0)
rspec-rails (~> 2.11)
trollop
この方法には以下のようなメリットがあります。
- READMEにGemfileの書き方さえ書いておけば簡単にチームメンバーがインストールできる事。
- 更新したい時は、gitリポジトリにpushして、bundle updateを実行するだけ
- Bundlerはコミットハッシュでgemを特定しているので、バージョン番号を更新する必要もない
- Jenkins等で利用するのが楽になる
- 他の人の改善案もpull request等で容易に取り込める
というわけで、ツールの更新と配布をほとんどgitの機能に任せる事ができます。
gem化するのにも大した手間はかかりません。
% bundle gem mytool -b
create mytool/Gemfile
create mytool/Rakefile
create mytool/LICENSE.txt
create mytool/README.md
create mytool/.gitignore
create mytool/mytool.gemspec
create mytool/lib/mytool.rb
create mytool/lib/mytool/version.rb
create mytool/bin/mytool
Initializating git repo in /home/joker/mytool
後は、bin/mytoolを編集して、コマンドラインツールを簡単に作れるwycats/thorなどを利用すれば、お手軽コマンドツールが作れます。
後は、このディレクトリをgitリポジトリに上げてしまうだけです。
こんな感じで、カジュアルにGem化してツールを広めていくと、色々楽になるんで良いんじゃないかなと思っています。