Railsプラグインの作り方を調べてみた

日本語サイトがあまり見つからなかった(検索下手なだけかも...)ので公式ガイドのプラグインの作り方をあたってみた。
The Basics of Creating Rails Plugins — Ruby on Rails Guides

マイ環境:


OS: Ubuntu 8.04
rails: 2.3.5


1. セットアップ

1.1 アプリケーション作成


gem install rails
rails yaffle_guide
cd yaffle_guide
script/generate scaffold bird name:string
rake db:migrate
script/server
ベースとなるRailsアプリ(yaffle_guide)を作成し、scaffoldでbirdモデルを作成します。


script/server
を実行したら、http://localhost:3000/birdsにアクセスし、scaffoldにて作成されたbirdsコントローラが動作していることを確認しておきます。

ちなみに、rails(2.3.5)を使っている自分は


script/generate scaffold bird name:string
を実行したら

/usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:271:in `require_frameworks': RubyGem version error: rack(1.0.0 not ~> 1.0.1) (RuntimeError)
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:134:in `process'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `send'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `run'
from /home/kondou/Code/Rails/yaffle_guide/config/environment.rb:9
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/generate.rb:1
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from script/generate:3
と怒られました。

解決方法(http://rubyist.g.hatena.ne.jp/yuiseki/20100206/1265483280)


sudo gem install rack --version '=1.0.1'


1.2 プラグインの雛形を生成


./script/generate plugin yaffle --with-generator
yaffleプラグインの雛形を作成します。

以下のgenerator実行時の出力からvendor/plugins以下にyaffleプラグインの雛形が作成されたことがわかります。


create vendor/plugins/yaffle/lib
create vendor/plugins/yaffle/tasks
create vendor/plugins/yaffle/test
create vendor/plugins/yaffle/README
create vendor/plugins/yaffle/MIT-LICENSE
create vendor/plugins/yaffle/Rakefile
create vendor/plugins/yaffle/init.rb
create vendor/plugins/yaffle/install.rb
create vendor/plugins/yaffle/uninstall.rb
create vendor/plugins/yaffle/lib/yaffle.rb
create vendor/plugins/yaffle/tasks/yaffle_tasks.rake
create vendor/plugins/yaffle/test/yaffle_test.rb
create vendor/plugins/yaffle/test/test_helper.rb
create vendor/plugins/yaffle/generators
create vendor/plugins/yaffle/generators/yaffle
create vendor/plugins/yaffle/generators/yaffle/templates
create vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb
create vendor/plugins/yaffle/generators/yaffle/USAGE

ちなみに、--with-generatorオプションを付けないでプラグイン作成を実行すると


create vendor/plugins/yaffle/generators
create vendor/plugins/yaffle/generators/yaffle
create vendor/plugins/yaffle/generators/yaffle/templates
create vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb
create vendor/plugins/yaffle/generators/yaffle/USAGE
の部分は作成されません。


1.3 ファイル構成

作成するプラグインのファイル(ディレクトリ)構成を、GemPluginsとの相性を考えて以下のようにします。

-- lib
-- yaffle
`-- yaffle.rb

`-- rails
|
`-- init.rb

ディレクトリ、ファイルを作成します。


cd vendor/plugins/yaffle
mkdir lib/yaffle
mkdir rails
touch rails/init.rb

vendor/plugins/yaffle/rails/init.rbに以下を記述します。


require 'yaffle'

次回に続く...