脱BackLogsスクラム開発(Ubuntu18.04 + sameersbn/Redmine3.4.6 + Scrum)

# 背景・目的

Redmineでスクラム開発というと`BackLogs`プラグインが定番だが、Redmine3に正式には対応しておらず、何かと問題が発生する。
また、RedmineUPの`Agile`プラグインはLite版だと最低限のことしかできない。
Redmine公式のPluginsを探すと`Scrum`というプラグインが3.4.xに対応しており評価も高いが、日本語の情報が少ないため設定のメモを残す。

# Ubuntu

* イメージ

    [Ubuntu Server](https://www.ubuntu.com/download/server)

* 書き込み

    例えば、[Rufus](https://rufus.akeo.ie/)等。

# Docker

## Dockerのインストール[^1]

Ubuntu18.04のaptでインストール可能なDockerはver.1.5と古いため、以下の手順でdocker-ceをインストールする。

```bash
$ sudo apt-get update
$ sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce
```

## sudoなしでdockerの実行[^2]

```bash
$ sudo usermod -aG docker $USER
```

# Redmine

## sameersbn/redmine

* DockerHub: [https://hub.docker.com/r/sameersbn/redmine/](https://hub.docker.com/r/sameersbn/redmine/)
* GitHub: [https://github.com/sameersbn/docker-redmine](https://github.com/sameersbn/docker-redmine)

### docker-compose.yml

公式の`docker-compose-mysql.yml`の`volumes`周りを多少変更。
プラグインとテーマは個別に入れ替えることが多いので別ボリューム。

```yml:docker-compose.yml
version: '2'

services:
  mysql:
    image: sameersbn/mysql:5.7.22-1
    environment:
      - DB_USER=redmine
      - DB_PASS=password
      - DB_NAME=redmine_production
    volumes:
      - ./mysql:/var/lib/mysql

  redmine:
    image: sameersbn/redmine:3.4.6
    depends_on:
      - mysql
    environment:
      - TZ=Asia/Tokyo

      - DB_ADAPTER=mysql2
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_USER=redmine
      - DB_PASS=password
      - DB_NAME=redmine_production

      - REDMINE_PORT=10083
      - REDMINE_HTTPS=false
      - REDMINE_RELATIVE_URL_ROOT=
      - REDMINE_SECRET_TOKEN=

      - REDMINE_SUDO_MODE_ENABLED=false
      - REDMINE_SUDO_MODE_TIMEOUT=15

      - REDMINE_CONCURRENT_UPLOADS=2

      - REDMINE_BACKUP_SCHEDULE=
      - REDMINE_BACKUP_EXPIRY=
      - REDMINE_BACKUP_TIME=

      - SMTP_ENABLED=false
      - SMTP_METHOD=smtp
      - SMTP_DOMAIN=www.example.com
      - SMTP_HOST=smtp.gmail.com
      - SMTP_PORT=587
      - SMTP_USER=mailer@example.com
      - SMTP_PASS=password
      - SMTP_STARTTLS=true
      - SMTP_AUTHENTICATION=:login

      - IMAP_ENABLED=false
      - IMAP_HOST=imap.gmail.com
      - IMAP_PORT=993
      - IMAP_USER=mailer@example.com
      - IMAP_PASS=password
      - IMAP_SSL=true
      - IMAP_INTERVAL=30

    ports:
      - "10083:80"
    volumes:
      - ./redmine:/home/redmine/data
      - ./redmine/plugins:/home/redmine/redmine/plugins
      - ./redmine/public/themes:/home/redmine/redmine/public/themes
```

Proxy環境下の時は`redmine`の`environment`に以下を追記する。

```yml
      - HTTP_PROXY=http://proxy.example.com
      - HTTPS_PROXY=http://proxy.example.com
      - NO_PROXY=localhost,127.0.0.1
      # ホストに環境変数が設定してある場合以下でもよい
      #- HTTP_PROXY=${HTTP_PROXY}
      #- HTTPS_PROXY=${HTTPS_PROXY}
      #- NO_PROXY=${NO_PROXY}
```

### コンテナ作成・起動

適当な場所にインストールディレクトリを作成。
今回は`/srv/docker/redmine/`とする。
上記の`docker-compose.yml`を`/srv/docker/redmine/`に置く。

```bash
$ cd /srv/docker/redmine
$ docker-compose up -d
```

### Redmine初期設定

1. `http://[DockerホストのIP]:10083`でRedmineに接続
2. ログインID:`admin`、パスワード:`admin`でログイン
3. 適当に初期設定

# Scrumプラグイン

* [概要](https://www.redmine.org/plugins/scrum-plugin)
* [ダウンロード](https://www.redmine.org/projects/redmine/wiki/Download)

## インストール

`sameersbn/redmine`なら展開したディレクトリをpluginsディレクトリに置いてDockerを再起動するだけでいいはず。

上記の`docker-compose.yml`通りにホストのディレクトリをマウントしているならば以下。

```bash
$ mv /path/to/Scrum /srv/docker/redmine/redmine/plugins/
```

直接転送するなら以下でもよい。

```bash
$ docker cp -r /path/to/Scrum redmine_redmine_1:/home/redmine/redmine/plugins/
```

pluginsディレクトリに置いたらDockerを再起動。

```bash
$ docker-compose restart
```

## Redmine設定

必要となる権限、ステータス、カスタムフィールド、トラッカー等を設定する。

管理者権限ユーザーでログインし、管理画面から以下を設定する。

1. ロールと権限

    権限レポートから`Scrum`の項目を設定する。
    ![2018-09-30_220817.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/91b1af2a-163d-78db-b164-7918f3830bb1.jpeg)

2. チケットのステータス

    バックログ用のステータスを作成する。
    ※不要なステータスも削除しているが、`Scrum`側の設定で表示しないことも可能
    ![2018-09-30_221129.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/839cf5e5-e7b8-aa4e-818f-501157313aaa.jpeg)

3. カスタムフィールド

    ・Blocked: かんばんの付箋の移動を制御する真偽値

    ![2018-09-30_221338.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/3f118158-0522-2690-2a44-ef3a5ce39e3b.jpeg)

    ・StoryPoints: ストーリーポイントのリスト
    　　　　　　※慣例に倣ってフィボナッチ数列
    ![2018-09-30_221538.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/2a216182-57f5-bc1a-9002-fe4f809bca97.jpeg)

4. トラッカー

    `BackLogs`でよく設定されている`ストーリー`トラッカーと同じもの。
    ![2018-09-30_222157.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/dbb9507e-571e-3c0a-c164-e7cbedf5b07b.jpeg)
    タスクに関しては、`BackLogs`と同じく`タスク`トラッカーを別途作成しても、デフォルトの`バグ`や`機能`を使用してもよい。

## Scrum設定

`Scrum`プラグインの設定を行う。
管理画面 → プラグイン → Scrum Redmine plugin

設定例
![2018-09-30_222450.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/f2c6c9fd-7b3b-f537-bff6-6289d0b035a3.jpeg)
![2018-09-30_222542.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/8b3cd025-38df-6bac-1193-5a4fb06f68d2.jpeg)

# プロジェクト設定

プロジェクトの設定から`Scrum`モジュールをONにして、`Product backlogs`と`Sprints`を作成する。

・Product backlogs
![2018-09-30_231157.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/fbee9877-9b16-fa87-98e2-2592c836238c.jpeg)

・Sprints
![2018-09-30_231403.jpg](https://qiita-image-store.s3.amazonaws.com/0/177971/25190368-86f6-3637-229c-c51eb12cca91.jpeg)

これで正常に動くはず。

後は、プロジェクトの`Sprint`、`Backlog`でストーリーやタスクを追加する。
タスクはストーリーの子チケットとして作成される。

[^1]: [Ubuntuにdockerをインストールする](https://qiita.com/tkyonezu/items/0f6da57eb2d823d2611d)

[^2]: [Dockerでユーザーをdockerグループに追加することの危険性を理解しよう](https://qiita.com/matyapiro31/items/3e6398ce737e2cdb5a22)