
こんにちは!人事広報部 カルチャーコミュニケーションチームの石井です。
先日、エイプリルナイツ社内で「AIハッカソン」が開催されました!テーマは「AIを使って社内コミュニケーション改善ツールを作ろう!」というもの。
ハッカソン開催レポートはこちら
僕自身は全くエンジニアではありませんが、「AI時代の波に乗り遅れるな!」という思いで、バックエンドエンジニアの神代さんとチームを組んで参加してきました。
この記事では、僕たちが1日で「Slackのイベント告知を自動でGoogleカレンダーに登録するBOT」を開発した際のアイデア出しから完成までの道のりをご紹介します!
今回実現したいこと
皆さんの会社では、Slackなどのチャットツールでの情報共有は活発ですか?
エイプリルナイツでは、日々多くのチャンネルで様々な情報が飛び交っています。特に#all_社内告知 チャンネルでは、ゲーム交流会のお知らせや〇〇会(タコパ会・スノボー会・飲み会)企画のお知らせなど、楽しいイベントの情報で賑わっています。
しかし、活発さゆえの悩みもありました。
「面白そうなイベント告知があったのに、他の話題に流されて見失ってしまった…」
「後で確認しようと思って、忘れてしまった…」
「いつどんなイベントがあるのか一目で分かるようにしたい」
実際こんな経験が何度かありましたし、メンバーからも改善を求めるの声がありました。
そこで今回は「イベント情報の見逃し」と「社内カレンダーへの手動登録の手間」を解決するのを目標とします!
システム構成
今回開発するBOTの全体像は以下の通りです。

システム構成図のイメージ
今回の開発では、まず Python と Claude を使ってコアとなるロジックをAIを使って迅速に開発し、そのロジックを最終的にノーコードツール Dify のワークフローに落とし込むというアプローチを取りました。
- Slack:ユーザーが「#all_社内告知」チャンネルにイベントを投稿する。
- BOT (Python):投稿をトリガーに処理が起動。投稿内容を生成AI「Claude」に渡す。
- Claude (生成AI):2段階の思考プロセスで、まず「イベント告知かどうか」を判定し、次にイベント情報(タイトル、日時、場所など)をJSON形式で抽出させる。
- Dify:Pythonで確立したロジックをワークフロー化。Slackからの情報を受け取り、整形してGoogleカレンダーに渡す。
- Google Calendar:APIを通じて新しい予定が自動で登録される。
- Slack:Google Calendarと連携済みの「#all_社内カレンダー」チャンネルにイベント情報が投稿される。
この構成でロジックはPythonとClaudeで柔軟に開発しつつ、最終的な運用は非エンジニアでもメンテナンスしやすいDifyで行えるようになります。
構築の流れ
それでは実際の開発プロセスをご紹介します。
STEP1:アイデア出しと基本設計
開発は、リアルな課題の洗い出しから始まりました。



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

僕が出したフワッとした課題感を、頼れるエンジニアが確かな技術的アプローチに落とし込んでくれました。ちなみに役割は以下の通りです。
- 神代さん: 設計・実装・AIへの指示など、開発全般
- 僕(石井): アイデア提供・要件の壁打ち
STEP2:AIによる情報抽出ロジックの実装
最初の関門は、「AIにどうやってイベント情報を正確に抽出させるか」でした。
今回はAIにClaudeを活用。神代さんはここで、AIの役割を2つに分けるという戦略を取りました。
- イベント判定AI:まず、投稿されたテキストが「イベント告知」なのか、それともただの「雑談」なのかを判定させる。
- 情報抽出AI:「イベント告知」だと判定された場合のみ、そのテキストから「タイトル」「日時」「場所」などの具体的な情報をJSON形式で抜き出させる。
2段階構成にすることで雑談にまでAIが反応してしまうのを防ぎ、BOTの精度と効率を上げる狙いです。
しかし、単純に「イベント情報を抽出して」と指示するだけでは、AIはなかなか期待通りに動いてくれません。

例えばイベント情報を抽出する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カレンダーへの登録まで一連の流れが繋がりました!



いつも#all_社内告知で展開される文章フォーマット
投稿して数秒後、Googleカレンダーに新しい予定がスッと追加されました。
※カレンダーのスタンプが押されていると正常に投稿された印。
〆の時間が記載されてないとデフォでは1時間で処理。告知文章をまとめて説明欄に書いてくれます。
また、最低限の情報があればフォーマットに限らず雑に投げても反応してくれます!
でもここら辺の精度はもう少し上げれそう。
「「うおおお!動いたーーー!!」」
思わず二人で声を上げた瞬間でしたw
最後に、このPythonで完成したロジックを、非エンジニアでもメンテナンスしやすいようにノーコードツール「Dify」のワークフローとして実装。これで、今後の細かい調整は僕でも対応できる形になりました!
完成したBOTの紹介と成果
最終成果発表では、見事BOTが正常に動作。
Slackへの投稿がリアルタイムでカレンダーに反映される様子に、他の参加者からも「おー!」「これは便利!」という声が上がっていました。

まとめ
今回のハッカソンを通じて感じたのは、「AIは魔法の杖ではないが、強力な武器になる」ということ。
AIは人間が正しい使い方を学び、的確な指示を与えて初めてその真価を発揮します。
そして、APIの認証や複雑なエラーなど泥臭い部分を乗り越えるのは、やはりエンジニアの知識と粘り強さなのだと隣で見ていて痛感しました。
何より、チームで一つの目標に向かってあーでもないこーでもないと頭を悩ませ、最後には一緒に喜びを分かち合う体験はとても良いものでした!
エイプリルナイツでは、こんな風に部署や職種を越えて、楽しみながら新しい技術に挑戦する文化があります。
この記事を読んで「面白そう!」「一緒に何か作ってみたい!」と感じてくれた方がいらっしゃれば、ぜひ他の記事も覗いてみてください!
株式会社エイプリルナイツは、ゲームが好きという共通の価値観をベースに、楽しく働きやすい企業を作っていこうとしています。
ゲームが好きなエンジニアはぜひ弊社にご注目ください!



