プラグイン完全ガイドその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. 作ったプラグインは売っても企業の内部で利用しても問題ない。プロプライエタリビジネスロジックが含まれていれば,たぶん公開したくはないでしょう。

◆次回予告

次回は,プラグインをスクラッチから作る予定。