バフェット・コードのブログ

企業分析やプロダクト開発にまつわる記事を配信中

プロダクトリリース時にSlack通知して起きたこと

こんにちは、バフェットコード開発部の aoking です。

バフェットコードでは、プロダクトをリリースした際、社内 Slack にその旨を通知するようにしています。 その背景と Slack 通知の仕組み、それから通知するようになってからの変化について記します。

従前のリリース状況

バフェットコードが今よりも小さいチームだった頃の話です。当時はプロダクトをリリースする際に、明示的な通知を行わなくても特に問題にはなっていませんでした。もちろん重要な機能リリース時は関係者にメンションしていましたが、些細なリリースは特に告知していませんでした。バフェットコードでは毎日のようにプロダクトがリリースされるため、すべて告知するのは非現実的だったのです。

良くも悪くも、変化目まぐるしいスタートアップでした。しかし何事も変化していきます。我々のチームにもメンバーが増え、プロダクトの更新を社内に告知する必要性が増してきました。

というのも、チームメンバーが増えたことでプロダクトリリース後に顧客に連絡したいケースが増えたからです。例えば新機能リリースについてはそれを求めている顧客にお伝えして満足感を高めてもらいたいですし、もし顧客から指摘された不具合であれば修正後に速やかに改修したことを連絡したいからです。

従来は、重要そうなリリースであれば関係者にメンションしていたのですが、これをエンジニアがすべて判断するのは負担が大きいです。これを改善し、リリースごとにリリース内容を Slack 通知することにしました。

リリース内容を Slack 通知

我々はリリース時に行うプロセスに「リリース内容を必ず書く」ことを取り入れ、それを Slack 通知することにしました。

具体的には、我々のリリース処理は GitHub の main ブランチへのマージ処理で行われます。この main ブランチへのプルリクを リリース PR と呼んでいます。このリリース PR に「リリース内容」欄を設置し、ここにリリース内容を記載してマージ(リリース)すると、Slack 通知するよう作り込みを行いました。

具体例を示します。リリース PR の「リリース内容」に、今回のリリースで実装した新機能や不具合修正の内容などを記載します。このリリース PR の本文内容は git-pr-release を用いてテンプレート化しており、入力忘れが無いようにしています。

このリリース PR をマージした際、リリース内容を通知するため、GitHub Actions のデプロイ処理の最後にこのような処理をしています。 全部書くと長いので一部抜粋しますが、まず最初のステップでリリース PR の情報をまとめて $GITHUB_OUTPUT に入れています。

steps:
curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
    -H "Accept: application/vnd.github.groot-preview+json" \
    "https://api.github.com/repos/${{ github.repository }}/commits/${{ github.sha }}/pulls" | tee prs.json

body=$(jq -r '.[0].body' prs.json)
{
    echo "body<<EOF"
    echo "$body"
    echo "EOF"
} >> "$GITHUB_OUTPUT"
echo "url=$(jq -r '.[0].html_url' prs.json)" >> "$GITHUB_OUTPUT"

次に、この情報を用いてリリース内容を取り出し、Slack Webhook URL にリクエストを投げています。 ここはシェルスクリプトなので、リリース内容が複数行であることをケアしています。

PR_BODY="${{ steps.pr_info.outputs.body }}"
PR_URL="${{ steps.pr_info.outputs.url }}"

RELEASE_CONTENT=$(echo "$PR_BODY" | awk '
    /^## リリース内容/ {flag=1; next}
    /^## / && flag {flag=0}
    flag
')

JSON_TEXT=$(jq -n --arg url "$PR_URL" --arg content "$RELEASE_CONTENT" \
    '{text: "*リリースしました!*\n*URL:* \($url)\n*リリース内容:*\n\($content)"}')
curl -X POST -H 'Content-type: application/json' \
    --data "$JSON_TEXT" \
    "$SLACK_WEBHOOK_URL"

正常に動くと、めでたく Slack のチャンネルにこのような通知がやってきます。 このチャンネルはリリース通知専用チャンネルで、通知を受け取りたい人が自由にチャンネルに参加しています。

リリース通知をするようになってからの変化

リリース通知をするようになってから、いくつか良いことがありました。まずは一番の目的であった、社内への周知が行えるようになったことです。速やかにリリース内容を受け取れるので、社内の多くの人が通知受け取り設定しています。 リリース通知を受け取る側としても、多くて一日に数回程度なので通知が多すぎて負担になるということもありません。

副次的な良い効果もありました。リリース内容を通知するためには、リリース PR に含まれる各 PR が何をやっているのかちゃんと把握する必要があります。そのため、リリース PR ではない通常の PR でも、本文を丁寧に書くようになりました。

また、Slack のリリース通知にセールスサイドの方がコメントやスタンプをくれたりして、コミュニケーションにも役立っています。良かったら皆様もリリース内容の Slack 通知をご検討ください。

バフェットコードでは、製品だけでなく社内の問題も解決するエンジニアを募集しています。We Are Hiring!

career.buffett-code.com