2026/07/01(水)MantisBTのステータスをカスタマイズする

更新日:
投稿日:

MantisBT標準のステータスはどうにも使いづらいので、独自のステータスを追加して置き換える方法。

確認環境

  • MantisBT 2.27.1

やりたいこと

MantisBT標準のステータスを捨てて、一人用のチケット管理システムとして使えるようにする。要するにTODO管理の様なものにする。

前提知識

MantisBTには、チケットの状態を表す項目がいくつか存在するので、本題に入る前に軽く説明する。

まず基本となるのが、チケットそのものの状態だ。例えば「新規」「フィードバック」「担当者決定」「完了」などがあり、チケットが現在どの段階にあるのかを示している。本記事では、これを便宜上「親状態」と呼ぶ。

次にその状態をさらに細かく分類する項目がある。たとえば「新規」の中に「新規」「内容確認済」といった詳細状態があり、「完了」の中に「解決済」「完了」といった詳細状態がある感じだ。本記事では、これを「子状態」と呼ぶ。

MantisBT上では親状態と子状態は共にステータスとして扱われている。

最後にチケットが完了した理由を表す項目がある。「二重登録」「実装済」「修正不可」などがこれにあたる。これはチケットがどのように処理されたのかを示すものだ。これはMantisBT上で「解決状況」として扱われている。

これからやること

まず親状態を減らす。

親状態は標準はNEW_, FEEDBACK, ACKNOWLEDGED, CONFIRMED, ASSIGNED, RESOLVED, CLOSEDと7種類あるが、これをOPENCLOSEDの二つに絞る。親の状態としてチケットが開いているか閉じているか以上の情報は必要ないと思うからだ。

次に子の状態を再定義する。

子状態は標準でnew, feedback, acknowledged, confirmed, assigned, resolved, closedと七種類あるが、これをdraft, not started, in progress, pending, testing, completedの六つに変える。意味合いとしては下書き、未着手、仕掛中、保留、試験中、完了だ。

最後に解決状態も同様にopen, fixed, reopened, unable to duplicate , not fixable, duplicate, not a bug, suspended, wont fixと九つあるのを、in completed, duplicate , wont fix, completedの四つに絞る。

このように状態を絞ることでTODO管理ツールとして機能させることが可能になり、更に状態管理も単純になってやりやすくなる。

やり方

  1. config/custom_constants_inc.phpを作成し、親状態を定義する

    <?php
    
    # 状態のジャンル
    # <キー名>:<値>として設定する。値はDBに登録される値として利用される。
    define('OPEN', 10);
    define('CLOSED', 20);
    
  2. config/config_inc.phpを開き状態の定義を追加する

    # 子状態の定義
    # <優先度>:<キー名>として並べる。値はDBに登録される値として利用される。
    $g_status_enum_string = '10:draft,20:not started,30:in progress,40:pending,50:testing,100:completed';
    
    # 定義したキー名に対し課題一覧で表示される色を決める
    $g_status_colors['draft']       = '#fcbdbd';
    $g_status_colors['not_started'] = '#e3b7eb';
    $g_status_colors['in_progress'] = '#ffcd85';
    $g_status_colors['pending']     = '#c2dfff';
    $g_status_colors['testing']     = '#fff494';
    $g_status_colors['completed']   = '#d2f5b0';
    
    # チケットの解決状況の定義
    # <優先度>:<キー名>として並べる。値はDBに登録される値として利用される。
    $g_resolution_enum_string = '10:in completed,20:duplicate,30:wont fix,90:completed';
    
  3. config/custom_strings_inc.phpを作成し、ここまでで作った状態を和訳する。

    <?php
    
    # ステータス表示名
    # 完了はフィルタで以上が付くので一番後ろに置いておくとよいと思う
    $s_status_enum_string = '10:起案,20:未着手,30:仕掛中,40:保留,50:試験中,100:完了';
    
    # ステータス変更画面のタイトル・ボタン・通知タイトル
    $s_draft_bug_title = 'ステータスを起案に変更';
    $s_draft_bug_button = '起案にする';
    $s_email_notification_title_for_status_bug_draft = '課題が起案されました。';
    
    $s_not_started_bug_title = 'ステータスを未着手に変更';
    $s_not_started_bug_button = '未着手にする';
    $s_email_notification_title_for_status_bug_not_started = '課題が未着手になりました。';
    
    $s_in_progress_bug_title = 'ステータスを仕掛中に変更';
    $s_in_progress_bug_button = '仕掛中にする';
    $s_email_notification_title_for_status_bug_in_progress = '課題が仕掛中になりました。';
    
    $s_pending_bug_title = 'ステータスを保留に変更';
    $s_pending_bug_button = '保留にする';
    $s_email_notification_title_for_status_bug_pending = '課題が保留になりました。';
    
    $s_testing_bug_title = 'ステータスを試験中に変更';
    $s_testing_bug_button = '試験中にする';
    $s_email_notification_title_for_status_bug_testing = '課題が試験中になりました。';
    
    $s_completed_bug_title = 'ステータスを完了に変更';
    $s_completed_bug_button = '完了にする';
    $s_email_notification_title_for_status_bug_completed = '課題が完了しました。';
    
    # 解決状況表示名
    $s_resolution_enum_string = '10:未解決,20:重複,30:対応不要,90:対応完了';
    
  4. 既にMantisBTを利用している場合、既存のチケットの表示がバグるため、親ステータスと解決状況が整合するようにDBを適当に整える。子ステータスの変更方法は解っていないが、resolutionstatusの組み合わせで出しているならstatusの修正でいけるかもしれない。

    ' 親ステータスの置換
    UPDATE mantisbt.mantis_bug_table SET resolution = 20
    WHERE resolution != 10;
    
    ' 解決状況の置換
    UPDATE mantisbt.mantis_bug_table SET status = 100
    WHERE status = 20;
    
  5. あとは管理画面に入りワークフローを組めば終わりである。個人で使うものなので制約はだいぶ緩めにしている。

あとがき

これで管理がだいぶ楽になりそうだ。MantisBTはバグ管理ツールなのでTODO管理をしようとすると標準ではしんどいが、カスタマイズを重ねることで大分マシになる。