仕事で久し振りに新規のウェブアプリを開発することになったので、ウェブアプリフレームワーク(以下WAF)について調べていました。私は以前はCakePHP2を使っていたことがありますので、その後継のCakePHP3でいくつもりなのですが、一応他の情報とかも調べました。その中で感じたのは、どうもWAFが下火になっているのかなという気がします。もちろん実際には使われているのでしょうけれど、あまり話題にならなくなったといいますか。
最初にWAFのブームが起こったのはRuby on Railsの登場ですから2005年頃ですかね。それ以前にもJavaの世界ではStrutsなどが使われていましたのでWAFが無かったわけでもないのですが、Ruby on Railsの人気はやはりスゴかったように思います。その後、多数のWAFが登場して使われまして、私がかつて使っていたCakePHP2もその中のひとつなわけです。CakePHP2もそれなりに人気というか話題になっていたように思います。
が、今回調べていて感じたのですが、どうもかつてのような熱気が感じられない。情報を探していても、質量ともに充実していない。CakePHP3なんてリリースされて2年も経つのに、リリース前の開発版を紹介する記事が検索上位にがんがん出てくるような状況です。書籍にしてもCakePHP2の本はかなり多く出版されていましたが、CakePHP3を対象にしたものはそれほど多くないようです。
PHP界のWAFではCakePHPよりもLaravelの方が人気がでてきたという話もあるようですが、ではLaravelの情報がたくさんあるかというとそうでもない。つまり、人々の興味がWAFから失われたような感じなんですね。
もちろん、WAFが使われなくなったというわけではないでしょうから、これは使うのが当たり前になっていちいち話題に上らなくなったのかなぁということなのかもしれません。実際のところはわかりませんが。何か別の技術に代替されたというわけでもないでしょうし。ウェブアプリ自体がもしかしたら話題のメインストリームから降りつつあるのかもしれないですね。今時でしたら機械学習とかIoTとかの方が人々の注目を集めてるでしょうから、興味はそっちにいってしまって、WAFはあるのが当たり前になったのかもしれません。
(2017/6/22追記)
この記事に「Ruby on Rails オワコン」で検索して来られる方が時々いらっしゃるようです。そんな恐ろしいことを書いたつもりはまったくないのですが、検索時のキーワードには確かにヒットするでしょうから、まあ仕方ないですか。求める情報がなくてすいません。
というお詫びだけを書くつもりだったんですが、実は最近仕事でRuby on Railsも使うことになりました。CakePHPだのRuby on Railsだのと節操がないですが、まあ仕事ってそんなもんですよね。でまあ、実際にRuby on Railsを使ってみて、これはもしかしてオワコンってのも一理あるかなぁと思ったので、それについて少し書きます。
前提として私のRuby on Railsの経験値ですが、ほぼゼロです。Ruby on RailsどころかRuby自体がほとんど使ったことがありません。これまで、意識してJavaとRubyの仕事は避けてきたんですよね。なんかこれらの言語は自分にとって地雷が多そうな気がしたので。しかし、今回避けきれずにRubyとRuby on Railsを使うことになりました。ということで、RubyもRuby on Railsも実務経験はせいぜい数日から数週間と言ったところです。
「そんな程度の経験値でRuby on Railsを語るんじゃねえ!」って声は当然あると思うんですが、実はそれこそがまさに感じたことなんですよ。数日から数週間程度触ったくらいではとても語れないくらいにRuby on Railsというのは巨大なフレームワークだというのがオワコンかとおもった理由です。
Ruby on Railsはフルスタックフレームワークですし、その中でも多機能を誇るWAFです。学習コストは当然に高いです。私はまだその域に達してないので想像ですが、一通りの機能を習得したと言えるまでには数ヶ月はかかるのではないでしょうか。今後、ずっとRuby on Railsを業務の主力として使っていくというのであれば、その学習コストも先行投資として見合うことでしょう。しかし、みんながみんなそんな業務にいそしむわけではありません。今回の私のように、開発期間数ヶ月程度の小さな単発プロジェクトでフレームワークとしてRuby on Railsを指定されたために仕方なく勉強してるという場合もあるわけです。この場合、Ruby on Railsの学習だけで数ヶ月という期間はとても取れません。なので、とっかかりのチュートリアルを軽くこなしたあとは、実地に開発しながら泥縄に調べるなんてやり方をせざるを得ません。正直、こんな状態のプロジェクトであればRuby on Railsを採用するのは間違いだと思うのですが、そうも言えない大人の事情っていっぱいあるんですよね。残念ながら。
Ruby on Railsはレールに乗れば高速に開発が出来るわけです。それは事実なのでしょうが、実際にはレールに乗るための準備がとても膨大なわけです。レールに乗れない場合は、むしろWAFを使わない場合よりも開発速度が遅くなってしまっているかもしれない。だって、ある機能をどうやって実装したらいいかってのはわかるのですが、それをRuby on Railsでどうやって記述するのかというのを調べてる時間が一番長いんですもの。
すでにRuby on Railsを習得してるエキスパートの人は、Ruby on Railsの高速開発のメリットを100%享受できるでしょう。それは間違いないと思います。しかし、私のようにかじった程度の者はとてもその恩恵をうけることができません。であれば、これから新規にRuby on Railsを学習して参入してくる人ってのはそれほど多くないのかもしれない。既存のユーザが使い続けるだけであれば先細りになっていってしまう。これが、Ruby on Railsがオワコンかもしれないと思った理由です。
こうしたフルスタックフレームワークへのアンチテーゼとして、マイクロフレームワークというのもありますね。フレームワークの必要な機能を小さく分解していますので、個々の学習コストは比較的小さくて済みます。もっとも、この場合はマイクロフレームワーク同士を組み合わせたときの相性問題が発生することがありますし、ウェブアプリのすべての機能を作り込んだら結局フルスタックフレームワークを使ったのと同じくらいの学習コストになってしまったということもありえますので、一概にマイクロフレームワークがいいとも言えませんね。でも、機能が限定されていたり、ちょっとした小さなアプリケーションであったりするなら、マイクロフレームワークという選択肢もありではないかなぁと思った次第。
(2018/3/21追記)
あくまでも私の個人的なとらえ方なんですが、WAFってのは一種のチートツールなんだと思ってます。ウェブアプリを高速に開発するためのチートツール。WAFを使えば、ウェブアプリを一か月で、下手したら一週間とかで開発してリリースすることも可能です。別に誇張した話ではなく、実際に私がCakePHP2を最も使い込んでいた時期は、それくらいのペースでサービスをリリースしていました。
これくらい高速にリリースされるということは、ある意味でソフトウェアとしては既存の類似品にすぎないということです。乗っかっているコンテンツがオリジナルであって、土台であるウェブアプリはそれほどオリジナリティもないということですね。それは別に悪いことではなく、乗っかっているコンテンツこそが価値がある場合には足回りであるウェブアプリにおいて、やってることってそんなに変わんないんですよね。ならばたいして独自性があるわけでも競争力の源泉でもないウェブアプリ自体は、ありもののWAFを使って高速に開発してリリースした方が得策というものでしょう。ここでは、例えばWAFとオリジナル部分のコード比を9:1と仮定しておきましょう。WAFを使わなかったら10のコードを書かなければならなかったところを、WAFを使ったことで10分の1で済むわけですね。
そうして高速に開発してリリースしたウェブアプリですが、幸いにしてヒットして順調に成長したとしましょう。段々とウェブアプリも機能が追加されていくと、WAFのコードは最初と変わりませんが、段々とオリジナル部分のコードが増えてきます。比率として5:5とかになってきたとしましょうか。さらに機能がアップしてくると、オリジナル部分のコードの方が増えてくるかもしれません。そうなってくると、WAFによる高速開発のメリットというのは相対的に低下します。また、どんどんと多機能になるウェブアプリの機能を実現するのに、WAFの範疇では収まり切らなくなるところも出てきます。こうなってくると、WAFを使っていることのメリットは段々と小さくなってくるでしょう。
私はそこまでの域のウェブアプリを扱ったことはないのですが、巨大化したウェブアプリにおいてはWAFを使っていることはかえって足かせになっていくのではないかと思います。Ruby on Railsの紹介記事では「あの有名なウェブサービスもRuby on Railsで書かれてます」とされていますが、実際にはそのいくつかは今では独自実装に移行してRuby on Railsを使っていなかったのではないかと思います。サービスの初期には確かにRuby on Railsを使っていたんでしょうけれどね。
WAFがミドルウェアと言えるくらいに枯れてきて、アプリ自体とも疎結合になっていたとしたら、また話は変わってくるかもしれません。しかし現状のWAFは毎月のようにマイナーアップデートされて機能追加され、数年に一度はメジャーアップデートしてアーキテクチャそのものが入れ替わったりします。一週間でリリースして数か月後には閉じているかもしれないようなウェブアプリにおいてはWAFのライフサイクルは問題ありませんが、数年に渡って提供され続けるようなウェブアプリにおいては現状のWAFはかえって足かせになっていると言えるのではないだろうか、というように思ったりもします。つまり、ヒットしてある程度規模が大きくなったところでWAFというのは捨て去る決断をする必要があるのではないかという気がします。
(2018/4/2追記)
Ruby on Rails の魅力と思想という記事を見かけました。ベテランのRuby on Rails開発者の方が解説する、世間でのRuby on Railsの使われ方の違和感だそうです。曰く、Ruby on Railsは一人開発で使うために開発されたWAFなので、それを多人数のチームで使用して使いにくいと言うのは間違っているということです。ふーむ。なるほど。
個人的には、Ruby on Railsは初心者なので、Ruby on Railsが個人開発用なのかチーム開発用なのかは判断がつきません。一般論としては、個人開発とチーム開発は開発のマネジメントが最も強く影響を与えるので、WAFの特性による影響はそれほど大きくないのではないかとは思いますが、私自身はRuby on Railsに詳しくないので判断は保留します。
ひとまずリンク先の方の主張が正しいと仮定して、それは確かにRuby on Railsを愛する方としては辛いだろうなとは思います。適してない使い方をしてて「Rails辛い」なんて言われたら、そりゃFUDに近いですからねぇ。ただ、そういう向いてないチームでも使われてしまうのも仕方ないのかなとも思うんです。一つはこの記事の元々のテーマであるWAF自体がオワコンになりつつあり、事実上使い物になるWAFがRuby on Railsに収束しつつあること。つまり、チーム開発に向いてる向いてないに関係なく、Ruby on Railsしか選択肢がなくなりつつあるということ。もう一つは、特にスタートアップ界隈においてRuby on Railsが「イケてるスタートアップの象徴」となってしまっていることです。
まず前者について。たとえ話としてブログツールの話をしましょう。ブログがブームになったのはもう10年以上前ですね。最初は2001年の9.11頃からでしょうか。ブログがブームになるととともに、ブログツールが雨後の竹の子のようにたくさん登場しました。その中でもっとも勢いがあったのはMovable Typeでした。その後Wordpressがシェアを握り、現代ではほぼWordpress一強になってしまいました。他のブログツールも開発が継続されているものはいくつもあるのだとは思いますが、世間一般に使われているとは言い難い状況です。結果、現代においてはブログというかCMSと言えばWordpressが選択されてます。そのサイトがWordpressに向いてるか向いてないかに関係なく、とにかくWordpressが選択されてますね。また、その期待に応えてWordpress側も多機能化をはかってありとあらゆるタイプのサイトに使えるように拡張されていますし、Wordpress本体でカバーできない機能については、無限に存在するプラグインでカバーされています。Ruby on Railsがありとあらゆるウェブアプリの開発に使えるように拡張されていて、更にそれを補うGemが溢れているのと同様と言えるのではないかと思います。つまり、WAFがオワコンというこの記事のテーマは本当であって、WAFといえばRuby on Railsという時代になってしまった、ということかなという気がします。
もう一つのイケてるスタートアップの象徴について。これは実際にここ3年ほどスタートアップを中心に転職活動をしてきた自分としての実感です。そこではとにかくRuby on Railsが使われてました。たまにPHPを使ってる会社あったら「化石プッ」と言われてしまっても仕方が無いという空気は確かにあると思います。つまりこの場合はRuby on Railsはインスタ映えするためのアイテムと変わらない扱いを受けてるとも言えますね。スタートアップが自社がイケてる会社であるとステークホルダーに説明するためにRuby on Railsを使ってる。もしかしたらそうしないとベンチャーキャピタルから出資が集められないのかもしれない。エンジニアの求人についても同様ですね。PHP使ってると求職者から化石って言われてしまうので、好むと好まざるに関わらず向いてるかどうかに関係なくRuby on Railsを使うしかない。これもまあ、WAFがRuby on Railsに収束しつつあることによるものと言えなくもないですかね。もちろんそんな選択の仕方をしているスタートアップは実際には一部なんだろうとは思いますが、表層的に見えるところではそういう現象が起きているということですね。
ということで、Ruby on Railsを愛する人からすると不本意だとは思いますが、WAFが事実上Ruby on Rails一強になってしまいましたので、その全ての業をRuby on Railsが背負っていかなければならないのかなぁという気がしました。