Jenkinsを活用したWebアプリケーションテスト自動化の手引き
近年のソフトウェア開発では、迅速かつ高品質なリリースが求められる中で、継続的インテグレーション(CI)と継続的デリバリー(CD)の重要性がますます高まっています。中でも、Jenkinsはその高い拡張性と柔軟性から、さまざまなプロジェクトで活用されています。
本記事では、技術者向けに、Jenkinsを活用してWebアプリケーションのテストプロセスを自動化し、効率的に品質管理を行う方法を解説します。
Jenkinsとは
Jenkinsは、オープンソースの自動化サーバーであり、主に継続的インテグレーション(CI)および継続的デリバリー(CD)を実現するために利用されます。2004年に Hudson という名前で開発が始まり、その後2011年に現在のJenkinsへと名称変更されました。
Jenkinsの主な特徴は以下の通りです:
- 高い拡張性(プラグイン)
- 多様なプラットフォームサポート
- 簡単な設定と管理
- 豊富なCI/CD機能
- コミュニティの活発さ
- 導入が容易
「ソースコードのコミット」から「テスト」までの一連の流れを自動化することができ、効率よく開発ができるようになります。オープンソースで開発されていることから、無料で利用することができ、他のCIツールより普及しているのも特徴です。
プロジェクトフェーズでの活用
Jenkinsは特に実装、テスト、リリースでのフェーズで高い価値を出すことができます。これらのフェーズで自動化を実現させることにより、プロジェクト全体の効率性と信頼性を向上させることができます。
実装フェーズ
-
使用例:
- ソースコードのビルドと単体テストの自動化
- プルリクエストごとのビルドと結果通知
- 静的コード解析ツール(例: SonarQube)との連携によるコード品質チェック
テストフェーズ
-
使用例:
- 統合テストや回帰テストの自動実行。
- 複数環境(例: OSやブラウザ)のテストの並列実行
- テスト結果の可視化(JUnitレポートの収集)
リリースフェーズ
-
使用例:
- リリースビルドの作成
- ステージング環境へのデプロイ
- 本番環境へのデプロイ(手動承認付きのパイプラインなど)
運用・保守フェーズ
-
使用例:
- バグ修正や機能改善時の自動ビルドとテスト。
- 定期的なジョブ実行(例: バックアップの実行やモニタリングデータの収集)
- インフラ更新(例: TerraformやAnsibleとの連携による環境設定の自動化)
ジョブの実行イメージ
Jenkinsのジョブとは自動化したひとまとまりの処理のことを指します。また、ジョブを設定しているワークスペースをプロジェクトと呼びます。
JenkinsへのログインはWebブラウザを通して行います。初期設定ではローカルで動作していますが、ネットワーク設定を行うことにより、インターネットを通して、異なる企業間で同時に作業を行うことができます。
ダッシューボード
ビルド実行ボタンを押下すると、プロジェクトに設定されている処理が始まり、左下に実行結果が表示されます。緑色🟢(Versionによっては青色🔵)だとビルド成功で、赤色🔴だとビルド失敗を表します。途中でビルドをキャンセルしたりすると灰色のアイコンが表示されます。
ジョブ管理画面
ジョブの実行結果はコンソールに表示されます。画像の例では、スクリプトで指定した場所へのファイル生成が完了したことがログに記録されています。(ログの色付けはプラグインを使用しています)
コンソール出力結果
ジョブの実行結果はJenkinsで設定した期間、サーバー上に残り続けます。テストのみを実施している企業と開発や環境構築を行っている企業がそれぞれ同じ環境にログインできるため、障害調査などを素早く行うことができます。
他サービスと連携してテストを自動化する
Jenkinsはさまざまなサービスと連携できます。実際の業務で使用されている例としては、AWS上にインストールしたJenkinsとGitHubを連携させ、自動デプロイを行えるように設定し、取得したい情報をログに表示させるといったケースがあります。
IoTデバイスが動作している環境を例に見てみましょう。
このシステムでは、AWS上にインストールされたJenkinsがGitHubのコードを取得して、ネットワーク越しにあるIoTデバイスを動作させています。
ここでのJenkinsの役割は以下の通りです。
Jenkinsの主な役割
-
GitHubからコードを取得
- JenkinsはGitHubリポジトリから最新のコードを取得(
git clone
)します。 - コードの変更がプッシュされるたびにWebhookなどでトリガーされ、自動的にビルドやテスト、デプロイの処理が実行されます。
- JenkinsはGitHubリポジトリから最新のコードを取得(
-
コードのビルド
- JenkinsはMaven、Gradle、npmなどのビルドツールを使用してアプリケーションをビルドします。(ビルドツールはプラグインとしてあります)
-
テストの実行
- Jenkinsは以下のようなテストを自動で実行します:
- ユニットテスト(例:JUnit、PyTestなど)
- APIテスト(例:Postman、CURL)
- 統合テスト(LambdaとDynamoDBの連携確認など)
- Jenkinsは以下のようなテストを自動で実行します:
-
AWS Lambdaへのデプロイ
- Jenkinsはビルド済みのアーティファクトをAWS Lambdaにデプロイします。
- 具体的にはAWS CLIやSDKを使用してコードをLambda関数にアップロードします。
-
S3への静的ファイルアップロード
- フロントエンドの静的ファイル(HTML/CSS/JavaScript)をAmazon S3にアップロードします。
-
通知とレポート
- Jenkinsはビルドやデプロイの成功・失敗結果を通知します(例:Slack、メール)。
- テスト結果やログをレポートとして記録します。
GitHubとの連携例
JenkinsとGitHubの連携は大まかな手順は5つとなります。
手順 | 設定内容 |
---|---|
① プラグインインストール | GitHub Plugin、Pipeline: GitHub |
② Webhook設定 | GitHubの設定でJenkinsがコミットを検知できるようにする |
③ 認証情報の設定 | SSHキーまたはPATを使用 |
④ Jenkinsジョブ作成 | Gitリポジトリを指定、Webhookを有効化 |
⑤ Pipeline構成 |
Jenkinsfile でCI/CDを実装(Jenkinsの動作を決める) |
プラグインやパイプライン構成はインターネット上に多くの参考があり、公式のドキュメントなども存在するためわかりやすいと思います。Jenkins
パイプライン構成画面
Jenkinsのパイプラインとは?
Jenkinsのパイプライン(Pipeline)は、ソフトウェアのビルド・テスト・デプロイを自動化するためのワークフローを定義する仕組みです。Jenkinsfileを使用して記述され、手動操作なしにCI/CDを実行できます。
実践で想定される活躍シーン
実際の現場では、開発チームとテストチームが分かれて作業を行うことが一般的です。
今回の例ではIoTデバイスを取り上げましたが、Jenkinsを活用することで、IoTデバイスに指令を送るJSONファイルの内容を少しずつ変更しながら、リモート環境でのビルドや実行が可能になります。また、実行結果のログもJenkins上に保存されるため、各チーム間での確認作業がスムーズに進み、業務効率の大幅な向上が期待できます。
Jenkinsのパイプラインを活用することで、特定の条件を満たすテストケースのみを自動実行したり、異なる環境(例:開発環境、本番環境、ステージング環境)ごとに適切な設定を適用したりすることも可能です。
加えて、Jenkinsと通知システム(Slackやメール)を連携させることで、テストの進捗や異常検知をリアルタイムでチームに共有でき、迅速な対応が可能になります。さらに、ビルドやテストの履歴を蓄積することで、過去の変更による影響を分析しやすくなり、継続的な品質向上にも貢献します。
このように、Jenkinsを導入することで、開発・テストのプロセスを効率化し、システム開発の検証をより確実に進めることができます。
Jenkinsを導入する際に注意すること
Jenkinsは他のCI/CDツールに比べて歴史が古く、比較的新しいCI/CDツール(GitHub Actions、GitLab CI/CD、CircleCI、Travis CIなど)と比べると、セットアップや管理の負担が大きいという課題があります。特に、Jenkinsは自前でサーバーを立てる必要があるため、クラウドネイティブな環境では運用が煩雑になることがあります。
最近では、コンテナ技術(DockerやKubernetes)と連携したJenkinsの活用も進んでおり、Jenkins XのようなKubernetes向けの拡張版も登場しました。しかし、よりモダンな開発環境では、クラウドベースで簡単に利用できる他のCI/CDツールが選ばれることも増えてきています。
Jenkinsは非常に柔軟な運用が可能ですが、その分学習コストも高く、明確な運用ルールに基づいて厳密に使用されるべきツールです。すべてのプロジェクトで効果的でない点は注意しましょう。
まとめ
JenkinsはWebアプリケーションの開発、テスト実施を自動化してくれるツールです。
学習コストの高さはデメリットに挙げられますが、使いこなすことができれば、大規模案件や納期の短いプロジェクトでは非常に有用なツールとなります。Jenkinsはシステム開発を効率化する重要なツールの一つなので、その概念をしっかり理解しておきましょう。
Discussion