<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>SuperDevSpace ブログ</title>
    <link>https://superdevspace.com/ja/blog</link>
    <description>SuperDevSpace 開発の記録。手持ちの CLI サブスクリプションで動く AI エージェントチーム、git worktree、ガイド付きセットアップなど。</description>
    <language>ja</language>
    <lastBuildDate>Sun, 25 Oct 2026 10:00:00 GMT</lastBuildDate>
    <atom:link href="https://superdevspace.com/ja/blog/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>ガイド付きセットアップ：どんな Web サイトでも案内してくれるエージェント</title>
      <link>https://superdevspace.com/ja/blog/guided-setup-agent-any-website</link>
      <guid isPermaLink="true">https://superdevspace.com/ja/blog/guided-setup-agent-any-website</guid>
      <pubDate>Sun, 25 Oct 2026 10:00:00 GMT</pubDate>
      <dc:creator>SuperDevSpace</dc:creator>
      <category>guided-setup</category>
      <category>browser</category>
      <category>agents</category>
      <description>エージェントがダッシュボードを操作し、パスワードやコード、支払いの場面ではページをあなたに渡し、目当ての API キーを保存します。その仕組みを解説。</description>
      <content:encoded><![CDATA[<p>どんなプロジェクトも、いずれは Web サイトから何かを取ってくる必要があります。決済プロバイダーの API キー。Webhook のシークレット。ダッシュボードの 3 階層下にあるクライアントトークン。エージェントは連携コードを数分で書き上げますが、そこで手を止めて「ダッシュボードはご自身で操作してください」と言います。その部分はブラウザの中、あなたのログインの向こう側で起きるからです。</p>
<p>ガイド付きセットアップは、SuperDevSpace がこの隙間を埋める方法です。エージェントはアプリ内蔵のブラウザでサイトを開き、許された範囲のクリックを自分でこなし、次の手順があなたの番になったちょうどそのときに、指し示す印と一文を添えてページをあなたに渡します。</p>
<figure class="blog-figure"><img src="https://superdevspace.com/blog/shots/inspector-chain.webp" alt="アプリ内蔵のブラウザパネルに Web ページが表示され、選択した要素のコンポーネントチェーンがファイルと行番号付きで並んでいる画面" loading="lazy" decoding="async"><figcaption>アプリ内のブラウザパネル。ガイド付きセットアップが操作するのと同じパネルで、ここでは Inspector と一緒に表示しています（実際のアプリ。表示はトルコ語）。</figcaption></figure>
<h2 id="全部エージェントに任せればいい-が間違いである理由">「全部エージェントに任せればいい」が間違いである理由</h2>
<p>この機能のいちばん簡単な作り方は、ブラウザをまるごとエージェントに渡すことです。すべての項目を読み、すべての欄に入力し、すべてのボタンを押す。速いでしょうが、よくない考えです。セットアップの流れには、エージェントが決して触れるべきでないものがあふれています。</p>
<ul>
<li>パスワードと、スマートフォンに届くワンタイムコード</li>
<li>カード番号、銀行口座の情報、本人確認書類</li>
<li>あなたが同意する規約と、あなたが承認する支払い</li>
</ul>
<p>そこで設計は反対側から始めています。エージェントは定型作業を担当します。移動し、正しいページを見つけ、プロジェクト名を入力し、<strong>作成</strong> を押す。個人的なことや、拘束力のあることはすべてあなたの手元に残ります。</p>
<div class="table-scroll"><table><thead><tr><th>セットアップの手順</th><th>エージェント</th><th>あなた</th></tr></thead><tbody><tr><td>ダッシュボードを開き、正しいページを見つける</td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td><td></td></tr>
<tr><td>プロジェクト名、URL、リストの選択肢を入力する</td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td><td></td></tr>
<tr><td>パスワードやスマートフォンのコードを入力する</td><td><span class="blog-no" role="img" aria-label="いいえ">✗</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>カード、銀行、本人確認の情報を入力する</td><td><span class="blog-no" role="img" aria-label="いいえ">✗</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>規約にチェックを入れ、「支払う」「注文する」を押す</td><td><span class="blog-no" role="img" aria-label="いいえ">✗</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>新しい API キーを読み取り、<code>.env</code> に保存する</td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td><td></td></tr></tbody></table></div>
<aside class="blog-callout blog-callout-note" role="note" aria-label="メモ"><p class="blog-callout-title"><svg class="blog-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg><span>境界線を守らせるのはアプリです</span></p><p>これはプロンプトに書かれたお願いではありません。境界線を越えようとするエージェントの操作はアプリが拒否します。言葉巧みにすり抜けることはできません。</p>
</aside>
<h2 id="ガイド付きセットアップの流れ">ガイド付きセットアップの流れ</h2>
<p>流れはどのサイトでも同じです。誰も手順を書いていないサイトでも変わりません。</p>
<div class="blog-steps"><ol>
<li><strong>ページを開く。</strong> エージェントがアプリ内でブラウザのタブを開きます。このブラウザのログイン状態は再起動しても保持されるので、すでにログイン済みかもしれません。</li>
<li><strong>動く前に見る。</strong> エージェントはページの概要を取得します。見出し、ボタン、リンク、入力欄、フレームごとに 1 行です。機密性の高い欄は種類（パスワード、カード、銀行、ワンタイムコード、本人確認）と「入力済み」か「空」かだけが示され、値は決して表示されません。</li>
<li><strong>自分の分をこなす。</strong> クリックし、普通の入力欄を埋め、テキストを読みます。ページが変わる操作のあとは、必ずページを読み直します。</li>
<li><strong>あなたの分を渡す。</strong> 次の手順があなたの番になると、エージェントはページ上にガイドカードを表示します。短いタイトル、具体的な指示を 1 つ、そして対象の入力欄やボタンのハイライトです。あなたがその手順を終えて <strong>完了して渡す</strong> を押します。行き詰まったら <strong>助けが必要</strong> を押して見えているものを書けば、エージェントがページ上で答えます。</li>
<li><strong>同じターンの中で待つ。</strong> ガイドが表示されている間、エージェントはあなたを待ちます。ページを返すまでエージェントのクリックや入力は拒否され、あなたはいつでも <strong>停止 / 操作を引き継ぐ</strong> を押せます。</li>
<li><strong>成果を持ち帰る。</strong> 目当てのもの（API キー、トークン、Webhook のシークレット）がページに表示されたら、エージェントはそれをシークレットとして読み取り、プロジェクトの <code>.env</code> など、あるべき場所に保存します。報告するのはキーが<em>どこに</em>あるかであって、キーそのものではありません。</li>
</ol>
</div>
<figure class="blog-diagram" data-diagram><img class="blog-diagram-img blog-diagram-light" src="https://superdevspace.com/blog/diagrams/bc6fc97edf517e296d7e-light.svg" width="1097" height="481" alt="最初のページから保存されたキーまで、ガイド付きセットアップの一例" loading="lazy" decoding="async"><figcaption>最初のページから保存されたキーまで、ガイド付きセットアップの一例</figcaption></figure>
<p>終わったら、シークレットを画面に出さずに結果を確認できます。</p>
<pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '^PADDLE_[A-Z_]*='</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> .env</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">PADDLE_API_KEY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">PADDLE_CLIENT_TOKEN</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">PADDLE_WEBHOOK_SECRET</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">PADDLE_ENVIRONMENT</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span></code></pre>
<h2 id="アプリが強制するルール">アプリが強制するルール</h2>
<p>これらはアプリ内のチェックで、エージェントがオフにすることはできません。</p>
<ul>
<li><strong>シークレットは入れない、出さない。</strong> エージェントは、パスワード、カード、CVC、IBAN、ワンタイムコード、本人確認の欄に入力できません。ページを読むときやスナップショットを撮るときには、それらの値は隠され、読み取るテキストからも取り除かれます。</li>
<li><strong>スクリーンショットは塗りつぶされる。</strong> 機密性の高い欄と、別オリジンのフレーム（カード入力ウィジェットや「Google でログイン」の枠など）はすべて、エージェントが画像を見る前に覆われます。</li>
<li><strong>機密ページではスクリプトを実行しない。</strong> そうした欄を表示しているページでは、ページ内での JavaScript の実行は拒否されます。</li>
<li><strong>同意と支払いはあなたのもの。</strong> 規約のチェックボックスや「支払う」「注文する」ボタンのクリックは拒否されます。</li>
<li><strong>すべてが見える。</strong> ブラウザパネルでエージェントが行っていることは、その場でパネルのバナーに表示されます。</li>
<li><strong>シークレットは会話に出さない。</strong> シークレットとして読み取った値は機密としてマークされ、エージェントはチャット、レポート、タスクのメモ、通知で決して繰り返さないよう指示されます。</li>
</ul>
<aside class="blog-callout blog-callout-warning" role="note" aria-label="警告"><p class="blog-callout-title"><svg class="blog-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg><span>警告</span></p><p>支払いの承認や規約への同意は、必ずあなた自身のクリックです。それなしでは進めない流れなら、エージェントはページをあなたに渡して待ちます。</p>
</aside>
<h2 id="連携先のリストではなく-どんな-web-サイトでも">連携先のリストではなく、どんな Web サイトでも</h2>
<p>ガイド付きセットアップはスクリプトのライブラリではなく、ループです。誰もヒントを書いていないサイトでも動きます。エージェントは目の前にある実際のページを読むからです。いくつかのサービス向けには短いヒントファイルを同梱しています。たとえば Paddle のサンドボックスのダッシュボードや RevenueCat 向けのもので、開発者向け設定がたいていどこにあるかをエージェントに伝えます。ダッシュボードのメニューは頻繁に変わるので、ヒントにははっきりこう書いてあります。ページとヒントが食い違ったら、ページを信じること。</p>
<p>これは見た目以上に大切です。エージェントが書く連携コードは機能の半分にすぎません。残りの半分は、他人の Web サイト上にあるアカウント、キー、Webhook です。ガイド付きセットアップなら、その両方が同じセッションで、同じエージェントとともに進みます。あなたが時間を使うのは、あなたにしかできない手順だけです。</p>
<h2 id="どこに位置づけられるか">どこに位置づけられるか</h2>
<p>ガイド付きセットアップは、SuperDevSpace のほかのすべてと同じワークスペースの一部です。決済の連携コードを書くエージェントが、そのままキーの作成も案内します。そのターミナルの隣のブラウザパネルで。初めての方は、<a href="https://superdevspace.com/ja/blog/why-we-built-superdevspace">SuperDevSpace を作った理由</a>で、それを取り巻くチームの全体像を紹介しています。</p>
<h2 id="試してみる">試してみる</h2>
<p>トライアルは Premium を 14 日間、カード登録なしで使えます。<a href="https://superdevspace.com/download">SuperDevSpace をダウンロード</a>し、プロジェクトに決済や分析のプロバイダーを設定するようエージェントに頼んでみてください。あなたの番が来たら、エージェントがページを渡してくれます。</p>
]]></content:encoded>
    </item>
    <item>
      <title>git worktree で複数のコーディングエージェントを並行して動かす</title>
      <link>https://superdevspace.com/ja/blog/parallel-coding-agents-git-worktrees</link>
      <guid isPermaLink="true">https://superdevspace.com/ja/blog/parallel-coding-agents-git-worktrees</guid>
      <pubDate>Sun, 25 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>SuperDevSpace</dc:creator>
      <category>git-worktrees</category>
      <category>agents</category>
      <category>workflow</category>
      <description>SuperDevSpace が 1 つのリポジトリで複数のエージェントを切り離す仕組み。worker ごとの git worktree とブランチ、ターンごとのコミット、スカッシュマージ。</description>
      <content:encoded><![CDATA[<p>同じチェックアウトで 2 つのコーディングエージェントを動かしてみると、ソフトウェアチームがなぜブランチを使うのかがすぐにわかります。片方がモジュールの名前を変えている最中に、もう片方はその変更が半分だけ入った状態でテストスイートを走らせます。片方は、もう片方が削除したばかりのファイルをステージします。どちらも間違ってはいません。ただ同じ机を共有しているだけです。</p>
<p>SuperDevSpace は、manager と複数の worker を 1 つのリポジトリで同時に動かします。この記事では、彼らを互いに切り離す仕組みである git worktree と、それを扱うときにアプリが守っている具体的なルールを説明します。</p>
<h2 id="git-worktree-とは">git worktree とは</h2>
<p>git リポジトリには通常、作業ディレクトリが 1 つしかありません。<code>git worktree</code> を使うと、1 つのリポジトリに複数の作業ディレクトリを持たせられます。それぞれが自分のブランチをチェックアウトし、オブジェクトデータベースはすべて共有します。2 つ目のクローンも、履歴の 2 つ目のコピーもありません。新しい worktree にかかるのは、チェックアウト 1 つ分のファイルだけです。</p>
<p>どのリポジトリでも手で試せます。コマンドはどこでも同じで、違うのはシェルだけです。</p>
<div class="blog-tabs" data-tabs><section class="blog-tab-panel" id="blog-tab-1-0" data-tab-label="macOS / Linux"><p class="blog-tab-label">macOS / Linux</p><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> worktree</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -b</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> agent/frontend-demo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ../myrepo-frontend</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> worktree</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> list</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ../myrepo-frontend</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> status</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> -</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> worktree</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remove</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ../myrepo-frontend</span></span></code></pre>
</section><section class="blog-tab-panel" id="blog-tab-1-1" data-tab-label="Windows (PowerShell)"><p class="blog-tab-label">Windows (PowerShell)</p><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">git worktree add </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">b agent</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">frontend</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">demo ..\myrepo</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">frontend</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">git worktree list</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">cd ..\myrepo</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">frontend; git status</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">cd ..\myrepo; git worktree remove ..\myrepo</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">frontend</span></span></code></pre>
</section></div>
<p>worktree にはそれぞれ専用の <code>HEAD</code>、専用のインデックス、専用のファイルがあります。2 つのプロセスが 2 つの worktree で同時に編集・ビルド・テストをしても、互いの書きかけの変更は見えません。エージェントのチームに必要なのは、まさにこの性質です。</p>
<aside class="blog-callout blog-callout-note" role="note" aria-label="メモ"><p class="blog-callout-title"><svg class="blog-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg><span>メモ</span></p><p>worktree を削除しても、そのブランチは消えません。コミットは、あなたがブランチを削除するまでリポジトリに残ります。</p>
</aside>
<h2 id="superdevspace-での使い方">SuperDevSpace での使い方</h2>
<p>ルールはシンプルで、どの organization でも同じです。</p>
<ul>
<li><strong>manager はメインのチェックアウトで作業します。</strong> 計画し、レビューし、マージします。ブランチが合流する唯一の場所です。</li>
<li><strong>worker はそれぞれ専用のブランチに専用の worktree を持ちます。</strong> manager が worker を採用すると、アプリがその worker のために <code>git worktree add -b &lt;branch&gt; &lt;path&gt;</code> を実行します。ブランチ名は、あなたが名前を付けない限り <code>agent/&lt;worker 名&gt;-&lt;スタンプ&gt;</code> になります。</li>
<li><strong>worktree はアプリ自身のデータフォルダ</strong>、<code>worktrees/&lt;organization&gt;/&lt;worker&gt;</code> の下に置かれ、リポジトリの中には決して作られません。プロジェクトフォルダがエージェントのディレクトリで散らかることはありません。</li>
<li><strong>ターンごとにコミットされます。</strong> worker がターンを終えると、アプリはその worktree で変わったものをすべてコミットします（<code>agent(&lt;name&gt;): turn</code>）。worker の作業が、コミットされていない作業ディレクトリにしか存在しないという状態は起きません。</li>
<li><strong>マージはスカッシュマージです。</strong> manager が worker のレポートを受け入れると、ブランチは <code>git merge --squash</code> で 1 つのコミットとしてあなたのラインに取り込まれます。コンフリクトした場合はマージを中止し、コンフリクトの途中で放り出すのではなく、次の操作のためにリポジトリをきれいな状態に戻します。</li>
<li><strong>リポジトリごとに git 操作は一度に 1 つ。</strong> worktree のディレクトリがファイルを分離し、リポジトリごとのキューが git コマンドそのものを直列化します。2 つの worker が同時に作業を終えても、git のメタデータを奪い合うことはありません。</li>
</ul>
<figure class="blog-diagram" data-diagram><img class="blog-diagram-img blog-diagram-light" src="https://superdevspace.com/blog/diagrams/5124f2be2ac4155b30f4-light.svg" width="471" height="270" alt="2 つの worker、2 つのブランチ、2 回のスカッシュマージ" loading="lazy" decoding="async"><figcaption>2 つの worker、2 つのブランチ、2 回のスカッシュマージ</figcaption></figure>
<p>ボード上では、これが同時に進む複数のタスクとして見えます。タスクごとに担当の worker が違い、その下にはそれぞれ専用のブランチがあります。</p>
<figure class="blog-figure"><img src="https://superdevspace.com/blog/shots/board-sprint.webp" alt="ToDo、進行中、承認待ち、レビュー中、完了の各列にタスクが分かれたスプリントボード" loading="lazy" decoding="async"><figcaption>organization のボードで並行して進むタスク。worker はそれぞれ自分のブランチで作業しています（実際のアプリ。表示はトルコ語）。</figcaption></figure>
<h2 id="実用にするための工夫">実用にするための工夫</h2>
<p>作ったばかりの worktree には、git が追跡しているファイルしかありません。プロジェクトを動かすにはたいてい足りません。<code>node_modules</code>、ローカルの <code>.env</code>、生成ファイルなどです。これを 2 つの仕組みで補っています。</p>
<h3 id="リポジトリごとのセットアップスクリプト">リポジトリごとのセットアップスクリプト</h3>
<p>リポジトリに <code>.super/scripts/setup-worktree.sh</code> があれば、アプリは worker が動き出す前に、新しい worktree の中でそれを実行します。<code>SUPERDEV_MAIN_REPO</code> にはメインのチェックアウトのパスが入ります。出力はリアルタイムで表示されるので、時間のかかるインストールでも状況がわかり、途中でキャンセルもできます。</p>
<pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">#!/usr/bin/env bash</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -euo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pipefail</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># ローカルにしかないファイルをメインのチェックアウトからコピー</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$SUPERDEV_MAIN_REPO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">/.env"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> .env</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> 2></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> true</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 依存関係をインストール（pnpm は共有ストアからリンクするので速い）</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --frozen-lockfile</span></span></code></pre>
<aside class="blog-callout blog-callout-tip" role="note" aria-label="ヒント"><p class="blog-callout-title"><svg class="blog-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/></svg><span>セットアップスクリプトは速く保つ</span></p><p>worker はスクリプトが終わってから動き出します。スクリプトが失敗した場合は、準備が半端なツリーでエージェントを働かせるのではなく、起動そのものを止めます。共有ストアを持つパッケージマネージャーを使えば、新しい worktree を安く用意できます。</p>
</aside>
<h3 id="サブモジュール">サブモジュール</h3>
<p><code>git worktree add</code> はサブモジュールを空のままにします。新しい worktree に <code>.gitmodules</code> があれば、アプリはその中で <code>git submodule update --init --recursive</code> を実行し、依存関係が黙って欠けたままビルドされることを防ぎます。</p>
<h2 id="作業を失わない後片付け">作業を失わない後片付け</h2>
<p>worktree はたまっていきます。アプリは回収しますが、慎重です。</p>
<figure class="blog-diagram" data-diagram><img class="blog-diagram-img blog-diagram-light" src="https://superdevspace.com/blog/diagrams/6bdb77b328667e2a9ba9-light.svg" width="427" height="775" alt="worker の worktree を削除してよいのはいつか" loading="lazy" decoding="async"><figcaption>worker の worktree を削除してよいのはいつか</figcaption></figure>
<p>コミットされていない変更がある worktree や、まだあなたのラインに入っていない作業を含むブランチを持つ worktree は、そのまま残ります。消したフォルダは作り直せますが、失った作業は戻りません。ブランチにも同じ慎重さを適用しています。アプリは自分で作ったブランチを記録しており、触るのはそれだけです。</p>
<h2 id="あなたにとって何が変わるか">あなたにとって何が変わるか</h2>
<p>worker がそれぞれ自分のブランチを持てば、「エージェントを 4 つ同時に動かす」は賭けではなくなります。次のことができます。</p>
<ul>
<li>独立したタスクに分かれる指示を manager に出し、worker たちを並行して動かす</li>
<li>どの worker の diff も、それを生んだ会話の隣で個別に読む</li>
<li>ほかの worker を邪魔せずに、1 人の worker の変更だけを却下する</li>
<li>チームが働いている間も、メインのチェックアウトを自分で使い続ける</li>
</ul>
<p>人間のチームが使うのと同じ規律を、互いの足を踏みそうになっても教えてくれないエージェントに適用しているだけです。なぜこれを中心にアプリを丸ごと作ったのかは、<a href="https://superdevspace.com/ja/blog/why-we-built-superdevspace">最初の記事</a>で書いています。</p>
<h2 id="試してみる">試してみる</h2>
<p>14 日間のトライアルは Premium で、カード登録は不要です。<a href="https://superdevspace.com/download">SuperDevSpace をダウンロード</a>して新しい organization をリポジトリに向け、manager が最初の worker を採用するたびに worktree が現れる様子を見てみてください。</p>
]]></content:encoded>
    </item>
    <item>
      <title>SuperDevSpace を作った理由：自分の CLI サブスクリプションで動く AI チーム</title>
      <link>https://superdevspace.com/ja/blog/why-we-built-superdevspace</link>
      <guid isPermaLink="true">https://superdevspace.com/ja/blog/why-we-built-superdevspace</guid>
      <pubDate>Sun, 25 Oct 2026 08:00:00 GMT</pubDate>
      <dc:creator>SuperDevSpace</dc:creator>
      <category>launch</category>
      <category>agents</category>
      <category>claude-code</category>
      <description>manager が計画し、worker が実装する。それぞれ専用のターミナルと git worktree で、すでに契約しているエージェント CLI の上で。私たちがこれを作った理由。</description>
      <content:encoded><![CDATA[<p>Claude Code のようなエージェント CLI にすでにお金を払っているなら、ターミナルのウィンドウ 1 枚で使いきれる以上の力が手元にあります。モデルは計画を立て、コードを書き、テストを走らせ、自分のしたことを説明できます。ひとりでできないのは、同時に 5 人になること、誰が何をしているかを把握すること、そして一日の終わりに正直なレポートを 1 本まとめて渡すことです。</p>
<p>SuperDevSpace は、この隙間を埋めるために作りました。すでに使っている CLI を小さなチームに変えるデスクトップアプリです。仕事を計画する manager と、それを実行する worker。どちらもそれぞれ専用のターミナルと専用の git worktree で動きます。</p>
<aside class="blog-callout blog-callout-note" role="note" aria-label="メモ"><p class="blog-callout-title"><svg class="blog-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg><span>売っているのはオーケストラで、演奏者ではありません</span></p><p>SuperDevSpace はモデルもトークンも販売しません。あなたがすでに契約しているエージェント CLI を、そのプロバイダーとのあなた自身の契約のもとで動かします。</p>
</aside>
<h2 id="ターミナル-1-つにエージェント-1-つ-の問題">ターミナル 1 つにエージェント 1 つ、の問題</h2>
<p>コーディングエージェントひとりとの作業は、タスクが 1 つなら快適です。ところが同じリポジトリでやることが 3 つになった瞬間に崩れます。</p>
<ul>
<li>2 つ目のターミナルを開くことはできますが、今度は 2 つのエージェントが同じチェックアウトを編集します。片方がテストスイートを走らせている最中に、もう片方はリファクタリングの真っ最中です。</li>
<li>あなたがプロジェクトマネージャーになります。仕事を分け、どのターミナルにどのタスクがあったかを覚え、セッションからセッションへコンテキストを写すのはあなたです。</li>
<li>何が起きたかを誰も記録しません。昼食から戻ったとき、手がかりはターミナルのスクロールバックだけです。</li>
</ul>
<p>どれもモデルの問題ではありません。組織の問題です。そして組織化は、ソフトウェアが得意とする仕事です。</p>
<div class="table-scroll"><table><thead><tr><th></th><th>ターミナル 1 つ、エージェント 1 つ</th><th>SuperDevSpace の organization</th></tr></thead><tbody><tr><td>衝突なしの並行作業</td><td><span class="blog-no" role="img" aria-label="いいえ">✗</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>worker ごとの worktree とブランチ</td><td><span class="blog-no" role="img" aria-label="いいえ">✗</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>ボード上のタスクに分割された仕事</td><td><span class="blog-no" role="img" aria-label="いいえ">✗</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>タスクごとの書面レポート</td><td><span class="blog-no" role="img" aria-label="いいえ">✗</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>取り込む前に diff を自分で確認できる</td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr>
<tr><td>すでに払っている CLI で動く</td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td><td><span class="blog-yes" role="img" aria-label="はい">✓</span></td></tr></tbody></table></div>
<h2 id="superdevspace-が実際にやること">SuperDevSpace が実際にやること</h2>
<p>SuperDevSpace では、リポジトリ 1 つが 1 つの <strong>organization</strong> です。各 organization には <strong>manager</strong> がいます。本物のターミナルで動く本物のエージェント CLI セッションで、画面で見ることも、直接入力することもできます。manager には普段の言葉で指示（ディレクティブ）を出します。キーボードで入力しても、音声入力で話しかけても構いません。</p>
<figure class="blog-diagram" data-diagram><img class="blog-diagram-img blog-diagram-light" src="https://superdevspace.com/blog/diagrams/db10f074db24a273ec05-light.svg" width="543" height="640" alt="1 つの指示がマージされた成果になるまで" loading="lazy" decoding="async"><figcaption>1 つの指示がマージされた成果になるまで</figcaption></figure>
<p>そのあと manager は、チームリードがやることをそのままやります。</p>
<div class="blog-steps"><ol>
<li><strong>計画する。</strong> スプリントを開き、指示をボード上のタスクに分解します。各タスクには短いブリーフが付きます。</li>
<li><strong>採用する。</strong> タスクごとに worker を採用します。worker はそれぞれ、自分専用の見えるターミナルタブで動く本物の CLI セッションで、フロントエンド開発者や QA エンジニアといった役割を持ちます。</li>
<li><strong>切り離す。</strong> worker はそれぞれ専用のブランチに専用の git worktree を持つので、並行作業が 1 つのチェックアウトでぶつかることはありません。<a href="https://superdevspace.com/ja/blog/parallel-coding-agents-git-worktrees">その仕組み</a>は別の記事で解説しています。</li>
<li><strong>レビューする。</strong> worker は作業を終えるとレポートを提出します。manager がレビューしてブランチをマージし、問題があれば修正を依頼します。</li>
<li><strong>報告する。</strong> 5 つのスクロールバックではなく、まとめられた 1 本のレポートが届きます。</li>
</ol>
</div>
<figure class="blog-figure"><img src="https://superdevspace.com/blog/shots/team-roles.webp" alt="「エージェントを追加」ダイアログ。フロントエンド、バックエンド、QA エンジニア、コードレビュアー、デザイナー、DevOps などの役割のグリッドと、名前欄、任意の追加指示欄" loading="lazy" decoding="async"><figcaption>チームを編成するときに worker の役割を選ぶ画面（実際のアプリ。表示はトルコ語）。</figcaption></figure>
<p>いつでも割って入れます。どのエージェントにもチャットビューと本物のターミナルがあります。1 つのセッションを 2 つの見方で見るだけです。変更はすべて、それを生んだ会話の隣に diff として表示されるので、メインラインに入る前に自分で確認できます。</p>
<figure class="blog-figure"><img src="https://superdevspace.com/blog/shots/board-sprint.webp" alt="organization のスプリントボード。バックログ、ToDo、進行中、承認待ち、レビュー中、完了の列と、レーンごとのラベルが付いたタスクカード" loading="lazy" decoding="async"><figcaption>チームが作業中のデモ organization のスプリントボード（実際のアプリ。表示はトルコ語）。</figcaption></figure>
<h2 id="あなたのサブスクリプション-あなたのマシン-あなたのコード">あなたのサブスクリプション、あなたのマシン、あなたのコード</h2>
<p>いちばん重要な設計判断は、いちばんシンプルな判断でもあります。<strong>SuperDevSpace は、あなたがすでに払っている CLI を動かします。</strong> モデルへのアクセスを再販することはないので、SuperDevSpace のサブスクリプション以外に、実行した内容が私たちからの請求に載ることはありません。</p>
<p>この判断には、私たちが気に入っている帰結があります。</p>
<ul>
<li><strong>エージェントはあなたのマシン上のローカルプロセスとして</strong>、ローカルのリポジトリに対して動きます。ソースコード、プロンプト、ターミナルの出力、ファイルパスが私たちのサーバーに送られることはありません。アカウントサービスが保存するのは、アカウント、サブスクリプションの状態、デバイスの一覧だけです。</li>
<li><strong>CLI は organization ごとに選べます。</strong> Claude Code、OpenAI Codex、Gemini CLI、Aider、Qwen Code、Cursor CLI、OpenCode から選択できます。現時点でアプリが最も深く扱えるのは Claude Code です（フック、セッション再開、MCP ツール、権限への応答）。残りの 6 つも起動して動作します。アプリはそれらを実験的と表示し、まだつながっていない機能を、黙って失敗する代わりに教えてくれます。</li>
<li><strong>私たちのクラウドに閉じ込められるものはありません。</strong> 仕事をしているクラウドがそもそも存在しないからです。</li>
</ul>
<p>最初の指示を出す前に、CLI とリポジトリが想定どおりの場所にあるか確認しておくと安心です。</p>
<pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> claude</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --version</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ~/code/your-project</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> status</span></span></code></pre>
<h2 id="チームを支える周辺機能">チームを支える周辺機能</h2>
<p>チームにはターミナル以上のものが必要です。どのプランにも含まれるものをいくつか紹介します。</p>
<ul>
<li><strong>事実を語るボード。</strong> スプリント、タスク、ブリーフ、レポート。レポートには、うまくいったことだけでなく失敗したことも書かれます。</li>
<li><strong>Inspector。</strong> 動いている Web ページの要素をクリックすると、コンポーネント、ファイル、行番号を添えてエージェントに送れます。Vite、Next.js、静的サイトに対応しています。</li>
<li><strong>スマートフォンからの承認。</strong> エージェントに判断が必要になると、あなたに尋ねます。スマートフォンアプリにはボード、エージェント、保留中の承認が表示されるので、席を離れていても権限の確認に答えられます。</li>
<li><strong>organization ごとのホワイトボード</strong>（Excalidraw）。エージェントが読むことも、描き込むこともできます。</li>
</ul>
<figure class="blog-figure blog-figure-video"><video class="blog-video" muted loop playsinline controls preload="metadata" data-autoplay aria-label="製品ツアーから切り出した、音声なしの短いループ。organization の作成と最初の手順"><source src="https://superdevspace.com/media/superdevspace-tanitim-loop.mp4" type="video/mp4"></video><figcaption>実際の製品ツアーの数秒間（表示はトルコ語）。</figcaption></figure>
<p>Premium では、さらに踏み込んだ機能が加わります。Penpot をベースにしたデザインモードと、ファイルに直接描く Designer エージェント。指示を決まった時刻に実行するスケジュール。そして Mac 上の manager が Windows PC 上の manager に仕事を渡せるピアリンクです。詳しい比較は<a href="https://superdevspace.com/pricing">料金ページ</a>にあります。</p>
<h2 id="約束しないこと">約束しないこと</h2>
<aside class="blog-callout blog-callout-warning" role="note" aria-label="警告"><p class="blog-callout-title"><svg class="blog-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg><span>派手さより正確さを</span></p><p>SuperDevSpace はモデルを賢くするものではありません。モデルが働くための構造を与えるものです。対応 OS は macOS（Apple シリコン）と Windows（64 ビット）です。Linux 対応の時期はまだ決まっておらず、決まっていない日付を書くこともしません。</p>
</aside>
<p>エージェントのチームにも、やはりボスが必要です。何を作るかを決めるのも、メインブランチに入れるものを承認するのも、あなたです。</p>
<h2 id="試してみる">試してみる</h2>
<p>トライアルは Premium を 14 日間、カード登録なしで使えます。CLI のサブスクリプションもコードも、あなたのものです。自分のリポジトリでチームが働く様子を見たいなら、<a href="https://superdevspace.com/download">SuperDevSpace をダウンロード</a>して、manager に最初の指示を出してみてください。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
