Rails用のgemを作成する手順 (Rails 4.0以降)


railsで使用されることを前提としたgemの開発手順です。いつもコマンドとかオプションを忘れてしまうので、備忘録として記述しておきます。

ディレクトリ作成

まずは rails pluginコマンドでgem開発用ディレクトリを作成します。

--skip-bundleがないと、 bundle installが走ってしまいます。パス指定せずにインストールすると、グローバル環境を壊してしまう可能性があるので、各開発ディレクトリにインストールしてます。

あとは直下の プラグイン名.gemspecファイルを編集して開発を始められます。

テスト用railsアプリ

testディレクトリ以下にdummyというディレクトリが作成されています。通常のrailsアプリなので、こいつにプラグインgemを読み込んでテストすることになります。

このテスト用アプリ(dummy)は、以下のようにして起動することができます。

プラグインgemのJavascriptを読み込む

普通に読み込むことができます。例えば プラグインディレクトリ/app/assets/javascripts/hoge.jsというJavascriptを作成し、この内容をdummyに読み込みたい場合は、 test/dummy/app/assets/javascripts/application.js

てな感じで書いてやればいいです。

ActionController::Baseを拡張する

プラグインgemを読み込むだけで、他に何もしなくても、すべてのコントローラで使用できるメソッドを追加したい場合があります。そういった場合はActionController::Baseを拡張してやればいいです。

ActiveSupport.on_loadを使用すれば、モジュールの読み込み処理をフックすることができます。そのモジュールが読み込まれたタイミング、もしくは既に読み込まれていれば即時に、特定の処理を実行できます。

プラグインディレクトリ/lib/プラグイン名/engine.rbを編集します。例として、 awesome_gemという名前のgemを開発中で、 NiceModuleというナイスなモジュールをインクルードするとします。

railsのApplicationControllerはActionController::Baseを継承してますので、NiceModule内のメソッドは、すべてのコントローラで使用できるというわけです。

Form用ヘルパーを拡張する

ActionView::Baseや、ActionView::Helpers::FormBuilderなどを拡張する例です。先ほどのActionController::Baseを拡張する場合とほぼ同じです。

これでビュー内から link_to_awesomeとか、 f.awesome_fieldとか書けるようになるわけです。ちなみに、上記例の helpers.rbは次のように記述すればいいかと思います。

こうしておけば、Helpersというネームスペースの基に、各Moduleを別ファイルで管理できます。

Gemを作成する

gemspecファイル内をきちんと記述してから、次のコマンドを実行します。

rake buildでもできるんですが、 gem buildの方が警告を発してくれるので便利です。

Gemをテストする

作成したgemを他のプロジェクトからちゃんと使えるのかというテストです。他のプロジェクトのGemfileに次のように記述します。

最初pathに指定するのはできあがったgemファイルへのパスだと思ってました。しかし正解は、gem開発ディレクトリのルート(gemspecがあるディレクトリ)へのパスです。また、バージョンは指定する必要があります。

Gemをリリースする

rubygemsにアカウントさえあれば、コマンド一発で登録できます。

 

他にも思いついたら追記していきます。

関連する記事


コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください