最近、GitHubだけでなくGitLabを利用する機会が増えてきました。しかも、単なるユーザーとしてではなく、GitLabの構築や運用に関わることが多くなっています。そのため、改めて 「GitLab実践ガイド 第2版」 を読んでみました。
実は5年前、2020年にこの書籍の初版を読んでいました。当時はGitLabの利用者という立場でしたが、今回はより「運用・構築」の視点で読んだので、新たな気づきがありました。
GitLabのアーキテクチャを整理する
まず、この本を読んで改めて理解が深まったのはGitLabのアーキテクチャです。 GitLabは単なる1つのプロセスではなく、複数のコンポーネントが協調して動く分散システムです。例えば、以下のような主要コンポーネントがあります (下図はGitLab architecture overview | GitLabからの引用)。
それぞれのコンポーネントの役割を理解することで、 GitLabの内部動作がよりクリアになったと感じました。特に、上図のような公式ドキュメントのMermaid図よりも、書籍で示されている整理されたアーキテクチャ図の方が圧倒的に分かりやすいというのは大きなメリットです。
例えばGitLabという名称がついたコンポーネントは結構役割がわかりづらいのですが、書籍のおかげで以下のように整理できました。
- GitLab Rails – GitLabの主要機能を提供する本体。アプリケーションサーバとしてPumaを使用。
- GitLab Shell – SSH経由でのGit操作を処理。
- GitLab Workhorse – Pumaの負荷を軽減するリバースプロキシ。
- Gitaly – Gitリポジトリへのアクセスを最適化するコンポーネント。
GitLabを本格的に運用しようとすると、これらのコンポーネントのどれがボトルネックになるのか、どこをチューニングすべきなのかを把握することが重要になります。このあたりの解説がしっかりしていたのは良かった。
5年間で進化したGitLab CI/CD
GitLabの機能の中でも、 5年前と比べて大きく進化した と感じたのが CI/CD です。 GitHub Actionsが2018年に発表されCI/CDの再利用性が高まったのと同じように、GitLabもCI/CDの設定を簡単に共有・再利用できる仕組みが整ってきたというのは大きな変化です。その代表的な機能がCI/CDカタログです。
この機能を知らなかった人にとっては、 CI/CDの設定を効率よく再利用できる という点で、GitLabの魅力が増したと感じるのではないでしょうか。
例えば以下のようにgitlab-ci.yaml
にcomponentを組み込むだけで、GitHubと同じように依存関係のアップデートを自動化できそうです。
include: - component: gitlab.com/dependabot-gitlab/dependabot-standalone/template@3.39.3 inputs: gitlab_access_token: gitlab-access-token github_access_token: github-access-token rules: - if: $PACKAGE_MANAGER_SET
こうした新機能を知ることで、「GitLabも進化してるのね」と実感できました。
CI/CD中でのDockerコンテナビルド
もう1つ印象的だったのが、 GitLab CI/CD内でのDockerコンテナビルドです。 以前は、GitLab RunnerのDocker executorを利用しつつ、CI/CDの中で docker コマンドを実行しようとすると、 DinD (Docker in Docker) や docker daemon の設定が面倒でした。
しかし、この書籍では Buildah というツールを使うことで、 Daemonを立ち上げずにDockerイメージをビルドできる方法が紹介されていました。なにそれ、便利じゃん。
これは全く知らなかったので、今後のCI/CDの実装に結構活かせそうです。よきよき。
まとめ
この本を読んで、新しい知識というよりはGitLabの情報を整理できたというのが最大の収穫でした。 GitLabの公式マニュアルは膨大で迷子になりがちですが、この書籍ではアーキテクチャ、CI/CD、開発プロセスまで整理されており、GitLabを本格的に運用する人にとって一読の価値はあるかなと思います。特に以下の人にはおすすめです。
- GitLabのアーキテクチャを理解したい人
- CI/CDの最新機能をキャッチアップしたい人
- 開発プロセスのベストプラクティスを学びたい人
5年ぶりに読んでみて、GitLabの進化を実感できる一冊でした。