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

更新日:
投稿日:

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

確認環境

  • MantisBT 2.27.1

やりたいこと

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

ステータスの再定義

まずステータスを再定義する。

ステータスは標準で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/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';
    
  2. 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:対応完了';
    
  3. 既にMantisBTを利用している場合、既存のチケットの表示がバグるため、ステータスと解決状況が整合するようにDBを適当に整える。

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

あとがき

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

2026/01/09(金)MantisBTで課題一覧にある列の表示順序や表示項目を変える

投稿日:

確認環境

MantisBT 2.27.1

課題

要約が先頭になく見づらいことや、不要な項目があることがあり、これをどうにかしたかった。

やり方

MantisBTにログインし、画面右上のアカウントメニューからアカウント設定を開く。

表示項目管理というのがあるので、課題一覧の表示項目を適当にいじる。

例えばこうする。

すると、列の順序や表示列を変えることができる。

2023/11/16(木)WSL2のUbuntuにRedmineを建てる

WSLのUbuntuにRedmineを建ててnginxを通して適当なバーチャルホストでアクセスするまで

確認環境

Env Ver
Ubuntu 20.04.6
Ruby 2.7.0
Redmine 5.1.0
nginx 1.18.0

インストール方法

基本は公式の通り

DB作成

CREATE DATABASE redmine CHARACTER SET utf8mb4;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

インストールコマンド流す

wget https://www.redmine.org/releases/redmine-5.1.0.zip
unzip redmine-5.1.0.zip
cd redmine-5.1.0
cp config/database.yml.example config/database.yml

# DB接続は公式ドキュメントに沿って適当に設定する
# nano config/database.yml

sudo apt install -y ruby-full make gcc libmysqlclient-dev
sudo gem install bundler
bundle config set --local without 'development test'
sudo bundle install
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake redmine:load_default_data
bundle exec rails server -e production -p 9999 -d

nginxから繋ぐ

普通にリバプロするだけ

server {
  listen       80;
  client_max_body_size 100m;
  server_name  redmine.test;
  access_log   /var/log/nginx/redmine.access.log;
  error_log    /var/log/nginx/redmine.error.log;


  location / {
    proxy_set_header Host $http_host;
    proxy_pass  http://127.0.0.1:9999;
  }

}

トラブルシューティング

An error occurred while installing redcarpet (3.6.0), and Bundler cannot continue.

makeとgccがない

sudo apt install -y make gcc

An error occurred while installing mysql2 (0.5.5), and Bundler cannot continue.

MySQLの開発ライブラリがない

sudo apt install -y libmysqlclient-dev

"/usr/bin/ruby2.7: warning: shebang line ending with \r may cause problems" redmine

無視してよい

デフォルトポートを3000から変えたい

以下のように-pで指定

bundle exec rails server -e production -p 9999 -d

デーモンにしたい

以下のように-dで指定。殺すときはpkill rubyで行ける

bundle exec rails server -e production -p 9999 -d

Windows側のスタートアップで起動したい

不明。少なくとも以下の形式だと上手く動かない。

wsl -d Ubuntu -u root -- <command>

systemdを有効化すると色々不具合があるのでinit.dで起動できれば解決できる気はするのだが、上手くいかなかった。

2023/03/03(金)WSL2のUbuntu 20.04にGiteaを生やす

ローカルで個人メモを管理したいがRedmineでは物足りない。そうだGiteaを使おう。
この記事ではDockerを使用せず、バイナリからセットアップします。
Gitのリポジトリをホスティングできる部分までは確認してます。

外部に公開することは一切考慮していません。ローカルマシンでの個人利用を想定しています。

確認環境

Env Ver
Ubuntu 20.04.4 LTS
WSL2 1.0.3.0
Gitea 1.18.5
MySQL Ver 15.1 Distrib 10.3.37-MariaDB
Git 2.25.1

前提条件

  • WSL2上にUbuntu 20.04.4 LTSをインストール済
  • GitとMySQLは構築済

手順

公式の手順ではユーザーがgitですが、ここではgiteaに変えてます
他にも多少変えてます

Giteaディレクトリの作成とバイナリ配置

# 動作用ユーザーの追加
sudo adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/gitea \
   gitea

# 必要なフォルダを切る
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R gitea:gitea /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir /etc/gitea
sudo chown root:gitea /etc/gitea
sudo chmod 770 /etc/gitea

# バイナリのインストール
wget -O gitea https://dl.gitea.com/gitea/1.18.5/gitea-1.18.5-linux-amd64
chmod +x gitea
sudo cp gitea /usr/local/bin/gitea

# mysqlにログイン
mysql -u XXX -pYYY

DBのセットアップ

SET old_passwords=0;
CREATE USER 'gitea' IDENTIFIED BY 'gitea';
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea';
FLUSH PRIVILEGES;

quit

Giteaの起動とWebインストール

以下のコマンドを叩き表示されたURLを開き、Webインストーラーで適当に設定

gitea web -c /etc/gitea/app.ini

Webインストール後の後処理とデーモンへの登録

# 自分以外書き換え不能に変更
sudo chmod 750 /etc/gitea
sudo chmod 640 /etc/gitea/app.ini

# デーモンの定義を作成
cat <<'EOF' | sudo tee /etc/init.d/gitea
#!/bin/sh
## BEGIN INIT INFO
# Provides:          gitea
# Required-Start:    $syslog $network
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: A self-hosted Git service written in Go.
# Description:       A self-hosted Git service written in Go.
## END INIT INFO

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="Gitea - Git with a cup of tea"
NAME=gitea
SERVICEVERBOSE=yes
PIDFILE=/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
WORKINGDIR=/var/lib/$NAME
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="web -c /etc/$NAME/app.ini"
USER=gitea
STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/1/KILL/5}"

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

do_start()
{
    GITEA_ENVS="USER=$USER GITEA_WORK_DIR=$WORKINGDIR HOME=/home/$USER"
    GITEA_EXEC="$DAEMON -- $DAEMON_ARGS"
    sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
        --background --chdir $WORKINGDIR --chuid $USER \\
        --exec /bin/bash -- -c '/usr/bin/env $GITEA_ENVS $GITEA_EXEC'"
}

do_stop()
{
    start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PIDFILE --name $NAME --oknodo
    rm -f $PIDFILE
}

do_status()
{
    if [ -f $PIDFILE ]; then
        if kill -0 $(cat "$PIDFILE"); then
            echo "$NAME is running, PID is $(cat $PIDFILE)"
        else
            echo "$NAME process is dead, but pidfile exists"
        fi
    else
        echo "$NAME is not running"
    fi
}

case "$1" in
    start)
        echo "Starting $DESC" "$NAME"
        do_start
        ;;
    stop)
        echo "Stopping $DESC" "$NAME"
        do_stop
        ;;
    status)
        do_status
        ;;
    restart)
        echo "Restarting $DESC" "$NAME"
        do_stop
        do_start
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
        exit 2
        ;;
esac

exit 0
EOF

# デーモン登録
sudo chmod 755 /etc/init.d/gitea
sudo update-rc.d gitea defaults

# デーモン起動
sudo service gitea start

自動起動する場合はWindowsのスタートアップ時に以下が走るようにしておけばOK

wsl -d Ubuntu -u root -- service gitea start

トラブルシュート

この記事を書くにあたってハマったことのまとめ

gitea 起動時にpermission deniedとエラーが出る

/var/lib/gitea/custom/options/locale: permission denied

以下のコマンドを流せばいける。公式のコマンドではコケる

gitea web -c /etc/gitea/app.ini

サービス起動時にFailed to get home directoryとエラーが出る

2023/03/03 13:17:38 ...s/setting/setting.go:656:loadFromConf() [F] Failed to get home directory: cannot get home directory

/etc/init.d/giteado_start()の部分を以下の内容にすればいける

do_start()
{
    GITEA_ENVS="USER=$USER GITEA_WORK_DIR=$WORKINGDIR HOME=/home/$USER"
    GITEA_EXEC="$DAEMON -- $DAEMON_ARGS"
    sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
        --background --chdir $WORKINGDIR --chuid $USER \\
        --exec /bin/bash -- -c '/usr/bin/env $GITEA_ENVS $GITEA_EXEC'"
}

git pushでエラーが出る

RPC failed; HTTP 413 curl 22 The requested URL returned error: 413

nginxからgiteaにリバースプロキシしてる場合はconfのserverセクションに以下を追加

client_max_body_size 0;

参考