初回コミットからマージリクエストまで
GitLabを使った開発ワークフローは、一度理解すれば非常に効率的です。この記事では、Gitの基本概念から実際のマージリクエスト作成まで、実務で必要な知識を体系的に解説します。
1. Gitの基本概念
Gitはバージョン管理システムです。ファイルの変更履歴を追跡し、複数人での開発を可能にします。
リポジトリは、ファイルを保存する場所です。GitLabでは、リポジトリはプロジェクト内に配置されます。開発時には、リポジトリを自分のコンピュータにクローンし、変更を加えた後、リポジトリにプッシュします。
コミットは、変更の記録単位です。各コミットには、誰が、いつ、何を変更したかが記録されます。
ブランチは、作業を分離するための仕組みです。デフォルトブランチ(通常はmain)から自分のブランチを作成し、変更を加えてから、デフォルトブランチにマージします。
2. GitLabの推奨ワークフロー
実務では、以下のフローで開発を進めます。
このフローにより、変更履歴の追跡、コードレビュー、品質管理が実現できます。
3. 環境準備
開始前に以下を確認してください。
- ローカルマシンにGitをインストール
- GitLabアカウントの作成(組織のインスタンスまたはGitLab.com)
- SSHキーの作成とGitLabへの登録(セキュアな通信のため)
4. プロジェクトとリポジトリの準備
4.1. サンプルプロジェクトの作成
- 左サイドバー上部の新規作成(+アイコン)から新しいプロジェクト/リポジトリを選択
-
プロジェクト名に
マイサンプルプロジェクトを入力 - READMEでリポジトリを初期化にチェック
- プロジェクトを作成を選択
4.2. リポジトリのクローン
- プロジェクト概要ページの右上にあるコードボタンをクリック
- SSHでクローンのURLをコピー
- ターミナルで作業ディレクトリに移動し、以下を実行
git clone git@gitlab.com:tanaka-taro/my-sample-project.git
cd my-sample-project
- 現在のブランチを確認
git branch
アスタリスク(*)が付いているブランチが現在のブランチです。
5. 基本的な開発フロー: コマンドライン編
5.1. ブランチの作成
新しい機能や修正のために、専用のブランチを作成します。
git checkout -b feature-hello-world
5.2. ファイルの編集
テキストエディタでREADME.mdを開き、以下を追加します。
Hello world! Gitを使っています!
5.3. 変更の確認
git status
以下のような出力が表示されます。
On branch feature-hello-world
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
5.4. ステージングとコミット
変更をステージング領域に追加し、コミットします。
git add README.md
git commit -m "READMEファイルにHello worldメッセージを追加"
5.5. GitLabへプッシュ
git push origin feature-hello-world
これで、ブランチがGitLab上に作成され、他のメンバーにも見えるようになります。
6. マージリクエストの作成
変更をデフォルトブランチに統合するには、マージリクエストを作成します。これにより、コードレビューや議論が可能になります。
6.1. プッシュ後の自動提案から作成
ブランチをプッシュした直後、GitLabのプロジェクトページにマージリクエストを作成ボタンが表示されます。これが最も簡単な方法です。
- プロジェクトページを開く
- 表示されたバナーのマージリクエストを作成をクリック
- タイトルと説明を入力
- レビュアーやラベルを設定(任意)
- マージリクエストを作成を選択
6.2. マージリクエスト一覧から作成
- コード > マージリクエストを選択
- 右上の新しいマージリクエストをクリック
- ソースブランチ(
feature-hello-world)とターゲットブランチ(main)を選択 - ブランチを比較して続行
- タイトルと説明を入力し、マージリクエストを作成
各ブランチは1つのオープンなマージリクエストにのみ関連付けられます。
6.3. マージリクエストのレビューとマージ
マージリクエストが作成されると、以下のフローで進みます。
- レビュアーが変更内容を確認
- 必要に応じてコメントや修正依頼
- 承認後、マージボタンをクリック
- ソースブランチの削除(任意)
7. イシュー駆動開発
実務では、イシューを起点とした開発が推奨されます。
7.1. イシューの作成
- プラン > イシューを選択
- 新しいイシューをクリック
- タイトルと説明を入力(例: 「ユーザー認証機能の追加」)
- 担当者、ラベル、マイルストーンを設定
- イシューを作成
7.2. イシューからブランチとマージリクエストを作成
イシューから直接ブランチを作成すると、作業が効率化されます。
- イシューページを開く
- イシュー説明の下部にあるマージリクエストを作成 > マージリクエストとブランチを作成
- 提案されたブランチ名を確認(イシュー番号とタイトルから自動生成)
- 必要に応じてブランチ名を変更
- マージリクエストを作成
これにより、以下が自動的に行われます。
- ブランチ名にイシュー番号が含まれる(例:
123-add-user-authentication) - マージリクエストの説明に「Closes #123」が追加される
- マージ後、イシューが自動的にクローズされる
7.3. ローカルでの作業
イシューからブランチを作成した後、ローカルで作業を進めます。
# リモートの変更を取得
git fetch origin
# イシューから作成されたブランチに切り替え
git checkout 123-add-user-authentication
# コードを変更
# ...
# コミット
git add .
git commit -m "ユーザー認証のログイン機能を実装"
# プッシュ
git push origin 123-add-user-authentication
マージリクエストは既に作成されているため、プッシュするだけで変更が反映されます。
8. その他のマージリクエスト作成方法
8.1. タスクから作成
GitLab 17.8以降では、イシュー内のタスクから直接マージリクエストを作成できます。
前提条件: プロジェクトに対して開発者ロール以上が必要
- プラン > イシューからタスクを検索
- タスク説明の下部にあるマージリクエストを作成
- ブランチ名を確認・必要に応じて変更
- マージリクエストを作成
8.2. Webエディタから作成
GitLabのWebエディタで直接ファイルを編集し、マージリクエストを作成できます。
- リポジトリ内のファイルを開く
- 編集ボタンをクリック
- ファイルを編集
- 下部の変更をコミットセクションで:
- コミットメッセージを入力
- 新しいブランチを作成してマージリクエストを開始を選択
- ブランチ名を入力
- 変更をコミット
小規模な修正やドキュメント更新に便利です。
8.3. ブランチ作成時に作成
- コード > ブランチを選択
- ブランチ名を入力し、新しいブランチ
- ファイルリストの上にあるマージリクエストを作成
- フィールドを入力し、マージリクエストを作成
8.4. フォークから作成
オープンソースプロジェクトへの貢献など、フォークしたプロジェクトから元のプロジェクトにマージリクエストを送る場合の手順です。
手順:
- フォークでコード > マージリクエスト > 新しいマージリクエスト
- ソースブランチで、フォーク内の変更を含むブランチを選択
-
ターゲットブランチで:
- 上流リポジトリを選択(フォークではない)
- 上流リポジトリのブランチを選択
- ブランチを比較して続行
- マージリクエストを作成
マージリクエストは、フォークではなく上流リポジトリに作成されます。
重要な注意点:
- ターゲットプロジェクトの承認ルールが適用されます
- CI/CD設定とリソースはフォークのものを使用します
- 上流プロジェクトでパイプラインを実行するには、そのプロジェクトのメンバーである必要があります
デフォルトターゲットの設定:
頻繁に上流に貢献する場合、デフォルトターゲットを設定できます。
- 設定 > マージリクエストを選択
- ターゲットプロジェクトセクションで希望のオプションを選択
- 変更を保存
9. 高度な機能
9.1. コマンドラインツールの活用
GitLab CLIツール(glab)を使うと、コマンドラインから直接マージリクエストを作成できます。
# マージリクエストを作成
glab mr create --title "新機能の追加" --description "詳細な説明"
# マージリクエスト一覧を表示
glab mr list
# マージリクエストをマージ
glab mr merge 123
9.2. Gitプッシュオプション
プッシュ時にオプションを指定して、マージリクエストを作成できます。
# プッシュと同時にマージリクエストを作成
git push -o merge_request.create origin feature-branch
# タイトルと説明を指定
git push -o merge_request.create \
-o merge_request.title="新機能の追加" \
-o merge_request.description="詳細な説明" \
origin feature-branch
# ターゲットブランチを指定
git push -o merge_request.create \
-o merge_request.target=develop \
origin feature-branch
9.3. メールでの作成
メールを送信してマージリクエストを作成することも可能です(GitLab.comでは有効)。
前提条件:
- 開発者ロール以上が必要
- 現在のリポジトリをターゲットにする(上流リポジトリは不可)
手順:
- コード > マージリクエストを選択
- このプロジェクトに新しいマージリクエストをメールで送信を選択
- 表示されたメールアドレスをコピー(このアドレスは非公開に保つ)
- メールを作成:
- 宛先: コピーしたアドレス
- 件名: ソースブランチ名
- 本文: マージリクエストの説明
-
添付:
.patchファイル(任意、合計2MB以下)
- メールを送信
この方法は特殊なケースでのみ使用します。
10. トラブルシューティング
10.1. イシューにマージリクエスト作成ボタンが表示されない
以下の場合、マージリクエストを作成ボタンは表示されません。
- 同じ名前のブランチが既に存在する
- このブランチのマージリクエストが既に存在する
- プロジェクトにアクティブなフォーク関係がある
- プロジェクトがプライベートで、イシューが機密扱いである
対処法: 既存のブランチやマージリクエストを確認し、必要に応じて削除または名前を変更します。
10.2. プッシュ時の権限エラー
remote: You are not allowed to push code to this project.
原因: プロジェクトに対する書き込み権限がない、またはブランチが保護されています。
対処法:
- プロジェクトオーナーに権限を依頼
- 保護されたブランチに直接プッシュせず、別のブランチを作成
10.3. マージコンフリクト
複数人が同じファイルを編集した場合、マージ時にコンフリクトが発生します。
対処法:
- ローカルでターゲットブランチの最新版を取得
git checkout main
git pull origin main
- 作業ブランチに切り替えてマージ
git checkout feature-branch
git merge main
- コンフリクトを手動で解決(エディタでマーカーを探す)
<<<<<<< HEAD
あなたの変更
=======
他の人の変更
>>>>>>> main
- 解決後、コミットしてプッシュ
git add .
git commit -m "マージコンフリクトを解決"
git push origin feature-branch
10.4. メールでのマージリクエスト作成エラー
Unfortunately, your email message to GitLab could not be processed.
You are not allowed to perform this action.
原因: 上流リポジトリをターゲットにしようとしています。
対処法: メールでのマージリクエスト作成は、現在のリポジトリをターゲットにする場合のみ可能です。上流への貢献はWebインターフェースを使用してください。
11. ベストプラクティス
11.1. ブランチ命名規則
わかりやすいブランチ名を使用します。
-
feature/user-authentication- 新機能 -
bugfix/login-error- バグ修正 -
hotfix/security-patch- 緊急修正 -
123-add-user-auth- イシュー番号を含む
11.2. コミットメッセージ
明確で具体的なメッセージを書きます。
良い例:
ユーザー認証のログイン機能を実装
- bcryptを使用したパスワードハッシュ化
- JWTトークンによるセッション管理
- ログイン失敗時のエラーハンドリング
悪い例:
修正
11.3. マージリクエストのサイズ
小さく、レビューしやすいマージリクエストを心がけます。
- 1つのマージリクエストで1つの機能または修正
- 変更行数は300〜500行以内が理想
- 大きな変更は複数のマージリクエストに分割
11.4. レビュープロセス
- マージリクエスト作成時に適切なレビュアーを指定
- CI/CDパイプラインが成功してからレビューを依頼
- レビューコメントには建設的に対応
- 承認後は速やかにマージ
12. まとめ
GitLabのワークフローは、以下のステップで構成されます。
- イシューで作業を定義 - 何を作るか明確にする
- ブランチで作業を分離 - 安全に変更を加える
- コミットで変更を記録 - 履歴を残す
- マージリクエストでレビュー - 品質を保証する
- マージで統合 - 本番環境へ
このサイクルを繰り返すことで、チーム開発がスムーズになります。最初は複雑に感じるかもしれませんが、実際に手を動かしてみることで理解が深まります。Gitは全ての操作が元に戻せるので、失敗を恐れずに試してください。
実務では、イシュー駆動開発とマージリクエストによるコードレビューを組み合わせることで、高品質なソフトウェア開発が実現できます。