よくこういう記事のタイトルを見るけど、Ruby on Rails(以下、Rails)が勝ちだとか、PHPのほうが優れてるだとか、思った方はいますぐ反省するべき。

この記事は、Ruby on Rails Advent Calendar 2014 – Qiitaの1日目の記事です。

こういうものには つかいどきが あるのじゃ

例えば、ページに単純なカウンタを埋め込むだけにRailsを使うでしょうか。今のHTMLにすぐ埋め込むことができるPHPのほうがよっぽど便利で楽でしょう。物事には適材適所という言葉がある通り、同様だと思います。

ここでは、Railsの魅力とかPHPとなぜここまで比べられるかを書いてみます。
(ここでフレームワークと言語を比較している理由は後述ですが世間的によく比較される事が多いため。)

おまえ誰よって言われる前に、自己紹介をしておくと自称「IT系なんでも屋さん」。Rails、PHP、Java(EE)、Java、Objective-C、node.jsとか。最近はVerilog-HDLをさわさわ。指摘とかありましたらTwitterで @toriimiyukki まで。

Railsのミリョク

RailsはRESTfulなアクセスやセッションのサポートしているなど、フレームワーク自体が最近のウェブサービス思考に対応し、また、ローカルの開発の場合はSQLiteを使うなど、開発環境においても最近の流行を取り入れています。gitとの相性も良いです。

Railsの最大の魅力はgemと呼ばれるRubyのライブラリパッケージシステムでしょう。Rails自体もgemの1つで、gemを使わないRailsアプリケーションはありません。(というかgemを使わないのであればRailsである必要がない。)

フレームワークを拡張するプラグインが幾つもあることにより、Railsは汎用性が高くも多くの人に使われるフレームワークであるといえます。

Railsの使いドコロ

RailsはCookpadなど大規模なウェブサービスでも使われていますが、Railsはどういう時が使いどきなんでしょうか。

私の主観では、Railsはすごくプロトタイピングとか、小中規模に向いたフレームワークだと思いました。複数人の開発もし易いし、gemを使ってどんどん機能が実装できて楽しいし、時間のリソースの消費を押さえられます。

しかし、便利なものに副作用はつきものです。

Railsの良くないトコロ

Railsの短所は大規模なウェブサービスには向かないという点です。

これはRailsが使いづらいとかそういう意味ではありません。Railsは前述のとおり様々なgemが公開されています。そのため、プラグイン化された部分の開発リソースを短縮することができ、他のサービスなどの経験を活かすことができます。しかし、gemを使った部分の動作はブラックボックスも同然です。これではgemによるバグが発生した時、リソースの大量消費などを突き止めるのが大変になります。

もちろん、gemのソースコードは公開されているため動作の内容を把握することができますが、結局ソースコードを読む時間を消費してしまいます。ただ、そのgemにバグがあった場合Githubなどでgemの利用者全体にアップデートを提供することができたり、アップデートを受け取ることができます。コミュニティで支えあっているわけです。

大規模ウェブサービスにありがちですが、当初導入していたプラグインが開発休止になりのコミュニティが皆無になってしまった場合は、リソースを割いて代替のgemを使うなり、1から開発する必要でてきてしまします。そうしない場合はモンキーパッチが沢山の状態になるでしょう。

詳しい内容は以下の記事でも説明されています。

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

また、これは弱い静的片付け言語でも見られますが、Railsは特にテストをしつこく書かなければならないという点です。

大規模なウェブサービスではテストコード自体も肥大化しそのうちテストコード自体を扱うリソースが大きくなります。それに加え、Railsはバージョンアップがそこそこな頻度で行われ、それに連なってgemのサポートするバージョンも上がるため、Railsへのバージョンアップに追従する必要がでてきます。

詳しい内容は以下の記事でも説明されています。

Rubyにはもう飽き飽きした。理由はいろいろあるが、特にその副作用と、ステータスが可変なせいで大量のユニットテストを書かされるのにはウンザリだ。
【翻訳】Rubyにはウンザリ!動的型付け、副作用、およびオブジェクト指向プログラミング全般からの考察

RailsとPHPの関係

冒頭でも述べたとおり、世間的にRailsとPHPは比較の対象にされることが非常に多く、「PHP以外でのWebシステム開発経験がある方」と採用ページに記載する企業もあるくらいです。

そもそも、両者ともに「Webを構築する上でのツール」であることには違いないのですが、RailsもといRuby on Railsはその名の通り「Ruby製のWebアプリケーションフレームワーク」であり、PHPは「動的なWebサイトの開発に特化したプログラミング言語」です。

PHPはWebサイトに特化しているため、フレームワークなどを使わずとも簡単に動的なサイトを作ることができ、その学習のコストの低さから「初心者」が動的なWebサイトの開発をするのにも適した言語となり、さらにはデザイナーでも書ける(求められる)言語になっています。PHPの言語を理解していない人でも、変数や関数のある程度の概念がわかれば検索してできたサンプルコードをコピーして書き換えるだけで、ある程度の機能を実装することができます。PHPはファイルをアップロードするだけでプログラムが動き、コードの内容を理解していなくても「書ける」と思いがちな人がおおいと思います。これが、「PHPはよくない」とされる理由です。

その一方、RubyはWebアプリケーションに特化した機能はありませんが、Railsを利用することで強力なWebアプリケーションを開発することができます。RailsはPHPのようにファイルをアップロードするだけでは動かず、nginxやunicornなどの構築スキルが必要となります。そのため、Railsが「書ける」人はある程度の知識があるという認識なのでしょう。しかし、最近ではHerokuなどのPaaSが普及し初心者の敷居も下がってきました。そのうち、Railsも初心者が簡単に「書ける」ようになる時代がくるでしょう。

最後に

この記事はRailsがダメだとか、PHPを布教しているわけではありません。もちろん、Webアプリケーションの開発にRailsはとても便利で短時間で開発できるためよく使います。しかし、「時代はRailsだ!」と言っている人とか企業の誤解が解けるよう願っています。

2日目は @haracane さんです。よろしくお願いします。

追記: なんで言事フレームワーク比べるのかって質問が多いですが、私が決めたわけではなくよくこういうふうに比較されることがおおいからです。