GitLab.com と CircleCI を連携させて CI を行う

## はじめに
CircleCI でカスタマーサクセスをしている鈴木です。リコッタチーズのパンケーキを作ろうとおもってリコッタチーズを買いに行ったら、リコッタチーズのパンケーキの既製品があったのでもうそれでいいやという気分になりました。

CircleCI がサポートする VCS として、新たに GitLab の SaaS版である GitLab.com が加わりました。日本語のアナウンスは[こちらのページ](https://discuss.circleci.com/t/gitlab/44832)にあります。まだローンチされたばかりでこれから実装されていく機能も多いのですが、簡単なテストビルドを行ってみます。
ちなみにサーバー版の GitLab Enterprise との連携は未対応です。今後に期待します。

## 連携に必要なもの
- [GitLab.com](https://about.gitlab.com/) のアカウント
まだアカウントを持っていない場合、GitLab.com のトップページにある "Register" からアカウントを作成します。詳細は割愛しますが、GitLab.com は UI がわかりやすく、ドキュメントも充実しているので迷わないかと思います。

- GitLab.com 上のプロジェクト
プロジェクトを持っていない場合、空のプロジェクトを作成します。GitLabの新規アカウント作成時に作成される ”Learn GitLab” という学習用リポジトリ（下図）を利用することもできます。
![learn_gitlab.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/a04840a1-c2e9-550f-efec-b5af87ab32a4.jpeg)

- CircleCI のアカウント
すでに GitHub や　BitBucket.com との連携を行っている既存の CircleCI ユーザーはそのアカウントを利用できます。アカウントを持っていない場合、[ユーザー登録ページ](https://circleci.com/ja/signup/)の「メールで登録」からアカウント作成を行います。

- [CircleCI の公式ドキュメント](https://circleci.com/docs/ja/gitlab-vcs-support)
登録手順の他、近日公開予定の機能や既知の問題も挙げられています。
GitLab を Free プランで利用している場合は OAuth 経由ではなく、GitLab の [Personal Access Token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#personal-access-tokens) が必要になるといった注意事項がありますので、手順のところは一通り目を通すことをオススメします。
私自身、ドキュメントをよく読まずに OAuth で接続を進めてしまったので、「Project Access Token を作れないから Project Access Token の作成をオンにするか、Personal Access Token を使ってね」という CircleCI 上のアラート（下図）が出てしまいました。
![access_token_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/a9f286d3-81f4-6c9a-65b3-be3495524c71.png)

- GitLab の Personal Access Token (GitLab を Free プランで利用している場合) 
というわけで、GitLab を Free プランで利用している場合は、前述のように　Personal Access Token を発行する必要があります。[GitLab の公式ドキュメントに発行手順があります](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token)が簡単です。
なお、発行時に設定するスコープですが、CircleCI 側のドキュメントに「api スコープと write_permissions スコープを選択する必要があります」とあるので、下図のように選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/89c36ec6-3d31-0c85-7d8d-4f8febb36a15.png)
作成した Personal Access Token は連携時に必要になりますので一時的にメモをしておくのでもよいですが、連携時に作成したほうが良いでしょう。


## CircleCI との連携
準備ができたところでCircleCI との連携を進めていきます。
まず、CircleCI 上に Organization を作成します。 新規作成ページの URL は[こちら](https://app.circleci.com/projects/create-organization/?return-to=https%3A%2F%2Fapp.circleci.com%2Fpipelines%2Fcircleci%2FL7HPXF8GwbLJKQYtpceraZ%2FHNgLJA2fPxe5rbKiN4ivBT%2F3%2Fworkflows%2F4b2f99df-0187-42ae-b318-822218d3f77a%2Fjobs%2F3)です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/7a90d85c-d81a-0686-696a-a73422c5242c.png)
ドキュメントでは触れられていませんが、この Organization は一度作成すると削除や名前変更の機能がありません。慎重に名前付けすることをオススメします。Organizationを複数作成することは可能です。

Organization を登録すると、そのままプロジェクトの作成ページに遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/8d4666ca-42d7-bf78-8ce7-e03ba1dcfc8a.png)
プロジェクトの名前付けも慎重に行います。Organization 同様、削除や名前変更ができません。
そして、GitLab を Free プランで利用している場合の注意点が接続方法です。
Oauth での連携を選びたいところですが、ぐっとこらえて Access Token による接続を選択します。入力するのは、Personal Access Token を GitLab 側で作成して入力します。

以下のように Project 画面が表示されれば連携が終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/52c2664d-5609-f88e-5c5d-901e3a7e7f0e.png)

## ビルドのテスト
GitLab.com 上のプロジェクトに単純な .circleci/config.yml を作成してコミットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/555aa9b8-cbed-781e-ab31-af5cc858e328.png)
問題なくビルドできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11243/41a7d46b-a79f-3835-6919-f9e32567c042.png)

## GitLab CI/CD との違い
GitLab には CI/CD 機能があり、従来の GitLab ユーザーの皆さんはこちらに親しまれているかもしれません。私も利用したことがありますが、ドキュメントが充実していて、最初のビルド成功まで簡単に進められました。
GitLab CI/CD は GitLab プロジェクトとの連携のしやすさが大きなメリットですが、GitLab CI/CDにはない CircleCI の大きなメリットとして、CircleCIの持つ多様な実行環境（[リソースクラス](https://circleci.com/ja/product/features/resource-classes/)）を利用できるという点があります。なので、すでに GitLab CI/CD を使っている皆さんも、高スペックな実行環境でより速く安定して CI を回していきたいプロジェクトでは CircleCI を試してみるといったことも良いのではないでしょうか。

## 従来の CircleCI との違い
GitLab.com と連携した CircleCI は、GitHub や BitBucket Cloud で使用できる CircleCI に比べて機能の違いや制限があります。詳しくは、[CircleCI の公式ドキュメント](https://circleci.com/docs/ja/gitlab-vcs-support)にあります、近日公開予定の機能や既知の問題をご確認ください。
従来の CircleCI との大きな違いの一つに、ユーザー管理を CircleCI 上で行っていくという点があります。管理が必要になる反面、利用ユーザーを細かく制限できたり、ユーザーごとに [CircleCI 上の権限設定](https://circleci.com/docs/ja/gitlab-vcs-support#about-roles-and-permissions)ができたりという独自機能を利用できます。

## おわりに
というわけで GitLab.com と CircleCI の連携を簡単に見てみました。今後の機能の充実と GitLab.com 以外のVCS、あるいは non-VCS からのトリガーなどへの対応を CircleCI の中にいるものとしても期待しています。