知ってて選ぶこと、知らずに決められること

PHP の人気がなぜ高いのかは kunitの日記 にあるように、お互いの現在の姿ではなく、人気を得たプロセスを周辺の言語や DB, Web サーバなどのテクノロジーの状況も含めて考えないと答えは出ないと思う。良いものは放っておいても人気が出るなんてことはあり得ないし、人気の話に言語のデキの話題を持ち込むのは賢明なやり方ではないだろう。ただ以下のようなストーリーは考えられそうだ。

PHP は本当に手軽に動的な Web サイトの構築ができる。現在では HTML の中にコードを埋め込んでしまうとぐちゃぐちゃでデザイン変更しんどいやんけとか再利用考えてちゃんとクラスにするなりフレームワーク利用するなりせえよ、という考え方も見られるようになったが、それは PHP をきちんと突っ込んで使えるようになって初めて分かる問題で、重要なのはこれらを知らなくても動的な Web サイトの構築は可能だということ。

逆に Ruby を始め汎用の言語は動的な Web サイトの構築にも利用できるが、それにはこれとこれとこれの準備が必要で、これはお約束だから必ず守ってね、ということを踏まえたうえでできるようになる。ひとたびやり方が分かればいつもと同じ言語で Web サイトの構築ができた方が楽に決まっているので、先に言語をある程度マスターしている場合は、それに少しの上乗せをするだけで動的な Web サイトの構築が可能になる

現在、Perl がそうだったように LL の人気について Web の存在を抜きにして語るのは難しい。1

ここに一人の Web デベロッパの卵が居るとする。彼はまだ Perl も PHP も Ruby も知らない。彼の目的は Web アプリの開発だ。さて彼はまずどの言語を習得しようと思うだろう? ちなみに HTML, CSS, JavaScript という回答は却下させていただく。

ここに海のものとも山のものとも分からない開発者を束ねて Web アプリを開発するプロジェクトがある。不幸にしてあなたはそのプロジェクトの責任者だ。本来なら集められた開発者のスキルは事前に分かっているはずなのだが、残念ながらあなたには開発者を集める段階での発言権はない。さて、このプロジェクトではどの言語を採用すべきだろう?2

現在の PHP は別に Web に特化した言語ではないが、Web アプリ開発の初期コストが他の言語より低いことにはあまり異論はないだろう。だから多くの開発者が他に得意な言語を持っているという場合でない限り、Web アプリの開発に PHP を採用するに当たって積極的に反論する必要はない。逆に、Perl ハッカーが何人も居るなら開発は Perl ベースで行くべきだろうし、Ruby も Python も同様だろう。

問題は、現場を知らない人がこういうごく当たり前な段階を経ずに言語の選定に口を出しているかどうかではないだろうか?

ここに自社の Web サイトを使って直接顧客とやり取りできるような仕掛けを用意し、中間コストや広告費を削減していこうとしている、IT にまったく疎い会社がある。サイトの開発について見積もりを取った。PHP で作るところより Ruby で作るところの方が安い。うーん、安いのは魅力だな。でも Ruby ってなんだ? 聞いたことないぞ? PHP は今人気らしいじゃないか。人気があるってことはいいってことだろ? 安かろう悪かろうって言葉もあるしな。PHP のこの会社にお願いしたらどうだろう?

こういうケース、なんか本当にそこら中で起きてそうでやだ。

個人的には

PHP は最初気持ち悪くて仕方がなかった。

  • Perl のように $ がついてるくせに Perl と違って型を区別しないので、「$ の意味ないじゃん。ない方がマシ。」と思った
  • HTML の中に埋め込まれるのが前提ということが感覚的に理解できず、include するファイルでよく <?php ?> を書き忘れた
  • でも function は sub よりマシかなーとか Perl みたいに my 宣言まみれでタイプ量うなぎのぼりになったりしなくていいな
  • 配列の配列も、リファレンスを使わずに書けるから楽でいいな
  • なんかでも凝った処理すると遅いな
  • この細かいバージョンアップで関数が増えたりデフォルトの設定が変わったりするのはなんとかならんのか

とか感じるようになって現在に至る。慣れてしまえば気持ち悪さもどこへやら。「ちょっと不自由なんだよなー」と感じる程度でとりあえず目的は達成できている。

そしてあの充実したオンラインマニュアルは非常に助かる。思わぬバグについては検証が必要だが、アーカイブ落としてきて Namazu に突っ込んでおくだけでかなり楽になる。

Ruby の場合はまず本家に HTML のマニュアルがないのが痛いし、RWiki のリファレンスマニュアルは決して言語の全体像はつかみやすくない。チュートリアルはマニュアルとは別物だし、一言で言うと情報がとっ散らかってて扱いにくい。まぁ他に何らかの言語(特に Perl)の経験があるならそれでもリファレンスと他の言語との比較のページがあるだけでかなり助かるのも事実だけど。

他の言語の人気を不思議がる前に、Ruby という言語そのものではなく Ruby を取り巻く状況のうち他の言語と比較して足りないものは何かということを真剣に考え、行動に移さなくてはいけないんだよな、本当は。でも懇切丁寧な対応でトーシロ増やすのは自分で自分の首を絞めるようなものという考え方も一方ではあるし、Ruby 界隈の人がそうだとは断言はしないけど、そういう雰囲気は感じるし、自分はそう思っている3だからこれは仕方ないことかなーとか無責任に思ったりもする。Python 界隈はちょうどよくバランスしているのかなぁと思ったりもするけど全然知らないので単に隣の芝生はなんとやら、なのだろう。

  1. 本当は Perl の場合は、すでにシステム管理やテキスト処理で Perl を使っていた「先駆者」が、CGI でも Perl を使ってみせたことから言語の素人にまで Perl が浸透したというだけで、Perl の人気は Web 以前から高かったのだけれど。 

  2. つーか DB とかどうすんの? なんていうマジレスは当然却下だ。 

  3. Ruby な人が優しくないという意味ではなく、私はトーシロに優しくするのもたいがいだと思っているという意味。要するにものには限度ってもんがあるって程度の話。 

More

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Develop Document Jekyll