はじめに
本記事は「QualiArts Advent Calendar 2025」5日目の記事です。
23新卒のバックエンドエンジニアの苅谷です。
大学・大学院では機械学習を専攻し、現在はモバイルゲームのバックエンドエンジニアとして働いています。
今回は、ゲーム開発現場で日常的に発生する問い合わせ・トラブルに対して、コストパフォーマンス良く対応できる Slack ワークフロー活用術を紹介します。
背景
ゲーム開発には、ゲームデザインを行うプランナー、仕様を実装するエンジニア、UI を制作するデザイナーなど、さまざまな職種が関わります。
一つのプロダクトを作る中で日々多くの問題が発生し、それぞれの担当者へ Slack 上でメンションを付けて対応を依頼するのが一般的です。
しかし、開発規模が大きくなるにつれ、
- 該当機能の担当者がわからない
- セクション全体にメンションしてしまい、関係のない人まで通知が飛ぶ
- 通知過多によって本来のタスクに集中できない
といった問題が発生しやすくなります。
そこで本記事では、Slack ワークフローを利用して“適切な担当者だけに”メンションが届く問い合わせフローを作る方法を紹介します。
前準備
まず、問い合わせを集約するための Slack チャンネルを作成し、プロダクトに関係するメンバーを招待します。
問い合わせを一箇所にまとめることで、
- チーム全体が状況を把握しやすくなる
- 重複問い合わせが発生しにくくなる
といったメリットがあります。
次に、後述するワークフローを作成し、チャンネルにはワークフロー経由の投稿のみを許可します。
これにより、問い合わせ方法が統一され、正しい運用が徹底できます。
本記事では、ワークフローの作り方を2つ紹介します。
- Slack Workflow Builder を使う方法(ノーコードで簡単・メンテしやすい)
- Slack CLI を使ってアプリとしてデプロイする方法(柔軟で拡張性が高い)
まずは Workflow Builder を使ったシンプルな例を紹介します。
ワークフローの作成(Slack Workflow Builder 編)
フォーム入力と条件分岐(ブランチ)を組み合わせたワークフローを作成します。
Step 1:ワークフローの作成
- Slack の「Workflow Builder」を開く
- 新規ワークフローを作成し、名称を 「トラブルシュート」 に設定
- トリガーとして 「Slack 内リンクから開始」 を選択
Step 2:情報収集フォームの作成
問い合わせに必要な以下の情報をフォームで収集します。
- カテゴリ(選択式)
- 内容(テキスト)
- 画像・動画・ファイルの添付
最低限この3つを収集しておくことで、担当者は状況をより正確に把握できます。
Step 3:ブランチ(条件分岐)の設定
フォームで選択されたカテゴリに応じて条件分岐を行い、
それぞれのカテゴリ担当者にメンションが飛ぶように設定します。
ただし、Workflow Builder では ブランチは最大15件まで という制限があります。
より多くのカテゴリを扱いたい場合、次の Slack CLI を用いたアプローチが有効です。
ワークフローの作成(Slack CLI 編)
ここでは Slack CLI を使い、Workflow Builder の ブランチ制限(15件)を回避できるカスタムステップアプリを作成する方法を紹介します。
Slack CLI のセットアップ
まず Slack CLI をインストールします。
$ curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
次に、Slack ワークスペースと認証します。
$ slack auth login
Slack CLI でアプリを作成する
trouble-shooter というアプリを作成します。
$ slack create trouble-shooter
対話形式で選択肢が出るので、
-
「Automation app — Custom steps and workflows」 を選択
-
「Bolt for JavaScript」 を選択
すると、カスタムステップ付きアプリのテンプレートが生成されます。
このうち manifest.json と app.js を編集します。
manifest.json の編集
functions の input_parameters に必要なパラメータを追加します。
{
"functions": {
"send_message_step": {
"title": "Send message step",
"description": "Send message to channel with user",
"input_parameters": {
"user_id": {
"type": "slack#/types/user_id",
"title": "User",
"description": "送信したユーザーのID",
"is_required": true
},
"channel_id": {
"type": "slack#/types/channel_id",
"title": "Channel",
"description": "送信先のチャンネルID",
"is_required": true
},
"category": {
"type": "string",
"title": "Category",
"description": "カテゴリ",
"is_required": true
},
"message": {
"type": "string",
"title": "Message",
"description": "送信するメッセージ",
"is_required": true
}
},
"output_parameters": {}
}
}
}
app.js の編集(カスタムステップの処理)
app.function('send_message_step', async ({ client, inputs, logger, fail }) => {
try {
const { user_id, channel_id, category, message } = inputs;
const headerMessage = `送信者\n<@${user_id}>\n\nカテゴリ\n${category}\n`;
let categoryMessage = '';
switch (category) {
case 'インゲーム':
categoryMessage = `${インゲームメンバーへのメンション}\n\n`;
break;
case 'アウトゲーム':
categoryMessage = `${アウトゲームメンバーへのメンション}\n\n`;
break;
default:
break;
}
const bodyMessage = `メッセージ\n${message}`;
await client.chat.postMessage({
channel: channel_id,
text: headerMessage + categoryMessage + bodyMessage,
});
} catch (error) {
logger.error(error);
await fail({ error: `Failed to handle a step request: ${error}` });
}
});
動作確認とデプロイ
アプリをローカルで動作確認します。
$ slack run
Workflow Builder でこのカスタムステップが選択できるようになります。
フォームで入力した値を input_parameters に渡すよう設定しましょう。
最後にアプリをデプロイします。
$ slack deploy
これで、Workflow Builder の ブランチ制限を気にせずに
任意のカテゴリ数に対応した問い合わせフローが作れるようになりました。
おわりに
Slack Workflow Builder を使えば、担当者にだけ通知が届く問い合わせフローを簡単に構築できます。
さらに Slack CLI を組み合わせることで、より柔軟で強力なワークフロー運用が可能になります。
不要なメンションが減ることで、チームメンバーがより集中できる環境を作りました。
今後もコストパフォーマンス良く効果が大きい改善を提供できればと思います。



