CI/CDパイプライン面接質問:GitHub Actions、GitLab CI、Jenkins 2026年版

CI/CDパイプライン面接質問の準備ガイド。GitHub Actions、GitLab CI、Jenkinsの実践的なコード例、パイプライン設定パターン、2026年のセキュリティベストプラクティスを解説します。

CI/CDパイプライン面接質問:GitHub Actions、GitLab CI、Jenkinsの比較図

CI/CDパイプラインの面接質問は、2026年のDevOps採用ラウンドで最も頻出するトピックです。GitHub Actionsは現在1日あたり7,100万件以上のジョブを処理しており、2026年6月には並列ステップ実行機能をリリースしました。GitLab CIはバージョン19に到達しネイティブのSecrets Managerを搭載、Jenkinsは依然として28%の採用率を維持しています。面接官は候補者に対し、これら3つのプラットフォームすべてにおける実践的な習熟度を示すことを期待しています。

面接官が実際にテストする内容

CI/CD面接の質問は主に3つのカテゴリに分類されます。パイプライン設計(ステージとジョブの構造化方法)、セキュリティ(シークレット管理、サプライチェーンの強化)、トラブルシューティング(失敗したビルドのデバッグ、遅いパイプラインの最適化)です。少なくとも1つはライブでパイプライン設定を行う質問が出題されると考えてください。

GitHub Actionsのワークフロー構造とトリガー

GitHub Actionsは、ワークフロー、ジョブ、ステップを中心に自動化を構成します。ワークフローは.github/workflows/に保存されるYAMLファイルで、自動化の実行タイミングと方法を定義します。各ワークフローは1つ以上のジョブを含み、各ジョブは別々のランナー上で実行されます。

面接でよく聞かれる質問は、onトリガー、ジョブの依存関係、needsキーワードの関係を説明することです。

yaml
# .github/workflows/ci.yml
name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint

  test:
    needs: lint              # waits for lint to pass
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [20, 22]       # runs tests on both versions
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          cache: npm
      - run: npm ci
      - run: npm test

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    environment: production  # requires approval
    steps:
      - uses: actions/checkout@v4
      - run: ./deploy.sh

このワークフローは3つの重要な概念を示しています。needsキーワードはジョブ間の依存関係グラフを作成し、matrix戦略はNode.jsバージョン間での並列テストを可能にし、environmentキーワードは手動承認の背後にデプロイメントをゲートします。

GitHub Actionsの並列ステップ

GitHub Actionsは2026年6月25日に並列ステップ実行をリリースし、最も要望の多かった機能の1つに対応しました。以前は、ジョブ内のすべてのステップが順次実行されていました。この新機能では、単一のジョブ内で同時実行を可能にする4つのキーワードが導入されています。

面接での区別:並列ジョブと並列ステップ

並列ジョブは、分離されたファイルシステムを持つ別々のランナーを使用します。並列ステップは、単一のランナー、チェックアウト、環境、ワークスペースを共有します。面接官はこの違いを理解しているかテストします。キャッシュ、アーティファクト共有、リソース使用率に影響するためです。

yaml
# .github/workflows/parallel-steps.yml
name: Build with Parallel Steps

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci

      # Run lint and typecheck in parallel
      - name: lint
        run: npm run lint
        background: true

      - name: typecheck
        run: npm run typecheck
        background: true

      - wait-all:              # wait for both to complete

      # Or use the parallel shorthand
      - parallel:
          - name: build-frontend
            run: npm run build:frontend
          - name: build-backend
            run: npm run build:backend

      - run: npm run deploy

background: trueキーワードはステップを非同期で開始し、即座に次のステップに進みます。wait-allキーワードは、先行するすべてのバックグラウンドステップが完了するまで実行を一時停止します。parallelキーワードは、複数のステップを同時に実行し、すべてが完了するまで待機してから続行する省略形を提供します。

追加で2つのキーワードがあります。waitは特定の名前付きバックグラウンドステップをターゲットにし、cancelは不要になったバックグラウンドステップを正常に終了します(長時間実行されるサービスの停止に有用です)。

GitLab CIのパイプライン設定とステージ

GitLab CIはリポジトリルートに.gitlab-ci.ymlファイルを使用します。ジョブがデフォルトで独立して実行されるGitHub Actionsとは異なり、GitLab CIはジョブをステージに編成し、ステージは順次実行されますが、同じステージ内のジョブは並列に実行されます。

面接官は、GitHub ActionsワークフローをGitLab CIパイプラインに変換すること、またはその逆を候補者に求めることがよくあります。

yaml
# .gitlab-ci.yml
stages:
  - validate
  - test
  - deploy

variables:
  NODE_VERSION: "22"

lint:
  stage: validate
  image: node:${NODE_VERSION}
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  script:
    - npm ci
    - npm run lint

unit-tests:
  stage: test
  image: node:${NODE_VERSION}
  parallel:
    matrix:
      - NODE_VERSION: ["20", "22"]
  script:
    - npm ci
    - npm test
  artifacts:
    reports:
      junit: coverage/junit.xml
    expire_in: 7 days

deploy-production:
  stage: deploy
  image: alpine:latest
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual                   # manual gate
  environment:
    name: production
    url: https://app.example.com
  script:
    - ./deploy.sh

GitHub Actionsとの主な違いは、ステージがグローバルに実行順序を強制すること、parallel:matrixキーワードがマトリクスビルドを処理すること、artifacts:reports:junitがテスト結果をマージリクエストビューに直接統合することです。

GitLab 19.0(2026年5月)ではオープンベータでSecrets Managerが導入され、HashiCorp Vaultなどの外部サービスなしでネイティブのシークレットストレージを提供しています。GitLab 19.2(2026年7月)ではスケジュールされたパイプライン実行ポリシーが一般提供となり、単一のポリシー定義から複数のプロジェクトにわたってコンプライアンススキャンや依存関係チェックを固定の頻度で実行できるようになりました。

DevOpsの面接対策はできていますか?

インタラクティブなシミュレーター、flashcards、技術テストで練習しましょう。

JenkinsのDeclarativeパイプライン構文

Jenkinsはリポジトリルートに保存されたJenkinsfileを使用します。2026年のデフォルトとして推奨されるDeclarativeパイプライン構文は、構造化されたエラーハンドリングと明確なステージベースのレイアウトを提供します。

面接で頻出する質問は、DeclarativeパイプラインとScriptedパイプラインの違い、そしてそれぞれをいつ使用するかを説明することです。

groovy
// Jenkinsfile
pipeline {
    agent any

    tools {
        nodejs 'node-22'       // configured in Jenkins Global Tool
    }

    environment {
        CI = 'true'
        DEPLOY_ENV = credentials('deploy-env-secret')
    }

    stages {
        stage('Install') {
            steps {
                sh 'npm ci'
            }
        }

        stage('Lint & Test') {
            parallel {             // parallel execution
                stage('Lint') {
                    steps {
                        sh 'npm run lint'
                    }
                }
                stage('Test') {
                    steps {
                        sh 'npm test'
                    }
                    post {
                        always {
                            junit 'coverage/junit.xml'
                        }
                    }
                }
            }
        }

        stage('Deploy') {
            when {
                branch 'main'
            }
            input {
                message 'Deploy to production?'
            }
            steps {
                sh './deploy.sh'
            }
        }
    }

    post {
        failure {
            mail to: 'team@example.com',
                 subject: "Build failed: ${env.JOB_NAME}",
                 body: "Check ${env.BUILD_URL}"
        }
    }
}

Declarativeパイプラインは、必須のpipelineagentstagesブロックを通じて構造を強制します。ステージ内のparallelディレクティブは、lintとtestを同時に実行します。inputディレクティブは、GitHub Actions環境やGitLabの手動ゲートと同様に、手動承認のために実行を一時停止します。Jenkinsは2026年1月時点でJava 21を必要とするため、パイプライン環境はこのランタイム依存関係を考慮する必要があります。

Jenkinsプラグインのアンバンドル(2.574以降)

Jenkins 2.574(2026年7月)および2.577(2026年8月)は、JUnit、Mailer、Matrix Authorization、Bouncycastle API、JavaMail APIを含むいくつかのプラグインをデフォルトのWARファイルから削除しました。アップデートセンターにアクセスできないインスタンスは、アップグレード前にこれらのプラグインを手動でインストールする必要があります。JUnitプラグインの削除は、上記のjunitステップを使用するパイプラインに特に影響します。

CI/CDプラットフォーム間のシークレット管理

すべてのCI/CD面接にはシークレット管理に関する質問が含まれます。各プラットフォームは資格情報の処理方法が異なり、セキュリティへの影響を理解することが重要です。

GitHub Actionsはリポジトリ、環境、または組織レベルでシークレットを保存します。シークレットはログで自動的にマスクされますが、現在のスコープモデルには制限があります。2026年セキュリティロードマップでは、過度に広範なアクセスのリスクに対処するため、資格情報を明示的な実行コンテキストにバインドするスコープ付きシークレットが導入されます。

GitLab CIは保護ルール付きのCI/CD変数を提供します。保護された変数は、保護されたブランチまたはタグで実行されるパイプラインにのみ注入されます。GitLab 19.0でSecrets Managerが導入され、チームは外部のvaultなしでネイティブにシークレットを保存して参照できます。シークレットはプロジェクトまたはグループにスコープされ、明示的に要求するジョブのみがアクセスできます。

Jenkinsは複数の資格情報タイプ(ユーザー名/パスワード、SSHキー、シークレットテキスト、証明書)を持つCredentialsプラグインを使用します。Declarativeパイプラインのcredentials()ヘルパーはシークレットを環境変数にバインドし、フォルダーレベルの資格情報は特定のプロジェクトへのアクセスをスコープします。

面接での重要な回答は、パイプラインファイルにシークレットをハードコードしないこと、常にプラットフォームのネイティブシークレット管理を使用すること、資格情報を定期的にローテーションすること、長期間有効なAPIキーよりも短期間のトークンを優先することです。

パイプラインの最適化とキャッシュ戦略

遅いパイプラインは開発者の生産性に直接影響します。面接官は、CI/CDシステムのパフォーマンスボトルネックを診断して修正できるかをテストします。

3つのプラットフォームすべてに適用される3つの普遍的な最適化手法があります。

依存関係のキャッシュは、毎回の実行でパッケージを再ダウンロードすることを回避します。GitHub Actionsはactions/cacheまたはセットアップアクションの組み込みキャッシュサポートを使用します。GitLab CIはキー戦略を持つcacheを使用します。Jenkinsはワークスペースの永続性またはstash/unstashコマンドに依存します。

並列実行は作業を複数のランナーに分割します。GitHub Actionsは現在、並列ジョブ(matrix戦略)と並列ステップ(background/parallelキーワード)の両方をサポートしています。GitLab CIはparallel:matrixを使用し、Jenkinsはparallelディレクティブを使用します。適切な分割粒度はプロジェクトによって異なります。並列ジョブが多すぎるとランナーの起動時間が無駄になり、少なすぎると容量が未使用のままになります。

条件付き実行は不要なステージをスキップします。3つのプラットフォームすべてがこれをサポートしています。GitHub Actionsはif式、GitLab CIはrules、Jenkinsはwhenディレクティブを使用します。適切に設計されたパイプラインは、フィーチャーブランチでデプロイメントステージをスキップし、lint限定の変更でフルテストスイートのトリガーをスキップします。

CI/CDパイプラインのセキュリティとサプライチェーン保護

CI/CDシステムを標的としたサプライチェーン攻撃は2025年に大幅に増加し、tj-actions/changed-filesやその他の人気のあるGitHub Actionsに影響を与えるインシデントがありました。面接の質問は現在、候補者の強化戦略について定期的に調査しています。

タグハイジャック攻撃を防ぐため、タグではなく特定のコミットSHAにアクションバージョンを固定します。

yaml
# .github/workflows/secure.yml
steps:
  # Vulnerable: tag can be moved to malicious commit
  - uses: actions/checkout@v4

  # Secure: pinned to exact commit SHA
  - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

GitLab CIはSLSA Level 1認証を持つCI/CDコンポーネント(GitLab 18.1以降で利用可能)を通じてサプライチェーンの懸念に対処し、再利用可能なコンポーネントからパイプラインを組み立てる際により明確な出所を提供します。イミュータブルコンテナタグ(GitLab 18.2)は、公開後のイメージ置換を防止します。

Jenkinsの場合、Shared Libraryメカニズムは、ブランチ保護、コードレビュー要件、署名付きコミットを持つ専用リポジトリを使用する必要があります。欧州委員会はYesWeHackを通じてJenkins Bug Bounty Programを開始し、エンタープライズサプライチェーンにおけるプラットフォームの重要な役割を反映しています。

面接準備のためのクロスプラットフォーム比較

機能GitHub ActionsGitLab CIJenkins
設定ファイル.github/workflows/*.yml.gitlab-ci.ymlJenkinsfile
実行モデル並列ステップ付きジョブベースステージベース(順次ステージ)ステージベース(柔軟)
ランナーホスティングGitHubホステッド + セルフホステッドGitLab.com共有 + セルフホステッドセルフホステッドのみ
シークレットストレージリポジトリ/組織/環境シークレットSecrets Manager + CI/CD変数Credentialsプラグイン
マトリクスビルドstrategy.matrixparallel:matrixmatrix(プラグイン)
手動ゲートenvironment + 必須レビュアーwhen: manualinputディレクティブ
マーケットプレイスマーケットプレイスに20,000以上のActionsCI/CDコンポーネントカタログ1,800以上のプラグイン
AI機能Copilot for ActionsDuo CI Expert Agentコミュニティプラグイン
価格設定パブリックリポジトリは無料、プライベートは分単位400 CI/CD分無料、その後段階制無料(オープンソース)、セルフマネージド

この比較表は、面接で最も一般的にテストされる違いをカバーしています。フォローアップの質問は通常、「新しいプロジェクトにどのプラットフォームを選択し、その理由は何ですか?」と尋ねます。回答は、既存のツール、チームサイズ、コンプライアンス要件、組織がマネージドインフラストラクチャ(GitHub/GitLab)を好むか完全な制御(Jenkins)を好むかによって異なります。

情報源

これらの質問をCI/CDの基礎GitHub Actions面接モジュールで実践的に練習するか、GitLab CIJenkins固有の質問を探索してください。CI/CD以外の幅広いDevOps準備については、DevOps面接の必須質問ガイドがトピックの全範囲をカバーしています。

今すぐ練習を始めましょう!

面接シミュレーターと技術テストで知識をテストしましょう。

CI/CDパイプライン面接のポイント

  • GitHub Actionsの並列ステップ(backgroundwait-allparallel)は2026年6月にリリースされ、ランナー、チェックアウト、ワークスペースを共有しながら単一のジョブ内で同時実行を可能にします
  • GitLab 19.xはネイティブSecrets Manager(オープンベータ、2026年5月)を導入し、スケジュールされたパイプライン実行ポリシーを一般提供(2026年7月)にして、外部ツールへの依存を軽減しました
  • Jenkins 2.574以降はJUnitやMailerを含むコアプラグインをWARファイルからアンバンドルし、アップデートセンターにアクセスできないインスタンスでは明示的なインストールが必要です
  • シークレット管理は3つのプラットフォームすべてで最も一般的にテストされるセキュリティトピックです。スコープ付きシークレット、保護された変数、資格情報ローテーション戦略の知識を示してください
  • キャッシュ、並列化、条件付き実行によるパイプライン最適化は普遍的に適用され、面接官に実践的な本番経験を示します
  • プラットフォームごとに少なくとも1つの動作するパイプライン設定を準備し、おもちゃの例ではなく実世界のパターンに焦点を当ててください

今すぐ練習を始めましょう!

面接シミュレーターと技術テストで知識をテストしましょう。

今日のチャレンジ

DevOps のバグを見つけられますか

実際のコード、隠れたバグ、1日1回。アカウントなしで試せます。

Anthony Fillion-Maillet

執筆

Anthony Fillion-Maillet

SharpSkill 創業者

10 年以上フルスタック開発に携わっています。SharpSkill を運営し、ここで公開される内容に責任を負っています。

2026年8月24日 更新

タグ

#devops
#ci-cd
#github-actions
#gitlab-ci
#jenkins
#interview

共有

関連記事