GitLabのIssues機能を使ってみた

## はじめに

個人的にちょっとアプリ開発してみると心に決め、プロジェクトの管理は GitLab を使うことにしました。
ちょっとしたアプリとは言え軽くタスク管理したいなーと思いつつ、ツールやサービスをあれこれ横断したくなかったので GitLab の Issue を使ってみました。
で、使ってみて分かったことを自分のメモとして書き起こしてみました。
細かいことは [公式ヘルプ(英語)](https://docs.gitlab.com/ee/user/project/issues/) を参照。

今後もメンテナンスしていけたら良いな。

## 出来ること / 出来ないこと

無償プランでの話し。
最低限のことはできるけど、痒い所に手が届かない感じ。

**出来ること**

- プロジェクトを横断した課題やタスクのリスト表示 (`Group` 単位)
- `カンバン` による運用
- 優先度の設定
- 一覧のフィルタリング
- ラベルによるグルーピング
- 期日の管理
- マイルストーンの設定 (マイルストーンは開始～終了を設定可能)

**出来ないこと**

- リスト内の自由な並べ替え (項目指定による昇順/降順はできる)
- ガントチャート表示
- フィルタ設定の保存と共有（イメージは Redmine のクエリ機能）

Gitlabとしてのアピールポイントは以下のリンクを参照。
[DevOps ツールの俯瞰図](https://www.gitlab.jp/devops-tools/)

私の場合、ガントチャートがあると目標に向かって突き進む感が出てモチベーションが維持しやすいので欲しかったのですが、ないものは仕方ない、、、

## 事前準備

<dl>
  <dt>プロジェクトの作成</dt>
    <dd>
課題管理するプロジェクトがない場合は最初にプロジェクトを作成する。<br>
調べれば色々出てくると思うのでプロジェクト作成手順は割愛。<br>
必要に応じて <code>Group</code> も作ろう。
    </dd>
  <dt>メンバー / グループの作成 (or 招待)</dt>
    <dd>
多くの場合 issue は複数人で運用することになると思うので追加しておこう。<br>
こちらも調べるとすぐ出てくると思うので手順は割愛。
    </dd>
</dl>

## 各ページについて自分なりの理解

`Issues` は階層構造になっていて、配下に以下のページが存在する。
*プランや連携しているサービスによって違いはあるかも知れない


<dl>
  <dt>List</dt>
    <dd>
登録した Issue を一覧表示する画面 (<code>Issues</code> をクリックするとトップ画面として表示)<br>
一覧には詳細説明以外の殆どの項目が表示される。
      <ul>
        <li>Confidential マーク
        <li>Title
        <li>タスク数 (完了数 / 総数)
        <li>状態 (Open / Close)
        <li>作成日時
        <li>マイルストーン
        <li>期日
        <li>ラベル
        <li>見積もり時間
        <li>担当 (アイコン)
        <li>コメント数
        <li>最終更新日時
      </ul>
一覧は <code>Open / Close / All</code> にページが分かれていて、最初 <code>Open</code> のページが表示される。
    </dd>
  <dt>Boards</dt>
    <dd>
いわゆる <code>カンバン</code>。<br>
<code>List</code> ほどじゃないけど、それなりの項目が表示される。<br>
標準では Open と Close のリストが準備されている。 (変更可能)<br>
後述の<code>Labels</code>で作成したラベルをリストとして追加可能。<br>
表示するリストのパターンは保存可能。 (厳密には新たな <code>カンバン</code> を作成して編集する)
    </dd>
  <dt>Labels</dt>
    <dd>
付加情報の一つであるラベルを管理するための画面。<br>
ラベル名、詳細説明、色を設定可能。
    </dd>
  <dt>Service Desk</dt>
    <dd>
未使用・未調査につき詳細不明。<br>
今回利用予定がないので、必要な人は調べて頂けると、、、
    </dd>
  <dt>Milestone</dt>
    <dd>
付加情報の一つであるマイルストーンを管理するための画面。<br>
マイルストーン名、詳細説明、開始日、終了日を設定可能。<br>
詳細画面は <code>Issue / MR / メンバ / Label</code> にページが分かれ、関連する情報が一覧で参照できる。<br>
有償プランだとバーンダウンチャートを表示できるらしい。
    </dd>
</dl>

## 使い方

### Issue 作成

`List` 画面から作成する方法と `Boards` 画面から作成する方法がある。

<dl>
  <dt><code>List</code> 画面から作成</dt>
    <dd>
      <ol>
        <li><code>New issue</code> をクリック
        <li>必要事項を入力
        <li><code>Submit issue</code> をクリック
      </ol>
    </dd>
  <dt><code>Boards</code> 画面から作成</dt>
    <dd>
      <ol>
        <li><code>Open</code> または追加したリスト横の <code>+</code> をクリックする。
        <li>タイトルを入力
        <li><code>Submit issue</code> をクリック
      </ol>
後述の <code>Incident</code> は作成できない。
    </dd>
</dl>

#### `List` から作成する際の入力項目


<dl>
  <dt>Title</dt>
    <dd>
これさえ入力すれば作成可能。
    </dd>
  <dt>Type</dt>
    <dd>
用途に合わせて以下から選択する。
      <dl>
        <dt>Issue</dt>
          <dd>
<code>Milestone</code> を設定可能で、 <code>Severity</code>の設定ができない。
          </dd>
        <dt>Incident</dt>
          <dd>
<code>Severity</code> を設定可能で、 <code>Milestone</code>の設定ができない。 (ちゃっかり <code>Boards</code> 画面でマイルストーン設定できたりする)<br>
<code>Severity</code> は作成後の詳細画面で入力可能。<br>
自動的に <code>Incident</code> ラベルが追加される。 (後からラベルを追加しても <code>Type</code> 
は <code>Incident</code> にはならない)<br>
          </dd>
      </dl>
    </dd>
  <dt>Description</dt>
    <dd>
チェックボックス (<code>- [ ]</code>) を記載するとタスクリストとして認識される。 (<code>List</code>画面のタスク数に反映される)<br>
Issue の詳細画面で表示されるチェックボックスはクリックで直接更新可能。
    </dd>
  <dt>Confidentiality</dt>
    <dd>
チェックボックス。<br>
権限が <code>Reporter</code> 以上のメンバのみが参照できるように制限する。
    </dd>
  <dt>Assignee</dt>
    <dd>
プルダウン横の <code>Assign to me</code> をクリックすると自分を割り当てることが可能。(リストから探さなくて良い)
    </dd>
    </dd>
  <dt>Milestone</dt>
    <dd>
<code>Milestones</code> で作成したマイルストーンを選択する。<br>
ここから新たに作成も可能。(<code>Milestones</code> 画面へ飛ぶけど、入力途中の内容は維持されるのでご安心を)
    </dd>
  <dt>Labels</dt>
    <dd>
<code>Labels</code> で作成したラベルを選択する。 (複数選択可能)<br>
ここから新たに作成も可能。(<code>Labels</code> 画面へ飛ぶけど、入力途中の内容は維持されるのでご安心を)
    </dd>
  <dt>Due Date</dt>
    <dd>
期限。<br>
テキストボックスをカーソルを移動するとカレンダーが表示され、日付選択で入力可能。<br>
勿論直接入力も可能。
    </dd>
</dl>

### Issue 更新

`List / Boards` から編集可能。
どちらの画面も Issue のタイトルをクリックすることで詳細画面に遷移する。

`List` 画面は `Edit issue` をクリック後、複数のチケットをまとめて更新することができる。

`Boards` 画面は Issue のタイトル以外の部分をクリックすると右サイドバーが表示され、いくつかの項目を更新できる。
他に D&D でリスト間の移動が可能。
リスト間の移動を行うと、移動先以外にリストとして表示しているラベルが全て削除されるので注意。 (例え Close への移動であってもラベルが削除される)

どんな項目を編集できるかと、一部特殊な項目のみ詳細を。

#### 詳細画面

**～ メインエリア ～**

<dl>
  <dt>Title</dt>
  <dt>Description</dt>
    <dd>
タイトル横の <code>鉛筆マーク</code> をクリックすると上記二つの編集エリアが表示される。
    </dd>
  <dt>File</dt>
    <dd>
<code>Type</code> が <code>Issue</code> のチケットのみアップロード可能。
    </dd>
  <dt>Issue Link</dt>
</dl>

**～ サイドバー ～**

<dl>
  <dt>Assignees</dt>
  <dt>Due Date</dt>
  <dt>Labels</dt>
  <dt>Confidentiality</dt>
  <dt>Lock issue</dt>
    <dd><br>
    </dd>
  <dt>Time Tracking</dt>
    <dd>
<code>Description</code>かコメントで見積もり時間を入力すると、設定した見積もり時間が表示される。<br>
入力フォーマットは <code>/estimate 見積もり時間</code> 。<br>
例： <code>/estimate 1d</code><br>
実際の作業時間は <code>/spend 作業時間</code> で入力する。<br>
例： <code>/spend 2h</code><br>
基本的に作業時間は加算されていく。減らしたい場合は <code>-作業時間</code> を指定する。<br>
詳細は <a href="https://docs.gitlab.com/ee/user/project/time_tracking.html"target="_blank" rel="noopener noreferrer">公式のヘルプ</a> を参照。
    </dd>
  <dt>Milestone</dt>
    <dd>
<code>Type</code> が <code>Issue</code> のみ設定可能。
    </dd>
  <dt>Epic</dt>
    <dd>
<code>Type</code> が <code>Issue</code> の有償プランのみ設定可能。
    </dd>
  <dt>Weight</dt>
    <dd>
<code>Type</code> が <code>Issue</code> の有償プランのみ設定可能。 (無料プランでもトライアルはできそう)
    </dd>
  <dt>Severity</dt>
    <dd>
<code>Type</code> が <code>Incident</code> のみ設定可能。
    </dd>
  <dt>Move Issue</dt>
    <dd>
紐づくプロジェクトを変更する機能。
    </dd>
</dl>

#### `List` 画面 (まとめて編集)

<dl>
  <dt>Status</dt>
  <dt>Asignee</dt>
  <dt>Milestone</dt>
  <dt>Labels</dt>
  <dt>Subscription (詳細不明)</dt>
</dl>

#### `Boards` 画面 (サイドバー)

<dl>
  <dt>Assignees</dt>
  <dt>Milestone</dt>
  <dt>Time Tracking</dt>
  <dt>Due Date</dt>
  <dt>Labels</dt>
  <dt>Notification</dt>
</dl>