Mantis Bug Tracker

Mantis Bug Tracker はフリーかつオープンソースのWebベースのバグ管理システムである。一般的にMantisBTはソフトウェアのバグを追跡するために使用されている。ただしMantisBTは、より一般的な課題管理システムやプロジェクト管理ツールとして機能するようにユーザーによって設定されることが多い。 Mantisの名前とプロジェクトのロゴは口語的に「バグ」と呼ばれる他の昆虫を追跡して捕食することで知られるカマキリ科の昆虫を指している。プロジェクトの名前は通常MantisBT、または単にMantisのいずれかに省略される。 2000年にKenzaburo ItoがMantis Bug Tracking projectの開発を開始した。2002年にはJeroen Latour、Victor Boctor、Julian Fitzellが管理者として加わりチームプロジェクトとなった。 バージョン1.0.0が2006年2月にリリースされた。 バージョン1.1.0が2007年12月にリリースされた。 2008年11月、長い議論の末、プロジェクトはリビジョン管理ツールをSubversionから分散型リビジョン管理ツールであるGitに切り替えた。 2010年2月、バージョン1.2.0がリリースされた。 2012年7月、GitHubのMantisBT organizationがプロジェクトのソースコードの公式リポジトリとなった。 イベント駆動型プラグインシステムはバージョン1.2.0のリリースで導入された。このプラグインシステムにより、公式に保守されているプラグインとサードパーティのプラグインの両方を介してMantisBTを拡張可能となった。2013年11月の時点で、GitHubのMantisBT-plugins organizationで利用可能なプラグインは50を超えている。 バージョン1.2.0より前は、Vincent Deboutによって作成されたサードパーティのプラグインシステムが様々な異なるプラグインとともにユーザーに提供されていた。このシステムは、MantisBTプロジェクトによって公式にサポートされておらず、MantisBT1.2.0以降との互換性は無い。 MantisBTはシステムの問題に変更が加えられた場合のメール通知をサポートしている。ユーザーは受信するメールのタイプを指定し、フィルターを設定して通知を受信する問題の最小の重要度を定義することができる。またユーザーは自分に影響を与える問題を明示的に指定することもできる。 RSSフィードは解決された問題を追跡したいユーザーが利用できる。さらにMantisBTはプラグインを介してTwitterと統合されており、問題が解決されたときに通知をツイートできるようになっている。 MantisBTのイベント駆動型プラグインシステムを介して、組み込みの通知サポートを拡張し追加の通知アクション(SMSメッセージの送信や外部プロジェクト管理システムでのステータスの更新など)を実行する高度なスクリプトを実行できる。 1.2.0より前のバージョンのMantisBTではCVSリビジョン管理システムとの限定的な統合が可能であった。 MantisBT 1.2.0にプラグイン機能が導入されたことにより、リビジョン管理の統合がAmethyst ReeseによってSourceIntegrationプラグインで再開発された。 SourceIntegrationプラグインの初期リリースでは、GitHub、GitWeb、SourceForge、およびWebSVNがサポートされていた。 時間の経過とともに2つの追加モジュールが追加され、2013年11月の時点で以下のリビジョン管理ツールとWebベースのプロバイダーでソース統合がサポートされている。 cgit：Cで記述されたGitリポジトリのWebインターフェイス GitHub：Gitリポジトリをホストするオープンソースのソフトウェアホスティングサービス Gitweb：Gitリポジトリ用のフリーかつオープンソースのWebインターフェイス HgWeb：Mercurialリポジトリ用のcgiWebフロントエンド SourceForge(Subversion統合のみ):様々なタイプのソフトウェアリポジトリをホストするオープンソースのソフトウェアホスティングサービス WebSVN:Subversionリポジトリ用のフリーかつオープンソースのWebインターフェイス RhodeCode（英語版）:Mercurial、Git、SubversionリポジトリへのオープンソースのWebインターフェース チェンジセット（英語版）をソースコードリポジトリにコミットすると、GitまたはSubversion内のコミット後フックを構成して、リポジトリに変更が加えられたことをMantisBTに自動的に通知できる。GitHubはソースコードリポジトリへの変更をMantisBTインストールにリモートで通知することもできる。MantisBTをWebベースのソースコードホスティングプロバイダーと統合するために使用される別の手法としてcronなどのジョブスケジューラを使用してリポジトリへの変更を数分ごとに手動でチェックし、変更をMantisBTにレポートする方法がある。 SourceIntegrationを使用すると、チェンジセットメッセージに「Fixes＃12345」などの正規表現を使用して構成可能な特別な文字列が含まれている場合にMantisBT内の問題を自動的に解決できる。これによりチェンジセットとMantisBTに登録された対応する問題との間にリレーションシップを自動的に作成することもできる。複数の問題IDを単一のチェンジセットメッセージで指定できるが、チェンジセットに単一の明確で論理的な目的がないことを示しているため一般的に推奨されない。 MantisBTは上記に加えて以下の機能もサポートしている。 全文検索 問題に加えられた変更の監査証跡（英語版） テキストフィールドとコメントのバージョン管理（英語版） ロードマップ 変更履歴（英語版） 問題間の関係のグラフ化 Sponsorship of issues DokuWiki、MediaWiki、TWiki、WackoWiki、WikkaWiki、XWikiのWikiドキュメントの統合 ニュース CodevTTによるプロジェクト管理とタイムトラッキング translatewiki.netによる数十言語のローカライズ MantisBTは主にPHPで記述されておりSQLを使用してデータベースとインターフェイスで接続する。 UIはjQueryクライアント側JavaScriptライブラリを使用してAjaxやJSONを利用した動的ページコンテンツなどのオプション機能も提供する。 開発ツールとビルドスクリプトは主にPythonで記述されており、いくつかのシェルスクリプトとPHPが含まれている。 MantisBTのコードベースはオブジェクト指向プログラミングの原則に対するPHPのサポートがまだ始まったばかりの時代にまでさかのぼる。。 バージョン1.2.0の時点でMantisBTコードベースの大部分はまだ手続き型プログラミングの原則を使用しているが、一部のセクションはPHP5の新しいオブジェクトモデルを使用するように変換されている。 データはADOdbデータベース抽象化ライブラリを使用してリレーショナルデータベース管理システムに保存される。MantisBTはMySQLをサポートしている。他のデータベース(PostgreSQL、Microsoft SQL、Oracle)のサポートには問題があることが知られている。開発チームは2.0リリースでこれを修正しようとしている。 MantisBTはデータベーススキーマを段階的に変更することにより、バージョン間のデータベースアップグレードパスを維持する。 MantisBTのインストール中に、データベーススキーマの変更はMantisBTの初期バージョンから最後まで再生され最新の状態となる。 MantisBTには、構成済みのWebサーバー、PHPプログラミング言語インタープリタ、およびMantisBTとADOdbでサポートされているリレーショナルデータベース管理システムが必要である。 MantisBTの安定版ブランチ(バージョン番号1.2.x以内)にはPHP5.1.0以降が必要。開発ブランチ(1.3.x)の場合PHPの最低バージョンは5.3.2。 特定の機能を有効にするため、またはパフォーマンス上の理由から、いくつかのPHPプラグインが必要。使用されているRDBMSの拡張機能（つまりmysqli）は必須である。 MantisBTはリリースごとに次のような多くの依存関係をバンドルしている。 リレーショナルデータベース管理システムのサポートを抽象化するためのADOdb 使い捨てメールアドレス（英語版）チェック機能 統計をプロットするためのeZコンポーネント NuSOAP for SOAPWebサービスのサポート 電子メール送信サポート用のPHPMailer（英語版） RSSフィードサポート用のRSS Builder PHPのmb_string拡張モジュールが存在しない場合の国際化サポート用PHP UTF-8 ラッパーライブラリ（英語版） issue間の関係のグラフを描画するにはGraphvizが必要である。MantisBTには統計をプロットするための商用JpGraphグラフィックライブラリへの代替依存関係もある。 ポータル FLOSS JIRA Bugzilla バグ管理システムの比較（英語版）