GitLab 13.0 で無償版でも使える有償版の機能を試してみた

# GitLab 13.0 で無償版でも使える有償版の機能を試してみた
来月リリースされる GitLab 13.0 に今までは有償版にしかなかった 18 個の機能が無償版 (GitLab CE など) でも使えるようになるそうです。

[18 GitLab features are moving to open source](https://about.gitlab.com/blog/2020/03/30/new-features-to-core/)

私は GitLab CE か GitLab のプライベートプロジェクト (Core) を利用しているため、あまり有償版の機能を知りません。お勉強を兼ねて、そのうちのいくつかを試してみました。

個人的には Epic が一番欲しいのですが、かなわず...

調査には、GitLab CE 12.9.4 と GitLab.com (の Public プロジェクト) を利用しました。GitLab.com の Public プロジェクトは有償のいくつかの機能を使うことができます。

## 機能
### [Related issues](https://docs.gitlab.com/ee/user/project/issues/related_issues.html)

名前の通り Issue 同士の関連付けを行えます。

現時点でも、Issue の本文やコメントに #3 などと Issue 番号を書くことで、その Issue にメンションが設定されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/e813dbb6-f821-4278-bed1-e5d82e30cb47.png)

この機能とは全く関係なく、もっと明確に関連付けられます。

こんな感じで、関連付ける Issue を設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/30fb907f-4003-ed04-91dd-f65d5bb90687.png)

メンションと違って、本文のすぐ下に表示されるのでわかりやすくて便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/c841ca8d-83c3-3f1a-5ad8-9ee348e40b82.png)

選択肢のうち、`relates to` は相互が対等で関連付けられます。

それに対して、`blocks` と `is blocked to` は親子関係があります。子の Issue で親の Issue を blocks で指定します。親の Issue を Close しようとすると以下のように確認を求められるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/217e8c1e-3b5e-a401-918e-9fa049523041.png)

`blocks` と `is blocked to` は逆の関係で、相手側の Issue にも設定されます。

* Issue A で blocks Issue B をした場合
  - Issue A blocks Issue B
  - Issue B is blocked Issue A
* Issue A で is blocked Issue B をした場合
  - Issue B blocks Issue A
  - Issue A is blocked Issue B

ちなみに、バグだと思うんですけど、Issue ページ一番下の `Close issue` ボタンは確認画面出ずにクローズされちゃうんですね...


### [Export Issues](https://docs.gitlab.com/ce/user/project/issues/csv_export.html)
GitLab だけのお話じゃないですけど、Issue を Excel で扱いたい人は多いんじゃないでしょうか? Export Issues は Issue の一覧 CSV をメールで送信してくれる機能です。

これって、GitLab CE でも使えるとずっと思ってたんですけど、EE の機能だったんですね。

ドキュメントには GitLab Core 12.10 って書いてあるので、13.0 を待たずに使えるようになっているようです。


### [Issue board focus mode](https://docs.gitlab.com/ce/user/project/issue_board.html#focus-mode)
GitLab に搭載されているカンバンの Issue Board を全画面にできます。それだけです... なぜこれが EE のみだったのか悩んでしまいます。

普通の Issue Board はこんな感じでメニューが表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/df5e5bda-2f2f-d6d4-723c-882f382e5f66.png)

右上の `Add issues` の右にあるボタンをクリックすると余計なものが表示されなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/c50da1f7-059d-aa5e-c920-38c9e13f464d.png)

ほんのちょっとだけ広いです!

この機能も GitLab Core 12.10 と書いてあるので、13.0 を待たずに使えます。


### [Service desk](https://docs.gitlab.com/ce/user/project/service_desk.html)
Service desk はあなたが開発している製品の利用者からヘルプデスクへのメールをそのまま Issue に登録してくれる機能です。


### [Web Terminal for Web IDE](https://docs.gitlab.com/ee/user/project/web_ide/#interactive-web-terminals-for-the-web-ide-ultimate-only)
GitLab と Kubernetes を組み合わせたときに Web Terminal という GitLab の画面からターミナルが使えるという機能があります。

これはそれと違って、Web IDE でターミナルを使えるようにしちゃおう! という機能のようです。マシンは GitLab Runner が利用されます。

[ドキュメント](https://docs.gitlab.com/ee/user/project/web_ide/#interactive-web-terminals-for-the-web-ide-ultimate-only)の通りに設定したら動きました!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/1d4a30c6-5180-e754-ee40-e3be0592ee48.png)

ターミナルは幅が欲しいのでページ下部にあるとありがたいのですが、それはできないようです。


### [File syncing to the web terminal](https://docs.gitlab.com/ee/user/project/web_ide/#file-syncing-to-web-terminal)
上の Web Terminal と Web IDE のファイルを同期する機能です。

これも[ドキュメント](https://docs.gitlab.com/ee/user/project/web_ide/#file-syncing-to-web-terminal)通りに設定したらできまｓた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103982/916eb062-a100-7402-5393-9bc54fdfdf46.png)

ただ、ドキュメントによると Web IDE で修正したファイルはそのまま Web Terminal と同期されるように読めるのですが、自分の環境では動作しませんでした。


### [Design Management](https://docs.gitlab.com/ce/user/project/issues/design_management.html)
GitLab では Issue に画像を貼り付けらてるので、ここでデザイン案を貼り付けて議論している方も大野ではないでしょうか? Design Management は Issue にそれ専用の機能を付けます。

Issue の Designs に画像をアップロードできるだけでなく、画像にコメントを残してディスカッションをしたり、バージョンを管理したりもできます。[ドキュメント](https://docs.gitlab.com/ce/user/project/issues/design_management.html)を見たほうが分かりやすいと思います。


アップローできる画像は以下のものです。

> Files uploaded must have a file extension of either png, jpg, jpeg, gif, bmp, tiff or ico.

Photoshop とか Illustrator とかのファイルも扱えると便利そうなんですけどね!

SVG と PDF は計画にあるようです。

> Support for SVG files and PDFs is planned for a future release.


### [Code quality](https://docs.gitlab.com/ce/user/project/merge_requests/code_quality.html)
Code quality は GitLab の CI ジョブで Codeclimate を利用したソースコードの検査をする機能です。

もちろん、Codeclimate を実行する CI ジョブを自力で書いてもいいのですが、この機能は Merge Request のページに結果を表示してくれるのでありがたいのです。

![](https://docs.gitlab.com/ce/user/project/merge_requests/img/code_quality.png)

(GitLab のドキュメントより)

ただ単に表示されるわけではなくて、Merge Request で増減したコードの問題だけ表示されます。つまり、`master` で元からあるコードの問題は無視してくれるということです。レガシーコードはただ単にコード検査ツールを通すと大変な量の指摘がなされますが、新しく書いたところだけを指摘してくれるありがたい機能です。

ただ、問題のある個所を行とか列とかで表示されてもわかりにくいので、Merge Request のコードレビューに埋め込んでくれると嬉しいなあと思ってます。

Code Climate の起動の分だけ遅くなりますし、個人的には Lint の結果を HTML に出力して Artifacts を GitLab Pages 経由で表示させる方が好みです。


### [Pacakge Managers](https://docs.gitlab.com/ce/user/packages/)
GitLab は GitLab Container Registry という Docker Hub の代わりに使える Docker Image を格納する機能があります。

有償版ではこれに加えて以下のものサポートされています。

* Conan (C/C++)
* Maven (Java)
* NPM (Node.js)
* NuGet (.NET)

これらが無償版でも利用できるようになります。

本業は .NET 屋さんなのでとてもありがたいです。

ドキュメントを見ると、PyPi (Python) も使えそうな気がします。


### [Feature flags](https://docs.gitlab.com/ce/user/project/operations/feature_flags.html)
開発しているアプリケーションの機能の ON / OFF の管理を GitLab からできるもの、のようです。ユーザーごとの ON / OFF もできるみたいです。

利用しているのは [Unleash](https://unleash.github.io/) というもので、このライブラリをアプリケーションに組み込んでおくと、GitLab の Feature Flags の設定を読み込んで機能の ON / OFF ができるようになるみたいです。

"みたいです" ばかりなのは試してないからです。でも、面白そうな機能なのでちょっと使ってみたいですね。


## 謝辞
Kubernetes 関係は苦手なので試してません。軽くドキュメントは読んではいるのですが、時間もかかるので試していません。どなたか詳しい人、解説をしてくださると助かります!

* [Canary deployments](https://docs.gitlab.com/ce/user/project/canary_deployments.html)
* [Incremental rollout](https://docs.gitlab.com/ee/ci/environments/incremental_rollouts.html)
* [Deploy boards](https://docs.gitlab.com/ce/user/project/deploy_boards.html)
* [Support for multiple Kubernetes clusters](https://docs.gitlab.com/ce/user/project/clusters/#multiple-kubernetes-clusters-premium)
* Network policies for container network security