【初心者目線】Webアプリケーションの開発 第15回

【初心者目線】Webアプリケーションの開発 第15回について書きます。

1. フレームワークとは

Webアプリケーションを作成する際のアーキテクチャについてMVCモデルを参考に説明しましたが、このアーキテクチャという考え方を知っていても、実際にプログラムに反映して開発を行う事は容易ではありません。

そこで、アーキテクチャをもとにプログラムを組むことをサポートするために「フレームワーク」という考え方が生まれました。


私たちは普段インターネットでショッピングサイトを利用したり、宿泊施設の予約をするなど、様々な企業が提供しているWebアプリケーションのサービスを利用していると思います。

それらのサイトは企業やサービスの内容によりデザインや機能がそれぞれ異なりますが、アーキテクチャ自体に大きな違いはなく、共通している考えも多数含まれています。

それらの共通部をソフトウェアとして実現し、異なる部分のみを作りこむことができるようにしたものが、フレームワークというものです。

1-1. アーキテクチャの共通化

もうすこし理解しやすいように、フレームワークのイメージを自動車を例に説明していきます。

現在、多種多様な自動車の車種が存在しますが、異なる車種であっても基本的な部分が共通化されている自動車も存在します。

それらの自動車では「タイヤが4本」「エンジンを使用する」「アクセルとブレーキが備わっている」「ハンドルを回して進行方向を変える」など、基本構造は同じになっています。


これらの共通化された基本構造のことを「プラットフォーム」と呼びます。

プラットフォームをベースとし、外観や内装など車種ごとに異なる部分のみを開発すればよいため、開発コストを大きく抑えることができます。


ソフトウェア開発でもアーキテクチャを実現する部分を共通化し、画面デザインや詳細なサービス内容などのWebアプリケーションごとに異なる部分を別々に開発することができれば、アプリケーション開発を効率よく、そして高品質に行うことができます。

このアーキテクチャを具現化する共通部分がフレームワークというものになります。

2. フレームワークのメリット

ここからはシステム開発においてフレームワークを利用するメリットを解説していきます。

2-1. 開発工数の削減

フレームワーク利用における最大のメリットとして、各分野の様々な設計を再利用できることが挙げられます。

これにより設計の工数が削減できます。


Webアプリケーション開発のためのアーキテクチャや、どのように実現するかなどが、すでにフレームワークとして用意されているため、開発者はフレームワークの規約に応じてコーディングをするだけで良いのです。

例えばデータベースへのアクセスといった共通的な部分はあらかじめ作成されているため、同様の処理を新規で作成する必要はありません。

2-2. 高品質なソフトウェアの実現

私たち人間がコーディングする限り必ずミスをしてしまいます。

コーディング量が多くなるにつれてミスも増えてきます。

そこでフレームワークを活用することで、人間がコーディングする部分が大幅に削減でき、バグの少ない高品質なソフトウェアの開発ができるのです。


フレームワークの品質は大丈夫なのかと疑問に思う方もいると思いますが、世界中の開発者が利用するような有名なフレームワークは常に不具合の修正、仕様の改善が行われています。

よって、歴史が長くかつ利用者が多いフレームワークほど、品質面で信頼できるものと言えます。

2-3. 私たち人間がコーディングする限り必ずミスをしてしまいます。 コーディング量が多くなるにつれてミスも増えてきます。 そこでフレームワークを活用することで、人間がコーディングする部分が大幅に削減でき、バグの少ない高品質なソフトウェアの開発ができるのです。 フレームワークの品質は大丈夫なのかと疑問に思う方もいると思いますが、世界中の開発者が利用するような有名なフレームワークは常に不具合の修正、仕様の改善が行われています。 よって、歴史が長くかつ利用者が多いフレームワークほど、品質面で信頼できるものと言

ソフトウェアの開発では、新規開発した部分について品質を担保するために必ずテストを実施します。

そのテストの工程には、テストデータの準備、テスト仕様書の作成、テスト実施など複数の段階があり、多くの工数を必要としますが、フレームワークを使用することにより人間のコーディング量を減らすことができるため、その分テストの工数も減らすことが出来ます。


また、信頼性の高いフレームワークを使用することにより、フレームワーク自身をテストする必要はほぼ無いと言えます。

3. フレームワークのデメリット

ここまでフレームワークを利用することによるメリットを説明しましたが、当然デメリットも存在します。

フレームワークの導入にあたり以下のようなデメリットも理解する必要があります。

3-1. 習得のコスト

フレームワークを利用するにはまず初めにその使い方を学習すると思いますが、導入の初期段階では習得率が低く期待していた通りの効果が得られないことがよくあります。

開発者のスキルや経験により多少ばらつきはありますが、以下に示す通り使いこなすにはある程度の時間がかかることも考慮する必要があります。


また、開発のスキルだけではなく利用するフレームワークに合わせた設計、テスト方法も確立しなければなりません。

フレームワークが保有する機能はあらかじめ決まっているので、それに沿った設計やそれらをどのようにテストするのかも考えておく必要があります。


メリットの部分でも説明しましたが、有名なフレームワークは世界中の開発者により長期間使用されているため品質が安定しています。

ただしその中には技術的に古いものもあり、それに変わる新しいフレームワークも複数登場しています。


どうせ使うなら最先端の技術を採用したフレームワークを使いたくなると思いますが、それらのフレームワークは品質が安定していなかったり、情報が少なく十分に学習できないといった弊害もあります。

よって、どのフレームワークを導入すべきか総合的に判断する能力も求められてきます。

3-2. 設計の自由度の低下

設計と共通機能の実装を再利用できることがフレームワーク導入の目的でもありますが、どのようなフレームワークでも利用する想定範囲が決まっており、開発者はフレームワークの設計者が意図した範囲内で機能を利用する事が想定されています。

ただし、その想定を超えた範囲の処理を実現しようとした場合、フレームワークの仕様が原因となり設計の難易度が大幅に高くなることがあります。


上記のようなトラブルを避けるためには、フレームワークを利用する際にあらかじめそのフレームワークで実現できる範囲を確認する必要があります。

フレームワークを使用すると生産性や品質は向上しますが、このように設計に対する自由度を犠牲にしていることも覚えておいてください。

3-3. 技術力の低下

フレームワークを利用することで様々なメリットを得ることができますが、ほとんどのフレームワークは内部の処理がブラックボックス化されており、何が行われているか知ることができなくなっています。

よって、フレームワークの裏側にある様々な技術を習得することもできなくなります。


これらの問題として、Webアプリケーションの開発中に不具合が発生した場合、フレームワークの使用方法またはフレームワーク自体に原因があることもあります。

その場合、フレームワークの内部でどのような処理が行われているのかが分からないと、不具合の原因を解決することが非常に難しくなります。

4. 付録


ここではJavaで使用されるフレームワークの中から有名なものをいくつか紹介します。

4-1. Spring Framework

世界中で広く利用されているJava用のフレームワークです。

Javaを使ったWebアプリケーション開発は大規模なものが多く、開発途中で修正や変更などが入ることもよくあります。


Spring Frameworkの大きな特長が、DI(Dependency Injection:依存性注入)です。

この機能により、コードから依存性を排除し、依存性のあるプログラムは外部から取り入れることができるため、柔軟な開発が容易にできるようになりました。


また、高い拡張性と保守性を備えており、大規模な開発プロジェクトでも多く採用されています。

4-2. Apache Struts

Apache Strutsは長年に渡りJavaで開発する際の定番のフレームワークとなっており、MVCモデルのアーキテクチャを採用しています。

また、データをチェックするバリデーション機能や、大規模なタグライブラリなど、Webアプリケーション開発をする際に必要な機能や仕組みが多数揃っています。

4-3. Apache Wicket

Webアプリケーション開発にあたって、ほぼ全てをJavaでコーディングできるという特徴があります。

Javaの基礎知識があれば容易にシステム開発が可能で、フレームワークの初心者にも適しています。

5. 第15回 まとめ


今回はフレームワークのメリット、デメリットについて解説してきました。

現代のアプリケーション開発では必ずと言ってよいほどフレームワークが使用されていますが、そこにはデメリットも存在しているため、上手く使いこなすには実現したい仕様に適したフレームワークの選定が必要です。


ここまでWebアプリケーションの開発にあたって必要な考え方や技術をいくつか解説してきましたが、次回で最終回となります。

最終回はセキュリティについて説明する予定です。