← プロジェクト一覧へ
DevOps & ツール

OpenProject ↔ Slack ブリッジ

チケットの変更をスレッド形式の Slack 通知に。GitOps 設定ダッシュボード付き

エンドツーエンドで書き直し、オーナーとして担当(AI アシスト) · 2025年6月 — 2026年1月
Go Gin Next.js TypeScript MySQL Slack API GitLab CI Docker

概要

OpenProject のチケット変更を、スレッド形式の Slack 通知と個人向け DM に変換する社内ツール。Python のプロトタイプを Go のエンジンと Next.js のダッシュボードに書き直し、マルチテナント化し、デプロイ環境も構築した。Claude Code、Codex、Cursor を使って開発。

アーキテクチャ

OpenProject の webhook → Go エンジン(スナップショット差分 → Slack Block Kit メッセージ、スレッド、DM。メディアは S3。インスタンスごとの cron ジョブ)。管理サービス(Go)↔ GitLab API でバージョン管理された YAML 設定を扱い、push webhook → SSH 経由でサービス単位の再ビルドまたは再起動。Next.js ダッシュボードのドロップダウンは OpenProject と Slack のライブデータから取得。エンジンは GitLab CI でビルドされる scratch ベースのイメージとして配布。

主な技術ポイント

01

保存済みスナップショットとの比較によるフィールド単位の変更検出。チャンネルのスレッドメッセージとロール別の DM

02

非公開の添付ファイルを S3 に再ホストして Slack で表示できるようにし、スレッドのリンクをチケットに書き戻し

03

1つのデプロイで3つの OpenProject インスタンス(別々のチーム)に対応し、インスタンスごとに設定とデータを分離

04

バグ統計、チケット健全性、日次レポートの定期ジョブ。メッセージはバッチ送信

05

GitOps 設定ダッシュボード:すべての編集は GitLab API を通じた Git コミットになる(約340件の変更)。push webhook で影響を受けたサービスのみを再ビルドまたは再起動

技術的意思決定

技術的意思決定 選択 代替案 理由
設定の保存先 Git 上の YAML を、GitLab API 経由でコミットするダッシュボードから編集 データベースのテーブル すべての変更に履歴・レビュー・リバートが追加コストなしで付き、設定のみの変更ならイメージを再ビルドせずにサービスを再起動できる。