Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは...

Avatar for yutakaosada yutakaosada
September 26, 2026

OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ

セルフホステッドAIエージェント OpenClaw を、単なるチャットAIとしてではなく、開発環境に近い場所で動く実務支援エージェントとして使えるかを検証したPoCの記録です。最初は「技術情報を収集してWikiにまとめ、Teamsに通知する」という仕組みをOpenClawで作ろうとしましたが、それだけならクラウドのPaaSで十分実現できてしまい、セルフホスト型を持ち出す理由が薄いことに気づきました。

そこで立ち返ったのが、「クラウドAIと同じことをローカルで再現するためではなく、クラウドAIだけでは直接触りにくい場所(ローカルのGitリポジトリ、CI/CIログ、閉域ネットワーク上の情報など)の近くで動けることにこそ、セルフホステッドAIエージェントの固有の価値がある」という視点です。この視点をもとに、OpenClawとHermesの比較検討、PowerShellとOpenClawの役割分担、Skillによるレポート形式の固定、Azure DevOps WikiへのETagを使った冪等な更新、Teamsへの通知設計まで、実装のポイントと実際にハマった落とし穴、業務適用の勘所をまとめています。

Avatar for yutakaosada

yutakaosada

September 26, 2026

More Decks by yutakaosada

Other Decks in Technology

Transcript

  1. DO WHAT MATTERS Yutaka Osada (長田 豊) • DevOps Engineer

    @Avanade Japan • 業務 • Azureコンポーネントを活用したサー ビス構築 • 技術検証、パフォーマンスチューニン グを得意とし、T-SQLが好き。 • 技術スタック • C#, .NET, Azure(PaaS), Azure DevOps, GitHub • Please follow me https://github.com/yutaka-art 3
  2. BACKGROUND / PROBLEM 最初の案と、立ち止まった問い 最初に考えた仕組み 立ち止まった点 公開技術情報を収集 取得・要約・通知だけなら Azure AI

    Foundry / Functions / Logic Apps で実現できる Wikiに要約してまとめる クラウドで完結する処理に セルフホスト型を持ち出す理由が薄い Teamsへ通知 OpenClawを使うために OpenClawを使う状態になっていた DO WHAT MATTERS 4
  3. TOOL SELECTION OpenClaw と Hermes — どちらを選ぶか 観点 OpenClaw Hermes

    Cron実行を見せやすい 今回の判断 定期実行 Cronもあるが今回は不要 Task Schedulerに寄せる レポートの型 Skillで出力形式を固定しや 継続実行・改善の文脈が強 Skillで日次レポート形式を すい い 固定 PowerShell連携 外側からCLI実行しやすい 自律実行の色が強い PowerShell主導にしやす い 今回のテーマへ の適性 ローカル/閉域情報を読む 説明に合う 別テーマなら面白い OpenClawを採用 ※ Hermesが合わなかったわけではない。継続実行・自己改善型エージェントとして見せるなら、Hermesの方が話を 作りやすい場面もある。今回のテーマにはOpenClawが適していた。 DO WHAT MATTERS 7
  4. ARCHITECTURE 作ったものの全体像 起動 収集 生成 投稿 通知 Windows Task Scheduler

    Git + Azure DevOps REST API OpenClaw Skill Azure DevOps Wiki Teams Workflow Webhook PowerShell が決定的に処理 OpenClaw が読み解く 起動・収集・投稿・通知 非定型な要約と示唆の生成 Azure DevOps Local machine GitHub Task Scheduler Wiki OpenClaw GitHub Copilot Business SKILL.md gpt-5.5 Azure Repos PowerShell DO WHAT MATTERS 8
  5. DIVISION OF ROLES · CORE CONCEPT AIに任せること、任せないこと PowerShell OpenClaw AIに委ねる領域

    決定的に処理する領域 Git / Azure DevOps 情報取得 コード・Issue・PR・CI を統合して読み解く 結果を完全に制御できる 収集結果の JSON 化 事実と示唆(AI解釈)を分けて整理する 入力形式を固定できる Wiki 作成 / 更新 推奨アクションを優先度付きで提示する Teams 通知 不明点は推測せず「確認不可」と明記する ETag・再実行性を扱いやすい 失敗時の原因を追いやすい AIにすべてを任せるのではなく、 AIが得意な非定型な整理だけに集中させる。それが業務適用の現実解。 DO WHAT MATTERS 9
  6. IMPLEMENTATION · SKILL DESIGN Skillでレポートの「型」を固定する なぜ型を固定するか 固定した出力構成 AIに「いい感じに」投げると、日によって出力の粒度や構 01 サマリ

    02 コード・リポジトリ状況 03 Issue / Work Item / PR状況 Skillに入れたルール 04 CI / Build状況 · 事実とAI解釈を必ず分けて記述する 05 技術的な気づき 06 チーム向け推奨アクション 07 注意事項 造が揺れる。日次で運用するなら、毎回同じ構造で読める ことの方が価値が高い。 · PAT・環境変数・秘密情報は出力しない · 不明点は推測せず「確認不可」と明記する · 推測・捏造はしない(Do not invent facts) DO WHAT MATTERS 10
  7. IMPLEMENTATION · DATA COLLECTION PowerShellで入力データを固定する 収集対象と取得元 Snapshot JSON — 構造

    { Git "generatedAt": "2026-07-07T09:00:00" "targetPeriod": "last 7 days" branch / status / 直近コミット / 変更ファイル "repository": { "branch": "develop" "recentCommits": [ ... ] Azure DevOps "changedFiles": [ ... ] } Pull Requests / Build / Work Item (WIQL) "azureDevOps": { "pullRequests": [ ... ] どのAPIから何を取るかは スクリプトで完全に固定する。 「AIにAPIを叩かせる」は採用しない。 DO WHAT MATTERS "builds": [ ... ] "workItemIds": [ ... ] } } 11
  8. IMPLEMENTATION · REPORT GENERATION OpenClawでMarkdownレポートを生成する Snapshot JSON /skill 指定 Markdown出力

    PowerShellが生成した 入力ファイルを渡す dev-environmentsnapshot-report Skillの型に沿った 日次レポートを生成 # session-keyは実行ごとに生成(固定するとGitHub Copilot経由で暗号化コンテキストエラーが発生する) $SessionKey = "dev-snapshot-$Date-$(Get-Date -Format 'HHmmss')" openclaw agent --agent main --session-key $SessionKey --message $Prompt 固定 session-key → GitHub Copilot経由モデルで暗号化コンテキスト関連エラーが発生。実行ごと に変えることで解消。 DO WHAT MATTERS 12
  9. IMPLEMENTATION · WIKI PUBLISH Azure DevOps Wikiへ作成・更新する Wiki 階層パス 親ページを順に作成

    /TechCatchup GET → 存在確認 → なければ PUT で作成 ancestor エラーを防ぐ └ /2026 既存ページ更新にはETagが必要 └ /07 GET で ETag を取得し If-Match を付けて PUT └ /2026-07-07 PowerShell 5.1の注意点 ※ 親ページが存在しない場合に作成が失敗する → /TechCatchup → /2026 → /07 の順に作成・確認 DO WHAT MATTERS -UseBasicParsing を付けないと 対話プロンプトで無人実行が停止する 13
  10. IMPLEMENTATION · TEAMS NOTIFICATION Teams通知は「読みに行くきっかけ」に絞る レポート全文をTeamsに流すのではなく、Wikiへのリンクカードだけを送る。 Teamsは読む場所ではなく、読みに行くきっかけとして使う。 ハマりポイント:Adaptive Card形式が要求される ✗

    NG — シンプルJSON ✓ OK — Adaptive Card形式 { "text": "開発環境 定期棚卸しレポートを作成しました" } { "type": "AdaptiveCard", "version": "1.4", "body": [ TextBlock, FactSet ], "actions": [ Action.OpenUrl → Wiki ] } → Error: Property 'type' must be 'AdaptiveCard' Power Automate側が triggerBody()?['card'] を参照する場合は payload のラップ形式が変わる点にも注意。 DO WHAT MATTERS 14
  11. RESULT 実行結果 確認できたフロー Wiki 作成ログ(実際のログ出力) Git / Azure DevOps 情報を収集

    Creating wiki page: /TechCatchup Creating wiki page: /TechCatchup/2026 OpenClaw で Markdown レポート生成 Creating wiki page: /TechCatchup/2026/07 Creating wiki page: .../2026/07/2026-07-07 Azure DevOps Wiki に作成 / 更新 --- 2回目実行(同日)--- Teams へ Adaptive Card 通知 Wiki page already exists: .../2026-07-07 Updating existing wiki page ... Updated wiki page completed: .../2026-07-07 → 同日再実行でも ETag で既存ページを更新。冪等性を確保。 DO WHAT MATTERS 15
  12. PITFALLS · LESSONS LEARNED 実装でハマったところ Task Schedulerから環境変数が読めない Wiki親ページが無いと ancestor エラー

    $env: はそのプロセス内だけ有効。 Task Scheduler起動時はUser環境変数として登録が必要。 .../2026-07-07 を直接作ると「ancestor pages does not exist」で 失敗。上位から順番に作成。 既存ページ更新にはETagが必要 PowerShell 5.1の文字コードと対話警告 GET で ETag を取得し PUT の If-Match ヘッダーに付与。 同日再実行の冪等性確保に必須。 日本語 ps1 は UTF-8 BOM付きで保存。 Invoke-WebRequest には -UseBasicParsing を付与。 Teams通知形式が Adaptive Card 必須 OpenClaw session-key は毎回変える { "text":"..." } では「Property type must be AdaptiveCard」。 Power Automate側のアクション次第で形式が変わる。 固定 session-key では GitHub Copilot 経由モデルで暗号化コンテ キスト関連エラーが発生。実行ごとに変更。 DO WHAT MATTERS 16
  13. クラウドAIだけでは届かない場所へ:OpenClawで開発環境を棚卸しするPoC https://zenn.dev/yutakaosada/articles/b9e4129e14df27 THANK YOU Yutaka.Osada [email protected] https://github.com/yutaka-art 読んでつなげる GitHub GH-900

    GitHub Foundations 対応 発売中 DO WHAT MATTERS https://amzn.asia/d/09T6FSgp ▪今後の予定 10/22 Dev Days | Copilot CLI × DevOps - Avanade Japan https://avanadejapantech.connpass.com/event/406658/ 18