favgif

MB作成者:Malte Budig
favgif — Slackの `/favgif` スラッシュコマンド

favgifは、チームがGIFを検索し(Klipy、Tenor、Giphy)、お気に入りとして保存し、チャンネルに直接投稿できるSlackアプリです。バックエンドは単一のSupabase Edge Functionとユーザーごとのお気に入りを保存するPostgresで構成され、ワークスペースごとにセルフホスティングできます。

favgif: SlackでGIFを検索、お気に入り登録、投稿

favgifは、チームがGIFをSlack内で直接検索し、お気に入りに登録し、チャンネルに投稿できるSlackアプリです。チャットを離れる必要はありません。

favgif スラッシュコマンド メッセージ入力欄から /favgif スラッシュコマンドで起動

担当した役割

ソロプロジェクト — プロダクト、Slack連携、そしてバックエンド全体。

favgifでできること

  • 検索 — スラッシュコマンドまたはグローバルショートカットから。トレンドのGIF(Klipy)や、キーワードによる検索(Klipy、Tenor)が可能
  • 投稿 — 選択したGIFを、選択画面を開いたチャンネルにそのまま投稿
  • お気に入り — ユーザーごと、ワークスペースごとに保存して呼び出し
  • リンク挿入 — GIFの直接URLやGiphyのページを、自動的にGIFファイルへ正規化
  • ページネーション — 検索結果を「次へ/前へ」で切り替え

favgif GIF検索 モーダル内でGIFを選択 —「Post」でチャンネルに直接投稿

favgif お気に入り お気に入りをすばやく選択、またはリンクで挿入

技術的な課題

  • バックエンドを単一のEdge Functionで — Slackとのやり取りのロジック全体(スラッシュコマンド、ショートカット、モーダル、Block Actions)を、単一のSupabase Edge Function(Deno)で処理し、ユーザーごとのお気に入りはPostgresに保存。
  • 複数のGIFプロバイダー — Klipy、Tenor、Giphyを統一されたインターフェースの裏側にまとめ、Giphyのページ URLを直接のGIFファイルへ正規化する処理も含む。
  • Slackのインタラクションモデル — モーダル、ページネーション、そして正しいチャンネルコンテキストでの投稿を、Slackのインタラクションペイロードを通じて的確に表現。

技術スタック

  • バックエンド: Supabase Edge Function(Deno)、Postgres
  • 連携: Slack API(スラッシュコマンド、ショートカット、モーダル、Block Kit)
  • GIFソース: Klipy、Tenor、Giphy
  • 言語: TypeScript

セルフホスティング

各ワークスペースは、独自のSupabaseインスタンス、Slackアプリ、GIFプロバイダーのAPIキーを運用します。ワークスペース間で共有されるものは一切ありません。