選択したのはPostgreSQL。MySQLのほうが流行っていて日本語の情報も多そうなんですが、商用利用は有料ということなので、それならOpenBaseで十分なのでPostgreSQLにしました。
が、EOF(WebObjects)以来O-Rマッパなしにデータベースを使ってこなかったので、O-Rマッパが必要です。が、PostgreSQL公式にはアクセスライブラリとしてはクライアントアプリケーション開発用のlibpqというC言語ライブラリがあるだけ。
他にはECPGというC言語への埋め込みのアクセスライブラリがありますが、これはプログラミングが制限されてしまうのでちょっと使いにくい。
どうもC言語でPostgreSQLのアプリケーションを開発する人ってあんまりいないみたいですね。折角オープンソースなら日本語の開発者向け情報が豊富だろうと思ったんだけど、思ったように上手くは行きません。
さて、しかたないのでObjective-Cから直接アクセス可能なライブラリを自作することにしました。
PgSQL - a PostgreSQL wrapper library for Mac OS X Cocoa - Objective-C
実はPostgreSQLへアクセスするObjective-Cのフレームワークは既存のものがあったのですが、かなり前に開発がとまっているのと、中を見るとサーバーとの通信にテキストモードを使っていただったので、利用は止めました。現在も開発が続けられていて利用者が大勢いればいいのですが、そうでなければ問題があったときに解決するための情報が見つけられないし、自力で解析するにしても他人が作った巨大なライブラリを調べるのは至難の業。
ということでこの部分は自力開発のほうがよいと判断しました。小さな必要機能だけであれば見通せるので問題があってもすぐに修正できるでしょう。本当はEOFみたいに修正したオブジェクトの更新などコンテキスト管理まで面倒見れたらいいのですが、なかなか難しいみたいなので保留です。
ちょちょっと3日くらいでできるかと思って始めたんですが、なんやかんやで2週間以上かかってしまいました。特に時刻関連の値の形式がわからず色々な値を入れて結果を見るということで時間がかかってしまいました。バイナリ形式の場合には環境によってかなり違いがあるみたいで、たまたま今回使っている環境ではこの形式というだけのようです。テキストモードでやったほうが文字列で日時がかえって来てフォーマットも指定できるので楽で可搬性が高いということのようですね。
PostgreSQL 9.0.4
Mac OS X 10.6.8
Xcode 4.2
とりあえずLGPLで。時間があれば使い方なども買いていこうと思います。