GitLabの使い方:無料の範囲、CI/CD、GitHubからの移行

公開 更新 書いた人 大林 諒

取引先や開発会社から「GitLabで管理しています」と言われて、GitHubと何が違うのか分からないまま招待を受けることがあります。GitLabは読み方も仕組みも、知ってしまえば難しくありません。

ここでは、サンプル料理教室のホームページを例に、GitLabでプロジェクトを作り、人を招待し、変更を確かめて取り込み、自動チェックを動かすまでを順に書きます。後半で、自社サーバーに置く話と、GitHubから移す手順、移さない判断も扱います。

この記事の内容
  1. 先に答えると
  2. GitLabとは:GitHubとの対応で読む
  3. 無料の範囲
  4. Group と Project を作る
  5. メンバーの招待とロール
  6. Merge Requestの流れ
  7. CI/CDの最小の例
  8. Self-Managed:自社サーバーに置く話
  9. GitHubからの移行
  10. GitHubに残る判断
  11. できないことと、その代わり
  12. よく詰まるところ
  13. 次に読む

先に答えると

GitLab(ギットラボ)は、Gitの履歴を置いて共同作業するサービスで、GitHubと同じ種類のものです。GitHubを知っているなら、名前の対応を覚えれば使えます。無料で始められますが、非公開で6人以上になると読み取り専用になる点が、小さな会社で一番効きます。

  • 無料の範囲は、非公開で5ユーザー、月400分のCI/CD、プロジェクトごとに10GiB(2026年11月時点)
  • プルリクエストに当たるものは Merge Request で、違いは名前と画面です
  • 自動チェックは、リポジトリの直下に .gitlab-ci.yml を置くと動きます
  • 自社サーバーに置く形もありますが、更新とバックアップは自分の仕事になります
  • GitHubからは公式の移行機能で移せます。GitHub Actionsの設定だけは書き直しです

GitLabとは:GitHubとの対応で読む

GitLabは GitLab Inc. が運営しています。使う形は大きく2つです。GitLabが運営するサーバーを借りる GitLab.com と、自分たちのサーバーに入れる Self-Managed です。この記事は、断りがなければ GitLab.com の話です。

Gitそのものは同じなので、git add、git commit、git push は変わりません。違うのは、Gitの外側の画面と呼び名です。

GitHubの呼び名GitLabの呼び名何か
リポジトリProject(プロジェクト)ファイルと履歴の置き場。GitLabではIssueなども含む単位
OrganizationGroup(グループ)会社やチームの単位
プルリクエスト(Pull Request、PR)Merge Request(MR)変更を取り込む前に確かめる場所
GitHub ActionsGitLab CI/CD変更のたびに自動で動く仕組み
.github/workflows.gitlab-ci.yml自動処理の設定ファイル
ランナーRunner自動処理を実際に動かす担当
GitHub Enterprise ServerSelf-Managed自社サーバーに置く形

無料の範囲

2026年11月時点の GitLab.com の Free です。

項目上限超えたとき
人数非公開のトップレベルグループで5ユーザーまでグループ全体が読み取り専用になる
CI/CD月400コンピュート分共用のRunnerの利用に制限がかかる
ストレージプロジェクトごとに10GiB(Gitの履歴とLFSの分)そのプロジェクトにpushできなくなる
トップレベルグループの数2026年1月27日より後に作ったFreeアカウントは3つまで増やすには有料プランが要る

コンピュート分は、自動処理を動かした時間に、Runnerの種類に応じた係数を掛けた値です。トップレベルグループは、一番上の階層のグループのことです。

人数の数え方が要注意です。そのグループの下にある全プロジェクトの、重複を除いた人数で数えます。サンプル料理教室は代表1名、講師3名、受付2名で6人います。全員を入れた時点で上限を超えます。外注エンジニアBを足すと7人です。実際のところ、講師はコードを触らないので入れる必要がありません。代表、受付A、外注エンジニアBの3人なら収まります。

上限を超えて読み取り専用になると、リポジトリへの新しい書き込み、Merge Request の作成と更新、パイプライン(自動処理の一連の流れ)の実行、新しいメンバーの招待が止まります。公式が示す解除の方法は、メンバーを減らす、無料トライアルを始める、有料プランを買う、の3つです。Free のまま上限を増やすことはできません。

この5ユーザーの制限は、公開グループ、個人のネームスペース(自分のアカウント直下の場所)、有料プラン、Self-Managed には掛かりません。ただ、個人の下に仕事のものを置くと、担当者が辞めたときに困ります。会社のものはグループに置きます。

有料の Premium は1ユーザー月$29(年額請求)で、CI/CD は月10,000分、ストレージはプロジェクトごとに500GiBです。Ultimate は個別見積です。

Group と Project を作る

GitLabは、Group の中に Project を入れる形です。グループに入れた人は、中の全プロジェクトに入れます。

サンプル料理教室なら、グループ sample-cooking の下に、プロジェクト website と reservation-mail を置きます。

GitLabのグループとプロジェクトの階層
GitLabのグループとプロジェクトの階層

先にグループを作ります。

  1. 右上の「Create new」(プラスのアイコン)を押す
  2. 「New group」を選ぶ
  3. 「Create group」を選ぶ
  4. 「Group name」に sample-cooking と入れる
  5. 「Group URL」に同じ文字を入れる
  6. 「Visibility level」で「Private」を選ぶ
  7. 「Create group」を押す

次に、グループの中にプロジェクトを作ります。

  1. グループを開き、「Create new」を押す
  2. 「New project/repository」を選ぶ
  3. 「Create blank project」を選ぶ
  4. 「Project name」に website と入れる
  5. 「Project slug」が website になっているか確かめる
  6. 「Visibility Level」で「Private」を選ぶ
  7. 「Initialize repository with a README」にチェックを入れる
  8. 「Create project」を押す

最後から2番目のチェックを入れると、Gitのリポジトリと既定のブランチが作られ、すぐにクローン(手元に複製)できます。

公開範囲は Private(メンバーだけ)と Public(誰でも)から選びます。Internal(ログインした人全員)もありますが、GitLab.com では使えません。

GitLabのプロジェクトの作成画面
GitLabのプロジェクトの作成画面

メンバーの招待とロール

招待は、プロジェクトの左のメニューから行います。Maintainer か Owner の人だけができます。

  1. 上の「Search or go to」でプロジェクトを開く
  2. 左のメニューで「Manage」を開く
  3. 「Members」を選ぶ
  4. 「Invite members」を押す
  5. 相手のユーザー名かメールアドレスを入れる
  6. ロールを選ぶ
  7. 必要なら「Access expiration date」に期限を入れる
  8. 「Invite」を押す

ロールは権限の段階です。よく使うのは5つです。

ロールできることサンプル料理教室なら
GuestIssueの閲覧とコメント。リポジトリには入れない非公開のコードを見せずに要望だけ受ける相手
Reporterコードを見る、Issueを作る。pushはできない内容を確かめるだけの受付A
Developer保護されていないブランチへのpush、Merge Requestの作成、CI/CDの実行修正もする受付A
Maintainerブランチ、Merge Request、CI/CD、メンバーの管理。プロジェクトの削除はできない外注エンジニアB
Owner削除と公開範囲の変更を含む全権限代表

公式には、ほかに Minimal Access、Planner、Security Manager があります。小さな会社なら、最初は上の5つで足ります。

注意が2つあります。1つは、グループに入れた人は全プロジェクトに入れることです。外注エンジニアBに website だけ頼むなら、グループでなくプロジェクトに招待します。reservation-mail にはメールの送信に使う設定があるからです。グループ経由で入った人は、プロジェクト側では外せません。グループから外します。

もう1つは、既定のブランチ(普通は main)が最初から保護されていることです。既定の設定では、Developer は main に直接pushできず、Maintainer はできます。誰がマージできるかは「Settings」の「Repository」にある「Branch rules」で確かめます。

Merge Requestの流れ

Merge Request は、GitHubのプルリクエストと同じ役割です。違いは名前と画面だけで、流れは同じです。

まず手元でブランチ(枝)を切り、料金表を直して送ります。

$ git switch -c fix-menu-price
Switched to a new branch 'fix-menu-price'
$ git add menu.html
$ git commit -m "料金表を修正"
[fix-menu-price a4a20a3] 料金表を修正
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git push -u origin fix-menu-price
To https://gitlab.com/sample-cooking/website.git
 * [new branch]      fix-menu-price -> fix-menu-price
branch 'fix-menu-price' set up to track 'origin/fix-menu-price'.

実際のGitLabに送ると、これに remote: で始まる案内が足されることがあります。続きは画面です。

  1. 左のメニューで「Code」を開く
  2. 「Merge requests」を選ぶ
  3. 右上の「New merge request」を押す
  4. 変更元に fix-menu-price、取り込み先に main を選ぶ
  5. 「Compare branches and continue」を押す
  6. 説明を書き、「Reviewers」の「Edit」で確かめる人を選ぶ
  7. 「Create merge request」を押す

確かめる人は、差分を見てコメントを付けます。複数のコメントをまとめて出すなら「Start a review」、すぐ出すなら「Add comment now」です。問題なければ「Approve」、直してほしければ「Request changes」を選びます。最後に権限のある人がマージのボタンを押すと、main に取り込まれます。

Free では、Developer 以上なら誰でも承認できますが、承認は任意でマージを止めません。「承認がないとマージできない」設定は Premium と Ultimate の機能です。Free で運用するなら、代表が確かめてから外注エンジニアBがマージする、といった決めごとで補います。

GitLabの Merge Request の画面
GitLabの Merge Request の画面

CI/CDの最小の例

CI/CD は、変更が届くたびに決まった処理を自動で動かす仕組みです。チェックを動かすのが CI、公開まで進めるのが CD と考えると十分です。

設定は、リポジトリの直下に置く .gitlab-ci.yml だけで始められます。index.html と menu.html が消えていないか確かめる例です。

check-files:
  script:
    - test -f index.html
    - test -f menu.html

check-files は処理(ジョブ)の名前で、自分で決めます。script に書いたコマンドを Runner が順に実行します。段階(stage)を書かなければ test の段階に入ります。

  1. 左のメニューで「Build」を開く
  2. 「Pipeline editor」を選ぶ
  3. 上の内容を書く
  4. 「Commit changes」を押す
  5. 「Build」の「Pipelines」で結果を見る

「Pipeline editor」は、書いている間に文法を確かめてくれます。CI/CD の設定には Maintainer か Owner のロールが要ります。手元で作って git push しても同じです。

APIキーやパスワードは、このファイルに書いてはいけません。プロジェクトに入れる人全員に見えるからです。「Settings」の「CI/CD」にある「Variables」で「Add variable」を押して登録します。「Masked」にするとログで隠れ、「Protect variable」を付けると保護されたブランチでしか使えません。send_mail.py のメール送信キーを使うなら、ここに入れます。

Runnerとは何か

Runner は、ジョブを実際に動かすアプリです。GitLab.com には GitLab が用意した Runner があり、設定なしですぐ使えます。自分のマシンに入れて動かすこともできます。

項目GitLabが用意する Runner自分で用意する Runner
管理GitLabが管理自分で管理
準備なしですぐ使えるLinux、macOS、Windowsなどに入れて登録する
向く場面小さな会社の最初の一歩社内のマシンでしか動かせない処理がある

GitLab.com のこの共用の Runner を使うときは、悪用を防ぐ目的でクレジットカードかデビットカードの情報を求められます。Self-Managed の Free は、料金表にも「Bring your own storage and runners」とあるとおり、Runnerを自分で用意します。

GitLabのCI/CDの流れ
GitLabのCI/CDの流れ

Self-Managed:自社サーバーに置く話

Self-Managed は、GitLabを自分のサーバーにインストールして管理する形です。料金表には Free、Premium、Ultimate があり、Free の人数の5ユーザー制限は掛かりません。

向くのは、社内の決まりでコードを社外に置けない会社、社内ネットワークの中だけで使いたい会社、サーバーを管理する担当者がいる会社です。サンプル料理教室のような規模なら、GitLab.com で足ります。

CE と EE は、検索するとよく見る言葉です。CE は Community Edition、EE は Enterprise Edition です。公式で確かめられた範囲はこうなります。

  • ライセンスなしで新しく入れると、Free の機能だけが有効になる
  • EE で上位の機能を使うには、アクティベーションコードを入れる
  • CE を使っていれば、あとから EE へ上げられる
  • gitlab-foss は、独自コードを除いたGitLabの読み取り専用ミラーで、MITライセンス

自社で持つ仕事は次のとおりです。

仕事中身(2026年11月時点の公式の記載)
サーバーの用意1台構成なら8 vCPU、メモリ16GBが基準。アプリに40GBと、全リポジトリの合計以上のディスク
更新毎月第3木曜に新しい版、月2回の修正版。セキュリティ修正の対象は最新と過去2つの月次版まで
バックアップバックアップに設定ファイルは含まれない。gitlab-secrets.json と gitlab.rb は別に保管する
Runnerとストレージ自分で用意する

gitlab-secrets.json を失うと、データベース内の暗号化された値を読めなくなります。誰がこれを毎月やるのかを決められないなら、Self-Managed は選ばないほうが安全です。なお、GitLabが専用環境を運営する GitLab Dedicated もありますが、規制の厳しい大企業向けです。

GitHubからの移行

公式の移行機能(インポーター)で、GitHubのリポジトリを移せます。始める前に、移行先のグループで Maintainer か Owner のロールと、GitHub側のアクセス権を用意します。

  1. GitLabで移行先のグループ sample-cooking を作る
  2. 「Create new」を押す
  3. 「New project/repository」を選ぶ
  4. 「Import project」を選ぶ
  5. 「GitHub」を選ぶ
  6. 「Authorize with GitHub」を押す
  7. website の横の「Import」を押す
  8. 「Status」の列が完了になるのを待つ

トークンで認証するなら、GitHubのクラシックのトークンを repo の権限で作り、「Personal access token」に貼ります。共同作業者や Git LFS も移すなら read:org も足します。

持っていけるもの持っていけない・制限があるもの
全ブランチとGitの履歴Outside collaborators(組織外の共同作業者)
Issue、コメント「Require status checks to pass before merging」のルール
プルリクエスト、レビューカスタムロールの共同作業者(移行が一部で止まることがある)
Label、Milestone、WikiGitHubのOrganization(グループは自分で作る)
ブランチ保護ルール、Git LFSGitHub Actionsの設定(書き換えが要る)
Collaborators、Release notes本文の添付は「Import Markdown attachments」を選んだときだけ

ユーザーの対応づけの条件を満たさないと、レビュアーや承認はコメントとして残ります。結果は「Complete」「Partially completed」「Failed」のどれかで出るので、「Details」で落ちたものを確かめます。

移したら、手元のリポジトリの送り先を変えます。

$ git remote set-url origin https://gitlab.com/sample-cooking/website.git
$ git remote -v
origin	https://gitlab.com/sample-cooking/website.git (fetch)
origin	https://gitlab.com/sample-cooking/website.git (push)

GitLabに送るには、GitHubとは別に認証の設定が要ります。SSH鍵なら、GitLabのプロフィールの「Access」にある「SSH keys」で登録します。

GitHub Actions の設定は、そのままでは動きません。書き換えの対応はこうです。ただし1対1ではありません。

GitHub ActionsGitLab CI/CD
onrules
runscript
usesinclude(同じものがあるとは限らない)
runs-ontags

main に届いたときにファイルを確かめる処理なら、次のように変わります。先が GitHub Actions、後が .gitlab-ci.yml です。GitLabのジョブはプロジェクトのコードに直接アクセスできるので、取得の行がなくなります。

on:
  push:
    branches:
      - main
jobs:
  check-files:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: test -f index.html
check-files:
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
  script:
    - test -f index.html

シークレット(APIキーなど)は公式の持っていける一覧にないので、GitLabの「Variables」に入れ直します。移行のあとしばらくは、GitHub側を消さずに読み取り専用(archive)で残すと、見落としに気づけます。実際に移してみると、外部サービスの通知先や公開先の設定のように、リポジトリの外にある設定が漏れやすいところです。先に一覧を作ってから移します。

GitHubに残る判断

困っていないなら、GitHubに残るのは正しい判断です。GitLabが悪いのではなく、移す手間に見合う理由があるかどうかです。

残る理由移す理由
無料のCI/CDを多く使う(Actionsは月2,000分)取引先や開発会社がGitLabで揃えている
有料でも安く済ませたい(Teamは1ユーザー月$4)社内の決まりで自社サーバーに置く必要がある
依頼先や道具がGitHub前提で動いている複数人の開発をGitLabの1つの画面にまとめたい
Actionsの設定が多く、書き直す手間が大きい上の条件があり、設定が少ないうちに移せる

Copilot のように GitHub と組み合わせて使っている道具があるなら、移行後の動き方まで確かめます。ホームページの修正を1人で続けるだけなら、今ある方のままで困りません。

できないことと、その代わり

  • Free で5ユーザーの上限は増やせません。人数を絞るか、Premium へ上げるか、Self-Managed にするかです
  • Free で承認を必須にはできません。運用の決めごとで補うか、Premium にします
  • Secret Detection(秘密情報の検出)は Free では機能が限られ、push を止める Secret push protection は Ultimate のみです。.env を入れない運用は Free でも自分で守ります
  • GitLab Duo(AIの機能)は、Free では GitLab Credits の追加購入になります

よく詰まるところ

症状原因直し方
急にpushもMerge Requestもできず、404 も出る非公開で6人以上になり読み取り専用グループの「Settings」の「Usage quotas」にある「Seats」で人を確かめ、減らす
main にpushできないmain は既定で保護。Developer は直接pushできないブランチを切って Merge Request を出す
pushできないのが1つのプロジェクトだけ容量の10GiBを超えて読み取り専用「Settings」の「Usage quotas」の「Storage」で見る。追加の容量を買うか減らす
パイプラインが動かないファイルの場所か名前が違う、Runnerが使えない、カード情報が未登録直下の .gitlab-ci.yml を確かめ、「Settings」の「CI/CD」の「Runners」を見る
設定を書いたのにエラーになるYAMLの字下げや書き方の誤り「Pipeline editor」で確かめる
Variables の値が空のまま「Protect variable」が付いていて、保護されていないブランチで動かしているチェックを外すか、対象のブランチを保護する
メンバーをプロジェクトから外せないグループ経由で入っている親のグループから外す
移行が「Partially completed」で止まるカスタムロールなど未対応のもの「Details」で落ちたものを見て、手で足す

次に読む

どちらを選ぶかを費用まで含めて比べるなら「GitHubとGitLabの違い:料金・機能・自社サーバーで比べる選び方」です。「GitHubの料金:Free・Team・Enterpriseと無料でできる範囲」も合わせると判断が早くなります。レビューの進め方は「プルリクエストとは:作り方・レビュー・マージの流れ」、自動処理の考え方は「GitHub Actionsの使い方:自動で動かす仕組みと無料枠」に、GitHubの場合で書いてあります。

CI/CDを動かすRunnerを自分で立てる話は「GitLab Runnerとは:CI/CDを動かす仕組みと、自分で立てる場面」です。

あわせて読む