はじめに
現在、GitHub Actionsを利用して、Qiitaから特定のタグを持つ最新記事を取得し、Slackの特定チャンネルに自動投稿するBotを作成し、利用しています。
本記事では、このBotの機能拡張について検討し、今後の実装計画を整理しようという思いで書きました。
現在の機能
- Qiita API を利用し、指定タグを持つ最新の上位3件の記事を取得
- 取得した記事を Slackの特定チャンネル に投稿
- GitHub Actions を使用し、毎日決まった時間(JST 08:30)に自動実行
開発計画
機能 | 優先度 | 実装方法 |
---|---|---|
複数タグ対応 | 高 |
fetch_qiita_articles() を修正し、複数タグを検索 |
記事フィルタリング(いいね数, ストック数) | 高 | APIレスポンスのデータを活用 |
Slack投稿フォーマット改善 | 高 | Markdown対応、スレッド化 |
手動実行機能 | 中 | Slack Bot コマンド実装 |
スケジュール柔軟化 | 中 | GitHub Actions のカスタムスケジュール |
複数チャンネル対応 | 中 | 設定ファイルでチャンネルを分岐 |
記事の言語フィルタリング | 低 | 記事の言語情報を判定 |
エラーハンドリング・ロギング | 低 | ログ管理の導入 |
記事の要約機能 | 低 | AI要約APIを統合 |
ランキング機能 | 低 | 記事のスコアを算出し定期投稿 |
機能拡張詳細
1. 複数タグ対応
- 現在は 1つのタグ のみ検索対象
- 複数タグ を指定し、各タグごとに記事を取得・投稿
- 例:
['生成AI', 'Python', 'SlackBot']
の記事を別々に取得
→タグ名もSlackへの投稿フォーマットに追加
2. 記事のフィルタリング機能
- いいね数 や ストック数 を基準に 人気記事のみ通知
- 過去に通知した記事を記録し、重複投稿を防ぐ
→これ結構優先度高めだと感じてる
3. Slack投稿のフォーマット改善
- 現在は タイトルとURLのみ 投稿
- 記事の概要(description) や 投稿者情報 も追加
- Markdownを活用し、見やすいフォーマットに変更
-
スレッド機能 を使い、1つの投稿にまとめる
→ここら辺のUI的な要素は優先度高いと思った
4. 通知スケジュールの柔軟化
- 現在は 1日1回 固定
- 設定可能な時間や回数を増やす(例: 朝・昼・夜の3回)
-
特定の曜日のみ通知する 設定を追加
→今後のスケジュール感によって優先度が変わる
5. 手動実行機能
- Slack上で
/qiita 最新3件
のようなコマンドを実行すると、即座に記事を取得・投稿 - GitHub Actions とは別に、手動実行用スクリプトを用意
→やってもいいけど、手動で実行ではなく違う機能を考えたい
6. 複数チャンネル対応
- 特定のタグごとに異なるSlackチャンネルへ投稿可能に
- 例:
生成AI
は#ai-news
、Python
は#dev-python
へ投稿
→意外と良いと思ってる
7. 記事の言語フィルタリング
- Qiita記事の 投稿言語 に応じて、日本語記事のみ取得
- 英語記事も対象にする場合、フィルター機能を追加
→投稿言語の比が分からないけど、ほぼ日本語だと思うからいらないかも
8. エラーハンドリング・ロギング
- APIエラー時のリトライ処理
- 投稿失敗時のエラーログ収集(例: CloudWatch, ログファイル)
→エラーハンドリングは例外なく重要か
9. 記事の要約機能
- 記事の内容を AIで要約 し、Slack投稿に含める
- OpenAI APIやGemini APIなどを活用
Slackの投稿は、長すぎると隠れるから要約させたい
10. 記事のランキング機能
- 直近1週間や1ヶ月の 人気記事ランキング を定期投稿
→直近1カ月くらいならくどくないかも??
おわりに
本記事では、Qiita記事をSlackに自動投稿するBotの機能拡張案を整理しました。
まずは 「複数タグ対応」「記事フィルタリング」「Slack投稿フォーマットの改善」 から進めると、より使いやすくなると考えています。
今後の実装の進捗は、Qiita記事で気長に共有していこうと考えています。
- slackボットのgithubリポジトリ