実行可能ファイルをgemパッケージに含める方法
タグ: ruby / 初版公開: 2013-09-26

gemでアプリケーションを配布する場合、実行可能なファイルをgemパッケージに含めてやりたい事がある。例えば拙作のxcalパッケージは、カレンダーを表示するxcalコマンドを含んでいる。以下ではxcalを例に、gemパッケージに実行可能ファイルを含める方法を説明する。

実行可能ファイルをgemパッケージに含めるには、まずディレクトリ構成を以下のようにして、binディレクトリにコマンド(この例ではxcal)を配置する。

├── xcal.gemspec
└── bin
    └── xcal

続いて、gemspecファイルで、以下のようにexecutablesにコマンドを追加してやる。名前はbinディレクトリに配置したコマンド名に合わせる。

Gem::Specification.new do |s|
  s.name        = 'xcal'
  s.version     = '1.0.0'
  s.date        = '2013-09-25'
  s.summary     = "xcal displays a japan calendar like cal, ncal"
  s.description = "xcal displays a japan calendar like cal, ncal"
  s.authors     = ["xmisao"]
  s.email       = 'mail@xmisao.com'
  s.files       = ["bin/xcal", "lib/xcal.rb"]
  s.homepage    = 'https://github.com/xmisao/xcal'
  s.executables << 'xcal' # here!
  s.add_dependency('icalendar')
end

あとはgemをビルドすれば、実行可能ファイルが入ったgemパッケージを作成することができる。

実行可能ファイルが入ったgemパッケージは、gemでインストールした際に、gemによって/usr/local/bin以下に起動用コマンドが自動生成される。起動用コマンドは、パッケージに含めた実行可能ファイルをloadする内容だ。

結果として、gemをインストールしたユーザは、/usr/local/bin以下の起動用コマンドを実行することで、パッケージに含まれた実行可能ファイルを実行させることができるようになる。

gemの作成方法とRubyGems.orgにgemを公開する方法については、RubyGemsで自作のgemを公開するを参照。