2019年3月16日土曜日

NativeExtensions を gem ファイルにパッケージする方法

概要

通常の gem を作成する方法とほぼ変わりませんが rake compile したり gemspec ファイルの編集が必要になります
プロジェクトの構成や rake-compiler については前回の記事を確認してください

環境

  • macOS 10.14.3
  • Ruby 2.5.1p57

.gemspec の編集

spec.extensions を追記します

Gem::Specification.new do |spec|
  spec.name          = "firstext"
  spec.version       = FirstExt::VERSION
  spec.extensions    = ["ext/firstext/extconf.rb"]
  # ...
end

途中は長いので省略しています
好きな箇所に追記してもらえれば OK です

コンパイル

最新の .so or .bundle ファイルを作成します

  • bundle exec rake compile

git commit

ビルドする前に gem に含めるファイルをコミットしなければいけません

  • git add .
  • git commit -m "add resources"

ビルド

gem ファイルを作成します
通常の gem を作成する方法と同じコマンドで作成できます

  • bundle exec rake build

これで pkg/firstext-0.1.0.gem が作成されます

ローカルインストール

ローカルでテストしたい場合は実施します

  • cd pkg
  • gem install -l firstext-0.1.0.gem

gem の作り直し

  • bundle exec rake clobber
  • bundle exec rake build
  • gem uninstall firstext
  • gem install -l firstext-0.1.0.gem

make install でインストールしてしまった場合は .so ファイルなどがすでに配置されてしまっており、そちらが優先されている可能性があります
macOS の場合は

  • rm -rf /usr/local/lib/ruby/site_ruby/2.5.0/x86_64-darwin17/*

あたりを実行してから gem install してください

その他

NativeExtensions の場合ヘッダファイルやライブラリファイルのインストールが事前に必要な場合があるので apt or yum でインストールしておきましょう
apt や yum でインストールできないライブラリもあるので、その場合は手動で適切なパスに配置してあげます
大抵は必要なヘッダファイルやライブラリは gem のドキュメントに記載されているはずです
ない場合は直接 extconf.rb などを見るしかないと思います

最後に

NativeExtensions を gem ファイルにする方法を紹介しました
あとは通常の rake release の手順で公開することができます

ハマりそうなのは git commit が必要な点かなと思います
未コミットのファイルは対象外になるのでファイルが見つからないなどのエラーが出る場合はちゃんとコミットされているか確認してみてください

0 件のコメント:

コメントを投稿