はじめに
本記事ではPOCO(C++ Portable Componentsの略)というオープンソースのC++用クラスライブラリを紹介します。
POCOに関する概要とその導入方法については、別稿『POCO::Netライブラリによる組み込みWebサーバの実装』を参照してください。POCOはコンポーネントとして6つのライブラリに分かれていますので、今回からは、ライブラリ単位で順番に紹介したいと思います。まずは、POCO::Foundationライブラリをとりあげます。名前の通り基本機能を集めたライブラリで、実際のアプリケーション開発にそのままでも使えるクラスが揃っています。
対象読者
オブジェクト指向を理解し、C++のクラスライブラリを活用できる方を対象としています。
必要な環境
POCOは、多様なプラットフォームで動作可能で、Windows、Mac OS X、Linux、HP-UX、Tru64、Solaris、QNXでの動作を保証しています。コンパイラは、いわゆる標準C++のコードに対応したものが必要です。POCO内部では、STLを使用しています。
本記事では、Windows XP上で、Microsoft Visual C++ 2005 Express Edition(以下、VC 2005 Express)+Windows Platform SDKという環境で、動作検証を行いました。
パッケージとは
POCOのライブラリは、内部のクラスをパッケージと呼ばれる単位に分類しています。機能単位にグループ分けしたもので、JAVA言語にあるパッケージという概念と似たようなものです。ただし、JAVA言語のような物理的なパス名にはなっていません。あくまでも論理的にクラスをまとめたものです(一部、ライブラリをまたがっているパッケージもあります)。
POCO::Foundationは、ヘッダファイルだけでも270あり、POCOの中でいちばん大きなライブラリになっています。パッケージは、ライブラリ中に18個含まれています。次表にまとめてみました。
名称 | 概要 |
core | 最も基本的な機能を提供するクラス。例外処理、メモリ管理、文字列処理など。 |
Cache | キャッシュ機能の実装。 |
Crypt | MD5やSHA1アルゴリズム等による暗号処理の実装。 |
DataTime | 日付時刻処理。日付書式やタイマー機能の実装。 |
Events | イベント通知処理の実装。 |
Filesystem | ファイル、ディレクトリ処理の実装。 |
Hashing | ハッシュ表の実装など。 |
Logging | ログ書き込み処理の実装。 |
Notifications | 通知機能。Observerパターンの実装。 |
Processes | プロセス関連、パイプ、イベント処理の実装。 |
Regular Expressions | 正規表現によるマッチング処理の実装。 |
Shared Libraries | クラスを動的に読み込む処理の実装。 |
Streams | ストリーム関連の実装など。 |
Tasks | 実行状況通知、キャンセル機能をもつ作業クラスの実装。 |
Text | 文字列処理、コード変換の実装。 |
Threading | スレッド関連処理の実装。 |
URI | URI処理の実装。 |
UUID | UUID生成処理の実装。 |
パッケージそれぞれが、とても興味深い実装になっています。ソース自体は、比較的読みやすく、ヘッダーに比べるとコメントは少なめながら、クラスの実装方法を学ぶにはちょうどよい教材だと思います。
ひとつずつパッケージを紹介したいところですが、紙面に限りがあります。今回は、特に実用度の高いLoggingパッケージを中心に解説することにしましょう。
Loggingパッケージ
ログ処理は、ほとんどのアプリケーションで必要になる機能と言えます。たいていは一般的な仕様で間にあいますので、すでに何らかのライブラリを使っている方も多いでしょう。
JAVA言語なら、Log4JというJakartaプロジェクトで開発されているオープンソース のLoggingライブラリがおなじみです。一方、ネイティブのC++言語では、デファクトスタンダードとなるようなものはありません。Log4JをC++言語で実装したバージョンも公開されているものの、それほど普及していないようです。
POCOのLoggingパッケージは、Log4Jに負けず劣らず、使いでのある機能を持っています。ログファイルのローテーションやバックアップはもちろん、Windowsのイベントログへの出力もできます。設計の面でも、オブジェクト指向的によく考えられており、洗練されたものになっています。