<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Openclaw on ROBOCO</title>
    <link>https://roboco.io/ja/tags/openclaw/</link>
    <description>Recent content in Openclaw on ROBOCO</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <lastBuildDate>Fri, 27 Mar 2026 00:00:00 +0900</lastBuildDate>
    <atom:link href="https://roboco.io/ja/tags/openclaw/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>OpenClawの5層ゲートキーピング：AIエージェント時代の品質管理</title>
      <link>https://roboco.io/ja/posts/openclaw-gatekeeping-architecture/</link>
      <pubDate>Fri, 27 Mar 2026 00:00:00 +0900</pubDate>
      <guid>https://roboco.io/ja/posts/openclaw-gatekeeping-architecture/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;31万スターのプロジェクトに押し寄せる数千件のPRと、8つのAIエージェントによる並列コミット。この混沌のなかで品質が崩れない秘訣は、5層の自動化されたゲートキーピングにあります。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;チョン・ドヒョン - ROBOCO首席コンサルタント&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;以前の記事では、OpenClawの&lt;a href=&#34;https://roboco.io/ja/posts/openclaw-agents-md-productivity-secrets/&#34;&gt;AGENTS.mdに込められた生産性の原則&lt;/a&gt;を分析しました。あの記事の核心は「ルールを書くこと」でした。しかし、ルールを書くことと、ルールを&lt;strong&gt;強制すること&lt;/strong&gt;はまったく別の問題です。&lt;/p&gt;&#xA;&lt;p&gt;OpenClawはGitHubで最も多くのスターを集めたリポジトリ（31万以上）であり、バイブコーディングの代表的な事例です。&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; このプロジェクトは、2つの極端な圧力を同時に受けています。1つはメンテナーのPeter Steinbergerが3〜8個のAIエージェントを同時に走らせながら生み出す&lt;strong&gt;内部変更&lt;/strong&gt;であり、もう1つは世界中のコントリビューターがAIの補助で作成して提出する&lt;strong&gt;数千件の外部PR&lt;/strong&gt;です。&lt;/p&gt;&#xA;&lt;p&gt;AGENTS.mdに「これをするな」と書くのはソフトガードレールです。AIエージェントはたいてい従いますが、常に従うとは限りません。外部コントリビューターは、そのルールの存在すら知らない可能性があります。そこでOpenClawは、ルールの上に&lt;strong&gt;5層の自動化された強制メカニズム&lt;/strong&gt;を積み上げました。この記事では、そのメカニズムを解剖します。&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OpenClawの品質管理はルール文書だけではなく、プリコミット、&lt;code&gt;pnpm check&lt;/code&gt;、CI、PR自動化、リリースゲートが重なった5層構造で機能しています。&lt;/li&gt;&#xA;&lt;li&gt;自動修正できる問題はツールが直し、型エラー・セキュリティ・アーキテクチャ境界のような危険な問題は遮断するという形で、多層防御をつくります。&lt;/li&gt;&#xA;&lt;li&gt;バイブコーディング時代の目標は、AIが悪いコードを絶対に書かないようにすることではなく、悪いコードが本番に到達しないようにすることです。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;第1層コミット前に捕まえる--ローカルのプリコミット&#34;&gt;第1層：コミット前に捕まえる — ローカルのプリコミット&lt;/h2&gt;&#xA;&lt;p&gt;OpenClawの最初の防衛線は、コードがリポジトリに到達する前から機能します。&lt;a href=&#34;https://github.com/openclaw/openclaw/tree/main/git-hooks&#34;&gt;&lt;code&gt;git-hooks/pre-commit&lt;/code&gt;&lt;/a&gt;は&lt;code&gt;package.json&lt;/code&gt;の&lt;code&gt;prepare&lt;/code&gt;スクリプトを通じて自動的に有効化され、コミットのたびに実行されます。&lt;/p&gt;&#xA;&lt;p&gt;動作の順序が興味深いところです。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ステージされたファイルを種類別にフィルタリング&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;oxlint&lt;/strong&gt; &lt;code&gt;--type-aware --fix&lt;/code&gt; — リントエラーを&lt;strong&gt;自動修正&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;oxfmt&lt;/strong&gt; &lt;code&gt;--write&lt;/code&gt; — フォーマットを&lt;strong&gt;自動修正&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;修正されたファイルを再びステージング&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;pnpm check&lt;/code&gt; — 品質ゲート全体を実行&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;核となる設計は&lt;strong&gt;自動修正と遮断の分離&lt;/strong&gt;です。フォーマットやリントエラーのように機械的に直せる問題は、フックが自分で直して通します。しかし、型エラーやアーキテクチャ境界の違反のように判断を要する問題は、コミット自体を遮断します。この区別がないと、エージェントは些細なフォーマットエラーで止まるか、構造的な欠陥をそのまま通してしまうかのどちらかになります。&lt;/p&gt;&#xA;&lt;p&gt;これに加えて&lt;a href=&#34;https://github.com/openclaw/openclaw/blob/main/.pre-commit-config.yaml&#34;&gt;&lt;code&gt;.pre-commit-config.yaml&lt;/code&gt;&lt;/a&gt;は、CIの&lt;code&gt;security-fast&lt;/code&gt;ジョブでも実行される17個のセキュリティ・品質フックを定義しています。&lt;code&gt;detect-private-key&lt;/code&gt;と&lt;code&gt;detect-secrets&lt;/code&gt;でシークレットの流出を遮断し、&lt;code&gt;zizmor&lt;/code&gt;でGitHub Actionsワークフローのセキュリティを監査し、&lt;code&gt;pnpm-audit-prod&lt;/code&gt;で本番依存関係の既知の脆弱性を検査します。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;第2層1つのコマンドで10種類を検証する--pnpm-check&#34;&gt;第2層：1つのコマンドで10種類を検証する — &lt;code&gt;pnpm check&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;pnpm check&lt;/code&gt;は、ローカルのフックとCIの両方で実行される&lt;strong&gt;単一の品質ゲート&lt;/strong&gt;です。1つのコマンドの背後に10個以上のチェックがチェーンされています。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pnpm check =&#xA;  check:no-conflict-markers          # マージコンフリクトマーカーがないこと&#xA;  check:host-env-policy:swift         # Swiftホスト環境のセキュリティポリシー&#xA;  check:base-config-schema            # 設定スキーマのドリフトチェック&#xA;  check:bundled-plugin-metadata       # プラグインメタデータの一貫性&#xA;  check:bundled-provider-auth-env-vars # プロバイダー認証の環境変数の一貫性&#xA;  format:check (oxfmt)                # フォーマット検証&#xA;  tsgo                                # TypeScriptネイティブ型チェック&#xA;  plugin-sdk:check-exports            # プラグインSDKのエクスポート一貫性&#xA;  lint (oxlint --type-aware)          # 型認識リンティング&#xA;  + 約15個のカスタムアーキテクチャ境界リントスクリプト&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ここで最も注目すべきは最後の行です。一般的なリンターは「使われていない変数」や「セミコロンの欠落」といったコードレベルの問題を捕まえます。しかしOpenClawのカスタム境界ガードスクリプトは、&lt;strong&gt;アーキテクチャレベルの違反&lt;/strong&gt;を捕まえます。Extensionがコアの&lt;code&gt;src/**&lt;/code&gt;を直接インポートしたり、プラグインSDKの内部パスを参照したり、パッケージルートの外へ相対パスを伸ばしたりするのを検出します。&lt;/p&gt;</description>
    </item>
    <item>
      <title>バイブコーディング時代、リポジトリ規則と個人の好みの境界</title>
      <link>https://roboco.io/ja/posts/vibe-coding-rules-vs-taste/</link>
      <pubDate>Thu, 26 Mar 2026 17:26:21 +0900</pubDate>
      <guid>https://roboco.io/ja/posts/vibe-coding-rules-vs-taste/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;AGENTS.mdの役割は開発者を複製することではなく、事故を防ぐべき境界だけを固定することにある。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;チョン・ドヒョン - ROBOCO首席コンサルタント&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;バイブコーディングを導入したチームは、まもなく似たような問いに直面します。リポジトリごとに&lt;code&gt;AGENTS.md&lt;/code&gt;や&lt;code&gt;CLAUDE.md&lt;/code&gt;を置いてAIエージェントに規則を伝え始めると、どこまでを共通規則として固定し、どこからを個人の好みとして残しておくべきなのかが曖昧になるからです。この境界を誤ると、二つの問題が同時に生じます。必ず守るべき安全規則は緩くなり、逆に好みに近い選択は不必要に硬直化するのです。&lt;/p&gt;&#xA;&lt;p&gt;最近のバイブコーディング論議で頻繁に登場する観点も似ています。人間はシステムアーキテクチャや好みのような高次の判断に集中し、実装やボイラープレート、反復的なリファクタリングはエージェントに任せよ、というものです。これを実務的に翻訳すれば単純です。リポジトリには「誰が作業しても同じでなければならないもの」を残し、人によって違ってもよい領域はあえて強制しないことです。&lt;/p&gt;&#xA;&lt;p&gt;この問いは理論にとどまりません。先に整理した[OpenClaw事例分析]&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;と[OpenClawの&lt;code&gt;AGENTS.md&lt;/code&gt;解剖]&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;を見ると、実際に生産性を生んだ規則は好みの統一ではなく、境界の明示性でした。Steinbergerもまた、最近はコードをすべて読むわけではないが、システム構造と設計はずっと握り続けていると説明しています。&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; OpenClawが強く固定したのもタブとスペースではなく、import boundary、ビルドゲート、マルチエージェントの安全規則、そして不可逆な作業の承認境界です。&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;肝心なのは多く書くことではなく、何を閉じて何を開いておくかを設計することです。&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;リポジトリ規則はチームの好みを複製する文書ではなく、事故のコストが大きい境界を固定する文書であるべきです。&lt;/li&gt;&#xA;&lt;li&gt;ビルド、テスト、セキュリティ、Gitの安全規則、アーキテクチャ境界はリポジトリとともに管理しなければなりません。&lt;/li&gt;&#xA;&lt;li&gt;命名のニュアンスやコメントスタイルのような好みは、formatter、linter、テンプレート、個人プロンプトで扱うほうが適しています。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;なぜこの区分が重要なのか&#34;&gt;なぜこの区分が重要なのか&lt;/h2&gt;&#xA;&lt;p&gt;AIエージェントは規則を素早く守ります。問題は、規則の性格を自分では区別できないという点にあります。リポジトリの指針にビルドコマンド、シークレットの扱い、ブランチの安全規則のように必ず守らなければならない制約と、「私ならこう書く」という水準の好みが混ざっていると、エージェントは両者を同じ重さで扱います。すると重要な規則は埋もれ、さほど重要でない規則は過度に増幅されます。&lt;/p&gt;&#xA;&lt;p&gt;たとえば&lt;code&gt;pnpm test&lt;/code&gt;を通さずにマージすればバグが出ます。実際のシークレットをコミットすれば事故になります。認証フローや決済の権限ロジックを十分な検討なしに変えれば運用リスクが生じます。こうしたものは議論の余地のない運用契約です。一方、関数名を&lt;code&gt;findUser&lt;/code&gt;にするか&lt;code&gt;getUserById&lt;/code&gt;にするか、テストファイルをソースの隣に置くか&lt;code&gt;__tests__&lt;/code&gt;にまとめるか、importをどの順序で並べるかは、結果に影響を与えることはあっても、たいていは正解が一つに固定されるわけではありません。&lt;/p&gt;&#xA;&lt;p&gt;この違いを区別しなければ、リポジトリの文書はすぐに肥大化します。あらゆる選好を中央の規則に引き上げれば、エージェントは文書を読むことにより多くのコンテキストを使い、チームは些細なスタイル合意に不要なエネルギーを費やします。逆に客観的な制約を好みの水準で扱えば、マルチエージェント環境で衝突と手戻りが繰り返されます。&lt;/p&gt;&#xA;&lt;p&gt;結局、良い&lt;code&gt;AGENTS.md&lt;/code&gt;はチームの好みの辞書を作る文書ではなく、事故のコストが大きい領域の境界を明確に引いておく文書であるべきです。&lt;/p&gt;&#xA;&lt;h2 id=&#34;openclawが実際に示したもの&#34;&gt;OpenClawが実際に示したもの&lt;/h2&gt;&#xA;&lt;p&gt;以前の記事で整理したとおり、OpenClawの&lt;code&gt;AGENTS.md&lt;/code&gt;は単なるスタイルガイドではなく運用契約です。&lt;sup id=&#34;fnref1:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; 興味深いのは、その文書が「開発者をどう複製するか」よりも「エージェントがどこで事故を起こしうるか」にはるかに強く集中している点です。実際の指針を見ると、ビルド成果物やモジュール境界に影響を与えうる変更には&lt;code&gt;pnpm build&lt;/code&gt;の通過をハードゲートとして要求し、&lt;code&gt;@ts-nocheck&lt;/code&gt;のような典型的な回避パターンも明示的に禁止しています。&lt;sup id=&#34;fnref1:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;たとえばOpenClawは、拡張が内部実装に直接手を出せないようにimport境界を規則としてロックしています。また&lt;code&gt;git stash&lt;/code&gt;の禁止、任意のブランチ切り替えの禁止、原子的なコミットの維持といったマルチエージェントの安全規則を置いています。ビルドとテストもハードゲートとソフトゲートに分け、いつ必ず検証しなければならないのかを明確に書いてあります。&lt;sup id=&#34;fnref2:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&#34;fnref2:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;逆にその文書は、「セミコロンを必ず使え」「関数名は必ずこういうトーンでつけろ」といった個人の好みを中心に設計されてはいません。つまりOpenClawが示した核心は単純です。リポジトリ文書が扱うべきなのは美的な統一感ではなく、構造的な安全性なのです。&lt;/p&gt;&#xA;&lt;h2 id=&#34;リポジトリとともに管理すべき規則&#34;&gt;リポジトリとともに管理すべき規則&lt;/h2&gt;&#xA;&lt;p&gt;以下はリポジトリとともにバージョン管理されるべき領域です。共通点は一つです。違反したときにバグ、衝突、セキュリティ事故、運用の混乱が発生するという点です。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ビルドとテストのコマンド&lt;/li&gt;&#xA;&lt;li&gt;マルチエージェント環境におけるGitの安全規則&lt;/li&gt;&#xA;&lt;li&gt;公開APIサーフェス、import boundary、パッケージ境界のようなアーキテクチャ制約&lt;/li&gt;&#xA;&lt;li&gt;シークレット、個人情報、運用設定値のようなセキュリティ境界&lt;/li&gt;&#xA;&lt;li&gt;認証、決済、権限、DBスキーマのように手動レビューが必要な高リスク領域&lt;/li&gt;&#xA;&lt;li&gt;PR／コミットの単位のような変更管理の原則&lt;/li&gt;&#xA;&lt;li&gt;Research → Plan → Implementのように誤りのコストを下げる作業順序&lt;/li&gt;&#xA;&lt;li&gt;AI利用時の透明性要件&lt;/li&gt;&#xA;&lt;li&gt;チームがすでに検証済みの品質ゲートと自動化基準&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;これらの項目は「良さそうな推奨」ではなく、リポジトリの運用契約に近いものです。&lt;/p&gt;&#xA;&lt;p&gt;たとえばビルドコマンドが&lt;code&gt;npm run build&lt;/code&gt;なのか&lt;code&gt;pnpm build&lt;/code&gt;なのかを、人によって別々に解釈してはいけません。自動化パイプラインとローカル検証が同じコマンドを基準に動かなければならないからです。Gitの規則も同様です。マルチエージェントで同時に作業する環境では、任意のstash利用、要求されていないブランチ変更、広範囲の非原子的なコミットが実際の衝突を生みます。&lt;/p&gt;&#xA;&lt;p&gt;セキュリティ境界については言うまでもありません。実際の電話番号、本番環境の環境変数、非公開鍵、顧客データのサンプルといったものは、チームのスタイル選好ではなく禁止リストです。こうした内容は個人プロンプトや暗黙知に置いてはならず、リポジトリの文書と自動スキャンの規則にともに残っていなければなりません。&lt;/p&gt;&#xA;&lt;p&gt;ワークフローの順序も同じ文脈です。実装の前に既存コードを読み、計画を立て、それから変更させるという手順は、単なる形式主義ではありません。エージェントは質問を減らすほど速くなりますが、誤った仮定の上で速くなれば、後でより高くつきます。ですから探索と計画を先に要求する規則は、好みではなくコスト削減の装置です。&lt;/p&gt;&#xA;&lt;p&gt;ここでもう一つ重要なポイントがあります。チームがすでに自動化に依存しているなら、その自動化が期待する形式もまた共通規則になります。たとえばConventional Commits形式がリリースノート、チェンジログ、CIルーティングに結びついているなら、それはもはや好みではありません。逆に単に「読みやすい」水準の形式選好であれば、チームレベルの合意であってよく、必ずしもリポジトリの中核規則に格上げする必要はありません。&lt;/p&gt;&#xA;&lt;p&gt;反復手順をどこに置くかも同じ基準で見ることができます。OpenClawはリリースやセキュリティ点検のような複雑な反復業務を&lt;code&gt;AGENTS.md&lt;/code&gt;の本文に長く書くのではなく、別のスキルとして分離しています。&lt;sup id=&#34;fnref3:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt; これもまた良い区分です。リポジトリの中核文書には原則と境界を残し、手続き的な詳細は再利用可能な実行面として分離するほうが長持ちします。&lt;/p&gt;&#xA;&lt;h2 id=&#34;個人の好みとして残してよい領域&#34;&gt;個人の好みとして残してよい領域&lt;/h2&gt;&#xA;&lt;p&gt;逆に次のような領域は、個人やチームの好みとして残しておくことができます。もちろんチームが一貫性のために標準化することはできますが、それがリポジトリの中核的な安全契約である必要はありません。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;セミコロンの使用有無、空白の数、trailing commaのようなフォーマットの細部&lt;/li&gt;&#xA;&lt;li&gt;関数名や変数名の細かなニュアンス&lt;/li&gt;&#xA;&lt;li&gt;importの並べ方&lt;/li&gt;&#xA;&lt;li&gt;コメントをどの程度まで書くかというスタイル&lt;/li&gt;&#xA;&lt;li&gt;テストファイルの配置方法とテストの記述スタイル&lt;/li&gt;&#xA;&lt;li&gt;抽象化を早く行うか遅く行うかという選好&lt;/li&gt;&#xA;&lt;li&gt;feature-based構造とlayer-based構造の間の選好&lt;/li&gt;&#xA;&lt;li&gt;エラー処理パターンの細かな選択&lt;/li&gt;&#xA;&lt;li&gt;プロンプトを長く書くか短く書くかといった個人の作業スタイル&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;こうした項目は、互いに異なる選択肢がいずれも合理的でありうるものです。たとえばあるチームは&lt;code&gt;strict&lt;/code&gt;な型設定を好み、あるチームはオンボーディングのコストを下げるために段階的に厳格度を上げます。あるチームは&lt;code&gt;Result&lt;/code&gt;パターンを好み、あるチームは例外ベースのフローのほうが明確だと感じます。どちらであれ一貫して運用されるなら、十分に合理的でありえます。&lt;/p&gt;&#xA;&lt;p&gt;重要なのは、こうした好みを完全に無視しようという意味ではないという点です。好みも生産性に影響します。ただし、それをどこに置くかが重要なのです。リポジトリの中核契約として扱うよりも、formatter、linter、テンプレート、サンプルコード、個人プロンプト、チームプレイブックのような軽い装置で扱うほうが適しています。そうしてこそ、好みは維持しつつリポジトリの指針が過度に重くならずに済みます。&lt;/p&gt;&#xA;&lt;p&gt;とりわけバイブコーディングでは、この違いがいっそう重要になります。エージェントにあらゆる好みを強く注入すれば、コード生成はかえって硬直し、小さな変化でも規則の衝突が多く発生します。一方、好みは緩やかなガイドとして置き、安全と品質に直結する境界だけを強く固定すれば、エージェントははるかに安定して働きます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenClaw：世界最大のバイブコーディングプロジェクトから学ぶ9つのベストプラクティス</title>
      <link>https://roboco.io/ja/posts/openclaw-vibe-coding-best-practices/</link>
      <pubDate>Sat, 14 Mar 2026 10:00:00 +0900</pubDate>
      <guid>https://roboco.io/ja/posts/openclaw-vibe-coding-best-practices/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;「かつてチームを率いていたことがある。私の下には多くのソフトウェアエンジニアがいた。あのときも、彼らが私の望むやり方とまったく同じコードを書くわけではないという点を受け入れなければならなかった」 – Peter Steinberger&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;チョン・ドヒョン - ROBOCO首席コンサルタント&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;OpenClawはGitHubで最も多くのスターを集めたソフトウェアリポジトリ（31万以上のスター）であり、大規模なAI支援「バイブコーディング」の決定的なケーススタディです。&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; オーストリアの開発者Peter Steinbergerが3〜8個の並列AIエージェントインスタンスを活用して構築したこのプロジェクトは&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;、たった1人の開発者が30万LOC規模のTypeScriptモノレポ、20以上のメッセージング統合、3つのプラットフォーム向けネイティブアプリをオーケストレーションできることを示しています。しかも、コードのほとんどを自分では読まずに、です。&lt;sup id=&#34;fnref1:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;このプロジェクトの名前は、激動の過程を経てきました。2025年11月、AnthropicのClaudeをベースに1時間で作られたプロトタイプ &lt;strong&gt;Clawdbot&lt;/strong&gt; が始まりでした。2026年1月にGitHubで公開されると1日で9,000スターを集めて爆発的に成長しましたが、Anthropicの商標権に関する警告を受けて &lt;strong&gt;Moltbot&lt;/strong&gt; に改名せざるをえませんでした。続いて、なりすましアカウントや悪意あるnpmパッケージなどのセキュリティ事故が起きたことで、わずか3日後に再び &lt;strong&gt;OpenClaw&lt;/strong&gt; へと名前を変えました。&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; 2026年2月、SteinbergerはOpenAIに加わって「次世代のパーソナルエージェント」を率いることになり、OpenClawはOpenAIが支援する独立財団へ移管されました。&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;皮肉なことに、Steinberger本人は「vibe coding」という表現を蔑称だと呼び「agentic engineering」を好むのですが&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;、OpenClawはこの潮流を代表するプロジェクトになりました。&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt; この記事では、OpenClawのリポジトリ構造、ワークフロー、コミュニティ運営のあり方を分析し、そこから抽出した実践可能なベストプラクティスを整理します。&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OpenClawは、1人の開発者が複数のAIエージェントを調律して大規模なTypeScriptモノレポとネイティブアプリを運営した、代表的なバイブコーディングの事例です。&lt;/li&gt;&#xA;&lt;li&gt;中核となるパターンは、生きている&lt;code&gt;AGENTS.md&lt;/code&gt;、明確なPR規範、自動化された品質ゲート、並列エージェントの調整ルールです。&lt;/li&gt;&#xA;&lt;li&gt;バイブコーディングの熟練は、コードを自分で多く書く能力よりも、コードを書くシステムを設計し統制する能力へと移っていきます。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-openclawは実際に何をするのか&#34;&gt;1. OpenClawは実際に何をするのか&lt;/h2&gt;&#xA;&lt;p&gt;OpenClawは&lt;strong&gt;セルフホスト型のパーソナルAIアシスタント&lt;/strong&gt;であり、メッセージングプラットフォームを大規模言語モデルにつなぎます。ChatGPTやClaudeのWebインターフェースとは違い、OpenClawはユーザーのローカルマシンで動作し、ユーザーがすでに使っているチャネルと接続します。WhatsApp、Telegram、Discord、Slack、Signal、iMessage、Microsoft Teams、Matrix、LINEなど15以上のチャネルをサポートしています。READMEはこれを簡潔にこう説明します。&lt;em&gt;&amp;ldquo;あなたのデバイス上で直接動くパーソナルAIアシスタント。&amp;rdquo;&lt;/em&gt;&lt;sup id=&#34;fnref:8&#34;&gt;&lt;a href=&#34;#fn:8&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;アーキテクチャの中心にあるのは、ローカルの&lt;strong&gt;Gatewayデーモン&lt;/strong&gt;です。これはポート18789で動作するWebSocketベースのコントロールプレーンで、入ってきたメッセージをそれぞれ独立したAIエージェントへルーティングします。各エージェントは自分だけのワークスペース、メモリ、そしてMarkdownファイル（&lt;code&gt;SOUL.md&lt;/code&gt;、&lt;code&gt;MEMORY.md&lt;/code&gt;、&lt;code&gt;USER.md&lt;/code&gt;）で定義された個性を持ちます。&lt;sup id=&#34;fnref:9&#34;&gt;&lt;a href=&#34;#fn:9&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;9&lt;/a&gt;&lt;/sup&gt; エージェントは単に会話するだけではありません。シェルコマンドの実行、CDPを通じたブラウザ制御、スケジュール管理、cronジョブの実行、ハートビートシステムによる能動的な連絡まで行います。&lt;sup id=&#34;fnref:10&#34;&gt;&lt;a href=&#34;#fn:10&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;10&lt;/a&gt;&lt;/sup&gt; &lt;strong&gt;ClawHub&lt;/strong&gt;というスキルマーケットプレイスには、1,700以上のコミュニティ製の拡張が登録されています。&lt;sup id=&#34;fnref:11&#34;&gt;&lt;a href=&#34;#fn:11&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;11&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;技術スタックはTypeScriptベースの &lt;strong&gt;pnpmモノレポ&lt;/strong&gt;（Node.js 22以上）で、Swift（macOS/iOS）とKotlin（Android）で書かれたネイティブのコンパニオンアプリを含みます。テストはVitestとV8カバレッジ70%以上を基準に運用されています。&lt;sup id=&#34;fnref:12&#34;&gt;&lt;a href=&#34;#fn:12&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-リポジトリに表れるai支援開発の痕跡&#34;&gt;2. リポジトリに表れるAI支援開発の痕跡&lt;/h2&gt;&#xA;&lt;p&gt;バイブコーディングの最も明確な証拠は、コミット履歴にあります。初期にはAnthropicのClaude Codeで開発されていたため、コミットに &lt;strong&gt;「claude」が共同作成者（co-author）&lt;/strong&gt; として頻繁に登場します。しかしSteinbergerが2026年2月にOpenAIに加わって以降は、&lt;code&gt;codex/issue-issue-41258-20260312044119&lt;/code&gt;のような &lt;strong&gt;OpenAI Codexエージェントが自律的に生成したブランチ&lt;/strong&gt; が目立って増えました。1つのリポジトリにClaudeとCodex、2つのAIコーディングエージェントの痕跡が共存しているわけです。READMEはむしろこう明記しています。&lt;strong&gt;&amp;ldquo;AI/vibe-coded PRs welcome!&amp;rdquo;&lt;/strong&gt;&lt;sup id=&#34;fnref1:8&#34;&gt;&lt;a href=&#34;#fn:8&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Steinberger個人のワークフローはとくに印象的です。彼は &lt;strong&gt;Codex CLIのインスタンスを3〜8個、3x3のターミナルグリッドで同時に実行&lt;/strong&gt;しており、そのほとんどは別々のワークツリーではなく同じフォルダで作業しています。&lt;sup id=&#34;fnref1:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; 各エージェントは&lt;code&gt;AGENTS.md&lt;/code&gt;のルールに導かれてアトミックなコミットを作ります。彼は &lt;strong&gt;2026年1月の1か月だけで6,600以上のコミット&lt;/strong&gt;を残しましたが、見かけ上は20人規模のチームの速度でも、実際には1人とAIエージェントたちの組み合わせです。&lt;sup id=&#34;fnref2:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; プロンプトは時が経つほど短くなっており、いまでは通常1〜2文とスクリーンショット1枚で十分で、スクリーンショットが入力の約50%を占めています。&lt;sup id=&#34;fnref:13&#34;&gt;&lt;a href=&#34;#fn:13&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;13&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;は、コミュニティがAI支援のPRをどう扱うべきかを規範化しています。&lt;sup id=&#34;fnref:14&#34;&gt;&lt;a href=&#34;#fn:14&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;14&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PRのタイトルまたは説明にAIの使用有無を明示すること&lt;/li&gt;&#xA;&lt;li&gt;テストの水準を明記すること（未テスト／軽くテスト済み／十分にテスト済み）&lt;/li&gt;&#xA;&lt;li&gt;可能ならプロンプトまたはセッションログを含めること&lt;/li&gt;&#xA;&lt;li&gt;生成されたコードが何をするのかを理解していることを確認すること&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;文書はこう締めくくられます。&lt;em&gt;&amp;ldquo;ここではAIのPRを一級市民として扱う。ただ、レビュアーがどこを重点的に見るべきかわかるように透明性がほしいだけだ。&amp;rdquo;&lt;/em&gt;&lt;sup id=&#34;fnref1:14&#34;&gt;&lt;a href=&#34;#fn:14&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;14&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-agentsmdとclaudemdの設定パターン&#34;&gt;3. AGENTS.mdとCLAUDE.mdの設定パターン&lt;/h2&gt;&#xA;&lt;p&gt;OpenClawのリポジトリで最も再現可能性の高いイノベーションは、&lt;strong&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;ファイル&lt;/strong&gt;です。&lt;sup id=&#34;fnref1:12&#34;&gt;&lt;a href=&#34;#fn:12&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;12&lt;/a&gt;&lt;/sup&gt; これはコードベースで作業するすべてのAIコーディングエージェントのための包括的な指示文書です。&lt;code&gt;CLAUDE.md&lt;/code&gt;は同じファイルを指すシンボリックリンクで、Claude CodeとCodex系のエージェントが同一の指示を読むことを保証します。ルールも明確です。&lt;em&gt;&amp;ldquo;リポジトリのどこであれ新しい&lt;code&gt;AGENTS.md&lt;/code&gt;を追加するときは、必ずそれを指す&lt;code&gt;CLAUDE.md&lt;/code&gt;のシンボリックリンクも一緒に追加すること。&amp;rdquo;&lt;/em&gt;&lt;sup id=&#34;fnref2:12&#34;&gt;&lt;a href=&#34;#fn:12&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;このファイルは、AIエージェントのための組織的記憶装置として機能します。Steinbergerはこれを &lt;strong&gt;「組織の傷跡が蓄積された痕跡（organizational scar tissue）の集まり」&lt;/strong&gt; と表現しますが、それは何かがうまくいかないたびにCodex自身が段階的に内容を追加してきたからです。&lt;sup id=&#34;fnref1:13&#34;&gt;&lt;a href=&#34;#fn:13&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;13&lt;/a&gt;&lt;/sup&gt; 中核となるセクションは次のとおりです。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
