プラグイン完全ガイドその1
【ma2注】以下のURLの翻訳。
http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i
37signalsでは各アプリあたり5,6個のプラグインを使っている
− David Heinemeier Hansson(Canada on Railsでの発言)
◆アプリでプラグインを使う
プラグインとは Rails 用に作られた自己完結型のライブラリのことである。他人のコードを再利用したり,自分のコードを再利用のためにパッケージするには最適の方法である。
このエントリは Ruby on Rails のプラグインを書くためのチュートリアル三部作の一つ目である。
Gems と違って,プラグインは Rails アプリの特定のディレクトリに直接インストールする。そのためアプリと一緒に簡単にデプロイすることができる。
私は以前にも以下の URL がプラグインを学ぶいいソースになると言った。
◆見つけてインストール
使いたいプラグインを見つけたら,以下のようにして Rails アプリにインストールできる。
# 既知のソースからインストール ./script/plugin install calendar_helper # Windows だとこんな感じ ruby script/plugin install calendar_helper # 特定の URL からインストール ./script/plugin install http://topfunky.net/svn/plugins/calendar_helper # Subversion に直接リンクしてインストール ./script/plugin install -x calendar_helper
もしスクリプトが自動的にプラグインを見つけられないときは,ディスカバリーアクションを起動して Rails wiki にある全てのソースを調べる。
# 新しいプラグインのソースをインポートする ./script/plugin discover
script/plugin スクリプトには他にいくつかの引数がある。./script/plugin を引数なしで起動すると,全てのオプションを見ることができる。
プラグインをアンインストールするには,以下のどれかで行う。
◆プラグインを書く
バイクに乗ったり水泳を習ったりするのと同じで,プラグインが書けるのは素晴らしいことだ。いやしくも Ruby のコードを書いたことがあるのなら,もう半分できたも同然だ。
Just like riding a bike or learning to swim, being able to write a plugin is a great skill. If you’ve written any Ruby code at all, you’re halfway there.
プラグインでだけでできることがいくつかある(自前のジェネレータを書くとか)。あとは,一般的なコードをアプリ間であるいは他の開発者と共有できることに感謝するだけだ。
◆Plugin-Man, Plugin-Man, Doing the Things a Plugin Can
プラグインは Rails アプリができることはほとんどできる。加えてそれ以上のことも。いかにプラグインでできることのリストを示す。
- モデル : これは一番簡単なプラグインだ.モデルをプラグインの lib フォルダに置けば,あとは使うだけ.
- ビューヘルパー : ヘルパーメソッドをアプリ全体で使わせることができる(技術的にいえば mixin).これも簡単.
- コントローラ : コントローラプラグインを直接書くことはできないが,コントローラを app/controllers ディレクトリにコピーするジェネレータを書くことはできる.中級.
- Rake タスク : 自動化でよりよい生活を! rake ファイルを tasks フォルダに置けばタスクの再利用が可能になる.
- 画像,スタイルシート,Javascript : ジェネレータはこれらを public ディレクトリにコピーできる.中級.
- テストアサーション ; テストに簡単に mixin できる.
- ユニットテストと機能テスト : コントローラと一緒にこれらもジェネレートできる.中級.
- 他の機能 : 他にも Rails アプリで使いたい機能がたくさんあるだろう。支払い機能への接続,Basecamp API べきメッセージ送信,Campfile ボットの利用,グラフ生成,などなど。これらは全てプラグインで実現できる。
◆フォルダ構成
標準のプラグインジェネレータを使えば,基本的なフォルダ構成を確認することができる。
# ジェネレータを使って transmogrifier プラグインを作る ./script/generate plugin transmogrifier create vendor/plugins/transmogrifier/lib create vendor/plugins/transmogrifier/tasks create vendor/plugins/transmogrifier/test create vendor/plugins/transmogrifier/README create vendor/plugins/transmogrifier/Rakefile create vendor/plugins/transmogrifier/init.rb create vendor/plugins/transmogrifier/install.rb create vendor/plugins/transmogrifier/lib/transmogrifier.rb create vendor/plugins/transmogrifier/tasks/transmogrifier_tasks.rake create vendor/plugins/transmogrifier/test/transmogrifier_test.rb
基本的なフォルダ構成は以下の通り。
transmogrifier |-- init.rb |-- install.rb |-- Rakefile |-- README |-- lib/ | |-- transmogrifier.rb |-- tasks/ | |-- transmogrifier_tasks.rake |-- test | |-- transmogrifier_test.rb
必須ファイルは1つもないが,それぞれが異なる役割を持っている。tasks フォルダだけのプラグインを書くかもしれないし,lib フォルダしかないプラグインを書くかもしれない。各ファイルの役割は以下の通り。
- init.rb : Rails アプリが起動するたびに走る.ヘルパーモジュールを mix-in して全てのビューから使えるようにするとき等に役立つ.
- install.rb : プラグインが最初にインストールされたときに一回だけ走る.必要なファイルをコピーしたりインストール手順を表示したりするのに使える.
- Rakefile : ドキュメントを生成してプラグインのテストを走らせる.
- lib/ : 実際の Ruby コードを含む.このフォルダにある新しいモデルやライブラリは自動的に Rails アプリから使えるようになる.init.rb を使えばヘルパーも置くことができる.
- tasks/ : .rake ファイルを置く.後は自動で他の作業は不要!
- test/ : プラグインの動作を検証するテストを置く.
言及していないもの。
- generators/ : scaffold のようなコード生成に使う.
- rdoc/ : rake rdoc タスクで生成されたドキュメントを含む.
- MIT-LICENSE : It helps to paste this, or your preferred license. 作ったプラグインは売っても企業の内部で利用しても問題ない。プロプライエタリなビジネスロジックが含まれていれば,たぶん公開したくはないでしょう。
◆次回予告