Rubyはイノベーション言語として選ばれている
もう1カ月前のことですが、2012年2月23日、24日と2日間にわたって福岡市・博多区を訪問し、「フクオカRubyフォーラム 2012」の第4回Ruby大賞の発表・授賞式を取材しました。24日には、パネルディスカッションが行われ、私(@IT編集部の西村賢)はモデレーターを務めさせていただきました。パネルディスカッションには、
- Rubyの生みの親で、Herokuチーフアーキテクトのまつもとゆきひろ氏
- Ruby PaaSを提供する米Engine YardCEOのJohn Dillon氏
- 米VMwareで「Cloud Foundry」をピュアRubyで書いたDerek Collison氏
- Ruby PaaS「Mogok」を準備中のIIJの立久井正和氏
の4名が登壇しました。テーマは「Rubyとクラウド」でした。パネルディスカッションも含め、意見交換をしていて、改めてRubyについて気付くところがあったので、2つの論点で、まとめてみたいと思います。
論点1:クラウドとRubyの相性は良いか?
まず1つ目の論点。「クラウドとRubyは相性が良いのか?」という点です。これはさらに2つの論点が含まれています。PaaSなどの上に載るWebアプリを書く言語としてのRubyという意味と、クラウド自体を動かすための言語という意味があります。
クラウドといっても下はハードウェアに近いところから、上はWebアプリやPaaSまであるわけですが、上から下までRubyが活躍していると指摘したのは、フクオカRuby大賞の特別賞を受賞した「Cloud Foundry」の生みの親の1人、Derek Collison氏です。Derek氏はRubyの歴史を俯瞰して次のように述べます。
- 1993年に「より良い言語」としてRubyが登場した
- (ずいぶん空きますが)2005年には「より良いフレームワークとしてRails」が登場
- 2006年には、それまで煩雑だったデプロイ作業を「Capistrano」が刷新
- 2007年にはHerokuが登場し、さらにアプリ開発とデプロイ、運用が簡易化した
- 2008年にはNew Relicが登場してパフォーマンス管理も容易になった。
このように、Rubyは実はサーバ上の自動化という面でも、各種ミドルウェアを統合するサーバアプリという分野でも活躍しているというわけです。
Cloud FoundryはRuby「で」書かれたクラウドインフラです。処理系のVM(Rubyだけでなく、PHPやPython、Erlangも)をUnixプロセスとして起動したり、監視したりといったことからメモリ管理のシステムまで、Rubyでクラウドサービスを提供するためのクラウドオートメーションとかオーケストレーションと呼ばれる基盤を実装しています。クラウド時代には扱うリソースの種類や量が増えるので、これらをいかに運用するかが重要になります。
「システムは年々複雑になり、SSDなど新技術も常に登場しています。Rubyはこうした複雑化するシステムの構築を容易にしてくれます。Rubyで速度に問題はないのかという問いもありますが、(クラウドのような)分散システムを構築するのに、純粋な言語の処理速度は、実はあまり関係がないのです」(Collison氏)
システムを取り巻くあらゆる部分が変化し続ける環境ではシステム構築の柔軟性が重要になるという
変化が激しく多様化する環境に適用しなければならないのは、分散システムをRubyで作る場合だけではありません。いわゆるWebアプリも同様だといいます。
「今後24カ月程度で企業の内製のWindowsアプリはWebベースへと移行するでしょう。問題は、サーバアプリが対応すべきモノは、すべてが流動的だということです。例えばハードウェアレイヤではSSDが登場してRDBMSについて考え直す必要があります。今後、1000コア、TB単位のメモリの時代が来れば、システム構築の方法を考え直す必要があります」(Collison氏)
サーバアプリは今後、HTMLだけでなく各種モバイル端末やKVSなどの新しいストレージ技術にも対応していかなければならず、これらを統合する“アプリ”(サーバアプリ)は「生物のように自己継続できないといけない」というのがCollison氏の見立てです。もちろん、ハードウェアの真上で動くソフトウェアはC、C++、Javaなどで書かれるのでしょうが、全体を束ねて動かす言語としてクラウド時代にRubyが有効だということかと思います。
モバイル市場の急成長でJavaScriptによるアプリも注目されているが、サーバ側のWebアプリがやるべき仕事は実際には多く、こうした場面ではRubyが有効だという
なぜRubyなのか?
なぜRubyかという問いにCollison氏は、「Rubyは、しばらくしてから読み直してもすぐに何をやっているかが分かる。これはほかのコードベース、例えばCやJavaでは困難なことだ」と答えます。「Rubyはもっとエレガントな言語だと思います。表現力が高いのに簡潔。自然に感じられるし、プログラムが楽しい。そしてパワフルなんです」(Collison氏)
元Google社員のCollison氏は元同僚を誘い、2人がかりで3カ月でCloud Foundryを実装したといいます。このとき、こんな経験をしたそうです。
「あるネットワークルーティングのコードを、彼はJavaで書き始めたんです。でも、すぐにRubyで開発する私のスピードに勝てないことが分かり、彼は週末を使ってRubyを学び、月曜日からはJavaからRubyに切り替えた。彼は非常に優秀な開発者で、私より遥かに優秀だと思うのですが、だから、そんな私に開発速度で負けることが嫌だったというのもあるのでしょう(笑)」
Rubyの生産性については、米Engine Yard CEOのJohn Dillon氏も同様の証言をします。
「スピードが要求されるアジャイル開発にRubyは適している。われわれの顧客でも、Rubyを使っている開発者は、ほかの言語の利用者よりも遥かに生産性が高い」(Dillon氏)
ちなみにEngine YardはJRubyやRubinius開発のコアメンバーを抱えていることで知られているということ以外、まだ日本ではあまり知られていないかもしれませんが、すでに50の国や地域で2300の顧客を抱えていて、売り上げは年率100%で成長しているそうです。現在はRuby PaaSだけではなく、PHPのPaaSも提供しているほか、実験的にNode.jsのサポートを開始しています。数カ月以内に日本国内に拠点を設置し、日本市場への参入も計画しているといいます(福岡も候補地だそうです)。
VMwareのCloud Foundy、そしてEngine YardのRuby PaaS、それからフクオカRuby大賞2012の優秀賞にも選ばれたIIJの「MOGOK」と、Ruby+クラウドは花盛りといった感があります。MOGOK同様に優秀賞を受賞した株式会社あくしゅの「Wakame」もあります。WakameはRubyを使って“データセンターのHypervisor化”ともいうべき抽象化に取り組んでいるそうです。
もちろん、Ruby関連プロダクトを表彰するのが目的のイベントですから「Rubyクラウドが花盛り」といっても、「当たり前だろ!」というツッコミもあることでしょう。しかし、PerlやPHP、Pythonで同様のイベントや実装ネタで盛り上がることがあるかと考えると、Rubyは一歩先を行っているように私には思われます。PHPもサポートするようになったEngine Yardですが、CEOのDillon氏は「Rubyからスタートしていなければ、われわれのビジネス自体が存在し得なかっただろう」とまで言い切ります。
ちなみに、Cloud Foundryを作ったDerek氏は、PaaSよりも一歩進んだクラウドについて構想しているそうです。監査やビジネスプロセスといった業務アプリに必ず必要になる部分を、非侵食的にアプリとは独立した形で行えるような、そうしたクラウド、という話です。
JavaScriptが本命では?
JavaScriptの普遍性は、今さら繰り返すまでもありません。いまやブラウザだけでなく、Node.js周辺ではサーバサイドで急速にエコシステムが発達してきています。Backbone.js、Ember.js、Spine.jsなどクライアントMVC戦争も過熱気味です。TitaniumやUnityといったモバイル、ゲーム関連でもJavaScriptが使えますよね。何よりも、GoogleのV8は今やスクリプト言語のなかでは最速の部類となっています(リンク)。
こういう背景から考えると、サーバサイドやモバイルも含めて、JavaScript(ECMAScript 6)こそがスクリプト言語の最終勝者となる本命ではないのか? 私はこの問いを、過去1年ほどさまざまな人に投げかけています。例えばNode.js創始者のRyan Dhal氏に2011年11月に話を聞きたときには、答えは明確にイエスでした。「動的言語に関して言えば、過去10年とか15年でいろいろなことを試してきたということです。Perlがあり、Pythonがあり、Rubyがありましたが、JavaScriptこそがこれらに勝って“スクリプト言語”の決定版となると思います」(Ryan Dahl氏)。
JavaScriptが本命ではないのかという問いについて、Derek氏は、こう答えてくれました。
「その問いに対しては、私は良くこういう質問で返すのです。もしRubyが今の10倍速くてブラウザ上でも使えるのだとしたら、RubyとJavaScriptと、あなたはどちらを選びますか? 多くの人の答えはRubyと言いますよね。5年後に開発者がRubyを選ぶ理由というのは、いま開発者がRubyを選ぶのと同じ理由だと思います」(Collison氏)
CoffeeScriptが典型ですが、「JavaScriptへコンパイルする」という“Transpiler”が一般化するのなら、ターゲットVMとしてJavaScriptエンジンが使われるような場面でも、引き続き人々はRubyを選ぶのではないかということです。
Rubyの課題
べた褒めといってぐらいRuby好きを隠さないCollison氏ですが、その一方でRubyの課題も指摘しています。
1つは「もし10倍速かったら」という“仮定”にあるように速度です。現在はストレージがボトルネックになっていて言語処理系の速度が問われないケースでも、今後SSDやインメモリのストレージが主流になれば前提が変わります。
Cloud FoundryはRuby向けのノンブロッキングI/Oライブラリの「EventMachine」と、Ruby1.9標準のFiberを多用して書かれています。この時の経験から、Collison氏は、RubyにはEventMachineのようなイベント駆動で処理を記述するための標準APIが必須だと考えているといいます。EventMachineは非標準ライブラリで、メンテナンス状況もかなり悪いとのことです(リライトを検討せざるを得ないレベルといいます)。Collison氏はノンブロッキングI/Oだけでなく、マルチVMやScalaやErlangにあるアクターモデルなどの並列処理についても検討していく必要があるだろうといい、Collison氏は講演で、「美しい言語である、というだけで十分だろうか?(Is being a beautiful language enough?)」と反語的に問いかけていました。
論点2:Rubyはエンタープライズへ普及するか?
Engine YardのDillon氏の証言は、発言する立場とRuby関連イベントでの発言という事実を割り引いて考える必要があると思います。しかし、IT業界で25年以上の経歴を持つDillon氏の言葉は傾聴に値するでしょう。Dillon氏は、もともとはEDSのエンジニアで、後にOracleやHyperion、SalesforceでCEOを務めたという経歴があります。
そのDillon氏が講演で披露した次のようなパースペクティブは説得力があります。
「現在、企業のIT予算の70~80%は、私が“ビッグIT”と呼ぶシステムの改修、保守に使われています。COBOLやJava、メインフレームといった古い技術で構築されたITシステムです」(Dillon氏)
“ビッグIT”のように投資を正当化できない領域で、小さなイノベーションを起こすのに使われているがRubyであり、クラウドであるという
多くの企業では“ビッグIT”に予算の大部分が割かれるため、既存システム以外の新規プロジェクトには予算が割けません。各業界で小さなイノベーションを起こせる良いアイデアを持った現業部門は、使える予算が少ないからです。こうした部門こそが、Rubyやクラウド、外部の優秀な開発者を使って小さなプロジェクトを遂行しているのだというのです。
IT関連サービスの成長率は業界全体で見れば低成長ということになるものの、この“スモールIT”というジャンルに限ってみれば、年成長率は40%にもなるというのがDillon氏の指摘です。2012年2月のEngine Yardのプレスリリースを見ると、既存顧客のEngine Yard Platformの利用率向上による収益向上が58%といいますから、確かに伸びているのでしょう。
このジャンルは、企業内の技術部門に後回しにされがちです。
開発依頼のチケットを切っても、ビッグITの隙間をぬってやるにはプロジェクトが大きすぎるし、たいていは作ったことのないアプリケーションだったりするので、技術部門はやりたがらないか、やれるだけのスキルセットがありません。だから、外部の優秀な開発者を使って、クラウドで作る。その時に選ばれている言語がRubyだというのです。
Rubyで起こす、正しく小さなイノベーション
成長性の高い分野で顧客を獲得しているからこそEngine Yardは年率100%の成長ができている、というのがDillon氏の話のポイントです。同社の顧客リストを眺めると、グルーポンやTechCruncといったWeb2.0の申し子といったブランド名もあるものの、むしろ目に付くのはGAP、CAT、TOYOTAといった小売や製造業のブランドです。こうした企業がソーシャル機能を取り入れたような小さなプロジェクトでRuby+PaaSを選んでいるというわけです。
「クリティカルではない、小さな実験的なプロエジェクトのほとんどは失敗するでしょう。しかし、こうしたプロエジェクトこそが、イノベーションの正しいやり方です。成功例が増えていけば、いずれRubyも“ビッグIT”に普及していくでしょう」(Dillon氏)
今年、フクオカRuby大賞の大賞に選ばれたのは、Rubyで書かれた帳票ソリューションの「ThinReports」でした。RubyやRailsでPDF形式の帳票を生成できるライブラリと、帳票レイアウト作成エディタ(WindowsアプリWindows、Linux、Macで動くアプリ)です。“帳票”といえば日本の業務アプリケーションを象徴するようなビジネス習慣ですが、こうしたソリューションが登場してきていることも、Dillon氏の予測を裏付けていると言えるのかもしれません。
コメント
5.5
いつも良い記事をありがとうございます。
「Rubyついて気付く」→「Rubyについて気付く」
「まとめたてみたいと」→「まとめてみたいと」
「Fiberを多様して」→「Fiberを多用して」
でしょうか。
西村賢
ご指摘ありがとうございます!