今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」

Pocket

最近、といってもここ2年ぐらいからだけど、これからプログラミングの勉強を始めますという人から、「CakePHPの勉強してます」とか「Railsの勉強してます」とか、そういう前提で中々うまく進められないと相談を頂いたりする機会が多い。

それらの中で、非常に口をすっぱくして言っているんだけど、なかなか理解して頂けないのが、『「Ruby on Rails」や「CakePHP」を使うな』という個人的なアドバイスだ。これは個人的には本当に守ってほしい、絶対に手を出してほしくない、Framework達である。

なぜかみんな「Railsってイケてる技術だよね」「Railsだったらこんなこともいとも簡単にできちゃうんだよね」みたいな印象を持っている。もちろん、それは間違いではない。Railsは早い。ライブラリもたくさんある。コミュニティも活発だ。CMSなんて昔は数人月かけて作ったものだが、いまはRailsとプラグイン(ActiveAdminなど)やscaffoldなんて使えば、1人日で出来てしまうほどのものだ。

だからもちろん、Railsを覚えたい、ということには賛同する。メリットは間違いなくでかい。

ただし、RailsはあくまでWEB開発においての常識(Rail)を集めた、Ruby言語用のFrameworkである。FrameworkはあくまでFramework。自動車のABS(アンチロック・ブレーキ・システム)なんかとは全く違う。ABSはあくまでブレーキがロックしてしまう事象を発生しないようにアシストしてくれるシステムである。Frameworkは違う。

ソフトウェアフレームワーク: software framework)とは、プログラミングにおいて、一般的な機能をもつ共通コードをユーザーが選択的に上書きしたり特化させたりすることで、ある特定の機能をもたせようとする抽象概念のことである。単にフレームワークとも呼ばれる。

「一般的な機能を持つ共通コード」を自身で書ける人が、それを再利用可能なものにするために、枠組みとして提供するソフトウェアがFrameworkである。

たとえば、Ruby on Rails2系の時からよくある「DBマイグレーション機能」
データベースtest_projectっていうdbに「users」というテーブル名で、名前、メールアドレス、パスワードを入れようとした場合、下記のようなコードが必要になる。(sqlite3)


BEGIN TRANSACTION;
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
INSERT INTO "schema_migrations" VALUES('20130723160520');
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "mail" varchar(255), "password" varchar(255), "created_at" datetime, "updated_at" datetime);
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
COMMIT;

実際にはschema_migrationsやTRANSACTIONの部分はなくても構わないが、それでも非常に長い1行、下記だけは必要である。

CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "mail" varchar(255), "password" varchar(255), "created_at" datetime, "updated_at" datetime);
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");

しかし、Railsを使った場合、たった以下のコマンド3行でDBが作成される。
CMSのように使えるスキャフォールド画面付きだ。

rails new test_project
rails g scaffold users name:string mail:string password:string
rake db:migrate

これは尋常ではない。

一体、「Ruby on Rails勉強してます」「CakePHP勉強してます」といった人の内どれだけが、この自動生成された各種のコードを理解しているのだろうか?

INTEGER PRIMARY KEY, AUTOINCREMENT, NOT NULL, varchar(255), datetime
どれもプログラマにとっては当たり前のキーワードだが、オートインクリメントって何?って人がほとんどなのではないだろうか?
「高効率」「最先端」みたいなキーワードに踊らされている初心者が多すぎるのではないだろうか?

正直な所、私もRailsを使いこなせているとは言いがたい。Rubyのコミュニティは非常に活発だし、オープンソース・ソフトウェアもたくさんあってすごく便利だ。link_toメソッドなんて、rails2からあるが、すごくどうでも良さげな機能だが、<a href></a>でいいじゃないかと思ってしまうが、継続的インテグレーションになるとほぼ必須の機能になってくる。

Rails2系の頃はまだよかった。まだその程度の機能量ですんでいた。
Rails4なんて狂気の沙汰だ。デフォルトで有効になってる「Turbolinks」機能なんて、普通のサービスが使いはじめるレベルの機能じゃない。機能の拡張と削除のスピードが半端無さすぎる。ぶっちぎりである。CakePHPなんて2年ぐらいほとんど変わってないのに、Railsの変わり具合は半端ない。
まじめに保守するサービスじゃないと、アップデートにはついていけない。もちろん、エンジニアのスキルセットも。

私も、Rails3~4の機能でさえ、ほとんど使えていないだろう。コミュニティの恩恵を授かっているに過ぎない。(Frameworkのデフォルトの機能ではなく)

 

なんというか、例えるなら、教習場で免許を取ろうとしている人が、教習車に、F1用のばりばりのレースカーを毎週専門家にチューンさせながら使う、ようなもののように感じる。基本のスキル、教養なしに、パワフルすぎるものを扱っている感じ。ちょっとこの喩えもあまり適切ではないが。。。

正直、「背伸びのしすぎ」としか言い様がない。要らない知識を取得するために必要な知識を修得するための時間を捨てているようにしか思えない。GETとPOSTの違いもわからない人が、ルーティングやらフォームの自動生成やら使えるわけがない。自動化は「既にルーチン化できるようになったもの」に対して行うべきだ。未知のものを自動化するのは狂気だ。

この記事にぐさっときた人、プログラミング初心者にとっておすすめしたいのはこの書籍だ。

※あぁ、こんな先輩社員が会社にいてくれたらなんてハッピーな事だろう。。。

「知らないコマンドを打つな」「コピペするな」そういうアタリマエのことを、ライトノベルで、可愛い女性(2次元)から教われる素晴らしい書籍である。ぜひ頭の硬いプログラミング見習いの方には読んで頂きたい。技術職における最も大事なことはこの本に全て書いてある。この超絶プリティーなロリ系エンジニアが教えてくれる。私のブログ記事なんかよりよっぽど心に響くことだろう。

というわけで、本記事のまとめ。

  1. Railsはプログラミング初心者にはオススメしない
  2. Railsが自動生成するコマンド類を手動で生成出来るようになってから使うべきだ
  3. といっても、みんな勝手に妄想含まらせて「高効率」とかに惹かれてちっとも私の意見に耳を傾けてくれないので、2次元美少女からぜひ習って欲しい

2014/04/21 追記系を主に内容改定、下記に追記しました。

便利な物は使えばいいじゃん!という方へ

というか、単純に「未だRailsやCakeは生成のコードを知らなくて良いほどにブラックボックス化されていない」というだけの話ではないかなとおもう。
http://b.hatena.ne.jp/kent013/20130724#bookmark-155298822

「やれやれ、またアセンブラからやってこいみたいな話かよ」と、この記事を読んで思われた方には、こちらの方のはてブコメントがお役に立つかと思いますので、引用、記載させて頂きました。

Ruby on Railsは便利だから使う、といって使えるほど、ブラックボックス化が十分でなく、中身を知らずに扱えるものではない、というのが私の私感です。

Railsを入門書で頑張って覚えても、正しく使えません。
覚えた内容の大半はきっと1年以上使うことがない知識となるでしょう。

Railsを始めたいという方へ

Railsを使って正しくアプリを作ってみたいということであれば、Ruby+Railsについてガッチリ学べる系の書籍をお勧めします。

また、ざっとRailsを知りたいだけならこういった入門書も最近出ました。(やっとRails4対応!)

定評のあるパーフェクトシリーズのRails本が2014年6月についに出ました!

本当に読んで理解しようとすると1ヶ月はまるまるかかりそうです。

ウェブサービスを作ってみたいという方へ

兎に角ウェブサイトを作ってみたい!という人であれば、ここらへんをおすすめしたいです。

↑めちゃくちゃ内容は浅いので、これでプログラマーになれるか?と言われると、なれません。ただし、ウェブサイトを作ったりする楽しさは学べます。

この記事は「Ruby on Railsを勉強してます」が数ヶ月続いちゃったり、1年間やってみたけど何が身についたか分からなかったり、そんなプログラミング初心者の方向けに「もう少し、必要性を感じながら、少しずつ勉強して、Railsを使う必要があると感じたら使ったほうがいいよ」と伝えたいと思い書いたのものです。

「いきなりRailsなんてやっても身につかないよ」だと通じない事が多かったので、「Rails使うな!」って趣旨になってます。記事全体のテイストは過激気味に書いてますが、書いてから一晩明けて見直すと過激気味ですね。一部誤字脱字や不適切な内容を校正致しました。

いきなりRailsから始めるのではなくて、もっと軽量なウェブ言語から始めるのが、きっと楽しくて挫折しないと思います。

Ruby on Railsに関する私感

Railsは本当に良いFrameworkです。Gemもたくさんあって、Ruby x Rails x OSSのパワーを使えば、生PHPで3ヶ月掛かるコードも、1週間で実装出来そうな勢いです。既にプログラミングやウェブに関する知識をある程度持っている人なら、今後のFramework選定の際の候補の大筆頭に加えていただきたいと思います。

※追記がめちゃくちゃ長くなっていたので、2014年4月末に修正を行いました。

Pocket

kuwata にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です