2012-06-16

クロスプラットフォーム対応な native extensions gem を作る (1) 環境作り

Posted on 2012-06-16, 15:57 in ,

lz4-ruby という、native extensions (C 拡張) を含む Ruby gem を開発していて、Linux/Windows 両方に対応した gem パッケージを作るのに苦労したので、その内容を備忘録がてらにまとめます。

gem の開発環境構築と、実際の gem 開発に分けてエントリを書く予定です。このエントリは、前者の開発環境構築についてのエントリとなります。

構築する開発環境について

今回構築する開発環境は Linux をベースとし、jeweler により gem のスケルトンを作成、mingw32/rake-compiler で Windows 向けのプリコンパイルされた native extension を作る構成になります。

以下、開発を行う OS、パッケージ、Ruby 環境、gem パッケージのそれぞれについてまとめています。

OS

後述する mingw32 のコンパイル環境を整備する都合により、Ubuntu Desktop の利用を強くおすすめします。CentOS、Scientific Linux などの RHEL クローンな Linux ディストリビューションでも環境構築は不可能ではないと思いますが、おすすめできません(私は途中で挫けました)。以降の説明も Ubuntu Desktop を前提としています。

debian パッケージ

mingw32 のコンパイル環境を整えるために、 として mingw32 パッケージをインストールします。RHEL クローン OS の場合は mingw32-runtime やら mingw32-gcc やら、いろんなパッケージをインストールしなければならなかったり、そもそも CentOS 6.2 向けの mingw32 関連パッケージが揃っていなかったりと茨の道となっているので、RHEL クローン OS で頑張る人は相当の覚悟をもって臨んでください。

Ruby 環境

rvm を導入して、異なるバージョンの Ruby 環境を切り替えられるようにしておきます。インストールは、https://rvm.io/rvm/install/ を参考に、以下のようにします。

rvm をインストールした後は、本来なら実際の Ruby 実行環境の構築(インストール)を進めたいところですが、その前に一つやるべきことがあります。

rvm install ほげほげ で Ruby の実行環境を構築した場合に、標準でインストールされる gem パッケージを列挙・指定する ~/.rvm/gemsets/global.gems というファイルがあります。このファイルをテキストエディタなどで開いて、bundler が記述された行を削除・上書き保存し、bundler が標準インストールされないようにします。この作業は、jeweler が要求する bundler のバージョンと、標準インストールされる bundler のバージョンが合致しないために必要な作業になります。

global.gems のファイル編集が済んだところで、実際の Ruby 環境を構築します。以下のように、1.8 系と 1.9 系の最新バージョンをインストールします。

gem パッケージ

下記 2 つの gem パッケージを、gem コマンドを用いてインストールします。

  • bundler
    Gemfile を用いた、依存する gem のインストールや各種コマンドの実行に必要
  • jeweler
    gem のスケルトン作成に必要

前者の bundler は、1.8 系、1.9 系の両方にインストールします。インストールする bundler のバージョンは、1.0 系の最新版とします。

jeweler は 1.8 系、1.9 系の環境どちらにインストールしても構いません(開発の主体となる Ruby 環境にいいれるといいでしょう)。

rake-compiler については bundler 経由でのインストールとなるので、ここではまだインストールはしません。

以上で開発環境の構築は終わりです。次のエントリで、実際に gem を開発する作業について記述します。

0 コメント:

コメントを投稿