- 技術ブログにコンテンツを自動配信するSlackボットを開発した過程と方法
- 開発プロセス
-
- 自動化計画を立てる
- 第一に、技術ブログにコンテンツを配信する際、既存で利用していたツール(Notion、GitLab)を新しいツール(Slackボット)に統合することにした。メンバーが新しい配信システムに容易かつ迅速に適応できるようにするため
- 第二に、TypeScriptフレームワークを使うことを決定。TypeScriptは広く使われており、静的型付け言語であるため安定して開発できる。これは新しい配信システムを簡単かつ便利に保守するのに役立つ
- 第三に、ユーザーフレンドリーなインタラクションをサポートすること
- Slackボットを選んだ理由
- Slackボットがこれらの原則をすべて満たしている
- Slackボットは
Bolt というフレームワークを提供している。これはJavaScript、Java、Pythonに加え、ドキュメントも充実している。これを参考にすれば、技術ブログ配信自動化ツールを開発しやすい。ローカル環境で実行してもSlackアプリケーション上でツールをテストできる
- Slackはユーザーに見える画面を
Block Kit 機能で設計できるよう支援している。画面フローをJSONで設計し、関数でデータを処理すれば、直感的にインタラクションできる
-
- 画面を描く
- Slackはユーザーとのインタラクションに活用できるよう、メッセージとモーダルをサポートしている
- 技術ブログにコンテンツを配信するワークフローをモーダルで実装
- Slackボットを活用した技術ブログ配信プロセス
- ブログ投稿: どのコンテンツをどこに配信するか選択
- ブログ有効性検査: メタデータやカバー画像など、フロントエンドに必要な要素が配信対象のコンテンツにすべてあるか確認
- GitLab Issue/MR 検査: GitLabにIssueとMRを作成する段階。IssueとMRがすでにあれば、そのMRにコミット
- 完了メッセージ: 配信が完了したら、Notionのコンテンツ原本リンクとGitLab MRリンクを含むメッセージを残す
-
- ボットを設計・実装する
- 1つのボットでNotion、GitLabなど複数のサービスすべてとやり取りできるようにした
- GitLabにCI/CDパイプラインを作成してアプリケーションを配布したり、ボットを修正したりする際、この方式のほうが有利だと判断した
- ボット開発にはTypeScript言語とSlackがサポートするBoltフレームワークを使用
- フォルダ構成はNestJSに着想を得て採用
- workflow.ts : 画面とデータフローを定義し、すべてのワークフローの起点
- service.ts : ビジネスロジックを定義
- model.ts : SlackまたはサードパーティAPIとのデータ型を定義
- modal.ts : ユーザーとインタラクションする画面を定義
-
- ボットの動作方式
- Slackで任意のチャンネルにコマンドを入力するとボットが呼び出される
- このときNotionのコンテンツタイトルとコンテンツを掲載するチャンネルを選び、[送信]ボタンを押すと、自動的に必須メタデータの入力有無を確認する
- GitLab ID、著者名、mdファイル名、カバー画像、
<!--truncate--> などが入力すべきメタデータであり、このうち1つでも欠けるとコンテンツを掲載できない
- 必須メタデータがすべて入力されていれば、[続行]ボタンを押して次の手順に進める
- このときGitLabに該当コンテンツのIssueとMRが自動作成される
- MRにはラベルも自動で付き、コンテンツを配信するパイプラインまで自動実行される
- パイプラインの実行が完了すると、GitLab Review Appでコンテンツの配信状態を事前に確認できる
- 導入結果
- テクニカルライターとエンジニアが技術ブログにコンテンツを配信するためにMRを作成する頻度は約30%増加
- クリック1回で1分以内にコンテンツを配信
- パイプライン失敗率が5%未満に低下
まだコメントはありません。