こんにちは!日々のビルドやデプロイ、本当にお疲れ様です。
CI/CDパイプラインを回していると、緑色の「Success」や赤色の「Failure」という味気ない文字の羅列に、だんだん心が麻痺してきませんか?
「またビルドが落ちた…」とチャットツールが殺伐とした雰囲気になったり、成功しても誰も見向きもしなかったり。これでは、せっかくの自動化もただの「監視システム」になってしまいますよね。
そこで今回は、Jenkinsのビルド実行を「ゲーム化」して、Slack通知をエンタメに変えてしまう極上のハックをご紹介します!
これからJenkinsを触る初心者の方でも安心してできるように、ツールの基礎から丁寧にお供しますよ。これをマスターすれば、チームのSlackがちょっとしたゲーセンのような熱気に包まれ、毎日の開発が劇的に楽しくなりますよ!
—
1. Jenkinsってなに?(初心者のための基礎知識)
まずは、「Jenkins(ジェンキンス)」というツールの正体から紐解きましょう。
一言で言うと、Jenkinsは「あなたの代わりに24時間働いてくれる、超優秀な自動化ロボット執事」です。
開発者が書いたコードをGitHubなどのリポジトリから受け取り、自動でビルド(組み立て)し、テストを走り抜けさせ、本番サーバーへデプロイする――この一連の面倒でミスしやすい作業(CI/CD)を、すべて自動でこなしてくれます。
2. インストールと最も重要な初期セットアップ
百聞は一見に如かず、実際に動かしていきましょう。今回は一番手軽なDockerを使った方法をご紹介します。ターミナル(CUI)を開いて、以下のコマンドを叩いてみてください。
docker run -d \
–name jenkins-master \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts-jdk17
これだけで、あなたのローカル環境にJenkinsの要塞が立ち上がります。ブラウザで `http://localhost:8080` にアクセスしてみましょう。
初回ロック解除の儀式
最初に「Administrator password」を要求されます。これはセキュリティのための合言葉です。焦らず、以下のコマンドをターミナルで実行してパスワードを覗き見してください。
docker exec jenkins-master cat /var/jenkins_home/secrets/initialAdminPassword
画面に表示された長い文字列を入力したら、「Install suggested plugins(おすすめプラグインのインストール)」を選びます。Jenkinsが自律的に必要なパーツを揃えてくれるので、コーヒーでも飲みながら数分待ちましょう。
—
3. 精度高い「Hello World」!最初のパイプライン
プラグインのインストールが終わると管理者アカウントの作成画面になります。それをサクッと突破したら、いよいよJenkinsの心臓部である「Pipeline(パイプライン)」を作ります。
1. 左メニューの 「新規アイテム作成 (New Item)」 をクリック。
2. アイテム名に `my-first-game-pipeline` と入力し、「Pipeline」を選択して「OK」。
3. 設定画面の下部にある「Pipeline」セクションまでスクロールし、以下のスクリプトを貼り付けて「保存」を押してください。
pipeline {
agent any
stages {
stage(‘挨拶の儀式’) {
steps {
echo ‘こんにちは!Jenkinsの世界へようこそ!’
}
}
stage(‘ビルドの試練’) {
steps {
// 成功率をランダムにシミュレート(ゲームっぽさの第一歩)
script {
def luck = new Random().nextInt(10)
if (luck < 2) {
error('痛恨のミス!モンスターが現れてビルドを食い荒らした!')
} else {
echo '見事にモンスターを撃破!ビルド成功!'
}
}
}
}
}
}
保存画面から「ビルド実行 (Build Now)」を押してみましょう。左側の履歴に丸いアイコン(ボール)が出てきますよね?
青色になれば成功、赤色になれば失敗です。これがJenkinsの基本の「Hello World」です!
—
4. 本題:Jenkinsを「ゲーム化」してSlackに面白く通知する!
さあ、ここからが本番です。単なる「成功・失敗」の味気ない通知を、開発チームのテンションを爆上げするゲーミフィケーション通知へと進化させましょう!
実装のポイント
今回は、以下の要素を盛り込んだGroovyスクリプト(Jenkinsfile)を書きます。
1. タイムアタック要素:ビルドにかかった時間を計測し、速さに応じて称号(ランク)を付与。
2. ランダム・フレーバーテキスト:成功・失敗時にSlackへ流れるメッセージをランダムに変えて、ガチャを回すようなワクワク感を演出。
3. Slack連携:専用のWebhookを使って、リッチな見た目で通知。
以下のコードを、あなたのプロジェクトの `Jenkinsfile` として配置するか、先ほどのパイプライン設定に貼り付けてみてください。
// グローバル変数として称号を定義
def rankName = “”
def flavorMessage = “”
pipeline {
agent any
stages {
stage(‘冒険の開始 (Build)’) {
steps {
echo ‘ソースコードのダンジョンを探索中…’
// ビルド処理のシミュレーション
sleep 3
}
}
stage(‘ボス戦 (Test)’) {
steps {
echo ‘テストの魔王と戦闘中…’
// 運悪く失敗することがある演出
script {
if (currentBuild.number % 5 == 0) {
error(“【全滅】魔王のブレスによりパーティが全滅しました。”)
}
}
}
}
}
post {
success {
script {
// 実行時間(秒)を計算
def durationSec = (currentBuild.duration ?: 0) / 1000
// タイムアタックに応じたランク付け
if (durationSec < 10) {
rankName = "⚡ 伝説の超音速・スピードスター (SSランク)"
} else if (durationSec < 30) {
rankName = "⚔️ 熟練の冒険者 (Aランク)"
} else {
rankName = "🐢 慎重派の亀さん (Bランク)"
}
// 成功時のランダムフレーバー
def successFlavors = [
"「やったぜ!次のステージへ進む鍵を手に入れた!」",
"「全サーバーが君の勇姿を讃えている!」",
"「見事な剣さばきだ!バグどもが逃げ出していく!」"
]
flavorMessage = successFlavors[new Random().nextInt(successFlavors.size())]
// Slackへ送るリッチなメッセージの組み立て
def slackMessage = """
【🎉 BUILD VICTORY! 🎉】
プロジェクト: `${env.JOB_NAME}`
ビルド番号: #${env.BUILD_NUMBER}
タイム: `${durationSec}秒`
称号: ${rankName}
> ${flavorMessage}
<${env.BUILD_URL}|👉 クエストの戦果を確認する>
“””
// 実際のSlack通知処理(Slackプラグインを使用するか、curlでWebhookを叩く)
// 今回はシンプルにログ出力で代用しますが、slackSendステップに置き換え可能です
echo “=== SLACKに送信されるメッセージ ===”
echo slackMessage
echo “==================================”
}
}
failure {
script {
def failureFlavors = [
“「なんと!落とし穴にハマってしまった!」”,
“「エラーという名のモンスターに足元をすくわれたぞ!」”,
“「おいおい、誰だポーションを飲み忘れたのは!」”
]
flavorMessage = failureFlavors[new Random().nextInt(failureFlavors.size())]
def slackMessage = “””
【💀 GAME OVER (BUILD FAILED) 💀】
プロジェクト: `${env.JOB_NAME}`
ビルド番号: #${env.BUILD_NUMBER}
> ${flavorMessage}
<${env.BUILD_URL}|👉 敗因を分析してリトライする>
“””
echo “=== SLACKに送信されるメッセージ ===”
echo slackMessage
echo “==================================”
}
}
}
}
このカスタマイズがもたらす魔法
このパイプラインを動かすと、Slackには単なる「Success」ではなく、まるでRPGのクリア画面のような通知が飛び込むようになります。
- 「おっ、今回のビルド、SSランクじゃん!速いな!」
- 「今日の失敗メッセージ、なんかウケるんだけど(笑)」
たったこれだけの遊び心が、殺伐としがちなチームの雰囲気を和らげ、「どうやったらビルド時間を縮めてSSランクを取れるか?」というエンジニアたちの新たなモチベーション(最適化の沼)を生み出します。
—
おわりに
今回は、Jenkinsの基礎から、Slack通知をゲーム化してチームのモチベーションをハックする方法までをご紹介しました。
CI/CDは単なる「作業の自動化ツール」ではありません。チームの文化や開発体験そのものをデザインするための最高のキャンバスです。
これをマスターすれば、毎日のデプロイが少しだけ楽しみになりますよ。ぜひあなたのチームのSlackでも試してみてくださいね。それでは、良き自動化の旅を!