C++フレームワークの選び方。メリット・デメリットの比較をふまえて解説!

C++フレームワークの選び方。メリット・デメリットの比較をふまえて解説!

C++とは?

UNIX誕生のすぐ後に、このOS上で動作するユーティリティーを開発するための言語として1972年に米国AT&Tベル研究で誕生したのがC言語です。

その後、Cは、OSはもとより、自動車、家電製品などの組み込みプログラム、様々な機器のデバイスドライバ、速度を求められるゲームやシミュレーションプログラム、さらには業務システムをはじめとする多種多様なアプリケーション開発に用いられるに至りました。

コンピュータに求められる処理が高度化するとプログラムが巨大化、複雑化して、要求仕様・品質を満たさない、保守困難などの弊害が生まれてきます。

こうした弊害をなくし、かつプログラム開発を効率化するために「オブジェクト指向」という概念が編み出されました。そしてC誕生の11年後、AT&Tベル研のビャーネ・ストロヴストルップが、Cをオブジェクト指向言語化したのがC++です。

Cと互換性があり、膨大な数のアプリケーションが無駄にならない、Cと同様に高速で動作するなどの特長を生かして、C++は現在もあらゆるアプリケーション開発に用いられています。

C++のフレームワークとは?

長い歴史を持ち、様々な分野で使われているC++にはどのような種類のフレームワークがあるのでしょうか。

「フレームワーク」でネット検索してみると、WEBアプリケーションフレームワークの情報がたくさん出てきます。Rubyの「Ruby on Rails」、PHPの「CakePHP」、Javaの「Spring」などが代表的なところでしょうか。

C++にもWEBアプリケーションフレームワークはあるのですが、上記著名WEBアプリケーションフレームワークと伍して話題になることはないようです。様々なアプリケーションで用いられているC++ですが、WEBアプリケーションの世界では主流の言語にはなりませんでした。

一方、「C++」と「フレームワーク」でネットを検索してみると、C++にはGUIフレームワークやテストフレームワークがあるのがわかります。

C++のフレームワークを使うメリット

一般論として、フレームワークを使用するメリットは、予め用意された「枠組み」(これがフレームワーク)を用いることによってソフトウエア開発が効率よく進められるということです。

現在のアプリケーション開発に求められるのは開発スピードと品質です。高機能・大規模・複雑なアプリケーションを高品質かつ短期間で開発するためには、フレームワークは不可欠といってよいでしょう。

フレームワークというのは、特定の分野に精通した開発者が作り込んだものなので、それに沿って実装を進めていけば、アプリケーション開発者のスキルレベルに差があっても、できあがったアプリケーションに一定レベルの品質が期待できます。

もうひとつC++でフレームワークを使うことのメリットをあげるとすれば、セキュリティ対策です。

C++(Cを含む)はバグを内包しやすい言語だといわれています。これが意味することはソフトウエアの脆弱性です。C++でアプリケーション開発を行う場合、スクラッチから作り上げるよりもフレームワークを有効に活用するほうが、信頼性の高いアプリケーションができるといえるでしょう。

C++のフレームワークを使うデメリット

フレームワークを使うデメリットは、C++用のフレームワークに限ったことでなく、フレームワーク全般にいえることです。

まず、ある言語(例えばC++)を習得するのと、あるフレームワーク(例えばC++用のGUIフレームワーク)を習得するのは別物です。英語を習得するのと、ある分野の文章を英語で書くのが別物であるようなものです。

また、フレームワークを習得するにはそれなりの勉強が必要になります。メジャーなフレームワークはネット上の情報も豊富で、本も出版されているので独学も十分に可能ですが、マイナーなフレームワークの場合は入門者には不向きといえるでしょう。

フレームワークもOSやDBなどと同じように誰か(個人やベンダー)が開発して提供しているものなので、それ自身のアップデートが行われます。つまり、あるフレームワークを採用してアプリケーション開発を行うと、そのフレームワークのバージョンにロックインされるという問題があります。

また、一旦あるフレームワークを採用すると、他のフレームワークに乗り換えるのがそれほど簡単なことではないというのは想像に難くないでしょう。フレームワークを利用する際は、十分に比較検討することがとても重要です。

最後に、気をつけなければならない落とし穴について一言。フレームワークというのは、乱暴な言い方をすれば、専門家が作成したアプリケーションの半完成品です。つまり、中身を知らなくてもアプリケーションができてしまうということです。

これでは、問題が起きたとき、機能を追加したり変更したりという場合にはお手上げになってしまいます。フレームワークは中身を理解しなくても使うことが可能です。しかし、ある程度でも理解しておくことはとても大事なことなのです。

C++のフレームワークの種類

フレームワークといえば、WEBアプリケーションフレームワークが話題になることが多いようです。C++にもWEBアプリケーションフレームワークはありますが、C++では、テスト用のフレームワークが多数存在する他、GUI構築用のフレームワークもあります。

crow

公式サイトによれば、crowは、PythonのFlaskに触発された、高速で簡単に利用できるWEBアプリケーションマイクロフレームワークだそうです。

oat++

C++のWEBアプリケーションフレームワークです。公式サイトによれば、依存性ゼロ(つまり他のライブラリは不要)、パフォーマンスに重点をおいた(つまり高速)WEBアプリケーションフレームワークとのこと。

TreeFrog

日本製のC++によるフルスタックの高速WEBアプリケーションフレームワークです。

C++とQtで作られているので、スクリプト言語のフレームワークより高速動作すること、Ruby on Railsと同じく、MVCアーキテクチャやCoC(Convention over Configuration)ポリシーを採用していることが特徴です。

Qt

「キュート」と読みます。 GUI開発フレームワークとして知られています。クロスプラットフォームアプリケーションフレームワークなので、単独のソースコードでUNIX、Windows、macOS、組み込みシステムなど複数のプラットフォームで動作するアプリケーション開発が可能です。

ユニットテスト フレームワーク

Wikipediaには言語別ユニットテスト フレームワークが載っていますが、テストフレームワークの数が圧倒的に多いのがC/C++の両言語です。C++だけで40以上のユニットテスト フレームワークが並んでいます。Boost.Test、googletest、CppUTest、CppUnitあたりがよく使われているようです。

C++のフレームワークのトレンド

C++フレームワークのトレンドとしていえることは、WEBアプリケーションフレームワークのデファクトになっているものが見当たらないということです。C++そのものがWEBアプリケーション開発用言語のデファクトになっていないので、当然といえば当然です。

それに対して、ユニットテストフレームワークの数は、Cと並んで他の言語を圧倒しています。これは、取りも直さず、C/C++が、WEBアプリケーション以外の様々なアプリケーション開発に用いられていることの証左といえるでしょう。

C++のフレームワークの選び方

そもそも、WEBアプリケーション開発用の言語としてC++が有力候補にあがることは少ないでしょう。何らかの理由があって、C++でWEBアプリケーション構築が必要になった場合は、前述のフレームワークが候補となります。

クロスプラットフォーム開発をするならQtが、そしてC++によるアプリケーション開発のテスト用としては、数多く存在するテストフレームワークからニーズに合わせて選択することになるでしょう。

まとめ

プログラミング言語はそれぞれ得意の分野があり、メジャーな言語にはその得意分野のフレームワークが多く存在している、というのが一般的です。

CやC++は、WEBアプリケーションの分野では主流の言語にはならなかったものの、様々な分野で広く用いられています。このため、アプリケーションの分野にかかわらずに用いられるフレームワーク(ユニットテストなど)が多く存在するのではないでしょうか。


登録フォームボタン
登録フォームボタン

SHAREこの記事をシェアする

admin