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

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

Cとは?

UNIXで動作するユーティリティーを開発するための言語として1972年に誕生したのがC言語です。かなり古いプログラミング言語ですが、オブジェクト指向言語化されたC++と共に未だ現役の言語として盛んに使われています。

UNIXを書き換えるのに使われたのを手始めに、Cは様々なOSの記述言語として使われています。OSを書ける、ということはハードウエアの制御プログラムも書けるということです。このため、Cは様々な機器の組み込みプログラムやデバイスドライバーの開発にも用いられます。

Cのソースコードは、コンパイラによって機械語の実行コードとなるので動作が非常に高速です。このため、動作速度が重要視されるゲームプログラムやシミュレーションプログラムでも盛んに用いられています。

他にもCは、フリーソフトウェアの開発を始めとして、オープンソースソフトウェアや様々なデスクトップアプリケーション、さらには企業の基幹系システムにも用いられています。

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

フレームワークとは、「枠組み」のこと。ソフトウェアにおけるフレームワークというのは、ある目的のアプリケーションの屋台骨のようなものです。屋台の構造に従って好みの部品(プログラム)を配置(実装)していけば家(アプリケーション)ができあがります。

Cにはどのようなフレームワークがあるでしょうか。Wikipediaで「ソフトウェアフレームワーク」を調べてみると、汎用フレームワークの一覧というのがあって、たくさんのフレームワークが紹介されていますが、Java、PHPなどのフレームワークは目立ちますがCのフレームワークというのは見当たりません。

さらに調べてみると、フレームワークの話題でよく見かけるWEBアプリケーションフレームワーク分野でCを見かけることはなく(C++はある)、他のアプリケーション用のフレームワークも見当たりません。Cのフレームワークとして見つかるのはテスティングフレームワークです。

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

言語やフレームワークの種類によらず、フレームワークを使うことのメリットは、効率よくかつ一定品質のアプリケーションをつくることができる、というものです。

テスティングフレームワークは、その名の通り、ソフトウェア開発の最終目的であるアプリケーションソフトウェアを開発するためのものではなく、アプリケーションソフトウェアを構成する個々のプログラム単体のテストを自動化するプログラムを作り上げるためのフレームワークです。

アプリケーションソフトウェアというのは、単独の実行イメージだけで動くものから、数多くのプログラムが連携して動作する大規模なものまで様々です。高機能なアプリケーションや業務用のアプリケーションはほぼ後者です。

数多くのプログラムから構成されるアプリケーションの場合、その品質評価の基本は、個々のソフトウェアの動作検証(ユニットテスト)です。

個々のプログラムは小規模で機能も限られているとはいえ、テストケースがいくつもあり、対象となるプログラムが多数あるとなると、単体テストだけでも相当な手間がかかります。

さらに、C(C++も)はコード内にバグを作り込みやすい言語だといわれています。最後まで見逃されたバグは、後日、ソフトウェアの脆弱性としてセキュリティホールになりかねません。こうしたバグを早期に発見するためにもユニットテストは重要です。

こうしたプログラムテストを自動化するソフトウェアをつくるために用意されたのがテスティングフレームワークです。Cの場合のフレームワークを使うメリットは、ユニットテストを効率化できるというところにありそうです。

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

フレームワークを使うメリットと同様に、フレームワークを使うデメリットも特定の言語や特定のフレームワークに限ったことではありません。Cの場合も同じです。

特定目的のアプリケーションの枠組みを用意しておくことによって、そのアプリケーション開発を効率化できる、というのがフレームワークのメリットなら、その裏返しがデメリットになります。

枠組みそのものの何たるかを理解していなくてもアプリケーション開発を進められるということは、枠組みそのものに関係するような不具合が生じた場合は手も足も出ない、ということになります。

また、一旦、特定のフレームワークを採用してしまうと、そのフレームワークがアップデートされるとアプリケーション側もそれに追随しなければならず、さらに、気に入らない点が出てきた、より良さそうなフレームワークが新たに出てきた、といった場合に乗り換える手間が大変です。

フレームワークはアプリケーションの枠組みですが、その枠組みには使い方があって、それを勉強しなければなりません。

メジャーなフレームワークであればネットの情報もふんだんにあり、さらには本が出ている場合もあり、独学で習得することも難しくありません。しかしながら、マイナーなフレームワークの場合は情報量が少なく、ソフトウェア開発入門者には不向きといえます。

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

先に述べたように、Cにはテスティングフレームワークがたくさんあります。代表的なものをいくつか見てみましょう。

CUnit

最初のテスティングフレームワークはSmalltalk用のSUnitだといわれています。その後、様々な言語用に移植され、xUnitと総称されるようになりました。SUnitのC言語版がCUnitです。

CppUTest

C/C++のユニットテストフレームワークで、これもxUnitの仲間です。公式サイトによれば、設計理念は、簡潔に設計され簡単に使える、新旧プラットフォームに移植可能、テスト駆動型開発を念頭に置いた、ということのようです。

メモリリーク検出機能があり、シェルスクリプトで書かれたツール群がついています。

Cutter

これも、C/C++のユニットテストフレームワークです。ユニットテストフレームワークとしての一般的機能に加えて、テスト記述が簡単、デバッグに使いやすい出力結果、テストの共有ライブラリ化などの機能があります。

Unity

同じ名前のゲーム用フレームワークのほうが有名かもしれません。こちらは、組み込みシステム(ターゲットでも動作する)を含むユニットテスティングフレームワークです。標準で自動テストディスカバリ機能がついています。

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

Cは半世紀近い歴史のある言語で、適用範囲もOS、システムプログラム、デバイスドライバー、ゲーム、デスクトップアプリケーション、業務アプリケーションなど広範囲に亘ります。逆に、この分野のアプリケーションならCに限る、というのが見当たらないのがCの特徴ともいえます。

このためか、Cには特定アプリケーション向けのフレームワークというのはないようです。逆に、どのようなアプリケーションでも必要になるテスティングフレームワークが充実しています。

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

Cのフレームワークを選ぶというと、自ずとテスティングフレームワークをどれにするか、という話になります。

どのようなプラットフォームで開発する(あるいは動作させる)のか、組み込みシステムか、マルチスレッドは必要かなどなど、必要となるテストの性質・種類に応じてフレームワークを比較し、適切に選択することが重要です。

まとめ

Cが得意、というフリーランサーならテスティングフレームワークの利用経験があるという方は少なくないと思いますが、使ったことのないテスティングフレームワークも学んでみてはいかがでしょう。新しい発見があるかもれませんし、スキルの幅は間違いなく広がることでしょう。


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

SHAREこの記事をシェアする

admin