CakePHP 使いが Rails チュートリアルをやってみた話
ゴールデンウィークにぶらぶら遊ぶことをしなかったせいで、いまだに休めていない感のある kagata です。
ゴールデンウィークに遊ばずに何をしていたかというと、ひたすら Ruby on Rails のチュートリアルを解き進めていました。ひととおりやってみるといろいろ気づきがあったので、読者のみなさまにもご紹介申し上げます。
動機
業務ではひたすら PHP による開発を続けているのですが、最近プライベートで Ruby のコードを書くことが多くなってきました。といってもサーバサイドアプリケーションを書いているのではなく、主に Itamae や Serverspec など Infrastructure as Code 的な用途が今のところ多いです。
そうこうするうちに Ruby 自体もちょっとおもしろくなってきて、勉強するのに適当な教材がないか探して見つけたのが Rails チュートリアルでした。Rails よりは Ruby そのものに興味があったのですが、業務で使っている CakePHP も Ruby on Rails を源流にしているというし、Ruby のついでに Rails も知っておくと何かの役に立つかもなー、と思って手を出したしだいです。
なお、この話をまわりのプログラマーにすると「PHP が嫌になった?」ときかれることがあるのですが、PHP も相変わらずかわいいと思ってますので念のため…。
Rails チュートリアルとは
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
Rails チュートリアルは Ruby on Rails 界隈で最も信頼されているらしいチュートリアルです。原作は Michael Hartl 氏、和訳版はヤスラボさんが運営しています。いずれも Web で無料で読めます。ありがたいことですね。
このチュートリアル、やってみると案外奥深く、また細部にわたってよくできています。単に動く Web アプリをつくるだけでなく、Git/Bitbucket でソースコードを管理したり、テストコードを書いたり、セキュリティやパフォーマンスに配慮したり…などなど実践で必要になるツールやよい習慣が随所に盛り込まれています。Rails ユーザーに限らず、初心者 Web プログラマーに広くおすすめしたい内容です。
また、そのぶん分量もかなり膨大です。聞いた話では PDF 換算で700ページくらいになるそうです。おかげでやり終えたときの達成感がすごくて、Web チュートリアルってこんなにつらかったっけ、と不思議な気持ちになりました。
主として CakePHP 使いにおくる Rails チュートリアル攻略法
攻略法、というほどたいしたものではないですが、PHP および CakePHP の心得がある人を念頭に、これから Rails チュートリアル(Rails4.2対応の第3版)をやるにあたって知っておくといいかもしれないことをまとめます。
まず、チュートリアルではいくつかの Web サービスを使います。チュートリアルのとおりに使ったほうがいいもの、場合によってはスキップしてもいいもの、いろいろです。
- 開発環境:Cloud9
自力で開発環境を構築する手間が省けます。おすすめ。 - ソースコード管理:Bitbucket
成果物をとっておくつもりがなければ不要です。あるいは、お好みで GitHub などを使ってもかまわないでしょう。Git コマンド自体は Cloud9 に入っています。 - 本番環境:Heroku + Amazon S3 + Sendgrid
これも必須ではありません。が、プログラミング経験者ならチュートリアル本編は多少なりとも気持ちに余裕があるだろうから、本番環境まで一度つくってみるのをおすすめします。PaaS の経験があまりない自分としては、なかなか新鮮でした。
また、S3のためだけに AWS のアカウントを新規に用意するのは多少めんどうなので、お持ちでなければ S3だけ省略してもよいでしょう。アップロードした画像ファイルが永続化されなくなるだけで、雰囲気を確かめるぶんには問題ないと思います。
そして、Ruby の構文についてもチュートリアルの前にひととおりさらっておくとよいかもしれません。チュートリアル第4章で Ruby の文法を扱うので Ruby 自体を予習しておく必要はない…ということには構成上なっています。プログラミング初心者が読むぶんにはそれでよいと思うのですが、他言語を知ったうえでチュートリアルを進めると、Ruby 独特の構文に「なんだこれ」とびっくりするような場面が時おり出てきます。そしてそういうところをチュートリアルは深堀りしてくれません(Ruby でなく Rails が本題なのでしかたないですね)。
わたしの場合はチュートリアルと並行して『初めての Ruby』を読みました。他言語と比べて Ruby のユニークなところに絞って解説されているので、今回のような用途におすすめです。対象としている Ruby のバージョンが古いのですが、Rails チュートリアルのお供としてはさほど問題なかったように思います。最新の話が読みたい方、網羅的に文法をおさらいしたい方には『たのしい Ruby』もおすすめです(が、ちょっと厚めです)。
以下のような点をおさえておけば、コードの読み書きで驚かされることは少ないでしょう。
- シンボル
- ブロックつきメソッド
- 演算子の再定義
- 特異クラスと特異メソッド
以下、Rails チュートリアルの各章について、CakePHP でいうとアレ、というのと簡単な注意点などをまとめます。後述しますが8章あたりから急に時間がかかるようになります。スケジュールを立てて進める場合は、序盤のかんたんさに惑わされたり、目次だけ見て「いつもの CakePHP ならすぐできそうだ」なんてなめてかかったりしないようお気をつけください(わたしのことです)。
第1章
- とりあえず
bake
して Hello World - 開発環境としての Cloud9
- Git/Bitbucket
- 本番環境としての Heroku
ほぼ作業環境を準備するための章です。粛々と環境構築しましょう。
第2章
- (今はなき)スキャフォールディング
3章以降の予告にあたるような章。かんたん。
第3章
- ビューとレイアウト
- ルーティング
- はじめてのテスト
事実上の本編第1章。かんたん。
第4章
- Ruby の構文の話
Ruby そのものの話。個人的にはここがたのしい。
第5章
- Sass(というか SCSS)のコンパイル
- 逆ルーティング
Rails が自力で SCSS のコンパイルをしてしまうあたりに PHP との違いを感じます。PHP にやらせる試みもあるようですが、あまり広まっていないように思います。
第6章
- モデルの CRUD
- バリデーション
PasswordHasher
- フィクスチャ
Web アプリケーションフレームワークの話としてはようやく本題に入った感じ。
第7章
FormHelper
- 一括代入保護(
Entity::$_accessible
) FlashHelper
CakePHP 使いにはなじみやすい雰囲気です。マスアサインメント(一括代入)脆弱性への対策は CakePHP3でも導入されました。
第8章
- 認証
- Cookie の読み書き
わたしはこの章あたりからつまずき始めました。といっても、内容自体は Web アプリケーションの開発経験があればそう難しくありません。難しいのは Ruby のエラーメッセージが見慣れない という点でした。
この章あたりから、だんだんコードの量が増えてきます。すると、写経の過程で typo が増えてエラーが出るのですが、見慣れないエラーメッセージから修正すべき箇所が読み取れなくてあせってしまったのでした。いつもの PHP と言い回しは違いますが、言っていることはそう変わりません。落ち着いてじっくりメッセージを読めばだいじょうぶでした。
第9章
- Web インターフェイスからのデータ更新
- Web インターフェイスからのデータ削除
- 認可
- ページネーション
ページネーションはサードパーティの Gem で実装するんですね。
第10章
- メールの送信とレンダリング
- Heroku と Sendgrid との連携
ブラウザからメール文面のデバッグ用プレビューができるのはおもしろいですね。CakePHP にもほしい。
第11章
- 1対多のアソシエーション
- 画像ファイルのアップロード
- Heroku と Amazon S3との連携
いよいよアソシエーションです。モデルまわりの話題はここがクライマックスでしょう。
第12章
- 多対多のアソシエーション(hasMany through)
- Ajax インターフェイス
Connection::query()
章自体は長いですが、分量の多くは多対多のアソシエーションの説明なので、そのへんがわかっていれば読み飛ばせます。
ほんのちょっとコードを足すだけで Ajax インターフェイスが実装されるところは、11章のアソシエーションに並ぶコントローラ側のクライマックスじゃないかと思っています。ここまで天下り的に使ってきた RESTful アーキテクチャのありがたみがここでわかりました。
まとめ
主として CakePHP ユーザーが Rails チュートリアルを進めるうえで知っておくとよさそうなことをまとめました。Rails チュートリアルは Ruby on Rails の使い方のみならず Web アプリケーション開発全般にわたって役立つ知見のつまったすばらしいチュートリアルです。ぜひ一度おためしあれ。