SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

これまでのWebシステムの歴史とトレンド

業務Webシステムは2010年が転換期だった? HTML5以降の最適化の歴史

これまでのWebシステムの歴史とトレンド 第2回

サーバサイドで機能を実装する利点

 ある機能を実装する際に、サーバサイドでもフロントエンドでも作れる場合は多々あります。しかし、機能面よりも、環境の違い、もしくは制限を意識しなければいけないのがセキュリティです。

 同じ機能をフロントエンドで実現する場合、サーバサイドで開発する場合に比べてセキュリティ上で考慮すべき点が多くなります。そして、考慮すべき点が多くなれば多くなるほど、開発は複雑になります。つまり、できるだけ機能をシンプルに作るならば、サーバサイドで機能を実装する方が考慮すべき点が少なくなります。

 サーバサイドでは図2のようなネットワーク構造を構築し、そこにそれぞれの役割に応じたシステムを構築します。

図2:三層構造のネットワーク
図2:三層構造のネットワーク

 まず、公開ネットワークではインターネットからのアクセスを担当します。つまり、信用できない相手と通信しなければならないため、公開ネットワークでできることは非常に貧弱です。例えばWebサーバがHTMLなどのWebコンテンツを返す機能を持ちます。そのため、この公開ネットワークが誰かに乗っ取られても、重要な情報が流出するリスクは理論上はありません。

 そして、その下にあるのがDMZ(非武装地帯)で、簡単に言えば公開ネットワークからも、内部ネットワークからも信頼できるアクセス元です。ここは、公開ネットワークから来るリクエストを元に、内部ネットワークにアクセスして必要な情報や機能を提供する役割があります。そして、内部ネットワークはなんら制限がない領域で、多くのWebシステムではここにデータベースを配置します。

 このような構造にすることで役割に応じた効率化が行いやすく、また、設計・開発において以下のようなメリットが生じます。

(1)機能を実装するための前提条件を自由に設計できる

 「前提条件を自由に設計できる」とは、自由な実装を許す反面、結果的により煩雑になってしまう懸念もあるでしょう。確かに、Web創生期には、そういった傾向がありました。

 しかし、サーバサイド技術はさまざまな目的別のフレームワークが誕生する方向で進化しました。

 例えば、JavaのTomcatやWebSphere、Ruby on Rails、PHPであればLaravel、PythonのDjangoなど、ここでは紹介しきれないほどの多様なフレームワークが生まれました。開発者は自分の使い勝手や目的にあったフレームワークを選ぶことで、大幅に開発を効率化できます。

 また、WebサイトやブログサイトであればWordPress、ECシステムであればMagento、全文検索であればApache Solrといった、より目的に特化したカスタマイズ可能なソフトウェアも生まれました。こういったフレームワークやカスタマイズを前提としたソフトウェアの存在は、開発者に大きな力を与えてくれました。

 これらのフレームワークは強力なルールも同時に課し、開発者はそのルールを守って開発を進めることで、効率よく開発が進められました。

(2)外部要因の直接的な影響を回避できる場合が多い

 これは、例えばOSのバージョンアップを指します。OSのバージョンアップはセキュリティ対応を含みますが、既存システムへの影響は避けられません。

 そのため、既存のシステムが同じように動くことを確認したり、影響を考慮して細かい修正対応をしたりといった作業が生じてしまいます。特にオリジナルのシステムでは他の事例を参考にできないため、できればやりたくない作業でしょう。

 このとき、ネットワークとして制限されているため、想定外の利用に対するリスク対策を自分たちの都合に合わせて行う、もしくは対応しないという判断すらできます。

 この「バージョンアップ作業を必ずしも行わなくていい」というメリットは、技術の延命にも役立ちます。つまり、同じ技術の利用時間が長いということは、手法の再利用やノウハウの継承などが行いやすいことにもつながります。

最適化の方向性の違い

 「効率」を考えたときに、最適化をする際の方向性としても、以下のような考え方があります。

  • 人を中心とした最適化
  • 仕組み(ルール)を中心とした最適化

 また、これらの特徴を表したのが図3です。

図3:効率化の方向性の違い
図3:効率化の方向性の違い

 左側の図はサーバサイドの考え方をした場合の最適化の方法、右側が現在のフロントエンド技術を使った場合の最適化の方法です。この違いは利用する技術によって生じるのではなく、むしろ、最適化したい方向性に合わせて、技術側が進化していったと捉えるべきでしょう。

 先ほど説明した通り、サーバサイドでは多様な環境が受け入れやすい傾向があります。そして、時代とともに実現したいことが多様化するにつれて、その手法も多様化していきました。

 一方、そうした多様化も時間や経験と共に定型化されます。先ほど記したWebフレームワークなどはまさしく、この定型化による最適化を目的としたツールです。このような工程から開発する一人ひとりにとっての多様性は必要なくなり、それぞれの専門性とそれぞれの手順の最適化が容易になります。

 もちろん、仕組みを中心に考えた効率化の側面は、フロントエンドにも見られます。これまでの最適化のルールを大きく変えるきっかけになったのが、スマホアプリとNode.jsというサーバサイドで動くJavaScript実行環境です。スマホアプリはそれ自体で機能が完結でき、Node.jsによりクライアント技術をそのままサーバ側に持ち込むことが可能になりました。

 すべての機能を単一言語で実装できれば、おのずと境界線は曖昧になります。結果として一人の開発者が実現すべき機能は非常に多岐にわたることになります。

 結果、サーバサイドで存在した厳密なルールは、メリットよりもデメリットの方が大きくなります。こういった環境下では「人を中心とした最適化」を促進することになります。

 例えば、Next.jsというJavaScript(React)のフレームワークを使ってWebシステムを作った場合を見ると、この特徴がよくわかります。

 図4は1つのソースコードに、サーバ側で動く機能、クライアント側で動く機能、HTMLやデザインが含まれる形を表した図です。

図4:1つのプログラム上に異なる動作環境と目的が混在する
図4:1つのプログラム上に異なる動作環境と目的が混在する

 こういった環境では、ソースコードを役割に応じて分けるのではなく、利用者視点の機能で区分することになります。手段や関連するリソース(CSSなど)をできるだけまとめ、担当する開発者が管理しやすいレベルにパッケージング化していくわけです。その結果として、一見複雑な構造をもつコード形式が生まれました。

 ただし、先ほどの図は少々意地悪な見方であり、図5のように利用者から見た場合、むしろ分かりやすい構造になっているとも言えます。

図5:1つの機能の提供を受ける利用者目線での処理の流れ
図5:1つの機能の提供を受ける利用者目線での処理の流れ

 このように、HTML5以前のサーバサイド技術を中心に据えたWebシステムは、それぞれの技術的役割を中心にした最適化がしやすく、HTML5以降のフロントエンド技術を中心に据えたWebシステムでは人を中心にした最適化がしやすいことになります。

 つまり、これらの技術は、そもそも適用する場所や目的が違うとも言えます。

次のページ
最適化のメリットとデメリット

この記事は参考になりましたか?

これまでのWebシステムの歴史とトレンド連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21246 2025/04/09 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー