コンパイル済みのgemパッケージを作るRubyGemsプラグイン

拡張ライブラリを含んだgemパッケージから、コンパイル済みのバイナリを含んだgemパッケージを作るツールを作りました。

Windows向けにコンパイル済みの拡張ライブラリを配布したいときに便利です。
コンパイラが入っていない環境に拡張ライブラリを含んだgemをインストールしたいときにも便利です。


実装はRubyGemsのプラグインになっており、インストールするとgemコマンドにcompileコマンドが追加されます:

$ gem install gem-compile
$ gem compile example-0.0.1.gem

Windows向けバイナリgemの作成

MinGW環境でコンパイルすると、x86-mingw32環境向けのgemパッケージが作成されます。
例えば、MinGW環境でmsgpack-0.3.6.gemをコンパイルすると…

$ gem compile msgpack-0.3.6.gem

これで msgpack-0.3.6-x86-mingw32.gem が作成されます。


また、-pオプションに続いて環境の名前を指定すると、その環境向けのgemパッケージを作成できます。
例えば-p x86-mswin32と指定すると、x86-mswin32向けのバイナリパッケージが作成されます:

$ gem compile -p x86-mswin32 msgpack-0.3.6.gem

これで msgpack-0.3.6-x86-mingw32.gem が作成されます。
MinGWx86-mingw32)でコンパイルされたバイナリと、VC(x86-mswin32)でコンパイルされたバイナリには互換性があるので、MinGW環境でVC向けのバイナリパッケージを作成できます。

1.8/1.9両対応パッケージの作成

Ruby 1.8 と 1.9 の両方に対応したコンパイル済みgemパッケージを作成できます。
gem compile -f 1.8:/path/to/bin/ruby-1.8,1.9:/path/to/bin/ruby-1.9のように、-fオプションに続いてruby-1.8のコマンドとruby-1.9のコマンドを指定します:

$ gem compile -f 1.8:ruby,1.9:ruby19 msgpack-0.3.6.gem

これで1.8/1.9の両方でインストールできるコンパイル済みgemパッケージが作成されます。パッケージの中には、1.8向けのバイナリと1.9向けのバイナリが両方格納されています。

MessagePack for Ruby

と言うことで簡単にコンパイル済みのgemパッケージを作成できるようになったので、MessagePack for RubyはWindows向けのコンパイル済みgemパッケージを配布するようにしました。1.8と1.9の両方に対応しています。