<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Developer Tools on KnightLiブログ</title>
        <link>https://knightli.com/ja/tags/developer-tools/</link>
        <description>Recent content in Developer Tools on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Sun, 17 May 2026 17:42:25 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/developer-tools/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Bun：JavaScript ランタイム、パッケージ管理、テスト、バンドルを一つにまとめる</title>
        <link>https://knightli.com/ja/2026/05/17/bun-javascript-toolkit/</link>
        <pubDate>Sun, 17 May 2026 17:42:25 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/17/bun-javascript-toolkit/</guid>
        <description>&lt;p&gt;Bun は oven-sh が開発する JavaScript / TypeScript の統合ツールチェーンです。&lt;/p&gt;
&lt;p&gt;単に速い Node.js 代替を目指しているだけではありません。ランタイム、パッケージマネージャー、スクリプト実行、テストランナー、バンドラーを同じ &lt;code&gt;bun&lt;/code&gt; コマンドにまとめます。フロントエンドや Node.js 開発者にとっての魅力は、ツールを減らし、インストールやビルドの待ち時間を減らし、多くの作業を一つのコマンドで済ませられることです。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/oven-sh/bun&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/oven-sh/bun&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;まず結論&#34;&gt;まず結論
&lt;/h2&gt;&lt;p&gt;Bun は JavaScript ツールチェーンを簡素化したい人に向いています。&lt;/p&gt;
&lt;p&gt;できることは次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript、TypeScript、JSX、TSX を実行する。&lt;/li&gt;
&lt;li&gt;Node.js 互換ランタイムとして使う。&lt;/li&gt;
&lt;li&gt;npm / yarn / pnpm の代わりにパッケージ管理を行う。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;package.json&lt;/code&gt; の scripts を実行する。&lt;/li&gt;
&lt;li&gt;テストを実行する。&lt;/li&gt;
&lt;li&gt;フロントエンドまたはバックエンドのコードをバンドルする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bunx&lt;/code&gt; で npm パッケージ内のコマンドを実行する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Bun.serve&lt;/code&gt;、&lt;code&gt;bun:sqlite&lt;/code&gt;、&lt;code&gt;Bun.sql&lt;/code&gt;、&lt;code&gt;Bun.redis&lt;/code&gt;、&lt;code&gt;Bun.s3&lt;/code&gt; などの組み込み API を提供する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最大の価値は開発体験です。依存関係のインストールが速く、起動も速く、コマンドが統一され、TypeScript と JSX がそのまま使えます。&lt;/p&gt;
&lt;p&gt;ただし、すべてのプロジェクトがすぐに Bun へ切り替えるべきではありません。大規模 Node.js プロジェクト、ネイティブ拡張に強く依存するプロジェクト、安定性要求が高い本番サービスでは、互換性、ビルド、テスト、デプロイ方式を一つずつ検証する必要があります。&lt;/p&gt;
&lt;h2 id=&#34;bun-とは&#34;&gt;Bun とは
&lt;/h2&gt;&lt;p&gt;公式 README によると、Bun は JavaScript と TypeScript アプリケーション向けの統合ツールキットです。単一の実行ファイル &lt;code&gt;bun&lt;/code&gt; として配布されます。&lt;/p&gt;
&lt;p&gt;中心は Bun runtime です。これは Node.js の drop-in replacement を目指す高速 JavaScript ランタイムです。Bun は Zig で書かれ、JavaScriptCore をベースにし、起動時間とメモリ使用量を重視して最適化されています。&lt;/p&gt;
&lt;p&gt;つまり、次のように直接実行できます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run index.tsx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;TypeScript と JSX は追加設定なしで動きます。&lt;/p&gt;
&lt;p&gt;同じ &lt;code&gt;bun&lt;/code&gt; コマンドには、test runner、script runner、Node.js 互換パッケージマネージャー、bundler、package runner も含まれます。&lt;/p&gt;
&lt;p&gt;よく使うコマンドは次の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install &amp;lt;pkg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bunx cowsay &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;従来は &lt;code&gt;node&lt;/code&gt;、&lt;code&gt;npm&lt;/code&gt;、&lt;code&gt;pnpm&lt;/code&gt;、&lt;code&gt;tsx&lt;/code&gt;、&lt;code&gt;jest&lt;/code&gt;、&lt;code&gt;vitest&lt;/code&gt;、&lt;code&gt;webpack&lt;/code&gt;、&lt;code&gt;esbuild&lt;/code&gt;、&lt;code&gt;ts-node&lt;/code&gt; などが同じプロジェクトに並びがちでした。Bun は高頻度の作業を一つのツールにまとめようとしています。&lt;/p&gt;
&lt;h2 id=&#34;インストール方法&#34;&gt;インストール方法
&lt;/h2&gt;&lt;p&gt;Bun は Linux、macOS、Windows をサポートし、x64 と arm64 に対応しています。&lt;/p&gt;
&lt;p&gt;公式の推奨インストールスクリプト：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://bun.com/install &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powershell&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-c&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;irm bun.sh/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;npm からもインストールできます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;macOS Homebrew：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap oven-sh/bun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Docker：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker pull oven/bun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm --init --ulimit &lt;span class=&#34;nv&#34;&gt;memlock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1:-1 oven/bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Linux ではカーネルバージョンに注意が必要です。README では Linux kernel &lt;code&gt;5.6&lt;/code&gt; 以上を強く推奨し、最低要件は &lt;code&gt;5.1&lt;/code&gt; とされています。&lt;/p&gt;
&lt;p&gt;最新版へ更新：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;canary へ更新：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun upgrade --canary
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;本番環境で canary を直接使うのは通常おすすめしません。新機能の検証や特定バグの切り分け用途に留めるべきです。&lt;/p&gt;
&lt;h2 id=&#34;なぜ-bun-は速いのか&#34;&gt;なぜ Bun は速いのか
&lt;/h2&gt;&lt;p&gt;Bun の速さはいくつかの層から来ています。&lt;/p&gt;
&lt;p&gt;第一に、ランタイムの起動が速いことです。多くの CLI ツールや開発スクリプトのボトルネックは長時間の CPU 処理ではなく、プロセス起動、モジュール読み込み、TypeScript 変換、依存関係解決です。Bun はこの経路を最適化しています。&lt;/p&gt;
&lt;p&gt;第二に、パッケージ管理が速いことです。&lt;code&gt;bun install&lt;/code&gt; は npm / yarn / pnpm の依存関係インストールを置き換えることを目指します。グローバルキャッシュと独自の lockfile により、大量の依存関係を扱うときに待ち時間を減らせます。&lt;/p&gt;
&lt;p&gt;第三に、TypeScript / JSX がそのまま動くことです。&lt;code&gt;.ts&lt;/code&gt; や &lt;code&gt;.tsx&lt;/code&gt; のスクリプトを実行するだけでも、従来の Node.js では &lt;code&gt;tsx&lt;/code&gt;、&lt;code&gt;ts-node&lt;/code&gt;、Babel、ビルド手順が必要になりがちでした。Bun は直接実行でき、接着剤のようなツールを減らします。&lt;/p&gt;
&lt;p&gt;第四に、組み込みツールによりプロセスと設定の切り替えが減ります。テスト、スクリプト、バンドル、実行が同じツール内にあります。&lt;/p&gt;
&lt;p&gt;ただし、「Bun は速い」は「どのプロジェクトでも必ず速い」という意味ではありません。実際の効果は依存関係、スクリプト、テストフレームワーク、ビルド設定、Node.js API 利用、CI キャッシュに依存します。&lt;/p&gt;
&lt;h2 id=&#34;パッケージ管理npm--yarn--pnpm-の代替&#34;&gt;パッケージ管理：npm / yarn / pnpm の代替
&lt;/h2&gt;&lt;p&gt;Bun は依存関係を直接インストールできます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;依存関係を追加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun add react
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;開発依存を追加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun add -d typescript
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;依存関係を削除：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun remove react
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;なぜ依存しているかを見る：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun why react
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;セキュリティチェック：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun audit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;npm や pnpm から移行する場合は、&lt;code&gt;bun.lock&lt;/code&gt; をコミットするか、CI で &lt;code&gt;bun install --frozen-lockfile&lt;/code&gt; を使うか、private registry と &lt;code&gt;.npmrc&lt;/code&gt; が互換か、workspace の挙動が期待通りか、lifecycle scripts が安全リスクにならないかを確認します。&lt;/p&gt;
&lt;p&gt;小さなプロジェクトなら直接試せます。大規模 monorepo は、一つの package や非ブロッキング CI job から始める方が安全です。&lt;/p&gt;
&lt;h2 id=&#34;スクリプトと-typescript-の実行&#34;&gt;スクリプトと TypeScript の実行
&lt;/h2&gt;&lt;p&gt;Bun は &lt;code&gt;package.json&lt;/code&gt; のスクリプトを実行できます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ファイルを直接実行することもできます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run index.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run index.tsx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これは &lt;code&gt;scripts/build.ts&lt;/code&gt;、&lt;code&gt;scripts/seed.ts&lt;/code&gt;、&lt;code&gt;scripts/migrate.ts&lt;/code&gt;、&lt;code&gt;scripts/check.ts&lt;/code&gt; のようなツールスクリプトに便利です。&lt;/p&gt;
&lt;p&gt;Node.js では TypeScript loader や事前コンパイルが必要になりがちですが、Bun なら軽くできます。&lt;/p&gt;
&lt;p&gt;ただし、loader、ESM/CJS 境界、ネイティブモジュール、child process、ファイル監視、一部のエッジ API など Node.js 固有の挙動に依存する場合はテストが必要です。&lt;/p&gt;
&lt;h2 id=&#34;テストランナー&#34;&gt;テストランナー
&lt;/h2&gt;&lt;p&gt;Bun にはテストランナーがあります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Jest / Vitest の設定を減らしたい小規模プロジェクトや、一部の単体テスト、ツールテスト、ライブラリテストを軽い実行方式へ移す用途に向いています。&lt;/p&gt;
&lt;p&gt;移行時は、&lt;code&gt;expect&lt;/code&gt;、mock API、snapshot、DOM テスト環境、テスト探索規則、coverage 出力、CI reporter の違いを確認します。&lt;/p&gt;
&lt;p&gt;Jest の custom matcher、複雑な mock、jsdom、babel-jest、ts-jest に深く依存している場合は急がない方がよいです。新規モジュールだけ &lt;code&gt;bun test&lt;/code&gt; を使い、既存テストは元のフレームワークに残せます。&lt;/p&gt;
&lt;h2 id=&#34;バンドルとビルド&#34;&gt;バンドルとビルド
&lt;/h2&gt;&lt;p&gt;Bun には bundler もあります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun build ./src/index.ts --outdir ./dist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;フロントエンド、バックエンドスクリプト、CLI、ライブラリのビルドに使えます。Bun のドキュメントは loaders、plugins、macros、CSS、HTML、HMR、minifier、single-file executable も扱います。&lt;/p&gt;
&lt;p&gt;優先して試しやすいのは、小さなフロントエンドツール、Node.js CLI、内部スクリプト、単一ファイルサービス、複雑な webpack loader に依存しないプロジェクトです。&lt;/p&gt;
&lt;p&gt;慎重に進めるべきなのは、複雑な webpack plugin chain、大量の Vite plugin、深い Babel 変換、特殊な CSS / asset pipeline、micro frontend、module federation、hash や chunk や互換性に厳しいプロジェクトです。&lt;/p&gt;
&lt;p&gt;Bun bundler は魅力的ですが、ビルドツール移行のリスクはパッケージ管理より高いことが多いので、単独で検証した方がよいです。&lt;/p&gt;
&lt;h2 id=&#34;http-サービスの実行&#34;&gt;HTTP サービスの実行
&lt;/h2&gt;&lt;p&gt;Bun は &lt;code&gt;Bun.serve&lt;/code&gt; を提供します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Bun&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;serve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;port&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;3000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello from Bun&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;小さな API、内部サービス、Webhook receiver、エッジ風サービスには便利です。WebSockets、Workers、Streams、SQLite、PostgreSQL、Redis、S3、TCP/UDP sockets などの API もあります。&lt;/p&gt;
&lt;p&gt;すでに Express、Fastify、NestJS、Next.js、Hono、Elysia などを使っているなら、まず Bun 上での互換性を確認すれば十分です。Bun を使うためだけにサービスを書き直す必要はありません。&lt;/p&gt;
&lt;p&gt;現実的な順序は、開発スクリプトとパッケージ管理、次にテスト、最後に本番ランタイム移行の評価です。本番挙動に直接影響するため、ランタイム移行が最も慎重に扱うべき部分です。&lt;/p&gt;
&lt;h2 id=&#34;nodejs-との関係&#34;&gt;Node.js との関係
&lt;/h2&gt;&lt;p&gt;Bun の目標の一つは Node.js の drop-in replacement ですが、「互換」は「完全に同一」ではありません。&lt;/p&gt;
&lt;p&gt;Node.js エコシステムには、CJS / ESM 相互運用、組み込みモジュール、ネイティブ拡張、npm lifecycle scripts、ファイルシステムの細かな挙動、stream と Buffer、worker / child_process、デバッグや profiling など、多くの細部があります。&lt;/p&gt;
&lt;p&gt;Bun の互換性は速く改善していますが、本番移行はテスト結果を基準にすべきです。&lt;/p&gt;
&lt;p&gt;確認すべきことは、テストが Bun で通るか、重要な依存関係が Bun をサポートするか、ビルド成果物が一致するか、CI とローカルの挙動が一致するか、本番に監視と rollback があるか、Docker イメージとデプロイスクリプトが安定しているかです。&lt;/p&gt;
&lt;p&gt;パッケージマネージャーだけを置き換えるリスクは低めです。本番ランタイムを置き換えるリスクはかなり高くなります。&lt;/p&gt;
&lt;h2 id=&#34;向いているプロジェクト&#34;&gt;向いているプロジェクト
&lt;/h2&gt;&lt;p&gt;Bun は、新しい小規模 JavaScript / TypeScript プロジェクト、内部ツール、CLI、依存関係インストールを速くしたい CI、ツールチェーンを減らしたいフロントエンド、起動速度が重要なスクリプトやサービス、TypeScript をすぐ動かしたい開発者に向いています。&lt;/p&gt;
&lt;p&gt;一方で、巨大 monorepo、pnpm workspace の挙動に深く依存するプロジェクト、多数の Node.js ネイティブ拡張を使うサービス、高度にカスタムされたフロントエンドビルド、本番ランタイムの一致性が極めて重要なバックエンド、Jest に深く依存するテストスイートでは慎重に進めるべきです。&lt;/p&gt;
&lt;p&gt;保守的ですが実用的な方針は、まず Bun を開発ツールとして使うことです。いきなり全ての本番ランタイムを置き換える必要はありません。&lt;/p&gt;
&lt;h2 id=&#34;移行のすすめ方&#34;&gt;移行のすすめ方
&lt;/h2&gt;&lt;p&gt;既存プロジェクトで Bun を試すなら、次の順序がよいです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ローカルに Bun をインストールする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bun install&lt;/code&gt; を実行し、依存関係の結果を見る。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bun.lock&lt;/code&gt; をコミットまたは一時保持し、既存 lockfile との混乱を避ける。&lt;/li&gt;
&lt;li&gt;よく使うスクリプトを &lt;code&gt;bun run &amp;lt;script&amp;gt;&lt;/code&gt; で試す。&lt;/li&gt;
&lt;li&gt;少数のテストを &lt;code&gt;bun test&lt;/code&gt; に移す。&lt;/li&gt;
&lt;li&gt;CI に非ブロッキングの Bun job を追加する。&lt;/li&gt;
&lt;li&gt;互換性に問題がなければ、主なインストールフローの置き換えを検討する。&lt;/li&gt;
&lt;li&gt;本番ランタイム移行は最後に評価する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;チームプロジェクトでは rollback 経路を残すべきです。旧 npm / pnpm / yarn フローを保持し、CI でしばらく並走させ、ランタイム、パッケージマネージャー、テストフレームワーク、バンドラーを同時に変えないことが大切です。&lt;/p&gt;
&lt;h2 id=&#34;よく使うコマンド&#34;&gt;よく使うコマンド
&lt;/h2&gt;&lt;p&gt;インストール：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://bun.com/install &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;アップグレード：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;依存関係のインストール：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;依存関係の追加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun add lodash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;スクリプト実行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;TypeScript を直接実行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run scripts/build.ts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;テスト：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;バンドル：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun build ./src/index.ts --outdir ./dist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;パッケージコマンドを実行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bunx cowsay &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Bun の価値は「Node.js より速い」だけではありません。JavaScript / TypeScript 開発に散らばるランタイム、パッケージマネージャー、スクリプト実行、テスト、バンドルを一つの &lt;code&gt;bun&lt;/code&gt; コマンドへまとめる点が重要です。&lt;/p&gt;
&lt;p&gt;新規プロジェクトや内部ツールでは、速いインストール、速い起動、少ない設定、TypeScript / JSX の直接実行が快適です。既存の大規模プロジェクトでは、パッケージインストール、スクリプト、一部テストなど低リスクな部分から入り、ビルドとランタイムを段階的に検証する方が安全です。&lt;/p&gt;
&lt;p&gt;Node.js ツールチェーンのインストール速度、設定の断片化、テスト起動時間に悩まされているなら、Bun は試す価値があります。ただし本番移行では、テスト、依存関係、CI、rollback という基本的な工学判断に戻るべきです。&lt;/p&gt;
&lt;p&gt;参考リンク：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/oven-sh/bun&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;oven-sh/bun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://bun.com/docs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bun Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://bun.com/docs/installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bun Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://bun.com/docs/runtime/nodejs-compat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bun Node.js compatibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Codexのモバイルリモートアクセス：ChatGPT AppでMac上の開発タスクを追跡する</title>
        <link>https://knightli.com/ja/2026/05/16/codex-mobile-remote-access-chatgpt-app/</link>
        <pubDate>Sat, 16 May 2026 17:42:40 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/16/codex-mobile-remote-access-chatgpt-app/</guid>
        <description>&lt;p&gt;OpenAIは2026年5月中旬、&lt;code&gt;Codex remote access&lt;/code&gt;をChatGPTモバイルアプリに追加しました。これはスマートフォンでコードを書く機能ではなく、Mac上で動くCodexをスマートフォンから追跡・操作するための機能です。&lt;/p&gt;
&lt;p&gt;Codexは引き続きMac上でプロジェクトを読み、コマンドを実行し、ファイルを編集し、テスト結果を確認します。スマートフォン側は進捗確認、質問への回答、追加指示、操作承認を担当します。&lt;/p&gt;
&lt;h2 id=&#34;できること&#34;&gt;できること
&lt;/h2&gt;&lt;p&gt;OpenAIのCodex remote connectionsドキュメントによると、モバイルアクセスでは次のことができます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ホスト上のプロジェクトで新しいthreadを開始、または既存threadを継続&lt;/li&gt;
&lt;li&gt;追加指示の送信、質問への回答、作業方向の調整&lt;/li&gt;
&lt;li&gt;コマンドやその他の操作の承認&lt;/li&gt;
&lt;li&gt;出力、diff、テスト結果、端末出力、スクリーンショットの確認&lt;/li&gt;
&lt;li&gt;Codexの完了や注意が必要なタイミングで通知を受信&lt;/li&gt;
&lt;li&gt;接続済みホストとthreadの切り替え&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;単なる小さなチャット画面ではなく、Codexの作業コンテキストに接続するモバイル操作面です。&lt;/p&gt;
&lt;h2 id=&#34;必要条件&#34;&gt;必要条件
&lt;/h2&gt;&lt;p&gt;同じChatGPTアカウントとworkspaceでCodexを使える必要があります。スマートフォンには最新版のChatGPT Appが必要で、iOSとAndroidに対応します。&lt;/p&gt;
&lt;p&gt;ホストは現時点ではMacです。Macは起動中、オンライン、Codex App実行中で、同じアカウントとworkspaceにログインしている必要があります。モバイル設定とデバイス制御には現在&lt;code&gt;Codex App for macOS&lt;/code&gt;が必要で、Codex CLIやIDE Extensionからは設定できません。&lt;/p&gt;
&lt;p&gt;MFA、SSO、passkeyが必要なアカウントでは、セットアップ中にその認証を完了する必要があります。ChatGPT workspaceでは、管理者がRemote Control accessを有効にする必要がある場合もあります。&lt;/p&gt;
&lt;h2 id=&#34;制限&#34;&gt;制限
&lt;/h2&gt;&lt;p&gt;第一に、現在は&lt;code&gt;macOS host&lt;/code&gt;が必要です。スマートフォンが接続するのはMac上のCodex Appであり、Codex CLI、IDE Extension、Linux / Windows開発機に直接接続するわけではありません。&lt;/p&gt;
&lt;p&gt;第二に、ホストはオンラインでなければなりません。Macがスリープしたり、ネットワークを失ったり、Codex Appを閉じたりすると、リモートセッションは切断される可能性があります。&lt;/p&gt;
&lt;p&gt;第三に、接続はQRコードのセットアップに依存します。Mac側で&lt;code&gt;Set up Codex mobile&lt;/code&gt;を開き、スマートフォンでQRコードを読み取り、ChatGPTで連携を完了します。&lt;/p&gt;
&lt;p&gt;第四に、遠隔操作にも承認フローがあります。端末コマンド、ファイル変更、テスト実行、外部アクセスに関わる操作は、内容を確認してから承認すべきです。&lt;/p&gt;
&lt;h2 id=&#34;接続方法&#34;&gt;接続方法
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;MacでCodexを開きます。&lt;/li&gt;
&lt;li&gt;サイドバーで&lt;code&gt;Set up Codex mobile&lt;/code&gt;を選びます。&lt;/li&gt;
&lt;li&gt;Codexがこのホストのリモートアクセスを有効化し、QRコードを表示します。&lt;/li&gt;
&lt;li&gt;スマートフォンでQRコードを読み取り、ChatGPTのセットアップ画面に進みます。&lt;/li&gt;
&lt;li&gt;同じChatGPTアカウントとworkspaceであることを確認します。&lt;/li&gt;
&lt;li&gt;必要なMFA、SSO、passkeyを完了します。&lt;/li&gt;
&lt;li&gt;成功すると、スマートフォンのCodexにMacが表示されます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;接続後はMac側の&lt;code&gt;Settings &amp;gt; Connections&lt;/code&gt;で接続済みデバイスを管理できます。コンピューターをスリープさせない設定、Computer Use、Chrome extensionもここで確認できます。&lt;/p&gt;
&lt;h2 id=&#34;スマートフォンでやるべきこと&#34;&gt;スマートフォンでやるべきこと
&lt;/h2&gt;&lt;p&gt;スマートフォンに向いているのは、承認、方向修正、結果確認です。Codexがコマンド実行を求めたときに承認し、誤解やテスト失敗があれば短い指示で修正し、diffやテスト出力を確認できます。&lt;/p&gt;
&lt;p&gt;価値があるのは「スマートフォンで開発する」ことではなく、ホスト上で動く開発タスクの携帯用コントローラーになることです。&lt;/p&gt;
&lt;h2 id=&#34;よくある問題&#34;&gt;よくある問題
&lt;/h2&gt;&lt;p&gt;ホストが表示されない場合は、MacでCodex Appが動いていること、&lt;code&gt;Allow other devices to connect&lt;/code&gt;が有効であること、同じChatGPTアカウントとworkspaceを使っていることを確認します。&lt;/p&gt;
&lt;p&gt;承認リクエストが表示されない場合は、ChatGPTモバイルアプリでCodexを開き、再度QRコードを読み取るか、ホスト側からセットアップをやり直します。workspaceでは管理者設定も確認します。&lt;/p&gt;
&lt;p&gt;リモートセッションが切れる場合は、Macがスリープしていないか、ネットワークが切れていないか、Codex Appを閉じていないかを確認します。&lt;/p&gt;
&lt;h2 id=&#34;向いている場面&#34;&gt;向いている場面
&lt;/h2&gt;&lt;p&gt;長いCodexタスクをよく走らせる、席を離れても承認したい、複数のプロジェクトやthreadを扱う、Macを主開発機として使っている人に向いています。&lt;/p&gt;
&lt;p&gt;WindowsやLinux中心、Codex CLIやIDE Extensionだけを使う、スマートフォンだけで完全な開発環境を期待する場合には向きません。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Codexのモバイルリモートアクセスは、開発をスマートフォンに移す機能ではありません。Codexが止まりがちな承認、質問、テスト失敗、方向確認を、ChatGPT Appから処理できるようにする機能です。&lt;/p&gt;
&lt;p&gt;Mac上でCodexをよく使う人には有用です。たまにコードの質問をするだけなら、効果はそれほど大きくありません。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://help.openai.com/en/articles/6825453-chatgpt-release-notes&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI Help Center：ChatGPT Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/codex/remote-connections&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI Developers：Codex Remote Connections&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Claude Code &#43; Ollama ローカル導入ガイド：CC Switch で無料の AI コーディングアシスタントを作る</title>
        <link>https://knightli.com/ja/2026/05/15/claude-code-ollama-cc-switch-local-agent/</link>
        <pubDate>Fri, 15 May 2026 23:27:50 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/15/claude-code-ollama-cc-switch-local-agent/</guid>
        <description>&lt;p&gt;最近、&lt;code&gt;Claude Code&lt;/code&gt; のような AI コーディングアシスタントが注目されています。魅力は単にコードについて会話できることではなく、プロジェクトを読み、ファイルを編集し、コマンドを実行し、依存関係を入れ、エラーを見ながら修正を続けられる点にあります。かなり Agent に近い使い方ができます。&lt;/p&gt;
&lt;p&gt;ただし問題はコストです。プロジェクトが大きくなるとコンテキストも長くなり、複数ターンの Agent 操作で API クォータを一気に消費します。試用、小さなツールの修正、スクリプト作成、ローカルのプライベートプロジェクトで使いたいだけなら、Claude Code の操作感を残したままモデルだけローカルにできないか、と考えるのは自然です。&lt;/p&gt;
&lt;p&gt;この構成の鍵になるのが &lt;code&gt;CC Switch&lt;/code&gt; です。Claude Code から OpenAI 互換 API としてローカルの &lt;code&gt;Ollama&lt;/code&gt; サービスへ接続し、公式 Claude API ではなくローカルモデルへリクエストを転送できます。&lt;/p&gt;
&lt;h2 id=&#34;この構成で解決できること&#34;&gt;この構成で解決できること
&lt;/h2&gt;&lt;p&gt;全体の流れは次のように考えると分かりやすいです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Claude Code デスクトップ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+ CC Switch API 転送レイヤー
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+ Ollama ローカルモデル
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Claude Code は引き続きコーディングワークフローとプロジェクト操作を担当します。CC Switch はモデルプロバイダー設定と API 互換性を受け持ち、Ollama はローカルでモデルを動かします。&lt;/p&gt;
&lt;p&gt;これはローカルモデルが突然 Claude と同等になるという意味ではありません。価値があるのは、Claude Code の Agent ワークフローを低コスト、オフライン、プライベートなローカル環境で使えるようにする点です。&lt;/p&gt;
&lt;h2 id=&#34;基本準備&#34;&gt;基本準備
&lt;/h2&gt;&lt;p&gt;始める前に、次のものを用意します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Git&lt;/code&gt; をインストールする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ollama&lt;/code&gt; をインストールする。&lt;/li&gt;
&lt;li&gt;コーディング向きのローカルモデルを取得する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CC Switch&lt;/code&gt; をインストールする。&lt;/li&gt;
&lt;li&gt;Claude Code をローカルで使える状態にする。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;モデルは、まずコード能力が比較的強いものから試すとよいでしょう。たとえば Qwen Coder、DeepSeek Coder、またはツール呼び出しとコード生成がある程度安定しているモデルです。大きいモデルほど結果は良くなりやすい一方、メモリや GPU への負荷も高くなります。&lt;/p&gt;
&lt;p&gt;メモリに余裕がないマシンでは、小さめのモデルで流れを確認してから、徐々に大きいモデルを試すのがおすすめです。&lt;/p&gt;
&lt;h2 id=&#34;cc-switch-の重要設定&#34;&gt;CC Switch の重要設定
&lt;/h2&gt;&lt;p&gt;Ollama を起動すると、通常のローカル API アドレスは次のようになります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://127.0.0.1:11434/v1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CC Switch では OpenAI 互換のプロバイダー種別を選びます。よく使う選択肢は次のものです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenAI Chat Completions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;そのうえで base URL を Ollama のローカルアドレスに向けます。&lt;/p&gt;
&lt;p&gt;API key はローカル Ollama では通常、本物のキーを必要としません。ただし多くのツールは環境変数やプレースホルダーを求めます。次のような値を使えます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ANTHROPIC_API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;または、手元のローカル設定で受け入れられる別のプレースホルダー変数でも構いません。&lt;/p&gt;
&lt;p&gt;特に注意したい設定項目があります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;inferenceModels&amp;#34;=&amp;#34;[\&amp;#34;haiku\&amp;#34;,\&amp;#34;sonnet\&amp;#34;,\&amp;#34;opus\&amp;#34;]&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これは Claude Code が期待するモデルロールをローカルプロバイダーへマッピングする設定です。実際には &lt;code&gt;haiku&lt;/code&gt;、&lt;code&gt;sonnet&lt;/code&gt;、&lt;code&gt;opus&lt;/code&gt; を Ollama または CC Switch 側で利用できるモデル名に対応させる必要があります。この対応が間違っていると、Claude Code がモデルを呼べなかったり、意図しない設定へ戻ったりします。&lt;/p&gt;
&lt;h2 id=&#34;claude-code-の強み&#34;&gt;Claude Code の強み
&lt;/h2&gt;&lt;p&gt;Claude Code の一番の価値は、単発の補完ではなくコーディング全体のワークフローにあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プロジェクト構造を読み取って理解する。&lt;/li&gt;
&lt;li&gt;タスクに応じて関連ファイルを見つける。&lt;/li&gt;
&lt;li&gt;コードを直接編集する。&lt;/li&gt;
&lt;li&gt;コマンドやテストを実行する。&lt;/li&gt;
&lt;li&gt;エラーを観察して修正を繰り返す。&lt;/li&gt;
&lt;li&gt;1 つのセッションで複数ステップの作業を進める。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;多くの人が Claude Code を残したい理由もここにあります。通常のチャット UI でもコード片は生成できますが、リポジトリ内で自然に作業してくれるわけではありません。Claude Code は、実行できる開発アシスタントに近い存在です。&lt;/p&gt;
&lt;h2 id=&#34;ollama-の役割&#34;&gt;Ollama の役割
&lt;/h2&gt;&lt;p&gt;Ollama はローカルモデルの実行と管理を担当します。モデルのダウンロード、ロード、ローカル推論を扱います。&lt;/p&gt;
&lt;p&gt;利点は明確です。リクエストは手元のマシンに残り、繰り返し使っても API 課金が発生せず、ネットワークが制限された環境でも使えます。プライベートなコードを扱う場合も、すべてのコンテキストをクラウドモデルに送るより受け入れやすいでしょう。&lt;/p&gt;
&lt;p&gt;一方で代償もあります。ローカルモデルはハードウェアとモデル品質に大きく左右されます。小さいモデルでも簡単な修正、説明、スクリプト生成はできますが、大規模な複数ファイルリファクタリングや細かな設計判断では能力差が出やすくなります。&lt;/p&gt;
&lt;h2 id=&#34;体験の限界&#34;&gt;体験の限界
&lt;/h2&gt;&lt;p&gt;この構成は、Claude の強力なクラウドモデルを完全に置き換えるものとして考えるべきではありません。&lt;/p&gt;
&lt;p&gt;次のような問題に遭遇する可能性があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;長いコンテキストの理解が弱い。&lt;/li&gt;
&lt;li&gt;複雑なタスクでツール呼び出しが不安定になる。&lt;/li&gt;
&lt;li&gt;CPU のみの環境では推論が遅い。&lt;/li&gt;
&lt;li&gt;存在しないファイルパスや API を幻覚しやすい。&lt;/li&gt;
&lt;li&gt;複数ターンの計画が安定しにくい。&lt;/li&gt;
&lt;li&gt;大規模リポジトリのリファクタリング成功率が低い。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;したがって、期待値としては「無料で使えるローカル開発アシスタント」が現実的です。トップクラスのクラウドモデルの完全な代替ではありません。&lt;/p&gt;
&lt;h2 id=&#34;マルチモーダル互換性はまだ不安定&#34;&gt;マルチモーダル互換性はまだ不安定
&lt;/h2&gt;&lt;p&gt;Claude Code にスクリーンショット、UI 画像、図、その他のマルチモーダル入力を扱わせたい人もいます。この部分はローカルモデルと転送レイヤーの対応状況に依存します。&lt;/p&gt;
&lt;p&gt;選んだ Ollama モデルが画像入力に対応していない場合、または CC Switch がリクエスト形式を正しく変換できない場合、マルチモーダル機能は失敗する可能性があります。Vision モデルを使っても、公式 Claude API と同じ挙動になるとは限りません。&lt;/p&gt;
&lt;p&gt;現時点では、この構成はテキストとコードのワークフロー向きです。マルチモーダル対応は実験的なものとして扱うのがよいでしょう。&lt;/p&gt;
&lt;h2 id=&#34;試す価値がある人&#34;&gt;試す価値がある人
&lt;/h2&gt;&lt;p&gt;この構成は次のような人に向いています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code のワークフローを低コストで試したい開発者。&lt;/li&gt;
&lt;li&gt;スクリプト、小さなツール、自動化をよく書く人。&lt;/li&gt;
&lt;li&gt;コードをできるだけローカルに残したいチーム。&lt;/li&gt;
&lt;li&gt;API コストを気にせず AI コーディングアシスタントを学びたい初心者。&lt;/li&gt;
&lt;li&gt;さまざまなローカルコードモデルを検証している人。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;長いコンテキスト、大規模 monorepo、厳密なコードレビュー品質、複雑なプロジェクト全体のリファクタリングに強く依存する場合は、まだ安定性が足りないかもしれません。&lt;/p&gt;
&lt;h2 id=&#34;使い方のおすすめ&#34;&gt;使い方のおすすめ
&lt;/h2&gt;&lt;p&gt;まずは小さなタスクから始めましょう。&lt;/p&gt;
&lt;p&gt;たとえば次のような作業です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 つのファイルを説明させる。&lt;/li&gt;
&lt;li&gt;小さな関数をリファクタリングする。&lt;/li&gt;
&lt;li&gt;shell スクリプトを生成する。&lt;/li&gt;
&lt;li&gt;単純なエラーを修正する。&lt;/li&gt;
&lt;li&gt;小さな機能を追加する。&lt;/li&gt;
&lt;li&gt;狭いモジュールに単体テストを追加する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;変更後は、自分でテストを実行するか、少なくとも diff を確認してください。ローカルモデルは便利ですが、生成された編集をすべて無条件に受け入れるべきではありません。&lt;/p&gt;
&lt;p&gt;モデルがよくコンテキストを見失う場合は、タスク範囲を小さくします。「プロジェクト全体をリファクタリングして」ではなく、「この関数をリファクタリングして」や「このファイルにバリデーションを追加して」のように依頼すると安定しやすくなります。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Claude Code + CC Switch + Ollama&lt;/code&gt; はかなり面白い組み合わせです。Claude Code の Agent 的な開発体験を保ちつつ、モデル推論をローカルへ移せます。&lt;/p&gt;
&lt;p&gt;大きな利点は、コストの低さ、データのプライバシー、扱いやすい開発ワークフローです。一方で、モデル品質、ハードウェア性能、長いコンテキスト、ツール呼び出しの安定性が体験を左右します。&lt;/p&gt;
&lt;p&gt;すでに Ollama を使っていて、より実践的なローカル AI コーディング環境が欲しいなら、この構成は試す価値があります。ただし小さな作業から始め、すべての変更を確認し、ローカルモデルを自動エンジニアではなくアシスタントとして扱うのが安全です。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Prompt-Vault：AI コーディング能力を測るための prompt 仕様集</title>
        <link>https://knightli.com/ja/2026/05/15/prompt-vault-coding-prompt-benchmark/</link>
        <pubDate>Fri, 15 May 2026 09:00:52 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/15/prompt-vault-coding-prompt-benchmark/</guid>
        <description>&lt;p&gt;&lt;code&gt;w512/Prompt-Vault&lt;/code&gt; は小さいが有用な prompt リポジトリだ。万能の呪文を集めるのではなく、実行可能な coding prompt を難易度別に整理し、LLM や coding agent のテストに使えるようにしている。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/w512/Prompt-Vault&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/w512/Prompt-Vault&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;構造は &lt;code&gt;Easy&lt;/code&gt;、&lt;code&gt;Medium&lt;/code&gt;、&lt;code&gt;Hard&lt;/code&gt; の三つ。各 Markdown ファイルが独立したタスクだ。README も、これらは大規模言語モデルのテストや練習プロジェクトに向くと説明している。&lt;/p&gt;
&lt;h2 id=&#34;prompt-スクラップブックではない&#34;&gt;prompt スクラップブックではない
&lt;/h2&gt;&lt;p&gt;多くの prompt 集は数が多くても品質を判断しにくい。見出しは魅力的でも、受け入れ基準が足りない。&lt;/p&gt;
&lt;p&gt;Prompt-Vault は仕様集に近い。各タスクは、作るアプリ、必須機能、UI スタイル、技術制約、単一ファイル実行か、外部依存の可否、永続化の有無を明確にしようとしている。&lt;/p&gt;
&lt;p&gt;これは「きれいな看板を作って」よりもモデル評価に向いている。モデルが要件を理解しているかが見えるからだ。&lt;/p&gt;
&lt;h2 id=&#34;easy基本的なインタラクション&#34;&gt;Easy：基本的なインタラクション
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Bubble_Sort_Visualizer.md&lt;/code&gt; は、単一 &lt;code&gt;index.html&lt;/code&gt; でバブルソートを棒グラフ表示する。開始、リセット、速度スライダー、比較回数、ダークテーマが必要だ。&lt;/p&gt;
&lt;p&gt;アルゴリズム状態を UI に結びつけられるか、アニメーションを制御できるか、リセットと実行状態を扱えるかを測れる。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ToDo_List.md&lt;/code&gt; は静的 HTML から始まり、タスク追加、完了状態、削除、カウンタ、Active / Completed 統計、&lt;code&gt;localStorage&lt;/code&gt; を段階的に追加する。&lt;/p&gt;
&lt;p&gt;単純だが、段階的にコードを進化させられるかを測るのに向いている。&lt;/p&gt;
&lt;h2 id=&#34;medium状態とアニメーション&#34;&gt;Medium：状態とアニメーション
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Sorting_Visualization.md&lt;/code&gt; は 6 種類のソートを同じページで扱う。Bubble Sort、Insertion Sort、Selection Sort、Merge Sort、Quick Sort、Heap Sort だ。&lt;/p&gt;
&lt;p&gt;さらにアルゴリズム選択、速度、配列サイズ、リセット、開始 / 一時停止、統計パネルも必要になる。&lt;/p&gt;
&lt;p&gt;ひとつのバブルソートは書けても、複数アルゴリズム、停止再開、統計を合わせると状態管理の弱点が出やすい。&lt;/p&gt;
&lt;h2 id=&#34;hard製品としての完成度&#34;&gt;Hard：製品としての完成度
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Kanban_Board.md&lt;/code&gt; は、列追加、改名、空列削除、カードのタイトルと説明、優先度、期限、ドラッグ、検索、フィルタ、&lt;code&gt;localStorage&lt;/code&gt;、統計、ダークな glassmorphism、横スクロール対応を求める。&lt;/p&gt;
&lt;p&gt;これは単機能ではなく、製品としての完成度を測る prompt だ。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Markdown_Editor_Desktop.md&lt;/code&gt; は Tauri 2 のクロスプラットフォーム Markdown エディタを求める。分割編集とプレビュー、同期スクロール、ライブレンダリング、保存、未保存表示、ツールバー、ショートカット、テーマ、Vue 3、Pinia、&lt;code&gt;marked.js&lt;/code&gt;、&lt;code&gt;prism.js&lt;/code&gt;、Tauri plugins などを含む。&lt;/p&gt;
&lt;p&gt;Web ページを超えて、デスクトップアプリの設計力を測れる。&lt;/p&gt;
&lt;h2 id=&#34;価値&#34;&gt;価値
&lt;/h2&gt;&lt;p&gt;Prompt-Vault の価値は数ではなく、再利用できる評価サンプルにある。&lt;/p&gt;
&lt;p&gt;同じ prompt を複数モデルで使えば、制約を守るか、機能漏れが少ないか、境界状態を扱えるか、コードが保守しやすいか、UI 細部に強いかを比較できる。&lt;/p&gt;
&lt;p&gt;これは「賢そうに感じる」よりずっと信頼できる。&lt;/p&gt;
&lt;p&gt;フロントエンドタスクでは、失敗は構文エラーだけではない。ボタン状態、アニメーション停止、永続化、ドラッグ対象、統計更新など、体験の細部が評価になる。&lt;/p&gt;
&lt;h2 id=&#34;拡張案&#34;&gt;拡張案
&lt;/h2&gt;&lt;p&gt;より本格的な benchmark にするなら、受け入れチェックリスト、失敗ケース、採点軸、参照実装、モデル別の結果記録を追加できる。&lt;/p&gt;
&lt;p&gt;たとえばソート可視化には「Start / Reset を連打しても複数ループが走らない」などのチェックを入れるとよい。&lt;/p&gt;
&lt;h2 id=&#34;使い方&#34;&gt;使い方
&lt;/h2&gt;&lt;p&gt;AI コーディングツールを試すなら、prompt をそのまま渡し、追加ヒントなしで出力を実行する。機能ごとに確認し、漏れと bug を記録し、一度だけ修正させる。最後に時間、token コスト、コード品質を比べる。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Prompt-Vault は軽量な prompt 仕様集だ。AI コーディングのテストにも、フロントエンド練習にも使える。&lt;/p&gt;
&lt;p&gt;良い prompt は願望ではなく、要件、制約、インタラクション、状態、受け入れ基準、実行方法を書くものだと教えてくれる。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Token Efficiency とは何か：DeepSeek V4 から見る大モデルの計画と小モデルの実行</title>
        <link>https://knightli.com/ja/2026/05/15/token-efficiency-agent-orchestration/</link>
        <pubDate>Fri, 15 May 2026 08:59:33 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/15/token-efficiency-agent-orchestration/</guid>
        <description>&lt;p&gt;AI コーディングで次に重要になる指標は、最強モデルを使うことではなく、より少ない token、低いコスト、安定したプロセスで、より多くの検証可能な仕事を終えることかもしれない。&lt;/p&gt;
&lt;p&gt;それが Token Efficiency の価値だ。&lt;/p&gt;
&lt;p&gt;多くの人は Token Efficiency を、安いモデル、長いコンテキスト、安い cache hit と考える。しかしそれは基礎条件にすぎない。本当に生産性に変えるのは、モデルの役割分担、タスク編成、コンテキスト予算、評価体系だ。&lt;/p&gt;
&lt;h2 id=&#34;deepseek-v4-の位置づけ&#34;&gt;DeepSeek V4 の位置づけ
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 は単に強いモデルを出しただけではない。Token Efficiency に必要な二つの能力を &lt;code&gt;V4 Pro&lt;/code&gt; と &lt;code&gt;V4 Flash&lt;/code&gt; に分けた。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;V4 Pro&lt;/code&gt; は計画、推論、アーキテクチャ判断、重要レビューに向く。&lt;code&gt;V4 Flash&lt;/code&gt; は高頻度実行、バッチ書き換え、コード補完、資料整理、agent ループ内の通常ノードに向く。&lt;/p&gt;
&lt;p&gt;AI コーディングでは次のように使える。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;V4 Pro&lt;/code&gt;: planner / consultant。要件分解、技術設計、複雑な bug 分析、アーキテクチャレビュー、最終受け入れ。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V4 Flash&lt;/code&gt;: executor。ファイル走査、単純実装、テスト補完、文書整理、候補生成、反復タスク。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DeepSeek の API 文書では、&lt;code&gt;V4 Flash&lt;/code&gt; と &lt;code&gt;V4 Pro&lt;/code&gt; はどちらも &lt;code&gt;1M&lt;/code&gt; context、JSON Output、Tool Calls、Chat Prefix Completion、FIM Completion をサポートする。価格ページでは cache hit input が別価格で、input cache hit 価格が公開時の 10 分の 1 になったことも示されている。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1M&lt;/code&gt; context は複雑な agent タスクの圧縮問題を減らす。低い cache hit 価格は、長い system prompt、プロジェクト文書、コード片、履歴を繰り返し入れるコストを下げる。&lt;code&gt;Flash / Pro&lt;/code&gt; の分離は、全ステップを高価なモデルで走らせるか、不安定な小モデルだけで走らせるか、という二択を避ける。&lt;/p&gt;
&lt;p&gt;DeepSeek V4 の意味は、別のモデル選択肢ではなく、「consultant model + executor model + harness orchestration」の現実的なコスト構造を提供することにある。&lt;/p&gt;
&lt;h2 id=&#34;最強モデルにすべてをさせない&#34;&gt;最強モデルにすべてをさせない
&lt;/h2&gt;&lt;p&gt;従来は最も賢いモデルに、要件分析、実装、テスト、まとめを全部任せがちだった。&lt;/p&gt;
&lt;p&gt;しかし多くの作業は最高レベルの推論を必要としない。高価なモデルは、重要な判断点だけに出る consultant、architect、planner のように使うべきだ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大モデルは問題分解と重要判断。&lt;/li&gt;
&lt;li&gt;小モデルは実行、バッチ処理、反復修正。&lt;/li&gt;
&lt;li&gt;tool と harness はプロセス、状態、コンテキスト、検証。&lt;/li&gt;
&lt;li&gt;人間は製品定義、受け入れ、取捨選択。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これで最先端推論を機械的な実行に浪費しにくくなる。&lt;/p&gt;
&lt;h2 id=&#34;コンテキストは大きければよいわけではない&#34;&gt;コンテキストは大きければよいわけではない
&lt;/h2&gt;&lt;p&gt;coding agent では、コード、文書、会話履歴、テスト出力、ログがコンテキストを消費する。上限に近づくと圧縮、忘却、誤判断が起きやすい。&lt;/p&gt;
&lt;p&gt;しかし長いコンテキストは、すべてを詰め込んでよいという意味ではない。&lt;/p&gt;
&lt;p&gt;各タスクは、必要ファイル、判断に関係する文書、現在段階に必要な履歴、明確な入出力、次ノードへ渡す構造化要約だけを持つべきだ。&lt;/p&gt;
&lt;p&gt;安い context は無関係な情報を入れたくさせる。だがノイズはモデルを賢くしない。&lt;/p&gt;
&lt;h2 id=&#34;harness-が単体モデルより重要&#34;&gt;Harness が単体モデルより重要
&lt;/h2&gt;&lt;p&gt;Claude Code、Codex、その他の coding agent を安いモデルにつなぐだけでは十分ではない。小モデルは長いタスクでずれやすく、強いプロセス制御が必要だ。&lt;/p&gt;
&lt;p&gt;harness は調度システムであり、タスク分割、ノード実行、モデル選択、結果検証、失敗時の再試行、コンテキスト受け渡しを決める。&lt;/p&gt;
&lt;p&gt;この層がなければ、小モデルは安いだけだ。この層があると、小モデルはレバレッジになる。&lt;/p&gt;
&lt;h2 id=&#34;dag-でタスクを分ける&#34;&gt;DAG でタスクを分ける
&lt;/h2&gt;&lt;p&gt;複雑なタスクは DAG に分けられる。たとえば機能開発は、要件確認、技術設計、タスク分解、実装、テスト補完、Code Review、修正、PR 提出にできる。&lt;/p&gt;
&lt;p&gt;各ノードは独立した agent にできる。役割、prompt、tool 権限、出力形式を分け、長い会話ではなく構造化結果を渡す。&lt;/p&gt;
&lt;p&gt;これによりノードは短くなり、小モデルで完了しやすくなり、どこが失敗しているかも測りやすくなる。&lt;/p&gt;
&lt;h2 id=&#34;タスクは複数回走らせてもよい&#34;&gt;タスクは複数回走らせてもよい
&lt;/h2&gt;&lt;p&gt;token が十分安ければ、同じタスクを一度だけ走らせる必要はない。異なるモデル、prompt、編成で複数回走らせ、最良の結果を選ぶ、または有用部分を統合できる。&lt;/p&gt;
&lt;p&gt;向いているのは設計案、文章、テストケース、bug 仮説、リファクタリング案、Code Review だ。共有状態を変える作業や外部副作用がある作業には向かない。&lt;/p&gt;
&lt;p&gt;目的は運試しではなく、比較可能なサンプルを得て、編成とモデル選択を改善することだ。&lt;/p&gt;
&lt;h2 id=&#34;評価体系が必要&#34;&gt;評価体系が必要
&lt;/h2&gt;&lt;p&gt;Token Efficiency は価格だけでは測れない。安くても失敗率が高ければ、人間の時間を食って高くつく。&lt;/p&gt;
&lt;p&gt;タスク完了率、人間の介入回数、tool call 失敗率、テスト通過率、review 指摘数、タスクごとの token コスト、時間、手戻り回数、モデル組み合わせの差を記録する。&lt;/p&gt;
&lt;p&gt;このデータがあって初めて、小モデルでよい作業、大モデルが必要な作業、人間が判断すべき作業を分けられる。&lt;/p&gt;
&lt;h2 id=&#34;業務フローを原子化する&#34;&gt;業務フローを原子化する
&lt;/h2&gt;&lt;p&gt;全員が harness を自作する必要はない。しかし自分の業務を原子ノードに分解することは今からできる。&lt;/p&gt;
&lt;p&gt;コンテンツ制作なら、企画、調査、アウトライン、初稿、ファクトチェック、スタイル調整、SEO タイトル、多言語翻訳、公開チェック。&lt;/p&gt;
&lt;p&gt;ソフトウェア開発なら、要件確認、技術設計、データ構造、API 変更、単体テスト、実装、移行スクリプト、文書、Review。&lt;/p&gt;
&lt;p&gt;各ノードは入力、出力、受け入れ条件、コンテキストを明確にする。harness が成熟すれば、そのまま接続できる。&lt;/p&gt;
&lt;h2 id=&#34;ハードウェアは最優先ではない&#34;&gt;ハードウェアは最優先ではない
&lt;/h2&gt;&lt;p&gt;Token Efficiency の話はすぐローカルデプロイや GPU に向かう。しかし多くの人にとって最初の選択は API でよい。&lt;/p&gt;
&lt;p&gt;経済モデルが通る前に高価なハードを買うのは、コストの前払いにすぎない。まず API で workflow を通し、評価とコストを記録し、高頻度の実行ノードを見つけてから、ローカル化を検討すべきだ。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Token Efficiency の本質は、高いモデルを安いモデルで置き換えることではない。AI workflow を設計し直すことだ。&lt;/p&gt;
&lt;p&gt;大モデルが重要判断をし、小モデルが大量実行し、harness が調度と検証を行い、人間が目標と受け入れを決める。この四層が揃って初めて token は生産性に変わる。&lt;/p&gt;
&lt;p&gt;将来の差は、最強モデルを呼んだかではなく、同じ token でどれだけ現実の成果を出せるかに現れる。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Superpowers：Coding Agent を工学プロセスへ戻す skills フレームワーク</title>
        <link>https://knightli.com/ja/2026/05/15/obra-superpowers-agentic-skills-framework/</link>
        <pubDate>Fri, 15 May 2026 08:53:17 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/15/obra-superpowers-agentic-skills-framework/</guid>
        <description>&lt;p&gt;&lt;code&gt;obra/superpowers&lt;/code&gt; は coding agent 向けの skills フレームワークであり、ソフトウェア開発方法論でもある。目的は万能 prompt を増やすことではなく、agent に流れを守らせることだ。目標を確認し、設計を作り、計画に分解し、TDD で実装し、レビューして終える。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/obra/superpowers&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/obra/superpowers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;執筆時点で GitHub API では 19 万 star を超え、MIT ライセンスで、最近も更新されている。README は &lt;code&gt;An agentic skills framework &amp;amp; software development methodology that works.&lt;/code&gt; と説明している。&lt;/p&gt;
&lt;h2 id=&#34;解決したい問題&#34;&gt;解決したい問題
&lt;/h2&gt;&lt;p&gt;多くの AI コーディングツールの問題は、コードを書けないことではなく、すぐコードを書き始めることだ。&lt;/p&gt;
&lt;p&gt;ユーザーが曖昧な要望を言うと、agent はファイルを編集し、見た目は完成する。しかし境界、テスト、アーキテクチャは不明確なまま残る。小さな作業ならよいが、複雑なプロジェクトでは手戻りと技術的負債になる。&lt;/p&gt;
&lt;p&gt;Superpowers は、コードに触る前に agent を workflow に入れる。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;何かを作りたいと分かったら、まず目標を質問する。&lt;/li&gt;
&lt;li&gt;会話を仕様にし、区切って確認する。&lt;/li&gt;
&lt;li&gt;設計が通ったら、実装計画を作る。&lt;/li&gt;
&lt;li&gt;ユーザーが “go” と言ってから実装する。&lt;/li&gt;
&lt;li&gt;実装では TDD、YAGNI、DRY、レビューを重視する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これは新しい工学ではない。速い agent ほど、こうしたガードレールが重要になる。&lt;/p&gt;
&lt;h2 id=&#34;対応ツール&#34;&gt;対応ツール
&lt;/h2&gt;&lt;p&gt;Superpowers は単一の agent に縛られない。README には Claude Code、Codex CLI、Codex App、Factory Droid、Gemini CLI、OpenCode、Cursor、GitHub Copilot CLI が挙げられている。&lt;/p&gt;
&lt;p&gt;つまり特定モデルのテクニックではなく、複数の harness で使える workflow 層に近い。&lt;/p&gt;
&lt;h2 id=&#34;基本-workflow&#34;&gt;基本 workflow
&lt;/h2&gt;&lt;p&gt;最初は &lt;code&gt;brainstorming&lt;/code&gt;。実装前に粗いアイデアを実行可能な設計へ変え、ユーザーに確認する。&lt;/p&gt;
&lt;p&gt;次に &lt;code&gt;using-git-worktrees&lt;/code&gt;。設計後、隔離された worktree とブランチを作り、インストールとテストの基線を確認する。&lt;/p&gt;
&lt;p&gt;次は &lt;code&gt;writing-plans&lt;/code&gt;。設計を小さなタスクに分け、ファイルパス、変更範囲、検証手順を明確にする。&lt;/p&gt;
&lt;p&gt;実装段階では &lt;code&gt;subagent-driven-development&lt;/code&gt; で subagent に渡すことも、&lt;code&gt;executing-plans&lt;/code&gt; で順に実行することもできる。重要なのは各タスクが確認可能で review 可能なことだ。&lt;/p&gt;
&lt;p&gt;その後 &lt;code&gt;test-driven-development&lt;/code&gt; によって、本当の RED-GREEN-REFACTOR を行う。失敗するテストを書き、失敗を確認し、最小実装で通し、リファクタリングする。&lt;/p&gt;
&lt;p&gt;さらに &lt;code&gt;requesting-code-review&lt;/code&gt; でタスク間の review を行う。Critical な問題は進行を止める。&lt;/p&gt;
&lt;p&gt;最後に &lt;code&gt;finishing-a-development-branch&lt;/code&gt; でテストを確認し、merge、PR、worktree の保持や破棄を選ぶ。&lt;/p&gt;
&lt;h2 id=&#34;skills-library&#34;&gt;Skills Library
&lt;/h2&gt;&lt;p&gt;テスト系は &lt;code&gt;test-driven-development&lt;/code&gt; が中心だ。&lt;/p&gt;
&lt;p&gt;デバッグ系には &lt;code&gt;systematic-debugging&lt;/code&gt; と &lt;code&gt;verification-before-completion&lt;/code&gt; がある。再現、最小化、仮説、検証、修正を求め、検証なしに完了と言わない。&lt;/p&gt;
&lt;p&gt;協調系には次がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brainstorming&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writing-plans&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;executing-plans&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dispatching-parallel-agents&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;requesting-code-review&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;receiving-code-review&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;using-git-worktrees&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;finishing-a-development-branch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent-driven-development&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;メタ skills には &lt;code&gt;writing-skills&lt;/code&gt; と &lt;code&gt;using-superpowers&lt;/code&gt; がある。組み合わせると、agent に「いつ質問し、いつ計画し、いつテストし、いつ止まって review するか」という習慣を与える。&lt;/p&gt;
&lt;h2 id=&#34;普通の-prompt-との違い&#34;&gt;普通の prompt との違い
&lt;/h2&gt;&lt;p&gt;普通の prompt は、ルールを system prompt に積み上げがちだ。勝手に変更するな、先に考えろ、テストしろ、簡潔に説明しろ。ルールが増えるほど、複雑なタスクでは忘れられやすい。&lt;/p&gt;
&lt;p&gt;Superpowers はルールを段階ごとの workflow モジュールに分ける。各 skill は短く、目的が集中している。agent は今の段階で何をすべきかを理解しやすく、複雑な流れも検査しやすい。&lt;/p&gt;
&lt;p&gt;学べる点は、賢いモデルだけを追うのではなく、モデルに繰り返し可能な働き方を与えることだ。&lt;/p&gt;
&lt;h2 id=&#34;向いている場面&#34;&gt;向いている場面
&lt;/h2&gt;&lt;p&gt;Superpowers は、実プロジェクトで coding agent を使う開発者に向いている。複数ファイルの変更、設計してから実装したい場合、TDD や検証が必要な場合、複数ブランチや worktree を扱う場合、subagent に実装や review を任せたい場合に特に有効だ。&lt;/p&gt;
&lt;p&gt;一行の設定変更には重いかもしれない。しかし多段階の開発では、その制約が価値になる。&lt;/p&gt;
&lt;h2 id=&#34;注意点&#34;&gt;注意点
&lt;/h2&gt;&lt;p&gt;これは自動操縦ではない。プロセスは与えるが、要求、トレードオフ、最終受け入れは人間が持つ。&lt;/p&gt;
&lt;p&gt;TDD と review は初期コストを増やす。小タスクでは遅く感じるが、複雑なタスクでは手戻りを減らす。&lt;/p&gt;
&lt;p&gt;subagent の並列化は常に良いわけではない。境界と書き込み範囲が明確なときに効く。要件が曖昧なら、並列化は混乱を増やす。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Superpowers の価値は、coding agent を「依頼を受けたらコードを書く」状態から、ソフトウェア工学プロセスへ戻すことにある。&lt;/p&gt;
&lt;p&gt;AI コーディングに足りないのは生成速度ではなく、確認、計画、検証、review、終了処理であることが多い。モデルが強くなるほど、これらを省いてはいけない。&lt;/p&gt;
&lt;p&gt;Codex、Claude Code、Cursor、Gemini CLI を実プロジェクトで使っているなら、Superpowers は調べる価値がある。直接使わなくても、skills の分け方は自分の agent workflow を設計する参考になる。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Vibe Coding を拒む：Matt Pocock の skills リポジトリが AI コーディングに工学的制約を足す</title>
        <link>https://knightli.com/ja/2026/05/15/matt-pocock-skills-ai-engineering-workflow/</link>
        <pubDate>Fri, 15 May 2026 08:46:23 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/15/matt-pocock-skills-ai-engineering-workflow/</guid>
        <description>&lt;p&gt;AI がコードを書く速度が上がるほど、プロジェクトが崩れる速度も上がり得る。問題はモデルが関数を生成できるかではなく、要件を理解し、チームの言葉に従い、既存アーキテクチャの中で小さく進められるかだ。&lt;/p&gt;
&lt;p&gt;Matt Pocock が公開した &lt;code&gt;mattpocock/skills&lt;/code&gt; は、vibe coding とは逆の方向を示している。AI に開発プロセス全体を任せるのではなく、成熟したソフトウェア工学の制約の中に置く。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/mattpocock/skills&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/mattpocock/skills&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これは魔法の prompt ではない。要件確認、ドメインモデリング、TDD、診断、アーキテクチャレビューを、AI agent が使いやすい workflow にした skills の集合だ。&lt;/p&gt;
&lt;h2 id=&#34;まずアラインメント失敗を防ぐ&#34;&gt;まずアラインメント失敗を防ぐ
&lt;/h2&gt;&lt;p&gt;AI コーディングで最も多い失敗は、モデルが理解したと思ったら、実は曖昧な説明から推測していただけ、というものだ。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grill-me&lt;/code&gt; はこれを反転させる。コードを書く前に、AI を厳しいレビュアーにし、分岐、境界、未決事項を質問させる。&lt;/p&gt;
&lt;p&gt;たとえば「ログインページを作って」と頼んだら、先に聞くべきことは次のようなものだ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;パスワード忘れはどう扱うか&lt;/li&gt;
&lt;li&gt;外部ログインをサポートするか&lt;/li&gt;
&lt;li&gt;ログイン失敗時のエラー表示はどうするか&lt;/li&gt;
&lt;li&gt;アカウントロック、CAPTCHA、リスク制御は範囲内か&lt;/li&gt;
&lt;li&gt;成功後はどこへ遷移するか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この段階は遅く見えるが、後の手戻りを減らす。コード生成が安くなるほど、曖昧な要件のコストは大きくなる。&lt;/p&gt;
&lt;h2 id=&#34;ドメイン言語をコンテキストに入れる&#34;&gt;ドメイン言語をコンテキストに入れる
&lt;/h2&gt;&lt;p&gt;次の問題は汎用語彙だ。モデルはチーム内の業務用語を知らないため、変数名、関数名、ドキュメントの言葉がずれていく。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grill-with-docs&lt;/code&gt; は質問しながら、&lt;code&gt;CONTEXT.md&lt;/code&gt;、ADR、ドメイン文書を確認する。確認済みの用語、境界、判断は、再利用できるコンテキストとして残せる。&lt;/p&gt;
&lt;p&gt;これはドメイン駆動設計のユビキタス言語に近い。チームが user ではなく customer、order ではなく transaction と呼ぶなら、AI もその言葉を使うべきだ。&lt;/p&gt;
&lt;p&gt;コンテキスト文書の価値は、情報量ではなく推測を減らすことにある。&lt;/p&gt;
&lt;h2 id=&#34;tdd-で生成速度を制御する&#34;&gt;TDD で生成速度を制御する
&lt;/h2&gt;&lt;p&gt;AI の危険は速さにある。昔は悪いコードを大量に書くにも時間がかかったが、今は数秒で数百行が出る。問題は速さそのものではなく、フィードバックループがないことだ。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tdd&lt;/code&gt; skill は RED-GREEN-REFACTOR を戻す。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ひとつの振る舞いに対して失敗するテストを書く。&lt;/li&gt;
&lt;li&gt;そのテストを通す最小実装を書く。&lt;/li&gt;
&lt;li&gt;リファクタリングする。&lt;/li&gt;
&lt;li&gt;次の縦スライスへ進む。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;重要なのは、ひとつずつ進めることだ。AI は実行し、人間は方向と境界を確認する。&lt;/p&gt;
&lt;h2 id=&#34;診断ループで複雑な問題を扱う&#34;&gt;診断ループで複雑な問題を扱う
&lt;/h2&gt;&lt;p&gt;バグに出会うと、多くの agent は答えを推測し、何度も修正して問題をさらに複雑にする。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;diagnose&lt;/code&gt; は先にフィードバックループを作らせる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;再現する&lt;/li&gt;
&lt;li&gt;最小化する&lt;/li&gt;
&lt;li&gt;仮説を立てる&lt;/li&gt;
&lt;li&gt;観測やログを足す&lt;/li&gt;
&lt;li&gt;修正する&lt;/li&gt;
&lt;li&gt;回帰テストを足す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;古い方法だが、AI コーディングでは特に重要だ。AI は試行が得意だが、根因に近づいているかを判断するにはレールが必要になる。&lt;/p&gt;
&lt;h2 id=&#34;アーキテクチャを定期的に見る&#34;&gt;アーキテクチャを定期的に見る
&lt;/h2&gt;&lt;p&gt;単発のタスクが通っても、コードベースが良くなったとは限らない。AI の小さな変更が積み重なると、モジュール境界がぼやけ、インターフェイスが複雑になり、テストしづらくなる。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;improve-codebase-architecture&lt;/code&gt; のような skill は、現在のタスクから離れて全体を見る。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;責務が混ざっているモジュールはどこか&lt;/li&gt;
&lt;li&gt;複雑すぎるインターフェイスはどれか&lt;/li&gt;
&lt;li&gt;テストしづらい経路はどこか&lt;/li&gt;
&lt;li&gt;ドメイン言語と合わない命名はどれか&lt;/li&gt;
&lt;li&gt;収束すべき重複ロジックはどれか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは自動で大規模リファクタリングするためではない。構造化された観察と改善方向を出し、人間が判断するためのものだ。&lt;/p&gt;
&lt;h2 id=&#34;制限すべきは自由度&#34;&gt;制限すべきは自由度
&lt;/h2&gt;&lt;p&gt;この方法論の核心は単純だ。AI コーディングはモデルを自由に走らせることではなく、明確な目標、コンテキスト、テスト、停止条件を与えることだ。&lt;/p&gt;
&lt;p&gt;人間は問題定義、アーキテクチャ境界、業務上の取捨選択、受け入れ基準を担当する。AI はコード生成、テスト補完、反復修正、局所的なリファクタリングを担当する。&lt;/p&gt;
&lt;p&gt;AI が強くなっても、ソフトウェア工学の基礎は古くならない。要件整理、ドメイン言語、TDD、診断、アーキテクチャレビューは、むしろ重要になる。&lt;/p&gt;
&lt;p&gt;コードを書ける人は増える。差がつくのは、AI を保守可能で検証可能な工学体系に組み込めるかどうかだ。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>cc-haha とは？Claude Code をデスクトップ作業台にするプロジェクト</title>
        <link>https://knightli.com/ja/2026/05/14/cc-haha-claude-code-desktop-workbench/</link>
        <pubDate>Thu, 14 May 2026 22:38:04 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/14/cc-haha-claude-code-desktop-workbench/</guid>
        <description>&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; は、Claude Code のワークフローを中心に改造されたプロジェクトです。正式なリポジトリ名は &lt;code&gt;NanmiCoder/cc-haha&lt;/code&gt; です。プロジェクトページでは、&lt;code&gt;2026-03-31&lt;/code&gt; に Anthropic npm registry から流出した Claude Code のソースコードを修復したものをベースにしており、現在の主な形はデスクトップ版 Claude Code ワークベンチだと説明されています。&lt;/p&gt;
&lt;p&gt;プロジェクト URL：&lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;この説明には重要な点が 2 つあります。&lt;/p&gt;
&lt;p&gt;1 つ目は、これは Anthropic 公式の Claude Code ではないということです。README でも、元のソースコードの著作権は Anthropic にあり、学習と研究目的に限ると明記されています。&lt;/p&gt;
&lt;p&gt;2 つ目は、今の重点が単なる「Claude Code CLI をローカルで動かすこと」ではないということです。README と最新 release を見ると、&lt;code&gt;cc-haha&lt;/code&gt; は Claude Code のセッション、プロジェクト、権限、Diff、Computer Use、リモートアクセス、モデルプロバイダー設定をまとめるデスクトップアプリに近いものになっています。&lt;/p&gt;
&lt;h2 id=&#34;何を解決しようとしているのか&#34;&gt;何を解決しようとしているのか
&lt;/h2&gt;&lt;p&gt;Claude Code はもともとターミナル寄りのツールです。セッション、コマンド実行、権限確認、ファイル編集、コンテキスト切り替えはターミナル内で行われます。CLI に慣れた人には問題ありませんが、長く使うといくつか不便な点が出てきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;複数のプロジェクトやセッションを同時に管理しづらい。&lt;/li&gt;
&lt;li&gt;AI がどのファイルを変更したかを見るには、Git やエディタに切り替える必要がある。&lt;/li&gt;
&lt;li&gt;権限承認、コマンド実行、ファイル Diff が別々の画面に分散する。&lt;/li&gt;
&lt;li&gt;スマホや別端末から現在のセッションを見たい場合、追加の仕組みが必要。&lt;/li&gt;
&lt;li&gt;Anthropic 以外のモデルを使うには、プロトコル互換を自分で処理する必要がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; は、これらをグラフィカルなワークベンチとしてまとめようとしています。Claude Code に見た目を付けただけではなく、「セッション管理」と「ローカル開発フローの制御」をデスクトップ側に移しています。&lt;/p&gt;
&lt;h2 id=&#34;デスクトップワークベンチターミナルからコントロールセンターへ&#34;&gt;デスクトップワークベンチ：ターミナルからコントロールセンターへ
&lt;/h2&gt;&lt;p&gt;README によると、&lt;code&gt;cc-haha&lt;/code&gt; のデスクトップ版は macOS / Windows App の中に次の機能を集約しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;複数セッションのワークベンチ：タブ、プロジェクト切り替え、ターミナル入口、セッション履歴でタスクを管理。&lt;/li&gt;
&lt;li&gt;ブランチ / Worktree 起動：新しいセッションでリポジトリブランチを選び、現在の作業ツリーか隔離 Worktree かを選択。&lt;/li&gt;
&lt;li&gt;右側のコード変更パネル：チャットしながら変更済みファイル、追加削除行、ワークスペース状態を確認。&lt;/li&gt;
&lt;li&gt;コード変更の可視化：AI による編集、Diff、実行過程を表示。&lt;/li&gt;
&lt;li&gt;権限と確認フロー：危険なコマンド、ツール呼び出し、AI の確認質問をデスクトップで承認。&lt;/li&gt;
&lt;li&gt;複数モデルプロバイダー：Anthropic 互換 API、第三者モデル、WebSearch fallback、ローカル設定をサポート。&lt;/li&gt;
&lt;li&gt;H5 リモートアクセス：一度きりの token でスマホや別端末から現在のデスクトップセッションへ接続。&lt;/li&gt;
&lt;li&gt;IM 連携：Telegram、Feishu、WeChat、DingTalk からリモート対話、プロジェクト切り替え、権限承認。&lt;/li&gt;
&lt;li&gt;スケジュールタスクと token 使用量：デスクトップで計画タスクを作成し、ローカル token 使用傾向を確認。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの機能を見ると、単なるコマンドライン代替ではなく「AI コーディングワークベンチ」に近いことがわかります。チャット、ファイル変更、権限、プロジェクト、リモート入口、モデル設定を同じ場所に置こうとしているわけです。&lt;/p&gt;
&lt;h2 id=&#34;インストールと起動方法&#34;&gt;インストールと起動方法
&lt;/h2&gt;&lt;p&gt;一般ユーザーは Releases からデスクトップ版インストーラーをダウンロードするのが向いています。&lt;/p&gt;
&lt;p&gt;README のデスクトップ版インストール手順は次の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;GitHub Releases から macOS または Windows のインストーラーをダウンロードする。&lt;/li&gt;
&lt;li&gt;初回起動後、デスクトップ設定でモデルプロバイダー、API Key、デフォルトモデルを設定する。&lt;/li&gt;
&lt;li&gt;macOS でアプリを開けないと表示された場合は、インストールガイドに従って Gatekeeper 権限を処理する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最新 release ページでは、&lt;code&gt;v0.2.6&lt;/code&gt; が &lt;code&gt;2026-05-13&lt;/code&gt; に公開されています。このバージョンは主に H5 モバイルアクセスの安全な復旧、デスクトップセッション管理、ファイル mention 検索、デスクトップ体験の細部改善を扱っています。&lt;/p&gt;
&lt;p&gt;ソースから CLI を起動したい場合、README には次のコマンドが示されています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./bin/claude-haha
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;この方法は、低レベル CLI、サーバー、自前の開発を調べたい人向けです。普通に使うならデスクトップ版のほうが直接的です。&lt;/p&gt;
&lt;h2 id=&#34;v026-の変更点&#34;&gt;v0.2.6 の変更点
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;v0.2.6&lt;/code&gt; の重点は、H5/LAN アクセスを一時的な開放状態から、明示的な有効化と token ペアリングモデルへ戻したことです。&lt;/p&gt;
&lt;p&gt;注目点は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;H5/LAN アクセスはローカルで明示的に有効化する必要がある。&lt;/li&gt;
&lt;li&gt;QR リンクには一度だけ表示される token が含まれる。&lt;/li&gt;
&lt;li&gt;リモート API、proxy、WebSocket は裸で公開されなくなった。&lt;/li&gt;
&lt;li&gt;Settings に独立した H5 Access ページが追加された。&lt;/li&gt;
&lt;li&gt;デスクトップのサイドバーに複数選択とセッション削除のための一括管理モードが追加された。&lt;/li&gt;
&lt;li&gt;デスクトップのファイル mention 検索が git-first になり、ignore ルールを守り、&lt;code&gt;node_modules&lt;/code&gt; やビルド成果物のノイズを減らす。&lt;/li&gt;
&lt;li&gt;ピュアホワイトテーマが追加され、長い URL がチャットレイアウトを壊す問題や、複数 tab 間で下書きが混ざる問題が修正された。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは、プロジェクトが「動く」段階を越えて、デスクトップ製品として必要な安全境界と日常的な使い勝手を補い始めていることを示しています。&lt;/p&gt;
&lt;p&gt;特に H5 アクセスについて、作者は release で明確に注意しています。H5 は個人または信頼できるチーム向けのブラウザアクセス入口であり、公開マルチテナントログインシステムではありません。実際に使うときは、インターネットに公開する SaaS 管理画面のように扱うべきではありません。&lt;/p&gt;
&lt;h2 id=&#34;computer-useagent-にデスクトップを操作させる&#34;&gt;Computer Use：Agent にデスクトップを操作させる
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; のもう一つの大きな特徴は Computer Use です。&lt;/p&gt;
&lt;p&gt;プロジェクト文書によると、この機能は流出した Claude Code ソース内の Computer Use 内部実装を大きく改造したものです。公式実装は &lt;code&gt;@ant/computer-use-swift&lt;/code&gt; や &lt;code&gt;@ant/computer-use-input&lt;/code&gt; といった Anthropic 内部の非公開ネイティブモジュールに依存しており、公開入手できません。&lt;code&gt;cc-haha&lt;/code&gt; は低レベル操作層を Python bridge に置き換え、&lt;code&gt;pyautogui&lt;/code&gt;、&lt;code&gt;mss&lt;/code&gt;、&lt;code&gt;pyobjc&lt;/code&gt; などの公開ライブラリでシステム操作を実現しています。&lt;/p&gt;
&lt;p&gt;Computer Use が対応する操作には次のようなものがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;スクリーンショット：&lt;code&gt;screenshot&lt;/code&gt;、&lt;code&gt;zoom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;マウス：クリック、ドラッグ、移動、スクロール、カーソル位置取得&lt;/li&gt;
&lt;li&gt;キーボード：文字入力、キー入力、キー長押し&lt;/li&gt;
&lt;li&gt;アプリ：アプリ起動、ディスプレイ切り替え&lt;/li&gt;
&lt;li&gt;権限：アプリ権限要求、許可済みアプリ一覧&lt;/li&gt;
&lt;li&gt;クリップボード：読み取りと書き込み&lt;/li&gt;
&lt;li&gt;その他：待機、バッチ操作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;動作は「スクリーンショット - 分析 - 操作」のループです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;モデルがユーザーの依頼を受け取る。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;screenshot&lt;/code&gt; を呼び出して画面を取得する。&lt;/li&gt;
&lt;li&gt;モデルが視覚能力でボタン、入力欄、座標を識別する。&lt;/li&gt;
&lt;li&gt;クリック、入力、アプリ操作ツールを呼び出す。&lt;/li&gt;
&lt;li&gt;再度スクリーンショットを取り、結果を確認して次へ進む。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;文書を見る限り、完全対応している主なプラットフォームは macOS で、Apple Silicon と Intel の両方を含みます。Windows / Linux は理論上可能ですが、&lt;code&gt;pyobjc&lt;/code&gt; に関わるアプリ管理部分を各プラットフォーム向けに置き換える必要があり、現時点では完全対応ではありません。&lt;/p&gt;
&lt;p&gt;実行要件は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Bun &amp;gt;= 1.1.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Python &amp;gt;= 3.8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;macOS Accessibility 権限&lt;/li&gt;
&lt;li&gt;macOS Screen Recording 権限&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この種の機能は強力ですが、権限リスクも高くなります。AI にデスクトップアプリを操作させる場合、必要なアプリだけを明示的に許可し、関係ないウィンドウに機密情報を開いたままにしないほうがよいです。&lt;/p&gt;
&lt;h2 id=&#34;複数モデル接続anthropic-互換レイヤーを使う&#34;&gt;複数モデル接続：Anthropic 互換レイヤーを使う
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; の通信基盤は引き続き Anthropic Messages API プロトコルです。プロジェクト文書では、LiteLLM をプロトコル変換プロキシとして使う方法が推奨されています。&lt;/p&gt;
&lt;p&gt;基本構造は次の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-code-haha ──Anthropic协议──▶ LiteLLM Proxy ──OpenAI协议──▶ 目标模型 API
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;つまり、&lt;code&gt;cc-haha&lt;/code&gt; は Anthropic Messages API リクエストを送り、LiteLLM がそれを OpenAI Chat Completions などの形式へ変換し、OpenAI、DeepSeek、Ollama、その他のモデルサービスへ転送します。&lt;/p&gt;
&lt;p&gt;文書にある LiteLLM のインストール方法は次の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install &lt;span class=&#34;s1&#34;&gt;&amp;#39;litellm[proxy]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;その後、&lt;code&gt;litellm_config.yaml&lt;/code&gt; で OpenAI、DeepSeek、Ollama などのモデルを設定できます。プロキシ起動後、&lt;code&gt;.env&lt;/code&gt; または &lt;code&gt;~/.claude/settings.json&lt;/code&gt; に次を設定します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sk-anything
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://localhost:4000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;API_TIMEOUT_MS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DISABLE_TELEMETRY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;実用上の注意点もあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;drop_params: true&lt;/code&gt; が重要です。Anthropic の &lt;code&gt;thinking&lt;/code&gt; や &lt;code&gt;cache_control&lt;/code&gt; などのパラメータは OpenAI API には存在しないためです。&lt;/li&gt;
&lt;li&gt;Extended Thinking は Anthropic 固有機能なので、第三者モデルでは使えません。&lt;/li&gt;
&lt;li&gt;Prompt Caching も Anthropic ネイティブの形では機能しません。&lt;/li&gt;
&lt;li&gt;ツール呼び出しは Anthropic &lt;code&gt;tool_use&lt;/code&gt; から OpenAI function calling へ変換されるため、複雑なツール呼び出しでは互換性問題が出る可能性があります。&lt;/li&gt;
&lt;li&gt;ローカル Ollama の小さなモデルでは、このツール呼び出し中心の流れを安定して処理できない場合があります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;したがって、複数モデル接続は可能ですが、すべてのモデルで同じ体験になるわけではありません。&lt;code&gt;cc-haha&lt;/code&gt; はモデルに対して、ツール呼び出し、コード理解、長いコンテキスト処理の能力をかなり要求します。&lt;/p&gt;
&lt;h2 id=&#34;向いている人&#34;&gt;向いている人
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; は次のようなユーザーに向いています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code に慣れていて、デスクトップでセッション管理したい人。&lt;/li&gt;
&lt;li&gt;複数のリポジトリ、ブランチ、AI セッションを同時に扱う人。&lt;/li&gt;
&lt;li&gt;AI のファイル変更、Diff、ワークスペース状態を右側で直接見たい人。&lt;/li&gt;
&lt;li&gt;Computer Use を試し、Agent にデスクトップアプリを操作させたい人。&lt;/li&gt;
&lt;li&gt;Anthropic プロトコル経由で OpenAI、DeepSeek、Ollama などを接続したい人。&lt;/li&gt;
&lt;li&gt;スマホや IM からリモートでセッション確認や権限承認をしたい人。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あまり向いていないのは次のような場合です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安定した公式 Claude Code だけを使いたい。&lt;/li&gt;
&lt;li&gt;流出ソースという背景や著作権の不確実性を受け入れられない。&lt;/li&gt;
&lt;li&gt;ローカルツールに高いシステム権限を与えたくない。&lt;/li&gt;
&lt;li&gt;企業のコンプライアンス、監査、公式サポートが必要。&lt;/li&gt;
&lt;li&gt;API key、プロキシ、モデル互換、ローカルサービス設定に慣れていない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;リスクと境界&#34;&gt;リスクと境界
&lt;/h2&gt;&lt;p&gt;この話では機能だけでなく、リスクも扱う必要があります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; の由来を考えると、これは普通のコミュニティ再実装プロジェクトではありません。README には、流出した Claude Code ソースコードをベースにしており、元のソースコードは Anthropic に帰属すると明記されています。これは著作権、コンプライアンス、長期保守の不確実性につながります。&lt;/p&gt;
&lt;p&gt;また、Computer Use、H5 リモートアクセス、IM 連携、ローカル権限承認はいずれも高い権限を持つ機能です。便利であるほど、境界を明確にする必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;信頼できないネットワークで H5 アクセスを開放しない。&lt;/li&gt;
&lt;li&gt;token を長期公開ログイン資格情報として扱わない。&lt;/li&gt;
&lt;li&gt;Agent に無関係な機密アプリを操作させない。&lt;/li&gt;
&lt;li&gt;本番環境や企業コンプライアンス環境で安易に使わない。&lt;/li&gt;
&lt;li&gt;第三者モデルプロキシ設定や API key を公開リポジトリに置かない。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI コーディングツールの構造、デスクトップワークフロー、Computer Use 実装を学ぶ目的なら、とても参考になります。長期の本番ワークフローに入れるなら、先に法務、権限、セキュリティ、保守のリスクを評価すべきです。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; で最も注目すべき点は、「Claude Code を再現できるか」ではありません。Claude Code 型の AI コーディングツールを、デスクトップワークベンチの形へ押し出していることです。&lt;/p&gt;
&lt;p&gt;セッション、プロジェクト、Worktree、Diff、権限、リモートアクセス、Computer Use、複数モデルプロバイダー、スケジュールタスク、token 使用量統計が、1 つのデスクトップ体験にまとめられています。これは、AI コーディングツールの次の一歩が、モデル性能だけでなく、より完成度の高いワークフロー UI にもあることを示しています。&lt;/p&gt;
&lt;p&gt;ただし境界も明確です。これは Anthropic 公式製品ではなく、出自に敏感な背景があり、高権限機能は慎重に扱う必要があります。公式 Claude Code を安易に置き換えるものとしてではなく、AI コーディングツールの進化方向を観察するプロジェクトとして見るのが適切です。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GitHub リポジトリ：&lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;最新 Release：&lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha/releases/tag/v0.2.6&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha/releases/tag/v0.2.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Computer Use ドキュメント：&lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha/blob/main/docs/computer-use.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha/blob/main/docs/computer-use.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;第三者モデルドキュメント：&lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha/blob/main/docs/guide/third-party-models.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha/blob/main/docs/guide/third-party-models.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Codex /goal vs Claude Code /goal：長いタスクを完了条件まで自動で進める</title>
        <link>https://knightli.com/ja/2026/05/14/codex-goal-vs-claude-code-goal/</link>
        <pubDate>Thu, 14 May 2026 22:25:31 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/14/codex-goal-vs-claude-code-goal/</guid>
        <description>&lt;p&gt;&lt;code&gt;/goal&lt;/code&gt; は、AI コーディングツールにおける重要なコマンドになりつつあります。&lt;/p&gt;
&lt;p&gt;これは「モデルにもう少しコードを書かせる」ためのものではありません。より実用的な問題、つまりタスクに明確な完了条件があるとき、毎ターン止まってユーザーの「続けて」を待つのではなく、Agent が条件を満たすまで進み続けられるか、という問題を扱います。&lt;/p&gt;
&lt;p&gt;Codex CLI はすでに公式ドキュメントで実験的な &lt;code&gt;/goal&lt;/code&gt; を追加しています。Claude Code も独自の &lt;code&gt;/goal&lt;/code&gt; ドキュメントを公開し、複数ターンにまたがって作業を続けられる自動化機能として説明しています。名前は同じですが、プロダクトとしての方向性は完全には同じではありません。&lt;/p&gt;
&lt;h2 id=&#34;goal-は何を解決するのか&#34;&gt;&lt;code&gt;/goal&lt;/code&gt; は何を解決するのか
&lt;/h2&gt;&lt;p&gt;通常の AI コーディング対話は、だいたい「一問一答」です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ユーザーがタスクを出す。&lt;/li&gt;
&lt;li&gt;Agent が分析し、コードを変更し、テストを実行する。&lt;/li&gt;
&lt;li&gt;Agent が結果を報告する。&lt;/li&gt;
&lt;li&gt;ユーザーが次の行動を決める。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この流れは短いタスクには向いています。しかし移行、リファクタリング、テスト修正、issue backlog の整理になると、かなり細切れになります。Agent は少しだけ進めて、また「続けて」と入力されるのを待つことがあります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/goal&lt;/code&gt; の考え方は、タスクを「次に何をするか」ではなく「最終的にどんな状態なら完了か」に変えることです。たとえば：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 完成登录模块迁移，所有 auth 测试通过，lint 无报错
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;この種の目標は長いタスクに向いています。テストが通る、ビルドが成功する、ファイル分割が終わる、キューが空になる、受け入れ条件を満たす、といった明確な終点があるからです。&lt;/p&gt;
&lt;h2 id=&#34;codex-の-goal実験機能で現在のスレッドに紐づく&#34;&gt;Codex の &lt;code&gt;/goal&lt;/code&gt;：実験機能で、現在のスレッドに紐づく
&lt;/h2&gt;&lt;p&gt;OpenAI の Codex CLI ドキュメントでは、&lt;code&gt;/goal&lt;/code&gt; は実験機能として扱われています。デフォルトの安定機能ではなく、先に &lt;code&gt;features.goals&lt;/code&gt; を有効にする必要があります。&lt;/p&gt;
&lt;p&gt;有効化する方法は 2 つあります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/experimental
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;または &lt;code&gt;config.toml&lt;/code&gt; に追加します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;goals&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;有効化後は、次のように使えます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal Finish the migration and keep tests green
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;よく使うコマンドは次の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal pause
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal resume
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal clear
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;OpenAI のドキュメントによると、Codex は goal を現在の active thread に付与し、より大きなタスクの進行中にその目標を追跡します。&lt;/p&gt;
&lt;p&gt;ここで重要なのは、Codex &lt;code&gt;/goal&lt;/code&gt; に対する公式ドキュメントの表現がかなり抑制的であることです。「長いタスクに実験的な目標を設定する」「現在のスレッドに目標を付与する」と説明していますが、Claude Code のドキュメントのように、各ターンの終了後に独立した evaluator が自動判定して次のターンへ進む、という説明まではしていません。そのため現時点では、Codex &lt;code&gt;/goal&lt;/code&gt; は完全に安定した無人実行モードではなく、実験中の長期タスク向け目標メカニズムとして見るのがよさそうです。&lt;/p&gt;
&lt;h2 id=&#34;claude-code-の-goal完了条件で駆動する複数ターン実行&#34;&gt;Claude Code の &lt;code&gt;/goal&lt;/code&gt;：完了条件で駆動する複数ターン実行
&lt;/h2&gt;&lt;p&gt;Claude Code の &lt;code&gt;/goal&lt;/code&gt; ドキュメントはより明確です。ユーザーが completion condition を設定すると、Claude はその条件が満たされるまで複数ターンにわたって作業を続けます。&lt;/p&gt;
&lt;p&gt;例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal all tests in test/auth pass and the lint step is clean
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Claude Code の仕組みは、おおまかに次のようなものです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;現在の turn が終わっても、すぐに制御をユーザーへ戻さない。&lt;/li&gt;
&lt;li&gt;小さく高速なモデルが、目標条件がすでに満たされたかを確認する。&lt;/li&gt;
&lt;li&gt;満たされていなければ、Claude が自動で次のターンを開始する。&lt;/li&gt;
&lt;li&gt;満たされていれば、goal は自動で解除され、transcript に完了状態が記録される。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり Claude Code の &lt;code&gt;/goal&lt;/code&gt; は、「完了条件を満たすまで自動で続ける」機能に近いものです。単に会話へ目標を貼り付けるだけではなく、「次のターンへ進むかどうか」を独立した評価ステップに任せています。&lt;/p&gt;
&lt;p&gt;Claude Code では、状態を直接確認することもできます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;状態には、目標条件、実行時間、評価済み turn 数、token 消費量、evaluator が最後に出した理由が表示されます。&lt;/p&gt;
&lt;p&gt;途中で止めたい場合は、次を使います。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal clear
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;stop&lt;/code&gt;、&lt;code&gt;off&lt;/code&gt;、&lt;code&gt;reset&lt;/code&gt;、&lt;code&gt;none&lt;/code&gt;、&lt;code&gt;cancel&lt;/code&gt; も解除用の別名として使えます。目標を有効にした後でセッションが中断された場合でも、&lt;code&gt;--resume&lt;/code&gt; や &lt;code&gt;--continue&lt;/code&gt; で再開すると、active な goal を復元できます。ただし、経過時間、turn 数、token の基準値は再計算されます。&lt;/p&gt;
&lt;h2 id=&#34;最大の違い&#34;&gt;最大の違い
&lt;/h2&gt;&lt;p&gt;Codex と Claude Code はどちらも、AI コーディングを「単発の回答」から「長いタスクの実行」へ押し出しています。ただし &lt;code&gt;/goal&lt;/code&gt; の位置づけには違いがあります。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;比較項目&lt;/th&gt;
          &lt;th&gt;Codex CLI &lt;code&gt;/goal&lt;/code&gt;&lt;/th&gt;
          &lt;th&gt;Claude Code &lt;code&gt;/goal&lt;/code&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;状態&lt;/td&gt;
          &lt;td&gt;experimental&lt;/td&gt;
          &lt;td&gt;公式ドキュメントで単独ページとして説明&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;有効化&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;features.goals&lt;/code&gt; を有効化する必要がある&lt;/td&gt;
          &lt;td&gt;信頼済み workspace で直接利用可能&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;目標のスコープ&lt;/td&gt;
          &lt;td&gt;現在の active thread&lt;/td&gt;
          &lt;td&gt;現在の session&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;主な操作&lt;/td&gt;
          &lt;td&gt;set / view / pause / resume / clear&lt;/td&gt;
          &lt;td&gt;set / view / clear&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;自動判定&lt;/td&gt;
          &lt;td&gt;ドキュメントは目標の付与と追跡を強調&lt;/td&gt;
          &lt;td&gt;各ターン後に evaluator が判定すると明記&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;自動継続&lt;/td&gt;
          &lt;td&gt;公式表現は控えめ&lt;/td&gt;
          &lt;td&gt;条件未達なら自動で次のターンへ進む&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;向いている場面&lt;/td&gt;
          &lt;td&gt;Codex の長いタスクで目標コンテキストを維持したい場合&lt;/td&gt;
          &lt;td&gt;完了条件に向けて Claude Code に継続実行させたい場合&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;簡単に言えば、Codex の &lt;code&gt;/goal&lt;/code&gt; は「現在のスレッドに実験的な長期目標を付ける」ものに近いです。Claude Code の &lt;code&gt;/goal&lt;/code&gt; は「現在のセッションに検証可能な停止条件を設定し、満たされるまで自動で進める」ものに近いです。&lt;/p&gt;
&lt;h2 id=&#34;よい-goal-の書き方&#34;&gt;よい &lt;code&gt;/goal&lt;/code&gt; の書き方
&lt;/h2&gt;&lt;p&gt;どちらのツールでも、&lt;code&gt;/goal&lt;/code&gt; は曖昧な願望を書く場所ではありません。&lt;/p&gt;
&lt;p&gt;あまりよくない例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 把项目优化一下
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;よりよい例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 将 payment 模块迁移到新 API，npm test -- payment 退出码为 0，git diff 只包含 payment 相关文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;よい目標には通常、次の 3 つが含まれます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;明確な完了状態。&lt;/li&gt;
&lt;li&gt;実行可能な検証方法。&lt;/li&gt;
&lt;li&gt;守るべき境界。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;目標が大きい場合は、停止条件も加えるべきです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 修复 eslint 报错，npm run lint 退出码为 0；如果超过 20 轮仍未完成，停止并总结剩余问题
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これは重要です。&lt;code&gt;/goal&lt;/code&gt; が強力になるほど、境界が必要になります。そうしないと Agent は「完了」を追い求めて、過剰にファイルを変更したり、長く走りすぎたり、token を使いすぎたり、本来なら質問すべき問題をそのまま進めてしまう可能性があります。&lt;/p&gt;
&lt;h2 id=&#34;goal-が向いている場面&#34;&gt;&lt;code&gt;/goal&lt;/code&gt; が向いている場面
&lt;/h2&gt;&lt;p&gt;向いているもの：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テスト修正：指定したテストが通るまで。&lt;/li&gt;
&lt;li&gt;コード移行：すべての呼び出し箇所を変更し、コンパイルが成功するまで。&lt;/li&gt;
&lt;li&gt;一括整理：特定の lint や型エラーがゼロになるまで。&lt;/li&gt;
&lt;li&gt;ドキュメント補完：指定したすべてのモジュールに説明が付くまで。&lt;/li&gt;
&lt;li&gt;issue キュー処理：特定タグの issue が処理済み、または明確に分類されるまで。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;向いていないもの：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要件自体がまだ曖昧。&lt;/li&gt;
&lt;li&gt;頻繁なプロダクト判断が必要。&lt;/li&gt;
&lt;li&gt;高リスクな削除、データ移行、権限変更を含む。&lt;/li&gt;
&lt;li&gt;受け入れ条件が主観でしか判断できない。&lt;/li&gt;
&lt;li&gt;大量の無関係なモジュールをまたぐ。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;実用的な基準は、「どのコマンドを実行し、どんな結果を確認し、どのファイルに触れてはいけないか」を書けるなら &lt;code&gt;/goal&lt;/code&gt; に向いている、ということです。「もっとよくして」としか書けないなら、通常の対話、計画モード、人間のレビューを使うほうが安全です。&lt;/p&gt;
&lt;h2 id=&#34;ai-コーディングツールへの影響&#34;&gt;AI コーディングツールへの影響
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;/goal&lt;/code&gt; は明確な方向性を示しています。AI コーディングツールは「対話型アシスタント」から「継続実行できる作業単位」へ移りつつあります。&lt;/p&gt;
&lt;p&gt;以前は、Agent にタスクを任せるとき、ユーザーが近くで見守る必要がありました。詰まったら促し、テストが終わったら続行させ、エラーが出たらまた命令する。&lt;code&gt;/goal&lt;/code&gt; はこのやり取りを完了条件に圧縮し、次のターンで何をするかを Agent 自身に決めさせます。&lt;/p&gt;
&lt;p&gt;ただし、これはユーザー側への要求も高めます。これからの prompt はタスクを説明するだけでなく、受け入れ条件、検証コマンド、変更範囲、停止ルールも書く必要があります。言い換えると、ユーザーの仕事は「続けてと促す」ことから「何をもって完了とするかを定義する」ことへ移ります。&lt;/p&gt;
&lt;p&gt;Codex と Claude Code が &lt;code&gt;/goal&lt;/code&gt; に到達したということは、長いタスクを扱う Agent が、もはやバックグラウンドタスクやクラウドキューだけのものではないということです。ターミナル上のローカルなコーディングツールにも、より強い自律的な進行能力が求められ始めています。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Codex CLI と Claude Code はどちらも &lt;code&gt;/goal&lt;/code&gt; を持っていますが、現時点では同じ機能として単純に扱わないほうがよいです。&lt;/p&gt;
&lt;p&gt;Codex の &lt;code&gt;/goal&lt;/code&gt; はまだ実験機能で、&lt;code&gt;features.goals&lt;/code&gt; を有効にする必要があり、現在の Codex スレッドで長期目標を維持する仕組みとして見るのが自然です。Claude Code の &lt;code&gt;/goal&lt;/code&gt; は、「完了条件」と「自動継続」をより明確に結びつけ、独立した evaluator によって続行可否を判断します。&lt;/p&gt;
&lt;p&gt;日常開発では、この種のコマンドは明確な受け入れ基準を持つエンジニアリングタスクに向いています。要件判断やコードレビューを置き換えるものではありませんが、長いタスクにありがちな「続けて」「もう一度実行して」「テストが通るまで直して」という繰り返しを減らせます。&lt;/p&gt;
&lt;p&gt;本当に身につけるべきなのは、コマンドそのものではありません。タスクを、明確で、検証可能で、停止できる目標として書く力です。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OpenAI Codex CLI Slash Commands：&lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/codex/cli/slash-commands&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://developers.openai.com/codex/cli/slash-commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Claude Code Goal ドキュメント：&lt;a class=&#34;link&#34; href=&#34;https://code.claude.com/docs/en/goal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://code.claude.com/docs/en/goal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Codex は中国系 LLM とどう接続する？OpenAI 互換 API と CodexBridge の使いどころ</title>
        <link>https://knightli.com/ja/2026/05/13/codexbridge-openai-compatible-api/</link>
        <pubDate>Wed, 13 May 2026 23:08:28 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/13/codexbridge-openai-compatible-api/</guid>
        <description>&lt;p&gt;CodexBridge は、Codex CLI/SDK を OpenAI 互換の HTTP サービスとして公開するローカルブリッジです。これにより、これまでターミナル中心だった Codex を、OpenWebUI、Cherry Studio、スクリプト、自動化システム、または OpenAI Chat Completions 互換クライアントから呼び出せます。&lt;/p&gt;
&lt;p&gt;中心となるエンドポイントは &lt;code&gt;/v1/chat/completions&lt;/code&gt; と &lt;code&gt;/v1/models&lt;/code&gt; です。前者は会話を処理し、通常の同期レスポンスと SSE ストリーミングをサポートします。後者は OpenAI 風のモデル一覧として利用できます。すでに OpenAI API に対応しているツールなら、基本的には base URL、API key、モデル名を変更するだけで済みます。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/begonia599/CodexBridge&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/begonia599/CodexBridge&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;向いている用途&#34;&gt;向いている用途
&lt;/h2&gt;&lt;p&gt;CodexBridge は、Codex を既存の AI クライアントやワークフローに組み込みたい場合に向いています。たとえば：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenWebUI や Cherry Studio で Codex を直接選びたい。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;curl&lt;/code&gt;、Python、Node.js などのスクリプトからローカル Codex を呼びたい。&lt;/li&gt;
&lt;li&gt;1 つのフロントエンドから OpenAI、Ollama、他の互換 API、Codex を同時に扱いたい。&lt;/li&gt;
&lt;li&gt;Codex のローカルスレッド、サンドボックス、作業ディレクトリ、承認ポリシーを維持したい。&lt;/li&gt;
&lt;li&gt;社内ツールに統一された &lt;code&gt;/v1/chat/completions&lt;/code&gt; 入口を提供したい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは新しい LLM ではなく、Codex CLI を完全に置き換えるフロントエンドでもありません。より正確にはアダプター層です。上流はあくまで Codex で、ブリッジが OpenAI 風のリクエストを Codex が扱える会話入力に変換します。&lt;/p&gt;
&lt;h2 id=&#34;基本環境&#34;&gt;基本環境
&lt;/h2&gt;&lt;p&gt;必要なもの：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js 18 以上。&lt;/li&gt;
&lt;li&gt;インストール済みでログイン済みの Codex CLI。&lt;/li&gt;
&lt;li&gt;npm。好みに応じて pnpm / yarn でも構いません。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ソースからの基本的なデプロイ手順：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/begonia599/CodexBridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; codexbridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env .env.local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;その後、&lt;code&gt;.env&lt;/code&gt; または &lt;code&gt;.env.local&lt;/code&gt; を編集し、API key、デフォルトモデル、作業ディレクトリ、サンドボックスモード、ネットワーク権限などを設定します。&lt;/p&gt;
&lt;p&gt;HTTP サービスを起動します：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run codex:server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;デフォルトポートは &lt;code&gt;8080&lt;/code&gt; で、&lt;code&gt;PORT&lt;/code&gt; で変更できます。起動後は次のエンドポイントを利用できます：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GET /health
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/chat/completions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GET /v1/models
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;cli-会話モード&#34;&gt;CLI 会話モード
&lt;/h2&gt;&lt;p&gt;HTTP サービスのほかに、軽量な CLI も用意されています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run codex:chat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CLI では自然言語を直接入力して Codex と対話できます。よく使うコマンドは次の 2 つです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/reset&lt;/code&gt;: 新しい Codex スレッドを作成する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/exit&lt;/code&gt;: CLI を終了する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;現在のスレッド ID は &lt;code&gt;.codex_thread.json&lt;/code&gt; に保存されます。次回 CLI を起動したときにこのファイルが残っていれば、以前の会話を続けられます。&lt;/p&gt;
&lt;h2 id=&#34;http-呼び出し例&#34;&gt;HTTP 呼び出し例
&lt;/h2&gt;&lt;p&gt;最小構成のリクエストは次のようになります：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl http://localhost:8080/v1/chat/completions &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;content-type: application/json&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;authorization: Bearer 123321&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;model&amp;#34;:&amp;#34;gpt-5-codex:medium&amp;#34;,&amp;#34;session_id&amp;#34;:&amp;#34;demo&amp;#34;,&amp;#34;messages&amp;#34;:[{&amp;#34;role&amp;#34;:&amp;#34;user&amp;#34;,&amp;#34;content&amp;#34;:&amp;#34;ls&amp;#34;}]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;注意点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;authorization&lt;/code&gt; の token は &lt;code&gt;CODEX_BRIDGE_API_KEY&lt;/code&gt; と一致している必要があります。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;model&lt;/code&gt; には &lt;code&gt;gpt-5-codex:medium&lt;/code&gt; や &lt;code&gt;gpt-5-codex:high&lt;/code&gt; のように推論レベルを付けられます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt; は会話を紐付け、同じ Codex スレッドを再利用するために使います。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ストリーミング出力が必要な場合は &lt;code&gt;stream: true&lt;/code&gt; を追加します：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -N http://localhost:8080/v1/chat/completions &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;content-type: application/json&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;authorization: Bearer 123321&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;model&amp;#34;:&amp;#34;gpt-5-codex:high&amp;#34;,&amp;#34;session_id&amp;#34;:&amp;#34;stream&amp;#34;,&amp;#34;stream&amp;#34;:true,&amp;#34;messages&amp;#34;:[{&amp;#34;role&amp;#34;:&amp;#34;user&amp;#34;,&amp;#34;content&amp;#34;:&amp;#34;Node.js プロジェクトの作り方を段階的に説明してください&amp;#34;}]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;OpenAI のストリーミング応答に対応したクライアントなら、通常のチャットに近い体験になります。&lt;/p&gt;
&lt;h2 id=&#34;セッション永続化&#34;&gt;セッション永続化
&lt;/h2&gt;&lt;p&gt;CodexBridge の重要な機能の 1 つがセッションマッピングです。リクエストでは次のフィールドからセッション ID を渡せます：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;conversation_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;thread_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ヘッダーから渡すこともできます：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;x-session-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x-conversation-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x-thread-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x-user-id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本番環境では次を有効にするのがおすすめです：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_REQUIRE_SESSION_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これによりすべてのリクエストにセッション ID が必須となり、別ユーザーや別チャットウィンドウの文脈が混ざるのを避けられます。ブリッジ側のマッピングは &lt;code&gt;.codex_threads.json&lt;/code&gt; に保存されます。このファイルを削除するとブリッジ側の対応関係をリセットできますが、Codex 自体のスレッドは &lt;code&gt;~/.codex/sessions&lt;/code&gt; に残ります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CODEX_REQUIRE_SESSION_ID=false&lt;/code&gt; でリクエストにセッション ID がない場合、ブリッジは現在の &lt;code&gt;messages&lt;/code&gt; を一回限りの入力として Codex に渡します。これは一時的な呼び出しには便利ですが、長い会話には向きません。&lt;/p&gt;
&lt;h2 id=&#34;マルチモーダル入力&#34;&gt;マルチモーダル入力
&lt;/h2&gt;&lt;p&gt;CodexBridge は OpenAI 風の content block をサポートし、画像を Codex が扱える &lt;code&gt;local_image&lt;/code&gt; 入力に変換します。&lt;/p&gt;
&lt;p&gt;リモート画像：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://example.com/demo.png&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ローカル画像：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;local_image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./images/demo.png&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;リモートリソースは一時ディレクトリへダウンロードされ、ターン終了後に削除されます。実運用ではリクエスト本文のサイズに注意してください。特に画像を base64 で送る場合は、&lt;code&gt;CODEX_JSON_LIMIT&lt;/code&gt; を増やす必要があるかもしれません。&lt;/p&gt;
&lt;h2 id=&#34;構造化出力&#34;&gt;構造化出力
&lt;/h2&gt;&lt;p&gt;クライアントが &lt;code&gt;response_format&lt;/code&gt; に対応している場合、CodexBridge はそれを Codex の &lt;code&gt;outputSchema&lt;/code&gt; にマッピングできます。チェック結果、要約、分類結果、自動化レポートなど、固定 JSON 構造を返したいときに便利です。&lt;/p&gt;
&lt;p&gt;最小例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gpt-5-codex&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;session_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;lint&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;response_format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;json_schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;json_schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;lint_report&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;object&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;enum&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ok&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;action_required&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;required&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;additionalProperties&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;messages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;src/ の lint 問題を確認し、結果を JSON で返してください&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;type: &amp;quot;json_schema&amp;quot;&lt;/code&gt; では &lt;code&gt;schema&lt;/code&gt; が必須です。ない場合、サービスは 400 を返します。&lt;/p&gt;
&lt;h2 id=&#34;主な環境変数&#34;&gt;主な環境変数
&lt;/h2&gt;&lt;p&gt;よく使う設定は次のように分けられます。&lt;/p&gt;
&lt;p&gt;サービスと認証：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_BRIDGE_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123321&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_JSON_LIMIT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;10mb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;デフォルトモデル：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-5-codex
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_REASONING&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;medium
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Codex 実行環境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_WORKDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_SANDBOX_MODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;read-only
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_APPROVAL_POLICY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;never
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_SKIP_GIT_CHECK&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ネットワーク機能：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_NETWORK_ACCESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_WEB_SEARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;フロントエンドチャット用途だけなら、デフォルトでネットワークを閉じておくほうが安全です。Codex に &lt;code&gt;curl&lt;/code&gt;、&lt;code&gt;git clone&lt;/code&gt;、Web 検索を明確に実行させたい場合だけ、対応するスイッチを有効にします。&lt;/p&gt;
&lt;h2 id=&#34;docker-とインストールスクリプト&#34;&gt;Docker とインストールスクリプト
&lt;/h2&gt;&lt;p&gt;長時間常駐させたい場合は Docker 方式も使えます：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose logs -f codexbridge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Linux 用のインストールスクリプトもあります：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://raw.githubusercontent.com/begonia599/CodexBridge/master/scripts/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;このスクリプトは依存関係をインストールし、リポジトリを clone または更新し、&lt;code&gt;.env.example&lt;/code&gt; をコピーして Docker Compose でサービスを起動します。&lt;code&gt;sudo&lt;/code&gt; 権限が必要なので、クリーンなサーバーでの素早いデプロイに向いています。すでに複雑な Node.js、Docker、Codex 環境がある場合は、実行前にスクリプト内容を確認してください。&lt;/p&gt;
&lt;h2 id=&#34;よくある問題&#34;&gt;よくある問題
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;リクエストが 413 を返す&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通常はリクエスト本文が大きすぎます。base64 画像でよく起きます。次を増やします：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_JSON_LIMIT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;20mb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;API key が無効と表示される&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;リクエストヘッダーに次があるか確認します：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Authorization: Bearer &amp;lt;your CODEX_BRIDGE_API_KEY&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;または &lt;code&gt;x-api-key&lt;/code&gt; を使います。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Codex が Git リポジトリ制限を報告する&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;実行ディレクトリが信頼済みリポジトリではない場合、Codex のチェックに引っかかることがあります。安全を確認した環境でのみ使ってください：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_SKIP_GIT_CHECK&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;会話をリセットしたい&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ブリッジ側のマッピングは &lt;code&gt;.codex_threads.json&lt;/code&gt;、Codex 自身のスレッドは &lt;code&gt;~/.codex/sessions&lt;/code&gt; にあります。サービスを停止して該当ファイルまたはディレクトリを削除すればリセットできます。&lt;/p&gt;
&lt;h2 id=&#34;使い方のすすめ&#34;&gt;使い方のすすめ
&lt;/h2&gt;&lt;p&gt;ローカルで試すときは、まずデフォルト API key と &lt;code&gt;read-only&lt;/code&gt; サンドボックスで流れを確認します。OpenWebUI、Cherry Studio、スクリプトから正常に呼び出せることを確認してから、&lt;code&gt;CODEX_WORKDIR&lt;/code&gt;、&lt;code&gt;CODEX_SANDBOX_MODE&lt;/code&gt;、&lt;code&gt;CODEX_NETWORK_ACCESS&lt;/code&gt;、&lt;code&gt;CODEX_APPROVAL_POLICY&lt;/code&gt; を段階的に調整します。&lt;/p&gt;
&lt;p&gt;複数人で使う場合は、少なくとも次の 3 点を行うべきです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt; を必須にする。&lt;/li&gt;
&lt;li&gt;デフォルト API key を変更する。&lt;/li&gt;
&lt;li&gt;作業ディレクトリとサンドボックス権限を明確に制限する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CodexBridge の価値は機能の多さではなく、Codex を既存の OpenAI 互換エコシステムに入れられる点にあります。クライアントが base URL を変更できるなら、Codex を通常のチャットモデルのように扱いつつ、ローカルスレッド、サンドボックス、ツール利用といった Codex 本来の機能を維持できます。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>AI コーディングツールの今回の波で、なぜ DeepSeek がコスト削減の鍵になったのか</title>
        <link>https://knightli.com/ja/2026/05/11/deepseek-ai-coding-cost-saving/</link>
        <pubDate>Mon, 11 May 2026 04:59:00 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/11/deepseek-ai-coding-cost-saving/</guid>
        <description>&lt;p&gt;今回の AI コーディングツール競争は、表面上はモデル性能、プラグインエコシステム、agent 自動化の競争に見える。しかし実際に使い始めると、最初にぶつかる問題はコストだ。&lt;/p&gt;
&lt;p&gt;Claude Code、Codex、OpenClaw、Superpowers はどれも便利だが、共通点がある。複雑なタスクに入ると、とにかく token を消費する。プロジェクトを読み、計画を作り、ツールを呼び出し、コンテキストを要約し、結果を何度も確認し、場合によっては複数のサブタスクを起動する。モデルが賢くなり、ワークフローが自動化されるほど、請求額も静かに膨らみやすい。&lt;/p&gt;
&lt;p&gt;だから今回、DeepSeek が重要になっている。単にコードを書けるからではない。長いコンテキストとキャッシュコストが、AI コーディングツールで最もお金が燃える部分にちょうど効いているからだ。&lt;/p&gt;
&lt;h2 id=&#34;agent-ツールはなぜ-token-を大量に消費するのか&#34;&gt;Agent ツールはなぜ token を大量に消費するのか
&lt;/h2&gt;&lt;p&gt;従来のチャット型コーディング支援は、基本的に一問一答だ。関数の書き方を聞くと、コード片が返ってくる。この形でも token は消費するが、まだ制御しやすい。&lt;/p&gt;
&lt;p&gt;Agent ツールは違う。質問に答えるだけではなく、一時的なエンジニアのようにプロジェクトへ入っていく。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;まずディレクトリと重要ファイルをスキャンする；&lt;/li&gt;
&lt;li&gt;要件と既存アーキテクチャを理解する；&lt;/li&gt;
&lt;li&gt;計画を作る；&lt;/li&gt;
&lt;li&gt;ファイルを修正する；&lt;/li&gt;
&lt;li&gt;コマンドやテストを実行する；&lt;/li&gt;
&lt;li&gt;エラーに応じて修正を続ける；&lt;/li&gt;
&lt;li&gt;最後に変更内容をまとめる。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この過程では、モデルが同じコンテキストを何度も読む。プロジェクト説明、コード片、ツール結果、過去の会話、計画、エラーログが繰り返しコンテキストに戻される。少し複雑なタスクになるだけで、数十万 token はすぐに消える。&lt;/p&gt;
&lt;p&gt;さらに攻めたプラグインを入れると、コストはもっと目立つ。OpenCode や Claude Code の拡張ツールの中には、デフォルトで agent チームを組むものもある。小さな機能を一つ変えたいだけでも、計画、レビュー、実行、振り返りまで起動することがある。タスクはより「賢く」見えるが、token も増え続ける。&lt;/p&gt;
&lt;h2 id=&#34;superpowers-の利点は必要なときだけ起動すること&#34;&gt;Superpowers の利点は必要なときだけ起動すること
&lt;/h2&gt;&lt;p&gt;Superpowers のようなツールの利点は、すべてのタスクで完全な agent フローを強制しないことだ。&lt;/p&gt;
&lt;p&gt;普段は Claude Code、OpenCode、Codex を従来の方法で動かせる。ブレインストーミング、計画作成、計画実行、振り返りのような skill を明示的に呼び出したときだけ、より重い自動化フローに入る。&lt;/p&gt;
&lt;p&gt;これはコスト面で重要だ。&lt;/p&gt;
&lt;p&gt;AI コーディングでは、すべてのタスクに重装備を使うべきではない。設定を一行変える、エラーを一つ調べる、小さなスクリプトを書く程度なら、普通の対話で十分だ。複雑なリファクタリング、複数ファイルの変更、長文ドキュメント処理、多段階の検証だけが、完全な agent フローに値する。&lt;/p&gt;
&lt;p&gt;ツールが強力になるほど、起動条件を制御する必要がある。そうしなければ、自動化が増えるほど無駄も増える。&lt;/p&gt;
&lt;h2 id=&#34;deepseek-の重要な強みはキャッシュが安いこと&#34;&gt;DeepSeek の重要な強みはキャッシュが安いこと
&lt;/h2&gt;&lt;p&gt;DeepSeek がこの種の agent ツールに合う大きな理由は、キャッシュヒット時のコストが低いことだ。&lt;/p&gt;
&lt;p&gt;AI コーディングタスクには、大量の反復プレフィックスがある。プロジェクト背景、システムプロンプト、ツール説明、ファイル内容、前の会話ターンは、後続リクエストに何度も現れる。モデルサービスが prompt cache をサポートしていれば、こうした反復部分はキャッシュヒット後にかなり安くなる。&lt;/p&gt;
&lt;p&gt;多くのモデルでは、キャッシュヒット価格は未ヒットより少し安い程度で、たとえば三分の一前後という感覚だ。DeepSeek の強みは、ヒット後の価格差がもっと大きくなり得ることにある。長いコンテキスト、多段階呼び出し、プロジェクトの反復読み込みを行う agent ワークフローでは、この差が請求に直接出る。&lt;/p&gt;
&lt;p&gt;つまり DeepSeek は、毎回の回答が必ず最強というわけではない。しかし「長いタスク、多いターン、コンテキストの反復読み込み」という場面では、コスト構造が AI コーディングに非常に向いている。&lt;/p&gt;
&lt;h2 id=&#34;長いコンテキストは-claude-code-を使いやすくする&#34;&gt;長いコンテキストは Claude Code を使いやすくする
&lt;/h2&gt;&lt;p&gt;Claude Code や類似ツールを DeepSeek V4 に接続すると、もう一つの明確な利点が長いコンテキストだ。&lt;/p&gt;
&lt;p&gt;AI コーディングツールが最も嫌うのは、コンテキスト不足だ。コンテキストが足りなくなると、頻繁に圧縮が必要になる。圧縮が増えると、前に読んだ細部が失われることがある。モデルはプロジェクト構造、制約、あるファイルをなぜ変更したかを忘れ始め、その後の品質が落ちる。&lt;/p&gt;
&lt;p&gt;DeepSeek V4 系列の長いコンテキスト能力は、コードリポジトリ、ドキュメントの一括処理、字幕翻訳、サイト記事整理に向いている。特に Claude Code や OpenClaw に接続する場合、設定が適切ならコンテキスト圧縮を遅らせ、より多くのプロジェクト詳細を保てる。&lt;/p&gt;
&lt;p&gt;だから DeepSeek で動かすと「よく持つ」と感じるタスクがある。各ステップが必ずしも派手ではなくても、長時間、低コスト、反復呼び出しに耐えられる。&lt;/p&gt;
&lt;h2 id=&#34;v4-pro-と-v4-flash-の分担&#34;&gt;V4 Pro と V4 Flash の分担
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 Pro と V4 Flash は混ぜて使うべきではない。&lt;/p&gt;
&lt;p&gt;単純なタスクには &lt;code&gt;DeepSeek V4 Flash&lt;/code&gt; が向いている。速く、安く、次のような場面ではたいてい十分だ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;字幕翻訳；&lt;/li&gt;
&lt;li&gt;ドキュメント整理；&lt;/li&gt;
&lt;li&gt;普通のスクリプト生成；&lt;/li&gt;
&lt;li&gt;小規模なコード修正；&lt;/li&gt;
&lt;li&gt;OpenClaw の軽量タスク；&lt;/li&gt;
&lt;li&gt;簡単なサイトコンテンツ処理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;複雑なタスクでは &lt;code&gt;DeepSeek V4 Pro&lt;/code&gt; を検討する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大規模リファクタリング；&lt;/li&gt;
&lt;li&gt;複数モジュールのコード理解；&lt;/li&gt;
&lt;li&gt;複雑な推論；&lt;/li&gt;
&lt;li&gt;長い agent チェーンのタスク；&lt;/li&gt;
&lt;li&gt;高リスクなコード変更；&lt;/li&gt;
&lt;li&gt;より強い計画能力が必要なエンジニアリングタスク。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最初から最強モデルを使いたがる人は多いが、それは割に合わないことも多い。AI コーディングツールの現実的な使い方は、タスクを層に分けることだ。安いモデルに大量の定型作業を任せ、高いモデルは重要な判断点だけに使う。&lt;/p&gt;
&lt;h2 id=&#34;minimaxdoubaodeepseek-は役割が違う&#34;&gt;MiniMax、Doubao、DeepSeek は役割が違う
&lt;/h2&gt;&lt;p&gt;国内モデルやプランの中で、MiniMax、Doubao、Kimi、DeepSeek にはそれぞれ位置づけがある。&lt;/p&gt;
&lt;p&gt;MiniMax の強みは、量が多く、安く、機能が広いことだ。最も賢いコーディングモデルではないかもしれないが、翻訳、軽い整理、一括処理には費用対効果が高い。字幕の一括処理、形式変換、簡単な校正などには、MiniMax 型のプランはかなり使いやすい。&lt;/p&gt;
&lt;p&gt;Doubao の強みは、ツールエコシステムが広いことだ。画像、動画、検索、TTS、場合によっては STT や embedding までつなげられる。総合ツールボックスに近い。&lt;/p&gt;
&lt;p&gt;DeepSeek の位置づけはもっと明確だ。テキスト、コード、長いコンテキスト、低コストキャッシュ。画像生成、音声、動画の完全なエコシステムはなく、弱点ははっきりしている。しかし AI コーディングと長文 agent ワークフローでは、長所が十分に長い。&lt;/p&gt;
&lt;p&gt;だから誰が誰を置き換えるという話ではない。タスクを分け、それぞれに合う道具を使う話だ。&lt;/p&gt;
&lt;h2 id=&#34;コスト削減の鍵は安いモデルを探すだけではない&#34;&gt;コスト削減の鍵は安いモデルを探すだけではない
&lt;/h2&gt;&lt;p&gt;AI コーディングでコストを下げるとは、すべてのリクエストを安いモデルに替えることではない。&lt;/p&gt;
&lt;p&gt;有効な方法はいくつかある。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;単純なタスクで重い agent を起動しない。&lt;/li&gt;
&lt;li&gt;Flash で十分なタスクに Pro を使わない。&lt;/li&gt;
&lt;li&gt;長いタスクではできるだけキャッシュを使う。&lt;/li&gt;
&lt;li&gt;反復コンテキストを安定させ、意味のない変更でキャッシュを無効化しない。&lt;/li&gt;
&lt;li&gt;大きなタスクは安いモデルに下書きと一括処理をさせ、強いモデルで重要レビューを行う。&lt;/li&gt;
&lt;li&gt;agent に、事実を繰り返し説明せず、同じことを何度も要約しないよう明確に伝える。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;特に最後の点は重要だ。AI ツールは冗長になりやすい。冗長さは読みやすさだけでなく、コストの問題でもある。プロンプトに「事実は一度だけ説明し、意見は一度だけ述べる」と入れると、文章品質と token 消費の両方を改善できる。&lt;/p&gt;
&lt;h2 id=&#34;deepseek-に向く-ai-コーディングワークフロー&#34;&gt;DeepSeek に向く AI コーディングワークフロー
&lt;/h2&gt;&lt;p&gt;DeepSeek は次のようなタスクに特に向いている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;長いコードリポジトリの読解；&lt;/li&gt;
&lt;li&gt;複数ファイルの軽い修正；&lt;/li&gt;
&lt;li&gt;ドキュメントの一括整理；&lt;/li&gt;
&lt;li&gt;字幕の一括翻訳；&lt;/li&gt;
&lt;li&gt;Hugo 記事の整理；&lt;/li&gt;
&lt;li&gt;agent 計画の実行；&lt;/li&gt;
&lt;li&gt;大量の反復コンテキストを含む低コスト自動化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;すべてのタスクに向くわけではない。特に強いフロントエンドの審美眼、複雑なプロダクト判断、クロスモーダル制作が必要なら、Claude、GPT、Gemini、Doubao などを組み合わせる必要がある。&lt;/p&gt;
&lt;p&gt;しかしタスクが「長文、長いコンテキスト、反復呼び出し、コスト敏感」である限り、DeepSeek は第一候補になりやすい。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;今回の AI コーディングツールの波で、DeepSeek の価値は「国内モデルがコードを書ける」ことだけではない。agent ツールの最も現実的な痛点、つまり長いタスクが高すぎる問題を解いていることにある。&lt;/p&gt;
&lt;p&gt;Claude Code、OpenClaw、Superpowers のようなツールは開発フローをますます自動化する。しかしその裏側には、大量のコンテキスト読み書きと多段階呼び出しがある。この部分のコストを下げられる人が、AI コーディングを「たまに気持ちよく使うもの」から「毎日使えるもの」に変えられる。&lt;/p&gt;
&lt;p&gt;DeepSeek の長いコンテキスト、低いキャッシュコスト、V4 Flash / V4 Pro の階層的な使い分けは、まさにその位置にある。&lt;/p&gt;
&lt;p&gt;今回の本当のコスト削減の鍵は、良いモデルを使わないことではない。良いモデル、安いモデル、キャッシュ、agent フローをうまく組み合わせることだ。この会計を理解できれば、AI コーディングツールは美しいが高価なおもちゃではなく、本当の生産性になる。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>AI Coding プランの選び方：ライトユーザーは使いやすさ、ヘビーユーザーは柔軟性</title>
        <link>https://knightli.com/ja/2026/05/10/ai-coding-plan-selection/</link>
        <pubDate>Sun, 10 May 2026 08:20:58 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/10/ai-coding-plan-selection/</guid>
        <description>&lt;p&gt;AI Coding のプランは、この半年でかなり速いペースで変わっています。多くのツールが「回数ベース」から「使用量ベース」に移行し、無料または低価格プランの枠は締まり、海外サービスの一部では本人確認、地域制限、より厳しい利用ルールも増えました。&lt;/p&gt;
&lt;p&gt;開発者にとって問題は、もはや「どのモデルが一番強いか」だけではありません。毎月いくら払うのか、枠は十分か、ツールは使いやすいか、そしてプランが突然値上げされたりルール変更されたりしたときに、スムーズに乗り換えられるかも重要です。&lt;/p&gt;
&lt;p&gt;実用的な結論としては、ライトユーザーは使いやすさを買い、中程度のユーザーはコストパフォーマンスを買い、ヘビーユーザーは柔軟性を買うべきです。使い方が重くなるほど、モデルとツールを一つのプランに固定しないほうがよくなります。&lt;/p&gt;
&lt;h2 id=&#34;プラン選びで見るべき-4-つのポイント&#34;&gt;プラン選びで見るべき 4 つのポイント
&lt;/h2&gt;&lt;p&gt;以前の AI Coding プラン選びでは、通常は 3 つのことを見れば十分でした。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;モデルの性能が十分に強いか。&lt;/li&gt;
&lt;li&gt;応答速度が安定しているか。&lt;/li&gt;
&lt;li&gt;プランの枠が足りるか。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今はこれに 4 つ目を加える必要があります。モデルとツールを分けて使えるかどうかです。&lt;/p&gt;
&lt;p&gt;モデルは推論能力を担い、ツールはコンテキスト管理、ファイル編集、Agent の編成、ワークフロー体験を担います。どちらも重要ですが、完全に結びつけないほうが安全です。たとえば Claude 系モデルが好きなら公式プランを使ってもいいですし、API を別のツールに接続しても構いません。あるエディタや Agent ツールが気に入っているなら、それが自社モデルしか使えないのではなく、複数モデルをつなげられるかを見たほうがよいです。&lt;/p&gt;
&lt;p&gt;ここで大事なのは、複雑にすること自体ではなく、リスクを減らすことです。AI Coding は業界の中でも変化が最も速い分野の一つです。今は枠が緩いプランでも、数か月後には課金方式が変わるかもしれませんし、今は使いやすいツールでも、モデル連携の変更で体験が落ちるかもしれません。モデルとツールを分けておくことは、移行の余地を残すことでもあります。&lt;/p&gt;
&lt;h2 id=&#34;海外プランは全体として締まりつつある&#34;&gt;海外プランは全体として締まりつつある
&lt;/h2&gt;&lt;p&gt;GitHub Copilot、Cursor、Windsurf、Claude Code のようなツールは今でも多くの人の主力ですが、流れはかなり明確です。安くて枠が大きいプランは維持しにくくなり、使用量ベース課金が一般化しています。&lt;/p&gt;
&lt;p&gt;GitHub Copilot のようなサービスが使用量課金を強めるほど、プランそのものの「割安感」は薄くなります。ライトユーザーにはまだ便利ですが、Agent、長いコンテキスト、複雑なコードタスクを高頻度で使う人にとっては、実際の消費は本物の API コストにかなり近づいていきます。&lt;/p&gt;
&lt;p&gt;Cursor と Windsurf は、要するにモデル能力を IDE 体験にまとめているツールです。強みは導入のしやすさと成熟したエディタ体験ですが、弱みはツールへのロックインが強めなことです。専用 Agent、インデックス、自動化フローに依存するほど、後から移るコストは高くなります。&lt;/p&gt;
&lt;p&gt;Claude Code は体験面でも注目度でも魅力がありますが、海外サブスクリプション、本人確認、地域制限、中継サービスの安全性は、中国国内のユーザーにとって無視できないリスクです。特に第三者の中継サービスは、モデルの混在、安定性不足、データ安全性、サービス終了といった問題を抱えやすく、重要な仕事の長期基盤には向きません。&lt;/p&gt;
&lt;h2 id=&#34;国内プランの強みと弱み&#34;&gt;国内プランの強みと弱み
&lt;/h2&gt;&lt;p&gt;国内の AI Coding プランの利点は、多くが API 形式で提供されているため、特定のツールに強く縛られにくいことです。OpenCode、Cline、Continue、自作スクリプト、社内 Agent などに接続できます。&lt;/p&gt;
&lt;p&gt;一方で弱点もはっきりしています。モデルが強く、速く、枠も大きい、という条件を同時に満たすプランはあまり多くありません。&lt;/p&gt;
&lt;p&gt;GLM 系は国内モデルの中では強い部類ですが、ピーク時間帯にはスループットが不安定になり、重いタスクでは速度が足かせになることがあります。Kimi も能力は高いですが、価格と枠のルールは継続的に確認が必要で、特にバックエンドの枠がどれだけ透明かが重要です。MiniMax のようなモデルは速度と枠の面では使いやすく、日常の軽いタスクやバッチ処理、比較的単純なコード支援に向いていますが、難しいエンジニアリング推論では一段落ちることがあります。DeepSeek の新モデルは、キャンペーン価格のうちは非常にコスト効率が高く見えることがありますが、終了後は通常価格で改めて評価し直す必要があります。&lt;/p&gt;
&lt;p&gt;そのため国内プランは、一つの万能パッケージとして使うより、「モデルプール」として運用したほうが向いています。タスクごとにモデルを使い分けるほうが現実的です。&lt;/p&gt;
&lt;h2 id=&#34;ライトユーザー使いやすさを優先しapi-構築にこだわりすぎない&#34;&gt;ライトユーザー：使いやすさを優先し、API 構築にこだわりすぎない
&lt;/h2&gt;&lt;p&gt;週に数回、AI にスクリプト修正、ドキュメント補完、エラー説明、小さなツール作成を頼む程度なら、複雑な構成は不要です。&lt;/p&gt;
&lt;p&gt;このタイプのユーザーは、まず使いやすい製品を選ぶのが正解です。Cursor、Windsurf、Trae、CodeBuddy、通義霊碼、GitHub Copilot などはどれも試す価値があります。大切なのは最安値ではなく、摩擦が少ないことです。普段使うエディタで安定して動き、補完品質が悪くなく、失敗したときに戻しやすい。それで十分です。&lt;/p&gt;
&lt;p&gt;少し安くするためだけに、多段の API、中継、複雑なプロキシ構成を組むのは、ライトユーザーにはあまりおすすめできません。時間コスト、アカウントリスク、トラブル対応の手間のほうが、節約額より大きくなりがちです。&lt;/p&gt;
&lt;h2 id=&#34;中程度のユーザーコスパだけでなく移行しやすさも見る&#34;&gt;中程度のユーザー：コスパだけでなく、移行しやすさも見る
&lt;/h2&gt;&lt;p&gt;毎日 AI を使ってコードを書き、プロジェクトを直し、テストを作り、ドキュメントを整理するようになると、枠と実際の消費量をより真剣に見る必要が出てきます。&lt;/p&gt;
&lt;p&gt;このタイプのユーザーには、主力ツールと予備モデルを分けておく構成が向いています。たとえば、使いやすい IDE プランで日常の編集を行い、別に複数ツールへ接続できる API や集約プランを用意して、長いコンテキストや複雑な Agent タスクに使う、といった形です。&lt;/p&gt;
&lt;p&gt;選ぶときに見るべきポイントは主に 3 つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;外部ツールへ接続できるか。&lt;/li&gt;
&lt;li&gt;token や枠の消費が見えるか。&lt;/li&gt;
&lt;li&gt;超過時の挙動が、速度制限、機能劣化、停止、純粋な従量課金のどれか。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;見た目は安くても、そのツールの中でしか使えないプランなら、移行コストまで含めて考える必要があります。逆に少し高くても複数ツールで使えるなら、長期的にはそちらのほうが主力に向く場合があります。&lt;/p&gt;
&lt;h2 id=&#34;ヘビーユーザーモデルとツールを固定しない&#34;&gt;ヘビーユーザー：モデルとツールを固定しない
&lt;/h2&gt;&lt;p&gt;ヘビーユーザーにとっての核心は柔軟性です。&lt;/p&gt;
&lt;p&gt;個人やチームが毎日大量に AI Agent を使うようになると、消費量はすぐ大きくなります。コードベース検索、長いコンテキストでの修正、多段のデバッグ、自動テスト修復などは、token 消費を一気に増やします。その状態で単一プランに依存すると、次の 3 つの問題が起きやすくなります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;枠が急に足りなくなる。&lt;/li&gt;
&lt;li&gt;課金ルールが突然変わる。&lt;/li&gt;
&lt;li&gt;あるツールやモデルが一時的に使えなくなる。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;より安定したやり方は、層を分けた構成にすることです。主力 Agent ツールを一つ、差し替え可能なモデル接続先を一つ以上、軽い仕事をさばく低コストモデルを一つ、難しい仕事を担う高性能モデルを一つ、という形です。日常の軽い仕事を全部いちばん高いモデルに投げる必要はありませんし、重要な仕事を最安モデルだけに頼るのも危険です。&lt;/p&gt;
&lt;p&gt;ヘビーユーザーにとっては、「どのツールにもモデルをつなげられる」「どのモデルも別ツールで使える」という柔軟性のほうが、月数十ドルの差額より重要です。本当に高いのはサブスク料金そのものではなく、一つのエコシステムに閉じ込められたあとで、ワークフローを作り直すコストだからです。&lt;/p&gt;
&lt;h2 id=&#34;より安定した組み合わせ方&#34;&gt;より安定した組み合わせ方
&lt;/h2&gt;&lt;p&gt;比較的安定した構成は、次のように考えられます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;軽いタスクは低コストモデルに任せる。コード説明、小さなスクリプト、整形、簡単な文書生成など。&lt;/li&gt;
&lt;li&gt;中程度のタスクはコスパ重視モデルに任せる。通常の機能開発、テスト補完、リファクタリング提案など。&lt;/li&gt;
&lt;li&gt;難しいタスクは強いモデルに任せる。複雑な設計変更、複数ファイルの修正、難しいバグ、長いコンテキスト推論など。&lt;/li&gt;
&lt;li&gt;ツール層は開いておく。API 接続、設定の持ち出し、モデル切り替えができるツールを選ぶ。&lt;/li&gt;
&lt;li&gt;予備ルートを残す。主力プランのルールが変わったときに、別のモデルやツールへすぐ切り替えられるようにする。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これが最安とは限りませんが、変化にはかなり強くなります。AI Coding の価格や枠は今後も変わり続けるはずです。長期的に価値があるのは、短期的にお得に見えるプランそのものではなく、持ち運びできるワークフローです。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;AI Coding のプランは、月額だけで判断すべきではありません。ライトユーザーはシンプルさと使いやすさを優先し、中程度のユーザーは枠、消費量、移行しやすさを見て、ヘビーユーザーはモデルとツールを切り離して単一エコシステムへの依存を避けるべきです。&lt;/p&gt;
&lt;p&gt;覚えておきたいのは、プランもモデルもツールも変わる、ということです。選択権を自分の手元に残しておくことが、長く AI Coding を使ううえで最も重要なコスト管理になります。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
