0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自動化テストのリアル | [第5回]: CI/CDにテストを組み込む

Posted at

🚀 自動化テストのリアル:CI/CDにテストを組み込む実践ガイド

1. はじめに:なぜ今、自動化テストが「リアル」なのか?

アジャイルやDevOpsの導入が当たり前となった現場では、**「テストを開発の最後にまとめてやる」**という古い習慣はもはや通用しません。

頻繁なリリース、マイクロサービス化、クラウドインフラの複雑化...それらすべてに共通する課題が、「テストの自動化と継続的な品質保証」です。

テスト自動化は「やるべきこと」ではなく、「やらないとデリバリーできない」時代に入ったのです。

本記事では、CI/CDパイプラインにテストをどう組み込むか?を軸に、理論だけでなく現場のノウハウまで徹底的に掘り下げていきます。


2. 自動化テスト × CI/CD の全体像

🔄 CI/CDとは何か?(簡単におさらい)

  • CI(継続的インテグレーション):コードを統合するたびに自動でビルドとテストを行う
  • CD(継続的デリバリー/デプロイ):ステージングや本番環境への自動デプロイ

🧪 自動化テストの種類とレイヤー

CI/CDに組み込むテストは、以下のようにレイヤーごとに分かれます:

テストレベル 主な目的 実行タイミング
ユニットテスト 関数やクラスの正しさ検証 プッシュ/PR時
統合テスト 外部APIやDBとの連携確認 マージ後/ステージング前
E2Eテスト 実際の画面操作による動作検証 デプロイ前/夜間バッチ

💡 ポイント

CI/CDにおいて重要なのは、「軽量なテストを早く、重いテストは賢く配置する」ことです。


3. 実践:GitHub Actions によるテスト自動化

ここでは、GitHub Actionsを使って簡単なNode.jsプロジェクトにCIテストを組み込む例を紹介します。

📁 プロジェクト構成例

/my-app
├── src/
├── test/
├── .github/workflows/test.yml
└── package.json

🧾 test.yml の中身(例)

name: Run Test on PR

on:
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout source
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install dependencies
        run: npm install

      - name: Run unit tests
        run: npm test

✅ 結果

  • PRを出すたびに自動でテストが走る
  • テストが失敗したらマージできない(品質ゲートラインの確保)

4. 現場で使えるTips & よくある落とし穴

💡 実践Tips

シチュエーション ベストプラクティス
テストの実行時間が長い jest --runInBandや並列処理で短縮
テストデータの初期化が面倒 beforeEachやDocker Composeを活用
DBや外部APIとの依存性 MockやStubで高速化&安定化

⚠️ よくある失敗例

  • CIでだけテストが落ちる
    → ローカルとCIの環境差異。.nvmrc.envの管理が重要。

  • E2Eテストが不安定
    → クリック待ち・アニメーション処理にwaitForを適切に使うこと。

  • テストが多すぎて遅い
    → ユニットテストと統合テストを分離し、パイプラインを分割しよう。


5. 応用:本番デプロイ前に自動E2Eテストを実行する

例えば、PlaywrightやCypressを使って以下のような構成も可能です。

jobs:
  e2e-test:
    needs: deploy-staging
    runs-on: ubuntu-latest
    steps:
      - name: Run Cypress E2E tests
        uses: cypress-io/github-action@v4
        with:
          start: 'npm start'
          wait-on: 'http://localhost:3000'

このように「デプロイ後に検証」という流れを自動化することで、本番障害のリスクを大幅に減らせます。


6. まとめ:テストは開発の一部である

✅ メリット

  • 変更の影響を即検出できる
  • 品質が継続的に保たれる
  • デプロイの自信とスピードが得られる

⚠️ デメリット(導入時の壁)

  • 初期構築のコストが高い
  • テストコードのメンテナンスが必要

🔮 今後の展望

  • AIによるテストケース生成の進化
  • テスト観点の自動分析
  • GitHub Copilotとの統合支援

✏️ 最後に:今日からできる一歩

もし今、CIでテストを回していないなら、まずはユニットテストだけでもいいので、GitHub Actionsを導入してみましょう。

npx jest --init

と始めるだけで、開発の安心感と効率化が劇的に変わるはずです。


📌 この記事が役に立ったと思ったら、LGTM👍やフォローをお願いします!

今後は「スマホアプリの自動テスト」なども深掘りしていく予定です!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?