GitLabの初心者が読む記事

Gitを知っている人向けにGitLabの説明資料を書いてみました。

---

# GitLabとは

- GitLab社が公開しているGitによる分散バージョン管理システムのホスティングサービス
- DevOpsのライフサイクル全体をカバーするオールインワンのアプリケーションで、GitLabだけで、DevOpsを実践するために必要なツールを揃えることができる。

---

#### Gitのホスティングサービス？
- リモートリポジトリを格納するサーバの場所を貸し出すサービス。
- チーム開発時は各メンバーがホスティングサービスのリポジトリをPush＆Pullして開発を進める。
- `分散管理`なのでローカルとサーバーの二か所以上にファイルを格納できるため、一つのリポジトリが破損しても、その他のリポジトリから復旧できるので、可用性を確保できる。

---

#### DevOps？
「開発者と運用者が協力し合い、ユーザーに迅速かつ継続的にプロダクトやサービスの提供を行う」こと、上手く実現することで開発も運用も効率性が向上し、ユーザーにより良いサービスを迅速に提供することができる。

---

## GitLabの特徴

- 自社サーバでもオンプレミス運用ができるので、企業で利用する場合は社内のセキュリティルールに準拠できる。
- Web版としてSaaSサービスも利用することができる。
- DevOpsの実現のためのアジャイル開発に用いるツールが豊富に揃っており、単一のプラットフォームでDevOpsを実現できる。

## GitLabの機能
Git以外にも色々機能があります。

---

#### Docker等その他ツールと連携可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/8788530f-31e9-89ca-e976-f8f0deac22e0.png)

その他にも無数にあり、書ききれないため以下をご参照ください。

https://about.gitlab.com/partners/technology-partners/#cloud-partners

---

#### ジョブ自動実行機能
事前にスクリプトの内容とジョブを定義しておけば、自動的に処理を実行できる。
この機能を利用することで、開発したプログラムのテストを実行する等、様々なCI/CDを実現することができる。
※CI/CD：日々開発したソースコードなどを構成管理ファイルにコミットし、ビルドやテスト、デプロイを自動的に実行すること

---

#### ソースコードの管理
ソースコードの閲覧および変更履歴の確認
リポジトリへのアクセス管理
ブランチの閲覧・操作

---

#### コードレビュー
コードへの注釈コメント
レビュー済みコードのマージ
コンフリクトの解消
レビューが終わっていないとmasterブランチにマージできないという制限をかけることもできる。

---

#### チケット管理
タスクごとにチケットを発行し、課題等の解決に役立てる。

---

## アジャイル開発で使用するGitLabの機能

|アジャイル開発|GitLabの機能|
|:-----------|------------:|
|ユーザーストーリー|Issues|
|タスク|To-Do List|
|エピック|Epics|
|見積もり|Weight|
|プロダクトバックログ|Issue lists,prioritised labels|
|スプリント|Milestones|
|バーンダウンチャート|Burndown Chart|
|アジャイルボード|Issue Boards|

---

#### Issues(ユーザーストーリー)
顧客がやりたいことが簡潔に纏め、開発者と顧客の間で、顧客の言葉を使いながら、要件を整理し、互いの共通認識を作るために使用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/8dbeca23-883e-0b8c-72c7-da4e216b5cdf.png)

---

#### To-Do List(タスク)
Issueのうち、個別のタスクを作成するツール。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/50018bfe-5b28-8213-3b00-7fcf2016694f.png)

---

#### Epics(エピック)
関連するユーザーストーリーのまとめて記述する。
例：iPhone 端末対応と Android 端末対応は「モバイル対応」というエピックでカテゴリ分けする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/f3af052c-8bb7-2b26-cdd7-b0c0e85e76e3.png)

---

#### Weight(見積もり)
ユーザーストーリーの規模を表すストーリーポイントを記述する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/c791b6bb-9d41-5b81-49de-593a71c7585a.png)

---

#### Issue lists(プロダクトバックログ)
ビジネスや顧客のニーズを反映させたユーザーストーリーを優先度付けして一覧にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/434a5db1-db96-0fde-7bc0-fa0b857a1d3a.png)

---

#### prioritised labels(プロダクトバックログ)
同上
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/57e96467-a304-de02-11f0-22d01b0a8d3b.png)

---

#### Milestones(スプリント)
スプリントのスタート日や期日を設定して、Milestoneの中にIssueを配置する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/3564ae2f-6f34-e533-54b8-a9dace5dd25b.png)

---

#### Burndown Charts(バーンダウンチャート)
スプリントの残工数を把握するために利用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/55228c91-942e-8758-96d5-c1e3b90fe0ef.png)

---

#### Issue Boards(アジャイルボード)
各タスクの進捗状況を表示し、スプリントの状態を確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/61a01e6b-6237-7361-9e90-a8abdb5eae3c.png)

---

## GitHubとの違い
競合製品のＧitＨubとの違いは以下の通り。
- GitHubでは、複数のツールをつなぎ合わせてエンドツーエンドのDevOpsソリューションを提供する必要があります。
- GitLabはDevOpsのための単一プラットフォームを提供し、さまざまなツールがあらかじめ統合されている。
- GitHubは多くの場合、2000人を超えるユーザーに対応できないが、32000人を超えるユーザーまでスケール可能。
- GitHubのダウンタイムは4時間に及ぶこともあるが、GitLabはゼロダウンタイムのアップグレードを提供しています。
- GitHub自体はオープンソースではないため、製品の改善はGitHubに依存しているが、GitLabはOSSなのでエコシステムが確立している。
- GitHub + CircleCIという構成をとった場合、GUIが2種類になるが、GitLabは1画面で完結する。

---

# 参考
本投稿を作成するにあたり、下記サイトを参考および画像を引用しました。

https://www.gitlab.jp/

https://licensecounter.jp/devops-hub/blog/sbcskato8/