🔰

プログラミング初心者がClaudeと一緒にGitHub Actionsを作ってみた話

に公開

はじめに

この記事は GENDA Advent Calendar 2025 シリーズ3 Day 9 の記事です。

https://qiita.com/advent-calendar/2025/genda

開発経験ほぼゼロの初心者が、Claude codeを使って、GitHub Actionsを開発してみました。

自己紹介

株式会社GENDA データエンジニアのnowakaです。
最近データチームにジョインしたのですが、それまでは別部署で働いていました。
エンジニアらしい開発経験はほぼゼロの初心者です。

開発背景

Slackの会話内容を要約して、GitHubのIssueを自動作成するツールを作りました。

私の所属するチームでは、タスクをGitHubのIssueで管理しています。
一方で、他部署からの依頼は、Slackの依頼専用チャンネルで飛んできます。

Slackの会話内容を、毎回Issueの体裁に整えて起票するのは面倒です。
「自動化ツールが欲しい」という声がチーム内で上がっていたので、手をあげました。

完成イメージ

Slackでメッセージが投稿されると、スレッドに下記のようなボタンを自動返信します。
ボタンを押すとGitHub Actionsが起動し、スレッドの内容をClaude APIで要約して、GitHubにissueとして起票します。


slackで「Issueを作成」ボタンを押すと……


スレッド内容を要約して、GitHubにIssueとして連携してくれる!

構成図

チームメンバーから「GitHub Actionsを使えばできそう」とのアドバイスをもらいました。
とはいえ、何から手をつけたらいいのか全く分かりません!

ということで、GeminiのDeep Research機能でやりたいことを雑に投げてみたら、全体の構成を考えてくれました。
実際のプロンプトは埋もれてしまって見つからないのですが、下記のような感じで投げました。

## やりたいこと
SlackのスレッドをClaudeで要約して、GitHubにissueとして起票するアプリを作りたい。
Slackにメッセージが投稿されたらボタンを自動返信して、ボタンを押したらIssueを作成するようなイメージ。
GitHub Actionsを使えばできそうな気がする
構成図を作ってください

返ってきた構成図を元に開発してみながら色々と調整した結果、最終的には下記のような構成になりました。

Geminiを使ったのは構成図を考えるところまでです。
このタイミングでちょうどClaude Codeを使い始めたので、この後はClaude Codeと一緒に頑張りました。

開発フェーズ

  1. GitHubでトークンを発行
  2. Slack APIでSlackアプリを作成
  3. Slackにボタンを返信するLambdaを作成
  4. GitHub Actionsを起動するLambdaを作成
  5. GitHub Actionsを作成

1.GitHubでトークンを発行

GitHub Actionsを動かすために、fine-grained personal access tokenを発行します。
後述のLambdaを作るときに必要になるので、安全な場所に保管しておきます。

2.Slack APIでSlackアプリを作成

後述のLambdaやGitHub Actionsで、Slackの会話内容をAPIで取得する処理があります。
このときにSlackのトークンが必要になるので、Slackアプリを作成してトークンを発行します。
下記のサイトから作成できました!

https://api.slack.com/apps

3.Slackにボタンを返信するLambdaを作成

Slackに「Issueを作成」というボタンを返信する処理を作ります。
コードは全てClaude Codeに書いてもらいました!
具体的なコードは長くなるので割愛しますが、下記のような処理を書いてもらいました。

Lambda

  • Slack APIでスレッドの会話内容を取得
  • スレッドに「Issueを作成」ボタンを返信

Slack API側の設定

  • Event Subscription機能で、メッセージの新規投稿を検知してWebhookを起動するように設定
  • Event Subscriptionに、Lambdaの関数URLを貼り付け

4.GitHub Actionsを起動するLambdaを作成

「Issueを作成」ボタンを押したらGitHub Actionsを起動するようにします。

Lambda

  • Slackの会話内容を取得
  • OctokitでGitHub Actionsを起動し、Slackの会話内容を渡す
  • Slackのスレッドに「Issue作成処理を開始しました」と返信

Slack API側の設定

  • Interactivity & Shortcutsに、Lambdaの関数URLを貼り付け

5.GitHub Actionsを作成

GitHub Actionsで下記の処理を実装しました。
こちらもコードはClaude Codeに書いてもらいました。

yamlファイル

  • 下記のスクリプト群を呼び出し

スクリプト群

  1. slackの会話内容をAPIで取得して、レスポンスから必要な内容(会話内容・ボタンを押したユーザ名)だけを抜き取る。
  2. プロンプトファイルを読み込んで、Claude APIで会話内容を要約する。
  3. ボタンを押したslackユーザと、GitHubのユーザをマッピングする。
  4. Issueを作成する。
    このとき、IssueのAssigneeに、ボタンを押したユーザをセットする。
  5. SlackにIssueのURLを返信する。

設定ファイル

  1. ClaudeにIssueを作成してもらうためのプロンプトファイル
    • Issue作成時のフォーマットを指定する。
      Issueテンプレートなどがあれば、そのパスを指定しておく。
    • slackのスレッドURLをIssueに明記してもらう。
  2. SlackユーザとGitHubユーザのマッピング表
    • チームメンバー全員分を気合いで書く。

感想

  • 作れた! うれしい!
    • AIにかなりサポートしてもらったとはいえ、自分の手でツールを完成させられたのはシンプルにうれしいです。
  • 構成図は大事
    • 最初にGeminiに構成図という道筋を作ってもらえたおかげで、手を動かしはじめることができました。
  • 疑いは大事
    • AIの回答に対する疑いの気持ちを忘れないのは大事だなと思いました。
      初心者なので手を動かしてみないと分からない部分は多いのですが……。
    • 最初にGeminiに作ってもらった構成図だと、SlackアプリをBoltでガッツリ書いていくような感じでした。
      実際に開発していくうちに「これ本当に必要か……?」となりました。
    • Claude codeに「Geminiからこんな構成図もらったけど、どう?」とレビューしてもらって、無事にSlack APIのサイトを使う方針に軌道修正できました。
  • コーディング全くしてない
    • コーディング部分はClaude Codeに全てお任せしたので楽でした。
    • 書いてもらったコードの中身は人間が理解する必要がありますが、Claude codeは何度質問しても嫌な顔せず丁寧に教えてくれます。やさしい。
  • レビュアーの負荷
    • 基本のお作法的な部分を知らないまま実装しているので、レビューの際に指摘をたくさんいただきました。
      レビュアーの方は大変だったと思います……。
    • 最初はAIにレビューしてもらって、基本的な部分は潰しておくべきでした。

Discussion