mroonga - MySQLで高速に全文検索するためのオープンソースのストレージエンジン

6. 開発者向け情報

6.3. 開発手法について

mroonga開発プロジェクトではBTSの1つであるRedmineを用いたチケット駆動開発を実施しています。

Redmineは以下のサイトで運用されています。

http://redmine.groonga.org/projects/show/mroonga

開発の作業はチケット単位で行っています。

開発者の方は上記サイトへのアカウント登録をお願いします。

6.4. ロードマップについて

ロードマップは以下のページで確認できます。基本的に開発はロードマップに沿って行います。

http://redmine.groonga.org/projects/mroonga/roadmap

ロードマップはオフラインあるいはオンラインでの開発会議で検討を行った上で決定されます。

ロードマップは各バージョンごとに追加する機能の一覧として構成されています。

6.5. ソースコード管理について

githubを使用したgitによるソースコード管理を行っています。

http://github.com/mroonga/mroonga

上記レポジトリに対してread/writeでcloneを作成し、commitおよびpushして下さい。

アカウントを作成していない開発者の方はgithub.comへの登録をお願いします。

6.6. 開発の流れについて

開発は以下の流れで行いたいと考えています。

  1. チケットの新規作成と内容の記述
  2. 開発会議での検討(ロードマップへの反映)
  3. チケットの割り当て(担当者作業開始)
  4. 機能実装あるいはバグの修正作業、必要に応じてレポジトリへのpush
  5. テストコードの追加と実行、レポジトリへのpush
  6. 実装/テスト内容に対するレビュー(必要に応じて4へ戻る)
  7. ドキュメントの追加/変更、 レポジトリへのpush
  8. チケットの完了

機能追加や仕様変更などについても積極的にアイデアを募集します。まずはチケットを新規作成して内容を記述して下さい。

テストコードの追加と実行については後述しますのでそちらを参照して下さい。

基本的にチケットを担当されている方が設計、実装、テスト、ドキュメントまで一通りお願いしたいと考えています。

他の開発者にレビューを依頼し(特に機能追加の場合)、無事パスしたら最後にドキュメントを追加/変更してチケット完了となります。

ドキュメントの追加/変更方法についても詳しくは後述します。

6.7. リリースについて

リリースはロードマップ上のチケットが全て完了となった段階で行います。

リリースにあたっては以下の作業を行っています。

  • ソースパッケージ作成
  • バイナリパッケージ作成
  • ドキュメント(http://mroonga.github.com)のアップデート
  • リリースの告知

リリース手順 へ移動予定。

6.8. 開発環境

現在、以下のような開発環境を想定しています。

  • Linux x86_64
  • glibc 2.5
  • MySQL 5.5
  • groonga 1.2.8
  • Cutter 1.1 (C/C++単体テスト用)
  • Sphinx 1.1 (ドキュメント用)

glibc 2.5はRed Hat Enterprise Linux 5に相当します。

6.9. ソースディレクトリ解説

今のところソースファイルの数はごくわずかです。なるべくシンプルな状態を維持したいと考えています。

ha_mroonga.h
mroongaのヘッダファイル
ha_mroonga.cc
mroongaの実装コード
mrnsys.h
ユーティリティ関数のヘッダファイル
mrnsys.c
ユーティリティ関数の実装コード
test/sql/
SQLによるテストコード用ディレクトリ
test/sql/t/
SQLによるテストコード用ディレクトリSQLテストスクリプト(現在実行可能なSQL文の定義も兼ねる)
test/sql/r/
SQLテスト想定実行結果(SQL動作仕様定義も兼ねる)
test/unit/
C/C++関数単体でのテストコード用ディレクトリ
doc/en/
Sphinx形式の英語ドキュメント一式
doc/ja/
Sphinx形式の日本語ドキュメント一式

mroongaはまだ開発の立ち上げ段階であるため、SQL実行に関する仕様のドキュメント化は当面行いません。

その代わりとしてSQLテストスクリプトとその想定実行結果を機能一覧/仕様定義として見なしています。

6.10. テストコードの追加と実行について

mroongaではプログラムの品質管理のため、2種類の回帰テストを用いています。

SQL tests
SQL実行により動作確認を行えるような機能追加/バグ修正に関しては必ずSQLテストを追加して下さい。高速化機能などは一見するとSQLによる動作確認ができないように見える場合もありますが、ステータス変数やinformation_schemaプラグインなどを使用することで上手くテストできるものもあります。
C/C++ unit tests
Cutterを使用した関数レベルでの回帰テストです。ユーティリティ関数などSQL実行結果による動作の差異を確認できないような実装を追加した場合にはこちらにテストを追加して下さい。

ソースコードレポジトリへのpushを行う前に必ず回帰テストを実行し、デグレードが発生していないことを確認して下さい。

上記の回帰テストは"make check"で双方とも呼び出されます。

SQLテストはMySQLの回帰テストである"mysql-test"に対する"sub test suite"として実装しています。テストケースの追加や想定結果ファイルの改変方法などの詳細情報は以下のMySQLのドキュメントを参照して下さい。

http://dev.mysql.com/doc/mysqltest/2.0/en/index.html

C/C++単体テストの書き方についてはcutterのドキュメントを参照して下さい。

http://cutter.sourceforge.net/index.html.ja

6.11. ドキュメントの追加と変更について

mroongaではドキュメント作成にSphinxを使用しています。

ドキュメントはReStructuredText形式でソースファイルを書き、HTML形式などにビルドしています。

ドキュメントのソースファイルは"doc/ja/source"ディレクトリにある拡張子が.rstのファイルです。

加筆修正を行ったら"make html"等でビルドして構文エラーが起きないことを確認して下さい。

ドキュメントの実際の公開場所は http://mroonga.github.com で、これはgithubのサイト機能を使用しているため http://github.com/mroonga/mroonga.github.com レポジトリに最新のHTML出力ファイルをpushすることで更新が行われる仕組みとなっていますが、mroonga.github.comレポジトリへのpushは現リリースバージョンとの整合性などを確認した上で別のタイミングでpushします。

従って、各チケットに対するドキュメントのpushはmroongaレポジトリに対するpushのみで構いません。

またsphinxの出力するディレクトリ名がgithubで使用できない問題を回避するため、"doc/ja/source"ディレクトリにてsphinx2github.shスクリプトを用意しています。mroonga.github.comにcommitする場合にはこのスクリプトを実行してsphinxの生成したファイルを修正して置きましょう。