アプリケーションフレームワークとは
アプリケーションを、<一定の品質を担保しながら><効率よく>を開発するための仕組み。
昨今のアプリケーション開発において、納期までにカットオーバーさせるためには、一定の品質を担保しながら、効率よく開発する事が求められます。
そのアプリケーションフレームワークというものは、どのような種類があり、どのような特徴があるのか、この研修の中で理解していきましょう。
そもそも「フレームワーク:framework」という意味は、『枠組み、骨組み、構造』となります。
アプリケーション以外にも、SWOT、PPMなどの「ビジネスフレームワーク」というものもあったりしますが、要はある課題や問題を解決するための決まった「型」、「基盤」ということになります。
そして、我々が開発する対象は「アプリケーション」です。
「アプリケーション」を構築するため先人の頭の良い方々が考えた、作成した「枠組み」を「アプリケーションフレームワーク」といいます。
その中でもWebに特化した「Webアプリケーションフレームワーク」について説明していきたいと思います。
※以降「フレームワーク」は「Webアプリケーションフレームワーク」の事を指します。
Webのアプリケーション(ブラウザを利用した)の流れを例にした、フレームワークの範囲イメージ
<Webアプリケーションで必要な仕事例>
- httpリクエスト受け付け、 httpメソッドを判断し、レスポンスを返す。
- セッションを管理する。
- データベースに接続し、データを取得、更新する。
- また、プログラムが扱いやすいようにする。(ORM)
- 表示する画面を加工する。(テンプレート)
- 入力チェックして、例外処理して、ログを出力して…
→Webアプリケーション側でやることは色々ある、こういった処理を自前で開発すると大変…
そこで利用するのが「Webアプリケーションフレームワーク」となります。
Webアプリケーションフレームワーク導入のメリット
①開発工数の短縮化 | 共通箇所の工数が削減できる。ビジネスロジック(業務固有の処理)に注力でき生産性が向上する。 |
②品質の均一化 | フレームワークのクラスやライブラリを利用することで、最低限の品質を担保することができる。 |
③メンテナンス性の向上 | 一定のルールや仕組みで開発されるようになり、影響範囲が限定される。結果、保守時のメンテナンスが向上する。 |
Webアプリケーションフレームワーク導入のデメリット
①学習コスト | フレームワークの仕様を理解する必要がある。 |
②処理の隠蔽 | フレームワークがいいようにしてくれる為、バグや不具合があった場合にフレームワークの内容を解析する必要が発生するケースがある。 |
③脆弱性の影響 | フレームワーク側で脆弱性が発覚した場合、その回避対応やパッチ適用などのコストが発生する。 |
アプリケーションフレームワークの種類、特徴
Webアプリケーションフレームワークの種類を分類するときの切り口として以下があります。
①「プログラム言語」ごとに色々な種類が存在します。
② フレームワークが提供してくれる機能も異なります。((Webアプリケーションを開発する範囲の一部なのか、全体的 (フルスタック) なのか)
①Java
# | フレームワーク名 | 概要 |
1 | Java EE(Java Platform, Enterprise Edition) | •Java標準仕様のフレームワークで、ServletやJSP、EJBなど標準仕様。 •10年位前は重量コンテナとして忌み嫌われてきたが、Java EE6あたりから他のフレームワークのいいとこどりをするようになってもりかえしてきた •最新版:Java EE8(2017/9/21) |
2 | Struts | •MVC(Model/View/Conrol)モデルに基づいたアーキテクチャで一時期はでデファクトスタンダードとなっていた •Struts2で重大な脆弱性が何度か発見されている •いまからこのフレームワークを選定することはない |
3 | Spring Framework | •DI(Dependency Injection)コンテナと呼ばれる、環境に依存する機能を外部から提供可能とする方法が特徴 •DIを採用することで、機能の独立性が高まり効率よく開発を実現できる |
4 | Spring Boot | •Spring Frameworkを使いやすくするためのフレームワーク •起動までに設定が複雑だったSpring Frameworkの問題を解消 •デプロイするとアプリ動作するjarができるため、スケールしやすい |
5 | Play framework | •Ruby on Railsの思想に似せたフレームワーク •Scalaという言語でも利用可能 |
②C#、VB
# | フレームワーク名 | 概要 |
1 | ASP.NET (Web Form) | •.NET でWebアプリケーションフレームワークといえばこれしかなかった。その後、ASP.NET MVC登場により、新規で利用することはない。 |
2 | ASP.NET MVC | •Microsoftが開発・提供している、Model View Controller (MVC) パターンをベースとしたアプリケーションを開発するためのASP.NETのWebアプリケーションフレームワーク |
③Ruby
# | フレームワーク名 | 概要 |
1 | Ruby on Rails | •RubyのWebフレームワークといえばこれ的な存在 •これでRubyが世に知られるようになった •DRY(Don‘t Repeat Yourself):「同じことを繰り返さない •COC(Convention Over Configuration):「規約(決められたルール)を優先する」 •GitHub、Airbnbも利用している |
2 | Sinatora | •小規模向け •部品を組み合わせて作成する |
3 | Padrino | •SinatoraをベースにMVC構造で設計されている •フルスタックフレームワーク |
4 | Ramaze | •シンプル・軽量・モジュール化を目指して8つの原則にもとづいて設計されている。 |
④Python
# | フレームワーク名 | 概要 |
1 | Django | •PythonのWebフレームワークで一番人気がある •フルスタックフレームワーク •管理画面を自動生成してくれる機能をもつ |
2 | Bottle | •1ファイルで構成されている軽量なWebフレームワーク •軽量なので部分的な人工知能や、データ解析に利用が想定される |
3 | Flask | •データベースの抽象化や入力値検査などの機能を持たず最小限に保っている •自由度はDjangoよりも高い |
4 | Tormado | •スケーラブル、ノンブロッキングなWebフレームワーク •Webサーバとして機能することも可能 |
⑤フロント
# | フレームワーク名 | 概要 |
1 | Angular | •シングルページアプリケーションの開発に適している •Javascript/Typescriptで開発 •AngularJSは古いバージョン、Angularとは別物なので注意。 |
2 | React | •FaceBook社が開発したUIを構築するためのライブラリ •MVCデザインパターンのView部分のライブラリ •Angularと同じくらい人気 |
3 | Vue.js | •MVCの派生であるMVVMという設計基盤として構築されている •HTML/JavaScript間の双方向データバインディングに特化していて、極力シンプルに実装できるようになっている。 |
4 | JQuery | •上記のフレームワークとは毛色がちがうけど、フロントのアニメーションやひど非同期処理など、javascriptをごりごり記述しないようにするためライブラリ |
フレームワーク選定時の考慮事項:現在の普及状況と将来の普及状況を鑑みる
→ 普及されていないと
- 学習コストが高い。
- トラブルシューティングの解決ケースがないなど調査、対応に時間がかかったりする。
- 普及しないとフレームワークの開発が止まる。
→ セキュリティホールのパッチ対応が止まるなど、困る状況が発生。
→ 普及状況を考慮しないと、開発者を集められない
→ 開発できない…
フレームワーク1つとっても色々な種類が存在します。フルスタックなフレームワークを1つ使いこなせると、他のフレームワークを利用する際に応用が効きます。
Web系開発では必須知識となりますので、業務で扱うものの他に自身が興味あるものに触れておくと知識の幅が広がります。
※最新の情報の取得・更新に努めておりますが、掲載内容については、その正確性、完全性、有用性、最新性等についていかなる保証もするものではありません。