Slack用Notion Botを作ったのでここまでのCHANGELOGを振り返る
本記事は、🎄GMOペパボエンジニア Advent Calendar 2023の23日目の記事です。
以下が自分が現在開発中のSlack用Notion botであるnotion-botのレポジトリです github.com
notion-bot使うとどういうふうに検索できるのかについてはまずこちらの動画をご覧ください📺 www.youtube.com
開発した動機
- 前提としてペパボでは
- Slackでチームメンバーとコミュニケーションとっている
- Notionでサービスに関わる各種ドキュメントを現在管理している
- Notion 公式のSlack appはあるが、ページ作成のみで検索等は現時点ではサポートされていない
- 最大のモチベーションとしては無いのなら作ろう精神からです
- こういうのがあったら便利そうと思ってネット上探してみてまだ無さそうだったので自作しました!
- Notinの公式で似たようなアプリが出たらたぶんすぐそっちに乗り換えるかもですが笑
- そもそも作るに至った背景は以下めんどくさい駆動開発でした
- メンバーにNotionにあるドキュメントのページリンクを渡したいときにNotionで探してSlackにリンク貼るまでに手間がかかるのが面倒だった
- 具体的にはNotionのDB検索するUIはView毎にフィルター(リセット機能がついたのであまり気にしなくて良くなった)を設定していることが多く、View毎に用途が決まっていたりするのでフィルターをいじりたくないし、その結果新しいViewを作ったりするのが面倒だった
- (Notionにはページ検索機能もあるのですがをあまり使ってないのでもしかするとそこで検索するのがいいかも知れませんが...)
CHANGELOG振り返り
v0.1.0 α版(とりあえず動くもの)リリース🎁
- とりあえず動作させるために色々実装した
- Slackのbot作成やモーダルの取り扱いについては以下を主に参考にしたりしていました
- 今回のようなモーダルを扱う上ではセッション情報のように検索条件等の情報を持っておくためにprivate_metadataの取り扱いについて知ることが重要でした
- あとはSlackのBlock Kitを理解するために公式ドキュメントを見ていました。block kit builderというブラウザ上で画面を作ってそのJSONテンプレートを元にアプリ側で動的に組み立てる実装ができたので参考になりました。
- またアプリはcontainer imageとしてリリースしk8sで動かしたりもできるように以下PRで諸々準備しました
v0.1.1 tagpr導入, k8s apply用コマンドを充実させた
- https://github.com/litencatt/notion-bot/pull/22
- バージョニングしつつrelease作業を自動化していくために、他のレポジトリでも導入しているSongmu/tagprを導入しました
- もうこれがないとだめ
- また、ghcr.ioにnotion-bot imageをリリースするためにActionsでimageをbuildしたりなどこの辺りはnotion-cliの方で前にやっていたのでそのまま流用してシュッと終わらせました
- あとは今回notion-botはk8sでの運用を基本的には現在想定しているためmanifestもレポジトリ管理していますが、環境変数はSealedSecretとしてk8sに登録することを想定しているためそのあたりのinitコマンドもここで追加していました。
v0.1.2〜v0.1.3 バグ修正
v0.1.4 タイトル検索フォーム追加
- https://github.com/litencatt/notion-bot/pull/31
- タイトル検索自体はtitleプロパティに対して文字列を指定したフィルターを追加すればできていたのですが、Notion上でのDB検索と似たような検索体験を提供したくタイトルについては検索フォームを独立してモーダル上に置くことで素早くページを検索できるようにしました
- ただしここで実装したのはあくまで簡易的な処理でのタイトル検索機能なので本物のタイトル検索機能については後述するv0.2.0で実装しました
- なんちゃって検索の方ではそもそも現在モーダル上には10件ごとに検索結果を出しているが、表示する10件のタイトル内で入力文字列がマッチするかという実装だったので表示件数が10件未満だったりでほぼ使えないものでした😅
v0.1.5 Redisをつかったキャッシュ機構の導入とフィルター削除UI追加
- 自分個人用のNotion DBに対してnotion-bot使って動作確認してる時は問題なかったのですが、会社で使ってるNotionはDB数やページ数も多いので流石にキャッシュしてないと毎回DB一覧を取りにったりしてるのはレスポンスが遅いためようやく導入しました。
- ただどこをキャッシュするかというのは使い所がまだチューニングできておらず、フィルターなどの条件が変わった結果を毎回どれくらいの時間キャッシュするかなどパフォーマンス等含めて今後ここは色々やっていければと思っているところです。
- あとはフィルターを削除したい場合これまでは一旦モーダルを閉じて最初からやる必要があったのですが、モーダル上でフィルターが削除できるようになったので検索時の使いやすさは向上できたと思います
v0.2.0 本物のタイトル検索機能の実装と細かい修正
v0.2.1 軽微な修正
v0.2.2 ロゴや使い方動画をREADME.meに追加
- この記事を書くにあたりちゃんと人様に見てもらえて、使いたいと思ってもらえるようなエントラスの整備をしました📜
- アイコンはGPT4で生成したやつを使っていますが絵心やデザインセンスがない自分にとってはもうこれは神機能です🤩
- 使い方もSlackのモーダルの見え方などがわからないとどんな感じかわからないと思うので画面収録して作ってみましたが、やっぱものによっては動画のほうが絶対わかりやすいから今後も必要なら動画で使い方を紹介しようと思いました!
- あとDB一覧のキャッシュ時間5分だとつかっててやっぱちょっと短そうなので1時間にチューニング
おわりに
といった感じてざっとCHANGELOG振り返ってきましたが、主に9月と12月で作って仕上げたんだなということもバレてしまいまいしたが何してきたのかが振り返れてよかったです。
そしてこの記事を読んでもしよければnotion-botを使ってみてもらえたらありがたいです。使い方について分からなければレポジトリにissue作ったり直接聞いてもらえればサポートしますのでぜひよろしくお願いします。
以上