2013-03-02

_ padrino-frameworkの開発をはじめる(2013/3/2版)

最近使っている人を多く見るようになった、イケてるRubyのWebアプリケーションフレームワークPadrino。 これの開発を自分もはじめたいと思ったのでした。

そのためにはまず下記を円滑にできる必要があります。

  • ソースを入手する
  • ライブラリを入れる
  • テストを流す

ここは開発をはじめるにあたって、一番スムーズにいきたいところです。なぜなら、はじめてさわるおっかなびっくりな状態で、どこから手を付けたらわからないとか、なんかうまくいかないとかってなると大いに出鼻をくじかれてしまうからです。

そんなことぐらい自分で解消しろよと凄腕たちは言うかもしれないけれど、逆にそんなことでこれからの人が離脱してしまうのは非常にもったいない。そう思ってしまうのでした。

padrino-frameworkの開発に必要なもの

最低限下記が必要です。

  • インターネット環境
  • Ruby本体
    • 自分の場合macを使っており、rbenvとruby-buildで入れた2.0.0-p0を使っています。

ソースを入手する

つまりは、https://github.com/padrino/padrino-framework からgit cloneします。

github for macを入れたのちに ブラウザで https://github.com/padrino/padrino-framework を開いて、「Clone in Mac」ボタンを押してて手元にcloneするのが楽チンでした。 CLI派の人はterminalからgit clone ほげほげとタイプするといいとおもいます。

サブプロジェクト構成

padrino-frameworkは数個のサブプロジェクトで構成されていて、それぞれ別のgemとして扱えるようになっています。

すべてを理解しないといけないわけではなく、いわゆるWeb Application Frameworkとしては、padrino-core、padrino-helpersを注視するといいでしょう。

  • padrino : メタgem
  • padrino-admin : 管理画面
  • padrino-cache : キャッシュ
  • padrino-core : Padrinoのコア機能
  • padrino-gen : ジェネレータ
  • padrino-helpers : ヘルパー
  • padrino-mailer : メーラ
  • padrino-performance : パフォーマンスツール

ライブラリを入れる

つまりは、bundlerを入れた後bundle installします。

bundlerを入れる

which bundlerと叩いてbundlerがあることを確認し、なければgem install bundlerして、bundlerを入れてください。

Gemfileに記述されたgemを入れる

cloneした先のディレクトリでbundle installを実行し、Gemfileに記述されたpadrino-frameworkが必要としているgemを入れましょう。 bundle install --path vendor/bundleとオプション付きで実行し、padrino-frameworkに必要なものはpadrino-framework内のvendor/bundleディレクトリに押し込めるのが好みです。

テストを流す

つまりは、テストを実行するrakeタスクがあるのでこれを実行します。

cloneした先のディレクトリで、bundle exec rake testを実行すると、全サブプロジェクトのテストが実行されます。 もしサブプロジェクトを個別にテスト実行したいときは、当該サブプロジェクトのディレクトリでbundle exec rake testすればよいです。

だがしかし、テストがabortする!

padrino-cacheのtest_stores.rbで、redisにつながらないよ!ってエラーがでてテストが異常終了してしまうでしょう。 安心してください。何も悪くありません。大丈夫です:-)

/Users/t-koshiba/dev/padrino-framework/vendor/bundle/ruby/2.0.0/gems/redis-3.0.3/lib/redis/client.rb:276:in `rescue in establish_connection': Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED) (Redis::CannotConnectError)

(中略)

from /Users/t-koshiba/dev/padrino-framework/padrino-cache/test/test_stores.rb:88:in `<top (required)>'

テストコードをみると、redisがなければredisまわりのテストをskipするような記述がありますが、LoadErrorが起きないとskipしないんですね。require時にそのgemがなければLoadErrorになるのですが、接続ができないだけだと次に進んでいってしまいます。 テストの事前条件を書く前にあえて接続を試しているので、接続できなければskipしたかった意図を感じますが、そういう動きになっていません。

そこで、https://github.com/padrino/padrino-framework/pull/1088/files というパッチをつくったので当ててみてください。 LoadErrorが起きるか接続に失敗するならば、テストをskipします。

もちろん本気でpadrino-cacheのテストを行いたければmemcached, redis, mongoなど、padrinoで対応しているサーバを立ち上げてきちっと繋ぐ必要がいずれ必要になるでしょう。それまではきちんとスキップしてやるのがベターだとおもってます。 実際、mongoはサーバに繋がらなかったらその部分のテストをスキップするという流れにすでになっていました。

なおこの部分、そもそもmemcachedだのredisだのを直接サポートするのではなく、いずれ https://github.com/padrino/padrino-framework/pull/1018 でMonetaによるキャッシュストアのインターフェイス共通化がなされるので大きくテストコードも書き換わるのですが、マイルストーンをみるにもう少し先のバージョンまで待つ必要がありそうです。

さあ、開発をしよう

これで開発ができる状態=テストが通る状態をになりました!思うままかいていきましょう。


«前の日記(2012-11-24) 最新