LoginSignup
181
185

More than 5 years have passed since last update.

チーム内にRuby製のツールを広める時にはGemにしておくべき

Last updated at Posted at 2013-05-17

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

181
185
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
181
185