はじめに
Azure Functions のリリースノートを定期的にチェックして Qiita 記事にするのは手間がかかります。そこで、Power Platform と AI を活用して、GitHub のリリース情報を自動取得し、Qiita 記事として整形・投稿する仕組みを構築しました。
本記事では、その実装方法と詰まったポイントについて紹介します。
構成
使用技術
- Power Automate: ワークフロー全体の自動化
-
Power Apps
- AI Builder: リリースノートを Qiita 記事形式に整形
- Dataverse: リリース情報の保存
- GitHub API: リポジトリのリリース情報取得
- Qiita API: 記事の自動投稿
システム概要
定期的に GitHub API からリリースノートを取得し、AI Builder で Qiita 記事として整形、自動投稿までを一気通貫で行います。投稿後は Teams でレビュー依頼通知を送信します。
実装詳細
Power Automate のフロー
以下の 6 ステップで自動化を実現しています。
- スケジュールトリガー: 定期実行(例: 毎週月曜日)
- GitHub API 呼び出し: 対象リポジトリの最新リリースノートを取得
- Dataverse への保存: リリース情報をテーブルに記録
- AI Builder による整形: リリースノートを Qiita 記事形式に変換
- Qiita API で投稿: プライベート設定で記事を作成
- Teams 通知: レビュー依頼をチームに送信
Dataverse のテーブル設計
リリース情報を管理するためのテーブルを作成しました。
現在のフローでは Dataverse への保存は必須ではありませんが、将来的に差分比較によるスキップ機能を実装する際の基盤として残しています。
主なフィールド:
- リリースバージョン
- リリース日時
- リリースノート本文
- GitHub URL
- Qiita 記事 URL
AIにCSVを作成させて作りました。
AI Builder のプロンプト設計
GitHub API から取得したリリースノートを Qiita 記事形式に変換するプロンプトを設定しました。
下記ルールに従い、 inputをクリーニングする。
その後日本語翻訳を行い、出力形式に沿って結果を出力する。
ルール:
1. `\r\n` や `\n` などのエスケープシーケンスを実際の改行に変換
2. HTMLコメント(`<!-- ... -->`)を完全に削除
3. 以下の様なテンプレート文言を削除:
- "### Release notes"
- "Release notes"(単体)
- "Please add your release notes in the following format:"
- "- My change description (#PR)"
- "What's Changed"
4. 前後の空白行や余分なスペースを削除
5. 実質的な変更内容のみを抽出
出力形式:
<details><summary>原文</summary>
クリーニングしたinput
</details>
クリーニング・日本語翻訳したinput
あなたは GitHub リリースノートを Qiita 向けに日本語で整形する編集者です。
以下の入力値からQiita 記事本文 (Markdown) を出力してください。
また、コメントは以下のコメントルールに従いbodyの</details>より下からAIコメントを自動生成してください。
入力値: tag_name , name , published_at , html_url , body
コメントルール:
### 変更内容の要約
- 今回のリリースで何が変わったのかを要約し簡潔に説明
### 開発者への影響
- この変更が開発者の作業に与える具体的な影響
- 移行作業の必要性の有無
### 注目ポイント
- 特に重要な変更や、注意すべき点
- セキュリティ・パフォーマンス・互換性に関する情報
出力フォーマット:
{{name}} のリリース概要と変更点のまとめ
:::note info
この記事は、AIによって自動生成されています。
:::
## 公開情報
- バージョン: {{tag_name}}
- リリース日時: {{published_at}}
- リリースページ: https://{{html_url}}
## コメント
## 変更点
{{body}}
詰まったポイントと解決策
1. AI Builder でモデル応答エラー
問題: 「Error deserializing request」エラーが発生
原因: 入力値に JSON シリアライズできないデータが含まれていた可能性
解決策: AI Builder の設定で「コード インタープリターを有効化する」をオンにする
2. AI Builder でURL が Base64 エンコードされる
問題: URL を入力値として渡すと、Base64 エンコードされた文字列に変換されてしまう
原因: AI Builder が URL をスクレイピング対象と判断し、HTML ソースコードを Base64 変換して取得していた(プロンプトでスクレイピングするなと指定しても効かなかったため、前処理で実行されている?)
解決策:
- 出力形式を
https://{{html_url}}のようなテンプレート形式に指定 - 入力値はスキーム部分(
https://)を排除して渡す
3. AI Builder で一部の処理が実行されない
問題: データの前処理・翻訳から記事生成までを一括で行わせると前処理・翻訳が無視される
解決策: 前処理・翻訳と記事生成を別処理とした
今後の展望
差分検知による重複投稿の防止
Dataverse に保存されたリリース情報と比較し、新しい更新があった場合のみ記事を作成する機能を追加予定です。Power Automate の Dataverse ID 検索機能を使う想定ですが、まだうまく動作していません。
Teams での承認フロー
Teams 通知に「承認」「却下」ボタンを追加し、承認後に自動で Qiita 記事を公開する仕組みを検討中です。これにより、Qiita 側で手動公開する手間を省けます。
まとめ
Power Platform と AI Builder を組み合わせることで、GitHub のリリース情報を自動的に Qiita 記事化する仕組みを構築できました。
ポイント:
- Power Automate でワークフロー全体を自動化
- AI Builder でコンテンツの品質を担保
- Dataverse で将来の拡張に備えたデータ管理
感想など
- 当初は自分が利用するプラットフォームの更新情報などを通知するだけの予定でしたが、少し弄ればQiita記事を投げられるのではと思い作成しました。
- Power PlatFormで開発は初めてでしたが、環境構築などの面倒な要素をスキップできるのは所謂初学者にもお勧めしやすいと思いました。
- AIの整形は正直不要では?といった感じが拭えませんでした。Pythonで整形した方が楽だな…と思いつつブレるAI出力結果と格闘していました。



