更新情報

みなさん、こんにちは。

私は、この連載の第1回にも書きましたが、普段はIT研修の講師をしております。ご縁があって、ある会社様の新入社員(主にJavaを3か月程度学んできている)に対して、Railsを1週間程度教えるという研修を、この3年ほど実施しています。

前段の研修では、フレームワークまでは取り扱っていないそうなので、Webアプリケーションのフレームワークを扱うのは、Railsが初めて、という人たちです。

そんな人たちにRailsを教えていると、自分がRailsに出会った頃のことを思い出すことができます。

Railsが登場した当初にDHHが煽り文句として使ったフレーズとして「Railsの開発生産性は、Javaの典型的フレームワークの10倍」というものがあります。私はこのフレーズの「10」という数字を〇にして、受講者に予想してもらうというのをよくやっています。

過去に既に何度もやっているのですが、1回で「10」という数字を出す受講者は意外と少なくて、たいていは「2」とか「3」とかを挙げる方が多いです。逆に突拍子もない数字として「100」などを出す方もいますが笑

で、何人かに聞いた後で「正解は10です」というと、「え~っ」「うそだぁ~」という感じの反応。それはそうです。Javaを3か月近くみっちりやってきて、しかもフレームワークもやっていないとなると、彼らにとっては、その差は実質10倍どころか下手をすると30倍とか50倍とかになりかねないわけですから、それこそ今まで一生懸命やってきたJavaってなんだったんだ・・・と心を揺さぶられますよね。

でもこれ、私が2005年にRailsを知った時の感情と、ほぼ同じなのです。

それまで業務でJavaを5年以上やってきて、DHHいうところの「Javaの典型的フレームワーク」も私自身は業務では使っていなかったものの、研修の題材としては勉強して知っていたので、「いくらなんでも10倍なわけないでしょう?」という疑念とともに「自分が調べてどれだけのものか判断してやるぞ!」という対抗心みたいなものがふつふつと沸いてきました。そして、実際に調べていくうちに、Railsのすごさにハマっていく・・・。

今回の受講者も、私のそんな感情を追体験しているような展開でした。

さらに彼らの場合、フレームワークというものをそもそも学んでいないため、例えばワンパターンなコントローラ(JavaではServletにあたります)を画面ごとにいくつも作成するような設計に、特に疑問を持っていなかったりする(それが当たり前と思っている)ので、Railsのコントローラを見ると、かなり驚きます。

大抵の新人研修の場合、仕上げにグループワークで中程度のアプリケーションを分担して作ったりすることがよくあるのですが、設定されている納期が厳しめなことが多い(研修なので納期を伸ばすことは不可能ですから・・・)ため、「そのときにこういうフレームワークを使っていれば、もっとすんなり製造できて納期にももっと余裕をもって作業できたんじゃないか・・・」という感想を持つ受講者もいたりします。

当時の私の場合「Javaの典型的なフレームワーク」も知っていましたので、さらに驚いたのはActiveRecordによるモデルの仕組みでした。「Javaの典型的なフレームワーク」はMVCのうち主にビューとコントローラをカバーしていて、そもそもモデルはあまりサポートされておらず、データベースアクセスは自前で作るか、別のO/Rマッピングフレームワークを併用することになります。

件の新入社員たちの場合は、JavaでDAO(データベースアクセス用のクラス)をゼロから自作する方法しか学んでおらず、この作成が結構な手間で、SQLの苦手な受講者にとってはJavaもSQLも作りこまないといけないので大変なので、Railsのモデルが「CRUDの基本的なロジックは記述不要」「SQLも基本的に記述不要」「エンティティ(レコードのデータを格納する)クラスの属性・アクセサメソッドも記述不要」と分かると、これまたかなりの衝撃を受けます。これも私が当時受けた衝撃と同じですね。

IT業界はドッグイヤー、マウスイヤーなどとよく言われますが、私が10年以上前にRailsに対して抱いた驚きが、2018年にもまだ通用してしまうということにもまた驚きます。

でも、それだけRailsが革新的で、よくできたフレームワークであるということかもしれませんね。

皆さんも、Railsを初めて知ったころの気持ちを、たまに思い出して初心に帰ってみるのも良いかもしれないですね。

さて、お付き合いいただいた本コラムは今回が最終回となります。不定期な連載かつちょっと変化球っぽい内容も多かったかもしれませんが、お楽しみいただけましたでしょうか。最後までご愛読いただき、誠にありがとうございました。

以上