macOSにGitLab開発環境セットアップ (GDK) (2020年9月)

**tl; dr:** GitLab本体(Web UI, API)をmacOS環境で開発する環境を用意する。

毎年のように、統合DevOpsプラットフォームGitLabの開発環境のセットアップ記事が作成されるが、日本語でQiitaで閲覧できる最新版になると想定して記述する。

### 想定

macOS: 10.13, 10.14, 10.15の想定。10.15の人はZshになっている可能性もある。MacBook Pro (Retina以降)が望ましいが、MacBook/MacBook Airでも動くと思われる。筆者はMacBook Pro (Retina, 13-inch, Mid 2014) i5 2コア 8GBメモリ、128GB SSD(空き容量20GB)で確認した。

GitLabコミュニティメンバー（つまり誰しも）を想定。

---

### なぜ書くのか。

2020-09-02/2020-09-03で開催されるGitLab Hackathon 3Q 2020を日本語で https://gitlab-jp.connpass.com/event/187652/ https://gitlab-jp.connpass.com/event/187244/ https://gitlab-jp.connpass.com/event/187246/ を主宰していて、~~ほとんど~~全ての参加者がハマっていたので、[最終日 Day 2](https://gitlab-jp.connpass.com/event/187246/) に間に合わせる形で急いで書く。

数週間前に給与などを得てInc.の人たちが修正したようだが、（過去にいくらかひどい状態になったがそれを上回る勢いで）あまりに質がひどいので書く。

この記事の資金的提供はない。修正依頼は歓迎する。This article is not provided or financially supported by GitLab B.V., GitLab Inc. and one or more their affiliates.

この記事はGitLab Hackathon 3Q '2020 in 日本語の広告ではない。

---

### 前提条件

SSDの空き容量は15GB以上は確保してください。ほとんどの人（過去に同じものをインストール済みの場合を覗く）の場合で10GBほど消費します。

## 事前準備 (18分)

### 事前1. Homebrewを入れる (5分)

過去の参加者を見る限り、入れている人が多いので、省略したいが、もし入れていない人がいれば https://brew.sh/index_ja に書いてあるので、読んで入れてください。

### 事前2. Homebrewで依存パッケージを入れる (2分)

以下を実施して、依存パッケージを入れてください。過去のGitLab Tokyo主催のGitLab Hackathon日本ローカルイベントでハマった人はほとんどいなかったように記憶している。

```zsh
brew install asdf git git-lfs libiconv pkg-config cmake openssl coreutils re2 graphicsmagick gpg icu4c exiftool sqlite
brew link pkg-config
brew pin libffi icu4c readline re2
if [ ${ZSH_VERSION} ]; then shell_file="${HOME}/.zshrc"; else shell_file="${HOME}/.bash_profile"; fi
echo 'export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"' >> ${shell_file}
source ${shell_file}
brew cask install google-chrome chromedriver
```

### 事前3. asdfの設定をシェルに反映する (1分)

#### macOS 10.15 and Zsh

以下を実施したあと、ターミナルを再起動してください。

```zsh
echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ~/.zshrc
```

#### macOS 10.14 or Bash

以下を実施したあと、ターミナルを再起動してください。

```bash
echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ~/.bash_profile
echo -e "\n. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash" >> ~/.bash_profile
```

### 事前4. Rubyをインストール (10分)

asdfというパッケージ管理ツールを使います。

以下のコマンドで、asdfでRubyを使えるようにします。

```zsh
asdf plugin add ruby
```

以下のコマンドで、必要とする、Ruby 2.6.6をインストールします。ソースコードからのコンパイルなのでとても時間がかかります。

```zsh
asdf install ruby 2.6.6
```

以下のコマンドで、asdfでインストールしたRuby 2.6.6をどのディレクトリでも使えるようにします。

```zsh
asdf global ruby 2.6.6
```

## GDKのインストールと設定 (22分)

### セットアップ1. gitlab-development-kit Gemをインストール (1分)

以下のコマンドで、Gemをインストールします。

```zsh
gem install -N gitlab-development-kit
```

`sudo` を使ってはいけません。

### セットアップ2. GDK初期設定 (1分)

以下のコマンドで、作業ディレクトリを作ります。

```zsh
gdk init
```

### セットアップ3. GDK作業ディレクトリで依存関係のダウンロード・設定 (10分)

以下のコマンドで、GDK作業ディレクトリに移動します。

```zsh
cd gitlab-development
```

以下の2コマンドで、asdfからNode.jsを使えるようにします。

```
asdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git
bash -c '${ASDF_DATA_DIR:=$HOME/.asdf}/plugins/nodejs/bin/import-release-team-keyring'
```

以下のコマンドで、他の依存ライブラリを取得します。

```zsh
make bootstrap
```

以下のコマンドで、PostgreSQL Gemのビルドの設定をします。

```zsh
bundle config build.pg --with-opt-dir="${HOME}/.asdf/installs/postgres/11.8"
```

### セットアップ4. ソースコードのダウンロード (10分)

以下のコマンドで、複数のレポジトリのソースコードをダウンロードします。

```zsh
gdk install shallow_clone=true
```

## 確認 (6分)

### 確認1. GDK起動 (1分)

以下のコマンドで、GitLabを起動します。初回は

```zsh
gdk start
```

### 確認2. Webブラウザで確認 (5分)

ブラウザのアドレスバーに `http://localhost:3000` を入力するか、以下のコマンドで、開きます。初回の表示までは502エラーが表示され、普通のページが表示されるまで5分くらいかかります。待っている間、下のおまけセクションを見てください。

```zsh
open http://localhost:3000/
```

これが表示されればOK。

![gdk202009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49113/9db5239f-e70d-2b35-b59a-d4e8e9ad14e1.png)

全てコマンドラインでの作業のため、スクショはこれ一枚だが、この画面が表示されれば開発できるようになります。


## おまけ

GitLab.comにログインした状態で https://gitlab.com/gitlab-org/gitlab にアクセスし、Forkボタンを押して自分の領域にクローンしてください。その後、 `[YOUR-NAMESPACE]` を自分のGitLabアカウント名に置き換えて、以下のコマンドを実行してください。

```zsh
git remote set-url git@gitlab.com:[YOUR-NAMESPACE]/gitlab.git
support/set-gitlab-upstream
```

---

### Qiitaの先人たちの同種の記事

- 2018年10月 https://qiita.com/jb-vasseur/items/9f7691c39a0d8baa335a
- 2017年12月 https://qiita.com/ogomr/items/cc404bf9373408663b11
- 2015年6月 https://qiita.com/hiroponz/items/b36bb521551f94eb4fc1

---

### Source

- https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/a7529002150a413781cf7e05393678545d813456/doc/prepare.md ([最新はこちら](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/master/doc/prepare.md))
- https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/a7529002150a413781cf7e05393678545d813456/doc/index.md ([最新はこちら](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/master/doc/index.md))
- https://asdf-vm.com/#/core-manage-asdf-vm?id=add-to-your-shell