2005年~2010年までの流れ
2005年頃から「Ajax」という言葉が広がりました。当時の開発者間ではAjaxではなく、Dynamic HTMLという用語でこの技術が広まっていました。しかし、当時はまだ多くのシステムですべてのHTMLをサーバ側で生成するのが一般的であり、また、ブラウザによってJavaScriptを書き分けなければならず、「Ajaxを使うべきか、使わずに作るべきか」といった論争があったことを覚えています。
その後、すぐにjQueryのようなブラウザの個別のJavaScriptの問題を吸収するライブラリが生まれ、現在のAjaxの普及に大きく寄与したと思います。
一方で、この時期は業務システム向けのWebシステムからコンシューマ向けインターネットサービスが普及し出したころでした。その流れと技術トレンドの関係を説明します。
Webフレームワークの成熟期
2005年以降もWebフレームワークは新たに誕生しつつ、成熟していくなかで、もちろん淘汰もありました。しかし、新たな概念が生まれるほどの大きな出来事はなく、改善と改良を加えつつ定着していった感じがあります。
つまり、Webフレームワークは、設計思想、デザインパターンなどを前提とする基礎技術として浸透しつつありました。この時期にJava関連の雑誌も廃刊もしくは休刊となり、開発者がサーバサイドにおける既存のWeb技術の新しさや発展を追求するフェーズが終わった時期でもあります。そして、2010年にはJavaのライセンスを保持するSun Microsystemsがオラクルに買収され、一つの区切りがついたという印象を持ちました。
ただし、ここでWebフレームワークにデファクトスタンダードが現れ、現実的な収束を迎えたというよりは、主な関心事が他に移っていったことも大きいのではないかと思っています。
UI/UXへの挑戦
この時期は既存のリアルサービスが本格的にWebを使ったオンラインマーケットに進出してきた時期でした。iPhone 3の発売が2008年で、まさしく、ネットのアーリーアダプターである消費者層がスマホに参入し始めた頃であり、Webシステムと言えば企業向けシステムというフェーズから、コンシューマ向けシステムというニーズが広がってきたのもこの時期です。
つまりWebシステムは、効率化の追求から価値の創造というフェーズへ移行し始めたことになります。そこで重要になったのがUI/UXの追求です。
例えば「Ajax」は業務システムでは必ずしも必要と思われる技術ではありませんでしたが、より高いレベルでのUI/UXの追求が求められる中で、徐々に必須の技術という地位を確立していきました。また、さまざまなブラウザで同じ機能を提供する必要性が生じ、その実現を大きくサポートしたのが、「jQuery」の普及です。そして、HTML側をよりリッチな機能にする試みが現れ始めました。
サーバサイドvsフロントエンド問題
この時期まではWebシステム開発者はサーバ側もフロント側もすべて担う必要があったのですが、この頃になるとUI/UXやデザインを担当するフロントエンド開発者とサーバサイド開発者で役割が分担されるようになり始めました。
しかし、まだまだ完全に分業できるほどのレベルには至っておらず、協業して作業する必要がありました。そのなかで、どうしても技術領域の重なるところが生じてしまい、その部分をサーバサイド開発者が担当するのか、フロントエンド開発者が担当するのかわからない状態が続きます。この問題は、現在でも残っている問題の一つだと思います。
2010年~2015年までの流れ
2011年にAWSの日本リージョンのサービスが始まりました。この時代はクラウド普及の時代とクライアント技術を支える世代交代が始まった時代だと思います。
スマホへの対応
この時期には、スマホ対応やモバイルファーストが当たり前になってきました。こういった流れを見ると、新たな技術への対応や挑戦という印象を持つかもしれませんが、WEBシステムでの技術的視点でみれば実は、それ以前よりも実現するべき事が減ったという一面もありました。
例えば、メールソフトを作る場合を考えると、PCでは一つの画面にメール本文だけではなく、メール一覧、フォルダのツリー、場合によってはカレンダーなどといったメール機能とは直接関係がない機能も同時に表示されます。しかも、それぞれの表示において他の機能を実行すると表示が変わります。例えば、本文を開くと同時に未読から既読に変わり、一覧での強調表示が変わり、フォルダでは未読のカウントが一つ減ります。つまり、一つの画面に複数の機能が含まれることが当然あり、他の機能の操作が他の機能の表示に対してリアルタイムに影響を与えるのです。
現在のWebシステムは、こういったニーズに応えられるレベルまで成長しています。特にこの実現に貢献したのが、後に登場するReactやVue.jsといったツールなのですが、これらのツールを使わずに作るのは非常に難しいことは、多くの開発者が納得できるところでしょう。
そして、当時のHTMLを前提としたWebシステムでは、こうしたニーズに応えることが難しいゆえに、PCにおいてリッチなUI/UXも求める領域では、RIA(Rich Internet Application)と呼ばれる、デスクトップアプリをインターネットにつないで作るという流行が静かに起きました。
例えば、Flash技術を使ったAdobe AIRやJavaを使ったJavaFXといった技術がその例です。これらは、かつてのクライアント・サーバモデルのアプリケーションの置き換えニーズをも満たすものですが、結果的に一般的に普及することはありませんでした。その理由の一つに複雑すぎるという問題があったと思いますが、スマホの普及により、そもそもの優先順位が下がったのだと思います。
先にも触れたように、現在ではWebシステムであっても非常に複雑なアプリケーションが作りやすくなってきています。そのため、再びRIAのブームが起きることはないでしょう。そして結果的ではありますが、スマホ向けのWebソリューションが、これらが成長するまでの時間的猶予と、RIAに取って変われるレベルまでWebシステムの技術は成長しました。
クライアント技術の台頭
この時期にはTypeScriptの普及や、AngularJS、ReactやVue.jsといった、JavaScript技術の普及がありました。今でもこれらのプロダクトは頻繁にアップデートされています。2000年~2005年にサーバサイドの技術普及のトレンドがあったように、クライアントサイドの技術トレンドはこの時期だと思っています。
これらは徐々に成熟期を迎えてきていますが、いまだWebシステムにおいて大きなリスク要因の一つであることも事実です。
例えば、AngularJSは2010年に発表された当初、その後、急速に普及しました。しかし、2016年になりこれまでと互換性がないAngularJS2をリリースし、今ではReactやVue.jsなどの人気が高まっています。そして、これらの技術もまだ成長している最中と言えます。
つまり、今作ったシステムがそのままの状態では10年持たない可能性が高いことを示唆しています。コンシューマ向けのシステムであれば10年間同じソースを使い続けることは考えにくいですが、業務系のWebシステムでは10年という期間は決して長すぎる月日ではありません。このように技術発展が活発であることにはよい面もありますが、ある側面ではリスクの一つにもなり得るのです。
クラウドの普及
仮想化技術は実は非常に古く、メインフレームなどでは仮想化、もしくはコンテナが普通に行われていました。また、VMWareやXenなどのようなものは開発者にとってはかなり古くからある技術です。
しかし、まだまだ多くのWeb開発現場に一般的であったとは言えませんでした。その普及が広がったきっかけが、クラウドサービス(IaaS等)の普及です。そして、このクラウドサービスの普及がサーバ技術のサービス化(PaaS等)という流れを作りました。
この流れは、サーバサイド技術者の役割を軽減させる結果にもつながっています。例えば、最近では、OSをハードにインストールしたことがないという開発者や、データベースをインストールしたことがない開発者も増えてきていると思います。
利用者にとっては、仮想化という技術を導入したというよりは、インフラを技術的にブラックボックスであっても導入可能にしたという意味合いの方が強いと思います。