はじめに
今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」 | つい全力ツッコミしてしまうエンジニアCEOのブログ | sumyappを読みました。最初ツッコミどころが凄い*1なと思ったんですが、二回読んでちょっと思い当たる節があるなと思ったので書きます。
Rails を勉強しない方が良い理由
Railsにはscaffoldがあるので間口がすごく広いです。実際それを紹介した 15m intro video*2 が理由で人気を博しました。が、奥行きが深い。どこまで学べば「Railsを使いこなせます」って言えるのかまるでわかりません。
鉄板作法が共有されていない
2005年に出てきた割に意外に鉄板作法が共有されていません。 たとえばビジネスロジックをどこに置くのかについては以下のような議論があります
- やはりお前らのMVCは間違っている
- Rails のモデルはどうあるべきか - tomykaira makes love with codes
- Rails、あんたなんか嫌いよ - Rails での OO 設計について - tomykaira makes love with codes
さらに、モデル(model) - Railsドキュメントには
モデルとは
データベースの情報を操作する仕組み
とか書いてあるし混迷を極める。
どのプラグインを使えばいいのかわからない
The Ruby Toolbox - Know Your Options!で探せとか言われても、どれが
- 自分の要求を満たすのか
- オーバースペックすぎないか
- メンテナンスされ続けるのか
を見極めて探すのは大変です。
メジャーバージョンアップが派手すぎ
2年ぐらい使って慣れてきたかなーって思ったところでメジャーバージョンアップ。 なんか今までの作法と全然違うし・・・プラグイン動かなくなっちゃったし・・・。*4
修羅の道
Ruby on Railsの使い方(だけ)を学ぶのは修羅の道です。Railsの作法覚えてプラグインの使い方を覚えても3年も経てば新規開発では使えない技術になります。*5
Railsとともに学ぶべきこと
ここまで書いてきて言いたいことは、「Ruby on Rails「だけ」を学ぶと潰しが効かないので、Ruby on Railsを使いつつ、Ruby on Railsが隠しているモノを勉強しましょう」というだけの話です。
Railsのバージョンが上がって作法が変わっても、HTTPでHTMLファイルを取得してJavaScriptでぐりぐり動かすというWebアプリケーションの根本はそんなに変わりません。RDBMSがバージョンアップして性能が上がったり分散処理用の機能が追加されても、基本的な機能は変わりません。基本原理を押さえておけば追いかけるのが楽になります。プラグインも一緒です。プラグインの実装まで把握できていれば自分でパッチを書いて対応することも可能です。
初心者におススメな書籍は以下の三つ。
Webアプリケーションの常識
Railsが隠している機能を薄く広く知ることができる。
データベースの常識
migrationやActiveRecordが使っているRDBMSの機能を薄く広く知ることができる。
図解でわかるLinux環境設定のすべて
Linuxコマンド(capistranoで隠ぺいされているかもしれない)について広く知ることができる。
興味が出た部分から深く調べてみよう。背景知識がついてきたらプラグインやRails本体のソースコードを読んでみるのも良いかもしれない。*7
おわりに
私はRailsを使ったことがありません。 Railsに関する印象はフィクションであり実在の人物の感想を示すものではありません。 *8 あと、タイトルは釣りです。100個もありません。
*1:「辞めて欲しい」って誤字だと思うんですけどCEOが使ったらヤバくね?とか、(Webアプリケーションの作り方じゃなくて)「Railsの勉強しています」って人はRails使わなきゃ駄目だろうとか、SQL自体抽象化されてるんだからDBMS自作しなくていいの?とか、そもそもこの議論自体strutsが出たころの10年前に見たわー、お前の居る場所はslashdoterが10年前に通り過ぎたッ!!!とか
*2:今は見れない、2005-09-15 - Catalinaの寝言ニョッキなどの記事でその感想が見れます。
*3:ホント数年前にJava屋が通った道だよなぁ…Jakarta-commonsを中心に使えるjarが無いか探せ!とかやってた
*4:良いんですよ、Railsみたいに「設定より規約(convention over configuration)」を掲げるアプリケーションは非推奨になった規約はバンバン切っていかないとmakeみたいに暗黙ルールが多すぎて他人が書いたmakefileがまるで読めないって事態になっちゃいますから。
*5:保守開発は10年ぐらい残ります。ほら、Rails1で作られた業務アプリを保守している人の嘆きの声が聞こえてくるでしょ
*6:若い人ほど新しい技術の勉強に時間を使った方が有利です。古い技術を知った先輩はたくさんいますが、新しい技術は知っている先輩は少ない。古い技術に時間を投じてもすぐに先輩に追いつくことはできません。新しい技術を自分が提供し、古い技術を先輩に補ってもらうとより早く自分の価値を提供できます。
*7:どっから手を付けたらいいか分からないと思うのでRails本体のソースコードを「一人」で読むのはお勧めしない。
*8:Rails使いこなしている人にsinatraでよくね?って聞くとRailsでいいじゃんって言われるんだけど、Railsって勉強すること多すぎてやる気しないんだよね…sinatraの方が簡単でいいじゃん。