もしかしたら、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化してツールを広めていくと、色々楽になるんで良いんじゃないかなと思っています。
