GitLab ポータル Programming Lab

概要

GitLab は、Git リポジトリ管理CI/CD課題管理コードレビューセキュリティスキャンまでを一体化した DevSecOps プラットフォームです。オンプレミス(Self-Managed)と SaaS(GitLab.com)の両方に対応します。

主な強み
  • リポジトリ〜デプロイまでの一気通貫な体験
  • GitLab CI によるパイプライン自動化(YAML定義)
  • Issue / MR / Wiki / パッケージ / コンテナレジストリ 統合
  • セルフホストで権限・ネットワークを手元で制御可能
ホスティング
SaaS / Self-Managed
代表機能
Projects, Groups, CI/CD, Runner, MR, Issue, Milestone
用途
Web / モバイル / バックエンド / IaC / データ基盤
認証
SAML / LDAP / OIDC / SCIM(エディション依存)

基本

初期セットアップ(SaaS想定)

  1. GitLab.com にサインアップ → Group / Project を作成
  2. プロジェクトの SSH または HTTP URL を取得
  3. ローカルで Git を設定し、初回 push
# SSH鍵作成(未作成なら)
ssh-keygen -t ed25519 -C "you@example.com"
cat ~/.ssh/id_ed25519.pub  # 公開鍵を GitLab に登録

# 新規プロジェクトを clone
git clone git@gitlab.com:your-group/your-project.git
cd your-project

# 初回コミット
git add .
git commit -m "chore: initial commit"
git push -u origin main

GitLab CI の最小構成

.gitlab-ci.yml をリポジトリ直下に置くと push をトリガにパイプラインが動きます。

# .gitlab-ci.yml
stages: [build, test, deploy]

variables:
  NODE_ENV: production

build:
  stage: build
  image: node:20
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/

test:
  stage: test
  image: node:20
  script:
    - npm test -- --ci

deploy:
  stage: deploy
  image: alpine:3.20
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
  script:
    - echo "Deploy with rsync or kubectl here"

基礎

Runner の種類

  • Shared Runner(SaaS 共有)
  • Group/Project Runner(専用)
  • Self-Managed Runner(オンプレ・VM・K8s)
# Linux での GitLab Runner インストール例(自己管理)
curl -L --output gitlab-runner.deb https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb
sudo dpkg -i gitlab-runner.deb
sudo gitlab-runner register  # トークンは GitLab 画面から

MR(Merge Request)フロー

  1. 課題(Issue)→ ブランチ切り出し
  2. コミット / Push → CI が実行
  3. レビュー / アサイン / ラベル運用
  4. Squash & Merge / Rebase Merge を選択
# ブランチ命名例
git switch -c feat/login-oauth2
# 変更 → コミット → Push
git push -u origin feat/login-oauth2

応用

モノレポとパイプラインの最適化

  • rules:changes で差分ディレクトリのみビルド
  • needs: でジョブ依存を明示して並列化
  • workflow: rules: でブランチ/タグごとに実行可否を制御
# .gitlab-ci.yml(差分ビルド例)
stages: [lint, build, test]

lint:
  stage: lint
  image: node:20
  script: [ "npm run lint" ]
  rules:
    - changes:
      - apps/web/**/*
      - packages/ui/**/*

build_web:
  stage: build
  image: node:20
  script: [ "npm ci", "npm run build -w apps/web" ]
  rules:
    - changes: [ "apps/web/**/*" ]
  needs: [lint]

test_web:
  stage: test
  image: node:20
  script: [ "npm test -w apps/web -- --ci" ]
  needs: [build_web]

セキュリティ(SAST/DAST/Container)

GitLab Ultimate などではテンプレートの include で各スキャナを簡単導入できます。

include:
  - template: Security/SAST.gitlab-ci.yml
  - template: Security/Dependency-Scanning.gitlab-ci.yml
  - template: Security/Container-Scanning.gitlab-ci.yml
  - template: Security/DAST.gitlab-ci.yml

発展

環境ごとのデプロイとレビューアプリ

environments を使って Review Apps を作成し、MRごとにプレビューURLを発行できます。

deploy_review:
  stage: deploy
  image: node:20
  script:
    - npm ci && npm run build
    - ./scripts/deploy_review.sh "$CI_ENVIRONMENT_SLUG"
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    url: https://review.example.com/$CI_COMMIT_REF_SLUG/
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

マルチプロジェクト・パイプライン / 子パイプライン

trigger_build:
  stage: build
  trigger:
    include: path/to/child/.gitlab-ci.yml
    strategy: depend

最新情報

/data/news.json 読み込み
日付タイトルリンク
FANBOXで『開発テスター募集』を公開しました Open
技術ドキュメント『Cluster Creator Kit研究ラボ』を公開 Open
アニメーションラボ トップページ公開 Open
スクランブルスクール|新学期特設ページ公開 Open
スクランブルスクール|選挙管理委員会 特設ページ更新 Open
スクランブルシティー|ワールドマップ機能を追加 Open
スクランブルシティー|市民データベースβ版公開 Open
スクランブルストーリー|新連載『青龍の姫』スタート Open
スクランブルストーリー|物語アーカイブ機能を実装 Open
プログラミングラボ|JSON入門ページを公開 Open
プログラミングラボ|SVGジェネレーターを公開 Open
青空プログラミング|ページ公開 Open
青空プログラミング|子ども向けアルゴリズム講座スタート Open
スクランブルラジオ|ページ公開 Open
スクランブルシティー|施設ガイド(街の歩き方)を追加 Open
スクランブルストーリー|キャラクター一覧ページを公開 Open
プログラミングラボ|ロゴデザイン学習ページを公開 Open
青空プログラミング|「ミニゲームで学ぶJavaScript」公開 Open
スクランブルスクール|部活動ページを追加 Open
スクランブルシティー|市民データベース 検索機能を改善 Open
スクランブルストーリー|アーカイブにタグフィルターを追加 Open
プログラミングラボ|Web Audio 実験ページを追加 Open
青空プログラミング|「Canvasで背景演出」レッスン公開 Open
🎨 サンストライプ イラスト工房 Open

仕事の現場

  • 権限設計: Group / Project / Subgroup とロール(Maintainer/Developer/Reporter)
  • ブランチ戦略: trunk-based / GitFlow(組織のリリース周期に合わせる)
  • コード所有者: CODEOWNERS で必須レビュア設定
  • 監査・可観測性: Protected branch/tag, Audit events, Environments
# CODEOWNERS 例
/apps/web/*          @frontend-team
/apps/api/*          @backend-team
/.gitlab-ci.yml      @devops

Web開発 / アプリ開発

Web(Node/Next.js)

# .gitlab-ci.yml(Next.js ビルド + 静的出力)
image: node:20
pages:
  stage: deploy
  script:
    - npm ci
    - npm run build
    - npm run export
    - mv out public
  artifacts:
    paths: [ public ]
  only:
    - main

モバイル(iOS/Android)

# 署名やキャッシュは別途設定
stages: [build, test]

android:
  stage: build
  image: gradle:8.7-jdk17
  script:
    - ./gradlew assembleRelease

ios:
  stage: build
  tags: ["mac"]   # Mac ランナー
  script:
    - xcodebuild -workspace App.xcworkspace -scheme App -configuration Release -sdk iphoneos

GitLab / GitHub

観点GitLabGitHub
CI/CD標準機能(Runner/テンプレ豊富)Actions(Marketplace充実)
セルフホスト強い(Self-Managed)Enterprise Server(別製品)
課題〜MR連携同一UIで一気通貫Issues/PR + Projects
料金/エディションFree〜UltimateFree〜Enterprise
パッケージ/コンテナ統合レジストリGHCR/Packages

知っておくといい(知識・技能・用語)

  • Protected Branch / Tag
  • Environment / Review Apps
  • Merge Method(Merge commit / Squash / Rebase)
  • Include:Templates(SAST / 依存関係スキャン)
  • Rules / Needs / Artifacts / Cache
# 依存キャッシュ例
cache:
  key: "$CI_COMMIT_REF_SLUG"
  paths:
    - node_modules/

PHP(本サイト向け)ビルド無しCI

# .gitlab-ci.yml
stages: [lint, deploy]

lint:
  image: php:8.3-cli
  stage: lint
  script:
    - php -v
    - find . -name "*.php" -print0 | xargs -0 -n1 -I{} php -l "{}"

deploy:
  stage: deploy
  image: alpine:3.20
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
  script:
    - apk add --no-cache rsync openssh
    - rsync -avz --delete ./ user@server:/path/to/sunstripe.main.jp/programming/GitLab/

Issue / MR テンプレ

# .gitlab/issue_templates/bug.md
## 期待 vs 実際
- 期待:
- 実際:

## 再現手順
1.
2.
3.

## 環境
- ブラウザ/OS:
- バージョン:

# .gitlab/merge_request_templates/feature.md
## 目的
## 変更点
## 動作確認
## 影響範囲
## スクショ/録画

より具体的に

このページ構成は Sunstripe / Programming Lab 共通テンプレを前提にしています。必要に応じて /includes/*.php の読み込みや、ナビゲーション・フッタを差し込み可能です。


設置メモ

  • パス:/programming/GitLab/index.php
  • 任意データ:/data/news.json(上記形式)
  • 権限:644(ファイル)、755(ディレクトリ)