Rails プラグインを学んでみる。(前編)
こんにちは、マリンです。
ポートフォリオサイトのスマホ化がひと段落しましたので、今度はブログ機能をつけようと思います。
せっかくなので、以前ちょこっと触れたプラグインをやってみようと思い、現在RailsガイドさんのRails プラグイン作成入門を勉強しています。
ここまでの内容を勉強ノートとしてまとめ。
PluginとEngine
本文とは少し外れますが、前回触れたのがエンジンで、今勉強中なのがプラグインで・・・
何が違うの?と思ったのでちょっと調べました。
Plugin
Engine
プラグイン同様ホストアプリに機能を提供するものだが、エンジンはよりアプリに近く、ホストアプリのミニチュアのようなもの。
実際にはRailsアプリの方がエンジンを拡張したようなもので、Rails::ApplicationはRails::Engineから多くの振る舞いを継承している。
・・・イマイチなんですが、
どうやらよりホストアプリ寄りなのがエンジンで、いろんなアプリで使ってもらうのを想定しているのがプラグインかな?まぁ、名前的にも。
ということは今回はエンジンのが良さそうですが、
なんとなくプラグインの方が基本ぽかったのでひとまず続けることにしました。
1 設定
gem形式のプラグインを生成する
*ちなみにスケルトンは骨組みです。私はなんか透過的な意味かと思ってました。
$ rails plugin new
このコマンドはあらゆるRails拡張機能の開発用スケルトンを生成するためのものです。
ここで生成したスケルトンには、ダミーのRailsアプリが入っているので、それを使って統合テストなんかも行うことが可能です。
ちなみにこのコマンドで生成されるファイルはこちら。
create create README.md create Rakefile create yaffle.gemspec create MIT-LICENSE create .gitignore create Gemfile create lib/yaffle.rb create lib/tasks/yaffle_tasks.rake create lib/yaffle/version.rb create bin/test create test/test_helper.rb create test/yaffle_test.rb append Rakefile vendor_app test/dummy
2 新しく生成したプラグインをテストする
テストの前に、作成したプラグインのディレクトリでbundle install
します。
が、さらにその前に、.gemspec
ファイルの"TODO"の部分を修正してください。
プラグインではgemの依存関係?などをGemfile
ではなく~.gemspec
ファイルに記述します。
デフォルトのままだとこのファイルに記述できるs.homepage
やらs.summary
やらの内容が"TODO"になっており、このままだとbundle install
した時にエラーになってしまうので、ここを修正してください。
ダミーアプリの中ではrails test
。
3 コアクラスを拡張する
ここではプラグインが使用されるRailsアプリケーションのどこでも利用可能なメソッドを追加する方法を学びます。
追加先 : Stringクラス
追加メソッド : to_squawk
テストファイルの作成
この教材はテスト駆動方式で進めているので、まずテストからです。
core_ext_test.rb
ファイルを作成し、以下のテストを書きます。
require 'test_helper' class CoreExtTest < ActiveSupport::TestCase def test_to_squawk_prepends_the_word_squawk assert_equal "squawk! Hello World", "Hello World".to_squawk end end
まだメソッドが実装されていないのでエラーになります。
メソッドの実装
メソッドを実装してテストが通るようにします。
<require 'yaffle/core_ext'
を追加>
# lib/yaffle.rb require 'yaffle/core_ext' module Yaffle end
プラグインではまずlib
直下のyaffle.rb
(ファイル名はそれぞれです)が呼び出されます。
そのためまずはここで呼び出して欲しいファイル名を記述。
<メソッドの実装>
# lib/yaffle/core_ext.rb String.class_eval do def to_squawk "squawk! #{self}".strip end end
前述のrequire
で呼び出されるファイルにメソッドを定義します。
メソッドを使ってみる
ここまででto_squawk
メソッドが使用できるようになったので、
rails console
で試してみます。
rails console
を実行するには、ダミーアプリに移動してください。
$ cd test $ cd dummy $ bin/rails console >> "Hello World".to_squawk => "squawk! Hello World"
長くなってきたので、今回はここまでにします。
次は「4.“acts_as"メソッドをActive Recordに追加する」から書きます。