Slackへの投稿をトリガーしてGitHub Issueにナレッジ蓄積してみる

Slackへの投稿をトリガーしてGitHub Issueにナレッジ蓄積してみる

Slack GitHub claude Zapier automation

Slackに興味のある用語を入力した時に、その内容を自動的に調べてGitHubのイシューに登録してくれる仕組みを作ってみました。

今回はタイトルの通り、Slackへの入力をトリガーにしてリサーチを実行し、結果をGitHub Issueに蓄積していく仕組みを作ってみたので共有します。

まずは構成の結論から!

それでは早速結論として、今回どんな仕組みで実現したかみてみましょう。

システム構成

今回利用した構成を改めて列挙すると以下になります。

  • Slack: 気になるトピックを投稿するための専用チャンネル
  • Zapier: Slackの対象チャンネルへのメッセージをトリガーとして、GitHubイシューを自動で構築
  • GitHub
    • Issue: トピックごとの調査内容を集約
    • Actions: イシュー上でclaudeと連携するためのワークフロー
  • claude: トピックの調査およびラベル付け

今回の構成で特筆すべきはZapierでしょう。SlackとGitHubを連携させる方法はいくつかあると思いますが、Zapierをあえて選んだ理由としては以下が挙げられます。

  • 以前からZapierの存在は知っていたが使ったことはなかったので試してみたかった
  • 比較的簡単に利用できる、かつ複雑なワークフローも作成することができる

注意事項

今回共有する方法を実際に運用する場合、以下の点にご注意ください。

  • claudeを利用するため、利用トークン数によって課金が発生します。多くのトピックを調査させればそれに合わせて料金がかかりますので、ご自身でコスト管理を徹底してください
  • GitHub Actionsを用いて調査を実行します。Actionsを無料枠で利用する場合、上限になると制限が解除されるまでワークフローが動かせません。詳しくは公式ドキュメントを参照ください
  • Zapierは毎月100タスクまでは無料枠で利用できますが、多数のタスクを実施させたりやりたい内容によっては有料プランの検討が必要です。詳しくは公式ドキュメントを参照ください。なお、今回の検証を試すレベルであれば料金は発生しません。

作り方紹介!!

今回上記構成にてやりたいことを実現するためには、以下の流れで作業をします。

  1. Slackにてトピックを投稿するためのチャンネルを作成する
  2. 調査結果を投稿するためのGitHubレポジトリを作成する
  3. レポジトリにclaudeをインストールし、イシュー上でclaudeとやりとりできるようにする
  4. Zapier上でSlackへの投稿をトリガーして自動的にイシューを立ち上げるワークフローを組む

それでは早速それぞれのステップについてみていきましょう。

前提条件

作り方を紹介するにあたり、以下の項目については準備ができている程で進行させてもらいます。

  • claudeを利用することができる
  • GitHubアカウントがあり、自由にレポジトリを作成できること
  • Zapierが利用できる状態であること(freeプランで問題ありません)

Slackチャンネルの作成

こちらについては特別なことはしておらず、ただただトピックを投稿するためのチャンネルを作成してください。私はSlackにtech_research_githubというチャンネルを作りましたが、名前を特に指定はありません。

GitHubレポジトリの準備

今回やりたいことを実現するために、GitHubレポジトリのセットアップが必要です。まずは今回のトピックリサーチのために利用するレポジトリを立ち上げてください。なお、レポジトリはZapier連携時に認証によって適切にアクセス制限されるため、プライベートレポジトリでも連携可能です。

レポジトリが立ち上がった後に、claudeとの連携が必要になります。以下の手順でclaude連携を実現してください。

  1. レポジトリをローカルにcloneする
  2. cloneしたローカルレポジトリにてclaudeを起動
  3. /install-github-appを実行し、レポジトリにclaudeをインストールする

3については実行するとブラウザが起動し、連携のための方法が聞かれますので、画面の内容に従って進めてください。無事対応が完了すると、イシューだったりPRだったりで@claude XXXのようにすることでclaudeに指示をさせることができます。

Zapierでワークフローを作成

それでは今回最も重要であるZapierを用いたワークフローの構築方法を見ていきましょう。まずは再集計から見ていきましょう。以下の画像のようにSlackで新しいメッセージの投稿を検知してイシューを作成するというとてもシンプルなものとなっています。

それでは詳細を見ていきましょう。

Slackからメッセージを取得

Slackのチャンネルに投稿されたメッセージを取得するためには、ステップとしてSlackを追加し、以下のように設定をします。

  • 連携アプリケーション:Slack
  • トリガーイベント:New Message Posted to Channel
  • アカウント:連携するSlackワークスペース

次にどのSlackチャンネルと紐付けるかを設定します。今回はtech_research_githubというチャンネルを作ったので、以下のように設定します。

今回はTest項目は省略しますが、ここまで実施すると指定したSlackチャンネルに対して投稿されたメッセージが後続のステップから参照できるようになります。

GitHubでイシューを作成する

それではSlackステップにて取得されたメッセージをもとにGitHubのイシューを作成するところまで実施してみましょう。Slackステップの次にGitHubステップを追加し、以下のように設定します。

  • 連携アプリケーション:GitHub
  • アクションイベント:Create Issue
  • アカウント:連携するGitHubアカウント

次にGitHub連携の設定を進めます。以下のように設定します。

  • Repo:連携するレポジトリ
  • Title:イシューのタイトル
  • Body: @claude 調査してと設定することで指定したタイトルの内容について調査させる

ここで重要なのはイシューのタイトルの設定方法です。Title欄のテキストボックス右側にある+ボタンを押すと、以下のような表示が出てきて、どのような情報をTitleに設定するか設定できます。Previous Steps1. New Messasge Posted to Channel in...を選択することで先ほど作成したSlackステップの結果を利用できるようになり、その中でText helloを選択すると、投稿された内容がテキストとして取得できます。これをタイトルに設定することで、調べたい項目の名前がイシュー名になります。

デプロイ

ここまで設定すればワークフローは完成なので、利用できる準備をします。画面右上にPublishボタンがあるので、それを選択して公開してください。

早速使ってみる

それでは早速使ってみましょう。Slackのチャンネルに対して気になる用語を投稿してみましょう。すると、Zapier上で呼び出し履歴が追加されます。

Slack履歴 Zapier履歴 GitHub履歴

イシューにラベルを自動的につけたい場合

調査した内容がどんな内容か、例えば機械学習関連かクラウド関連化などをラベルで判断したい場合、例えば以下のようなGitHub Actionsワークフローを追加すると、claudeに自動できにラベル付けさせることができます。

name: Claude Issue Auto Label

on:
  issues:
    types: [opened]

jobs:
  auto-label:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      issues: write
      id-token: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Run Claude to investigate and add labels
        id: claude
        uses: anthropics/claude-code-action@v1
        with:
          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
          claude_args: '--allowed-tools WebSearch,WebFetch,Bash(gh issue:*),Bash(gh label:*)'
          prompt: |
            以下のGitHub Issueに記載されたプロダクト/技術を調査し、その調査結果をもとに適切なラベルを付与してください。

            Issue番号: ${{ github.event.issue.number }}
            タイトル: ${{ github.event.issue.title }}
            本文:
            ${{ github.event.issue.body }}

            ## ステップ1: 調査

            1. イシューのタイトルと本文から調査対象のプロダクト/技術を特定する
            2. WebSearch や WebFetch を使って以下の情報を収集する:
               - 公式サイトURL
               - 何ができるか・できないか(主なユースケース)
               - 技術スタック・対応言語
               - OSS か商用サービス(SaaS)か
               - 主な利用ドメイン(データ基盤、MLOps、API管理、セキュリティ など)

            ## ステップ2: 調査結果をもとにラベルを決定

            収集した情報を精査し、以下の観点で適切なラベルを複数選定する(最低2つ・最大10個):
            - 技術カテゴリ(例: framework, library, tool, platform, database, cloud, ai/ml)
            - ドメイン領域(例: frontend, backend, devops, security, data, infrastructure, api)
            - 関連プログラミング言語(例: python, javascript, go, rust, java)
            - その他特性(例: open-source, saas, cli, sdk)

            ### 必須ルール(該当する場合は必ず付与すること)
            - Apacheプロジェクト(Apache Software Foundation 配下のプロジェクト)の場合は「Apache」ラベルを必ず付与する
            - 生成AI(LLM、画像生成、コード生成など)に関連するプロダクトの場合は「GenAI」ラベルを必ず付与する
            - オブザーバビリティ関連(モニタリング、ログ、トレーシング、メトリクスなど)のプロダクトの場合は「Observability」ラベルを必ず付与する
            - OSSツール(オープンソースソフトウェア)の場合は「oss」ラベルを必ず付与する

            ## ステップ3: ラベルを付与

            1. `gh label list --repo ${{ github.repository }}` で既存ラベルを確認する
            2. 必要なラベルが存在しない場合は作成する:
               ```
               gh label create "<name>" --color "<hex_color_without_#>" --repo ${{ github.repository }}
               ```
               カラーの目安:
               - 技術カテゴリ系: 0075ca (青)
               - ドメイン領域系: e4e669 (黄)
               - 言語系: d93f0b (赤)
               - Apache: b60205 (濃い赤)
               - GenAI: 7057ff (紫)
               - その他: cfd3d7 (グレー)
            3. イシューにラベルを付与する:
               ```
               gh issue edit ${{ github.event.issue.number }} --add-label "<label1>,<label2>,..." --repo ${{ github.repository }}
               ```

まとめ

今回はZapierを利用することで、Slackに投稿したトピックをGitHubイシューとして登録し、claudeに自動的に調査させる方法を共有しました。Zapierはまだ使い始めなので、今後もっといろいろな使い方が出来ればと思います。