ソフトウェアフレームワークとは何か?

2020年6月6日

ソフトウェアフレームワークの概要

フレームワーク(framework)とは、もともと「枠組み」を意味した単語であり、「経営戦略策定のためのフレームワーク」「会議のフレームワーク」など、何かの作業のひな型を「フレームワーク」と呼ぶこともあります。
IT業界で「フレームワーク」といった場合は、ソフトウェア開発のためのフレームワーク・ソフトウェアフレームワーク(Software framework)を指しており、アプリケーションの土台として機能するソフトウェアのことを指しています。あらかじめ基本的な設定がなされたプログラミングのコード群をイメージすれば大過ないでしょう。
ソフトウェアフレームワークの中にも様々な種類があり、アプリケーション作成に利用される「Webアプリケーションフレームワーク」や操作性を向上させるための「ユーティリティ系フレームワーク」などがあります。このように、ソフトウェアフレームワークには、汎用性が高く機能が充実しているタイプや、軽量さを重視して機能が絞り込まれたタイプなど多彩なものがあります。
これらのフレームワークを基に、必要な機能を追加していき、システム開発を進めていくのが最近の一般的な開発の流れです。

ソフトウェアフレームワークはなぜ必要なのか?

素早くソフトウェア開発ができる

ソフトウェアの開発をするとなると、機能を開発するだけでなく、ファイルの置き場所やコードの書き方などを含めて、「ソフトウェアをどのような設計にするのか」ということにも頭を使わなければなりません。
プログラミングをしてソフトウェア開発を行うという作業は、手を動かす以外に考えなければならないことや、作業に取り掛かるための下準備が多く必要になります。
しかし、フレームワークを活用すれば、こうした設計や下準備が事前に済まされているので、ゼロから開発せずに済み、時間の削減をすることができます。

保守性を高めることができる

ソフトウェアフレームワークでは、「どこに何を記述するのか」が決まっているため、結果的にソフトウェアの保守性を高めることになります。
どういうことかといえば、何もフレームワークを使っていない5つのソフトウェアの管理を任されたとします。管理を行うためには、その5つのソフトウェアごとに設計書やコードの書き方、場所などを確認していきながら、「どのような作りになっているのか」を1から確認していかなければなりません。
しかし、ソフトウェアフレームワークを使っている場合は、「この設定を行うファイルはここ」「このように記述すればこの機能を使うことができる」ということがあらかじめ決まっています。たとえ機能に変更があった場合でも、ソフトウェアファイルを使っていれば、どこのファイルをどのように修正すればよいのか、見当をつけやすくなります。
その結果、ソフトウェアの保守性が高まり、管理の手間を減らすことができます。

質の高いソフトウェア開発ができる

アプリケーション開発をゼロから行う場合は、求められている機能に応えるのも大変ですが、セキュリティやエラーの処理などの、いわゆる非機能要件に対応するのもなかなか大変です。
例えば、よくあるWebサイトのお問い合わせフォーム1つをとりあげても、質の高いお問い合わせフォームを作ろうとすると「ユーザーが間違った情報を入力したらどうするか?」「脆弱性をつく攻撃をされたらどうするか?」「安全に情報を送信するにはどうしたらいいのか?」という細かな設定をしなければなりません。
多くの場合、ソフトウェアフレームワークには、こうした非機能要件で求められるような内容に対応するための設定があらかじめ施されています。
もちろん、どのような非機能要件が求められているかをプロジェクトごとに確認する必要はありますが、往々にしてソフトウェアフレームワークは一般的な要望には応えられるような機能が搭載されています。
このように、ソフトウェアフレームワークを上手く開発に取り込むことができれば、セキュリティ対策などまで考慮した質の高いソフトウェアが開発できます。

業務アプリケーションの開発フレームワークの例

ソフトウェアフレームワークのより具体的なイメージを持つために、業務アプリケーションフレームワークであるiDempiere(アイデンピエレ)を例として、搭載されている機能を見ていきましょう。
iDempiereには、下記のような機能が含まれています[1] iDempiere Lab(アイデンピエレ ラボ) – OSS ERP Compiere Distribution Lab

ログイン機能/組織管理/ユーザー管理/取引先管理/マルチ言語/マルチ通貨/ワークフロー/会計仕訳作成/クラウド対応/データダウンロード/データアップロード/Web API/添付ファイル/ダッシュボード/伝票番号の自動採番/伝票登録制御/管理項目の追加/編集画面作成/データ検索/バッチ処理/レポート作成/ログ管理/ジョブスケジューラー/レスポンシブデザイン

以上のように、 iDempiereには様々な機能が備わっています。これらの機能を1から開発するためには膨大な時間が必要になってしまいます。
これまで、ソフトウェアフレームワークがなぜ必要なのかというお話をしてきましたが、ソフトウェアフレームワークがあるのとないのとではどのくらい開発の手間が違うのか、 iDempiereの機能の多さが教えてくれるのではないでしょうか。

フレームワークの活用事例

ここからはiDempiereの他に、開発工程を大幅に短縮することができる便利なフレームワークをご紹介していきます。

AngularJS(Google)

AngularJSはGoogleが提供するJavaScriptフレームワークです。
例えば、世界的に人気の以下のようなWebサービスでも、AngularJSは使われています[2]What is Frameworks? [Definition] Types of Frameworks

  • Netflix
  • Paypal
  • Youtube

このように、AngularJSは欧米で最も人気があるフレームワークで、インストール直後からアプリ開発に必要な機能をすべて利用することができます。
また、多数のライブラリが用意されているので、自由に機能を拡張することも可能です。必須ではありませんが、UIツールやデバッグツールなどを導入すれば、よりスムーズに開発が行えます。

ailia SDK(ax株式会社)

ailia SDKはWindows・macOS・FreeBSD・Linuxなど仕様が異なる機械で、同じ仕様のものを動かすことができるGPU対応の高速AI推論フレームワークです。AIによるポーズ推定による3Dモデルとの連動や、WEBカメラの映像からの人物抽出などが簡単に実装できるとして、大きな注目を集めているフレームワークです。

Platform Security Architecture(PSA)

Platform Security Architecture(PSA)は、接続されたデバイスを保護するためのフレームワークです。
情報社会が進むにつれ、セキュリティは常に変化し続けており、新たな脅威が特定されているため、企業はサイバー攻撃の脅威から保護する戦略を立てなければいけません。
PSAを使えば、簡単に、適切なレベルのデバイスセキュリティを構築することができます。

参考