DIVE INTO CODE

2019年04月27日
  • #Ruby
  • #PHP

RubyとPHPの歴史に切り込んでみた

Aws4 request&x amz signedheaders=host&x amz signature=98e24815bbaea12ac7e2e8a60a83150847ce946827cc2e8f9aa4144da4f519dd

【こんな方におすすめ】
・RubyとPHP、どちらを学ぼうか迷っている方
・RubyとPHPの特徴を比較しながら知りたい方
・RubyとPHPの歴史に興味がある方

【目次】
1.RubyとPHP、どっちがいいの?
2.RubyとPHPのバージョンを確認してみる
3.バージョンの上がり方と気をつけたいこと
4.いろんなプラットフォームで動くRuby、Webに特化しているPHP
5.PHPは我流を許す、統一化されない言語
6.Rubyはフレームワーク統一化でWebへ進出
7.どちらを選ぶかは好みで!
8.まとめ

■話し手
DIVE INTO CODE 代表 野呂 浩良
■聞き手
StartGate 永田 拓也

RubyとPHP、どっちがいいの?

今回はRubyとPHPの歴史に切り込んでみた、というテーマでお話しましょうか。

よろしくお願いします。

よく PHP とRubyって比較されるんですよ 。「どっちを学んだ方がいいですか?」とか「どっちで作った方がいいですか?」とか。
なぜ比較されるかというと、 Webアプリケーションを作る時にどちらも使えるからなんですよね。 PHPの方が使われている件数が多かったり、 WordPressというサイトを簡単に作れるツールがPHPでできているということもあって、「Rubyって使った方がいいの?それともPHPの方がいいの?」って迷うわけですね。

RubyとPHPのバージョンを確認してみる

今日は公式サイトを見ながらお話を進めて行きたいと思っています。まず、RubyのWikipediaからいきましょう。厳密に言うと差はあるのですが、初めて登場したのは1995年と言われています。1995年にまつもとゆきひろさんが世の中に出してきたものが進化して、2019年現在もあるということになります。1995年にバージョン1が出てきて、公式サイトを見てみるとバージョンが2.6.2というのが3月13日にリリースされていますね。なので、バージョン2.6.2が最新です。(対談時、4/20現在の最新バージョンは2.6.3)

次にPHPのWikipediaを見てみましょう。初めて登場してきたのは1995年。Rubyと同じような時期に出てきているんですよね。作った方というのが、Wikipediaに載っているのですが、ラスマス・ラードフ(Rasmus Lerdorf)さんという方ですね。

これも先日RubyはPerlの次のRubyということでお伝えしましたけど、PHPもPerl風の変数が使えるとか、そういうインスピレーションは得て作っているわけなんですよね。最新バージョンは7というのが作られていますね。Rubyがバージョン2でPHPがバージョン7って、そんなに差がついてるの?って思うかもしれないですけど、開発する方の価値観とかバージョンの切り方みたいなのがあるんですね。

特に決まってるというわけではないんですね?

バージョンが上だから進化してるかって言うと確かにそうですが、切り方によって変わるので、同じ単位で作られてると思わない方がいいかなと思いますね。PHPって7.0とか7.1とか呼びますけど、Rubyは2.5.xのようにもっと細かく切っていくところがあるので、単純に比較は難しいですが、PHPは頻繁にバージョンアップというか、新しいものを取り入れたりしているというところですかね。あと、PHPはバージョン6というのが出るはずだったのですが、実は6は欠番になっていまして。

なぜでしょう?

おそらく開発のボリュームとか、開発者の方たちの意向があるのだと思います。詳細は判断しきれないですけどね。

Windowsみたいですね。8から10に飛んじゃった、みたいな。

そうですね、開発事情というのが背景にはあるのですね。初心者の方には不要な情報も増えてきてしまうので、いったんここで止めておきます。まずはそういった背景があると。

バージョンの上がり方と気をつけたいこと

Rubyの方を見ていきましょう。リリース情報を見ていくと、だいたい1年にバージョンが0.1上がるという感じです。開発をしている方はまつもとゆきひろさんだけではなく、他にもコミッターと呼ばれる人たちがいて、そのコミッターと呼ばれる人たちがRubyの使い勝手をよくするために手を貸してくれています。最初を作ったのはまつもとさんなんですけど、そのあと仲間が増えていって、今はみんなでフルコミットしてやってるみたいな。

関わりたいと思いますよね。なるほど。

PHPの方を見てみると、バージョンの変遷はもちろんあり、1年に0.1刻みみたいな時期もありましたけど、そうですね… 「PHP (プログラミング言語)」のWikipediaを見ると1年に0.1刻みが多いのかな、やっぱり。途中で急激にバージョンをがんと上げてることが何回かあるので、その差なのですかね。そんな気がしますね。

ちなみに0.1上がるとどんなことが変わるんですか?

説明がすごく難しいのですが、0.1上がるのは機能追加みたいなイメージなんですよ。根本的な基盤の仕組みは変わらないけど、新しく大きな機能を追加しているみたいなイメージですね。

じゃあiPhone5からiPhone5sみたいなイメージですか。

そうですね、同じように使えるけれど使い勝手がよくなっていたり、セキュリティが強くなったりとか。で、1桁目のことをメジャーバージョンと呼ぶのですが、これが上がる時は基盤のところにもテコ入れが入るということです。おおもとの基盤が変わるよ、という。

やれることが増えたりとか?

そうですそうです。例えばですけど、Windows7のOSが出た時、WindowsXPの中にインストールできたものができないとかありましたね

おお、なるほど!ありましたね。結構大事件ですね。みんなまた勉強しないといけなくなっちゃうということですね?

そのとおりですね。そういうケースもありますし、そこまで大きな差はないということもあります。これはRubyやPHPに限らず、他の開発言語でも全部そうです。

じゃあ、プログラミングやられてる方からしたら、お祭りというか、「変わったぞ、変わったぞ」ってざわざわする時期ですね?

そのとおりです。バージョンが違うと昔のように書けていたものが書けなくなったりする。それは、実はその書き方がイケてなかったからってことが多いので、もっとイケてる書き方に変わったりとかするんですよ。ただそれは暗記してたものをいったん忘れて、新しいものを知らなきゃいけないってことなので、初心者の方は迷うことがあるかも知れないんですよね。Google検索して、「あれ?Rubyの記事にこのとおり書いてあるのに、おかしい!」って思ってたら、実はバージョンが違ったりとか。

あー、なるほど。それは気をつけた方がいいよと。

こういうことはトラップですね。まあ、歴史を見るというのはそういうところにもつながるのかなと思いますけどね。これがバージョンという意味でのお話ですね。

いろんなプラットフォームで動くRuby、Webに特化しているPHP

あと歴史的なところでいうと、Rubyの場合ですと、いろんなRubyがあるんですよね。例えば、Java言語で実装されているJRubyというのがあります。これを使うとRubyのインストールにJavaの一部の機能を使うことができて、他のJavaを動かしているプログラムの中でRubyのコードを使う、といったことができたりするんですよ。

ほー、なるほど。

あとはmrubyという組み込みシステム用のRubyがあったりします。家電製品とか、スマートフォンとか、ゲームとかでの使用を想定したRubyです。このmrubyを使うと家電製品に機能を組み込んだり、スマホアプリみたいなのを作ってみたり、ということができるようになるんですね。

そういうことなんですね。

こんなふうに、組み込みシステムやアプリを作るときに関連してくる、CやC++のように言語があるんですけど、それとの橋渡しをする機能がついてたりするようなRubyが登場してきてますね。ということでPHPと比較したときに、他のプラットフォーム上で動かすときの、言語の「横の進化」みたいなのが、Rubyの方では起きているということが言えますね。

PHPは逆にあまりないってことですか。

そうですね、PHPは完全にWebで使う言語として進化してきているので、同じようなものもあったりするのですが、Rubyと比較したときには「PHPはWebだよね」という方向で進化しているんですね。

ふーん、思想の違いというか…。

そうですね、そういう意味だとPHPの方がWeb特化ということで、より多くWebの世界で使われているというのはあるのかもしれないですね。

PHPは我流を許す、統一化されない言語

あとは言語の特徴ということになってくると、PHPってWebのページに問い合わせフォームだけ埋め込みたいとか、ちょろっと書きたいというときに簡単に使える、ということですごく流行り始めた言語なんですよ。

おお、そうなんですね。

1995年に初めてWebページが出てきたときって、見るだけのページ、いわば自分が書きたいテキストだけ載せている状態で、相互のやり取りができなかったんですよね。読んだ感想を投稿したり、問い合わせしたりができなかった時に、気軽にそういうことができないか、ということでPHPを使った、HTMLに埋め込んで作るものが出てきたんですね。そういう背景で進んでるので、PHPをHTMLのタグの中に「埋め込む」、表面上に埋め込んで書こうという人たちがガーッと増えてったんですね。

へー…。

一方でフレームワークっていう裏側の処理の仕組みを整えてから、やり取りができるようにしていこうっていう形で生まれたものではないので、我流で作られたWebページがうわーっと氾濫した状態で進化してきているんですね。なので、我流で書くという文化があったり、あまり書き方が統一されていないといった側面があるのです。あまりそこに制約を持たせると、かえって今までWebに載ってきている世界中のページが使えなくなってしまうというところもあるじゃないですか。

なるほど。

ということで、Rubyと比較したときに、書き方の厳密性というか、フレームワークの厳密性みたいなのが、なかなか統一しにくいというのがあると思うんですよね。これはエンジニアの方たちとお話したときによく聞くことで、公式見解ではないんですけど。私はそんな風にとらえています。

それって、やっぱり統一されていた方がPHP自身の進化にとっては良い、ってことなんでしょうか。

どうなんでしょうね、統一されていた方が同じことを2度繰り返さなくていいっていうのはあると思います。たとえばPHPですと、フレームワークっていうのがWikipediaに載ってるだけでいうとものすごく大量にあるんですよね。いくつあるのかな、えーと…(数える)30個ぐらいあるんですよ。

いやー、そうか…。

つまりその、いろんな思想で、いろんなやり方で、いろんなサイトが大量にあるがゆえにそれぞれの最適化みたいなのがされるんですよね。Rubyの場合だと、Ruby on RailsとSinatraぐらいしかなくて、その思想、背景が違うんですね。

Rubyはフレームワーク統一化でWebへ進出

Rubyは、もともと、まつもとゆきひろさんがUNIXやLinuxといったコンピュータの中でファイルの文字を処理したり、ファイルを一部検索したり加工したり、というところをメインに作られたもので、いわば業務効率化とかシステム効率化のためのツールだったわけなんです。Webページじゃなくて、システムの中で使うためのものが進化してきたと。で、じゃあそのRubyがなぜWebページで使われるようになったかというと、Ruby on Railsが出てきたからなんですよ。

そのフレームワークがあるから、ということなんですか。

そう、WebアプリケーションフレームワークのRuby on Railsを作るためにデイヴィッド・ハイネマイヤー・ハンソンさんがRubyを選んだ(参照:日経xTECH「美しいコードを書けるからRubyを選んだ」—Ruby on Rails作者 David Heinemeier Hansson氏)というのがあったから、コンピュータの中で使われていたRubyが一気に表世界のWebシステムで使われるようになっていったんですよ。

なるほどー。

だからPHPと比較されるようになっているんですね。

すごいですね、Ruby on Rails、超偉大ですね。

そうです。2004年ごろにRuby on Railsが出てくるまでは、WebシステムでRubyが使われるってのはあまりなかったことで、むしろPHPの独壇場でした。他にはPerlという言語が使われているぐらいで。

Rubyの前のPerl、みたいなやつですね。

そうそう、そうですね。そういう背景があるのです。なので、Rubyの発生してきた歴史というのは最初にサーバサイド、バックエンド的な位置づけだったのが、その中でよりシンプルに書けて、書き方が統一されたRuby on Railsが登場してきた、という流れです。そしてその時に一気にWebアプリケーションが使われるようになったので、他のフレームワークが追随する余地があまりなかったというのがあるんですね。

なるほど。

ただRuby on Rails自体もほかの大きなフレームワークとある時期に統合(※2008年にRuby on Rails 3.0のリリースの一環として、Merbと統合している)して今の隆盛があるんですよ。二強みたいなイメージですね。それがひとつにまとまって今のRuby on Railsがあるんですよ。

なるほどー。それはやっぱり統一した方がRubyを使っている人としても使いやすいよね、みたいな?

車輪の再発明はないよね、ってことです。フレームワーク作ってたら同じことするはずじゃないですか、おおよそ。

すごいですね、全体最適を考えての結果というか。

そうです。だから“Don’t Repeat Yourself”ってこれだけ言われるのは、そういう背景とかがあったがゆえですし、それを重視するがゆえに1つの統一されたやり方を採用するってことなんですね。

なるほどー。

PHP側はそういう力学が働かなかったということなんですね。あまりに巨大だったり、あまりに利害関係者が多かったり、使われているサイトが多かったり。

まとめられないところまで大きくなっていたということですね。そのぶん自由さがあるというか、そういうことですよね。

そうですそうです。

どちらを選ぶかは好みで!

まあ、こういった背景があるんですよ、RubyとPHPって。単純比較はできないですけど、それぞれの特性を理解した上で、どっちやろうかなって思っていただくといいかもしれないですね。

やってからだと遅そうですね。「あ、こうだったの?」みたいな。

それぞれ学ぶのに時間がかかるので、最初は学び始めの時間を考慮して、それでどっちからやろうかなって思った時に今の話を聞いて、あ、こっちの方が自分は好きだなとか、こっちの方が面白そうだな、とかそういう視点でいいかなと思いますけどね。

そうですね、背景も知った上で言語を選んでいきましょうということですね。

以上がRubyとPHPの歴史ですね。

ありがとうございました。

まとめ

・RubyもPHPも1995年生まれだが、メジャーバージョンはずいぶん違う
・Rubyはシステムの中の業務効率化ツールだったが、Ruby on Railsの登場でWebの世界で使われるように
・PHPはHTMLに埋め込んで使うWeb特化の言語
・フレームワークの統一化で車輪の再発明を防ぐRuby
・我流を許し、既存のWebを使い続けられるようにしているPHP
・どちらを学ぶかは背景や思想も知ってから、好みで決めよう

いかがだったでしょうか。RubyとPHP、それぞれの特徴を知って、どちらを学ぶかの参考になれば幸いです。

DIVE INTO CODEのことをもっと知ってみませんか?