【社内ハッカソン】AIとノーコードでSlackを強化!イベント告知を自動でGoogleカレンダーに登録するBOT開発レポート

こんにちは!人事広報部 カルチャーコミュニケーションチームの石井です。

先日、エイプリルナイツ社内で「AIハッカソン」が開催されました!テーマは「AIを使って社内コミュニケーション改善ツールを作ろう!」というもの。

「Slackでのリアクションが少ない、コメントしにくい…」といった、日々のコミュニケーションにおけるちょっとした課題を、AIの力で解決しようという試みです。
 
「完成しなくても全く問題なし!AIでアイデアを形にする過程を楽しもう!」という運営チームのエンジニア、鈴木さんと三沢さんの温かい言葉に後押しされ、当日は12名が参加!
 
 
開発を加速させるためのサポートツールとして、AIワークフローを構築できる「Dify」や、各種サービスを連携できる「n8n」、そしてコーディングを支援する「Claude Code」
APIなどが会社から提供されました。
 

ハッカソン開催レポートはこちら

やってみたいが形になる文化!エイプリルナイツ初の「AIハッカソン」を開催しました!

僕自身は全くエンジニアではありませんが、「AI時代の波に乗り遅れるな!」という思いで、バックエンドエンジニアの神代さんとチームを組んで参加してきました。

この記事では、僕たちが1日で「Slackのイベント告知を自動でGoogleカレンダーに登録するBOT」を開発した際のアイデア出しから完成までの道のりをご紹介します!

今回実現したいこと

皆さんの会社では、Slackなどのチャットツールでの情報共有は活発ですか?

エイプリルナイツでは、日々多くのチャンネルで様々な情報が飛び交っています。特に#all_社内告知 チャンネルでは、ゲーム交流会のお知らせや〇〇会(タコパ会・スノボー会・飲み会)企画のお知らせなど、楽しいイベントの情報で賑わっています。

しかし、活発さゆえの悩みもありました。

「面白そうなイベント告知があったのに、他の話題に流されて見失ってしまった…」
「後で確認しようと思って、忘れてしまった…」
「いつどんなイベントがあるのか一目で分かるようにしたい」

実際こんな経験が何度かありましたし、メンバーからも改善を求めるの声がありました。
そこで今回は「イベント情報の見逃し」と「社内カレンダーへの手動登録の手間」を解決するのを目標とします!

システム構成

今回開発するBOTの全体像は以下の通りです。

システム構成図のイメージ

今回の開発では、まず PythonClaude を使ってコアとなるロジックをAIを使って迅速に開発し、そのロジックを最終的にノーコードツール Dify のワークフローに落とし込むというアプローチを取りました。

  1. Slack:ユーザーが「#all_社内告知」チャンネルにイベントを投稿する。
  2. BOT (Python):投稿をトリガーに処理が起動。投稿内容を生成AI「Claude」に渡す。
  3. Claude (生成AI):2段階の思考プロセスで、まず「イベント告知かどうか」を判定し、次にイベント情報(タイトル、日時、場所など)をJSON形式で抽出させる。
  4. Dify:Pythonで確立したロジックをワークフロー化。Slackからの情報を受け取り、整形してGoogleカレンダーに渡す。
  5. Google Calendar:APIを通じて新しい予定が自動で登録される。
  6. Slack:Google Calendarと連携済みの「#all_社内カレンダー」チャンネルにイベント情報が投稿される。

この構成でロジックはPythonとClaudeで柔軟に開発しつつ、最終的な運用は非エンジニアでもメンテナンスしやすいDifyで行えるようになります。

構築の流れ

それでは実際の開発プロセスをご紹介します。

STEP1:アイデア出しと基本設計

開発は、リアルな課題の洗い出しから始まりました。

人事広報部:石井
社内告知チャンネルって、情報量が多くてすぐ流れちゃいません?後で確認しようと思って、忘れてしまったって声が挙がってたりもするし、個人的にも一目でどんなイベントが今後開催予定なのか見れるように改善したいんですよね。その方がみんな情報追いやすいかなみたいな。
エンジニア:神代さん
あー、めっちゃわかる。しかもカレンダーのメンテナンスも今は手動でしょ?後でカレンダーに登録しようと思って忘れることもよくありそう(笑)
人事広報部:石井
そうなんですよ!この後やろうと思っていても忘れたりしてますw….。どうにか自動化できないものかと…..。SlackワークフローだとBOTが社内告知を送信することになっちゃって人間の温かみが消えるので、各メンバーが投稿する日付やイベント内容などの最低限の情報をソースに社内カレンダーに自動登録できるようにしたいんですよ!!!

この会話をきっかけに、神代さんの頭に具体的なシステム像が閃きます。

エンジニア:神代さん
じゃあ、Slackの投稿内容をAIに解釈させて、Googleカレンダーに自動で予定を入れるBOTを作ろう。まずはPythonとClaudeで素早くプロトタイプを作って、最終的にノーコードツールDifyのワークフローに落とし込む形なら1日でもいけるかも?

 

僕が出したフワッとした課題感を、頼れるエンジニアが確かな技術的アプローチに落とし込んでくれました。ちなみに役割は以下の通りです。

  • 神代さん: 設計・実装・AIへの指示など、開発全般
  • 僕(石井): アイデア提供・要件の壁打ち

STEP2:AIによる情報抽出ロジックの実装

最初の関門は、「AIにどうやってイベント情報を正確に抽出させるか」でした。

今回はAIにClaudeを活用。神代さんはここで、AIの役割を2つに分けるという戦略を取りました。

  1. イベント判定AI:まず、投稿されたテキストが「イベント告知」なのか、それともただの「雑談」なのかを判定させる。
  2. 情報抽出AI:「イベント告知」だと判定された場合のみ、そのテキストから「タイトル」「日時」「場所」などの具体的な情報をJSON形式で抜き出させる。

2段階構成にすることで雑談にまでAIが反応してしまうのを防ぎ、BOTの精度と効率を上げる狙いです。

しかし、単純に「イベント情報を抽出して」と指示するだけでは、AIはなかなか期待通りに動いてくれません。

エンジニア:神代さん
もっとAIが理解しやすいようにプロンプトを工夫しないとダメだね。『投稿の中から、”YYYY-MM-DD HH:MM”という形式で日時を抜き出して』とか、具体的なルールと出力形式を厳密に定義してあげないと。

例えばイベント情報を抽出するAIには以下のような指示を与えました。

 

イベント告知から情報を抽出してください。
日時は必ず"YYYY-MM-DD HH:MM"形式に変換してください。
値が見つからない場合は空文字列を返してください。

この指示と、厳密な出力形式の定義を組み合わせることで、AIはまるで新人エンジニアのように、Slack上の曖昧なテキストから構造化されたデータを生成してくれるようになります。

// Claudeに期待する出力形式(JSON Schema)
{
    "type": "object",
        "properties": {
        "title": { "type": "string" },
        "start_time": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$" },
        "end_time": { "type": "string" },
        "location": { "type": "string" },
        "description": { "type": "string" }
    },
    "required": ["title", "start_time"]
}

▲AIに「このような形式で情報を整理して」と厳密に型定義を伝えることで出力が安定する。

STEP3:GoogleカレンダーAPIとの連携

ここでこの日最大の難関が訪れます。それはPythonのスクリプトからGoogleカレンダーAPIとの連携です。

プログラムからGoogleカレンダーを操作するには、「認証」を突破しなければなりませんが、なかなかうまく行きません。

サービスアカウント、OAuth 2.0、クライアントID、リダイレクトURI…。神代さんの画面に次々と現れる専門用語の数々。公式ドキュメントと格闘するも、問題はなかなか解決しません。

マジこれ

 

def add_event(self, event_data: Event):
    """Googleカレンダーに新しいイベントを追加する"""
    try:
        # 認証情報をロード
        creds = self._load_credentials()
        service = build("calendar", "v3", credentials=creds)

        # APIを呼び出してイベントを挿入
        event = (
            service.events()
            .insert(
                calendarId=self.calendar_id,
                body=event_data.to_google_calendar_format(),
            )
            .execute()
        )
        logger.info(f"イベントを作成しました: {event.get('htmlLink')}")
        return event
    except Exception as e:
        logger.error(f"カレンダーへのイベント追加中にエラー: {e}")
        # ここで何度もエラーとの戦いが...
        return None

▲動いているコードだけ見るとシンプルだが、ここに至るまでに認証周りで多くのエラーが発生した。

エラーメッセージをコピーしては検索し解決策を試すもまた別のエラーが出る。まさにイタチごっこ。

思い当たる節としては使ってるGoogleアカウントが会社のWorkspaceの管理外になっている….くらい?

Google Workspaceを管理している運営の三沢さんに確認したところ、セキュリティポリシーで弾かれてる可能性があるとのこと。

この問題の解決に、実に1時間半以上が経過。API認証の壁の高さを痛感したのでした..。

STEP4:動作確認と最終調整

最大の難関だったAPI認証を突破したことで、開発は一気に加速しはじめます。

神代さんの手によって、Pythonスクリプト上でSlackへの投稿からGoogleカレンダーへの登録まで一連の流れが繋がりました!

エンジニア:神代さん
石井さん、いけるよ!BOTテスト用のチャンネルに、何かイベント告知を投稿してみて!
人事広報部:石井
よっしゃ~!じゃあいつものフォーマットで投げてみますね

いつも#all_社内告知で展開される文章フォーマット

投稿して数秒後、Googleカレンダーに新しい予定がスッと追加されました。
※カレンダーのスタンプが押されていると正常に投稿された印。

〆の時間が記載されてないとデフォでは1時間で処理。告知文章をまとめて説明欄に書いてくれます。

また、最低限の情報があればフォーマットに限らず雑に投げても反応してくれます!

でもここら辺の精度はもう少し上げれそう。

「「うおおお!動いたーーー!!」」

思わず二人で声を上げた瞬間でしたw 

最後に、このPythonで完成したロジックを、非エンジニアでもメンテナンスしやすいようにノーコードツール「Dify」のワークフローとして実装。これで、今後の細かい調整は僕でも対応できる形になりました!

完成したBOTの紹介と成果

最終成果発表では、見事BOTが正常に動作。
Slackへの投稿がリアルタイムでカレンダーに反映される様子に、他の参加者からも「おー!」「これは便利!」という声が上がっていました。

人事広報部:石井
1日でここまでもっていけたのは流石凄腕エンジニア。まだ修正できそうな箇所がありそうなので適宜アップグレードしていきたいですね!

まとめ

今回のハッカソンを通じて感じたのは、「AIは魔法の杖ではないが、強力な武器になる」ということ。

AIは人間が正しい使い方を学び、的確な指示を与えて初めてその真価を発揮します。
そして、APIの認証や複雑なエラーなど泥臭い部分を乗り越えるのは、やはりエンジニアの知識と粘り強さなのだと隣で見ていて痛感しました。

何より、チームで一つの目標に向かってあーでもないこーでもないと頭を悩ませ、最後には一緒に喜びを分かち合う体験はとても良いものでした!

エイプリルナイツでは、こんな風に部署や職種を越えて、楽しみながら新しい技術に挑戦する文化があります。

この記事を読んで「面白そう!」「一緒に何か作ってみたい!」と感じてくれた方がいらっしゃれば、ぜひ他の記事も覗いてみてください!


株式会社エイプリルナイツは、ゲームが好きという共通の価値観をベースに、楽しく働きやすい企業を作っていこうとしています。
ゲームが好きなエンジニアはぜひ弊社にご注目ください!

ABOUTこの記事をかいた人

えけすぽ!運営リーダーです。いつもご覧いただきありがとうございます!!