<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AI Tools on KnightLiブログ</title>
        <link>https://knightli.com/ja/tags/ai-tools/</link>
        <description>Recent content in AI Tools on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Sun, 17 May 2026 17:24:03 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/ai-tools/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>ai-goofish-monitor：AI で閒魚の商品を自動監視するオープンソースシステム</title>
        <link>https://knightli.com/ja/2026/05/17/ai-goofish-monitor/</link>
        <pubDate>Sun, 17 May 2026 17:24:03 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/17/ai-goofish-monitor/</guid>
        <description>&lt;p&gt;ai-goofish-monitor は、Usagi-org が公開している閒魚向けの商品監視システムです。&lt;/p&gt;
&lt;p&gt;目的は明確です。閒魚での検索、絞り込み、商品分析、結果記録、通知を自動化し、大量の中古商品から条件に合うものをより早く見つけることです。プロジェクトは Playwright でページ操作を自動化し、画像入力に対応する AI モデルを接続して商品情報をさらに判断します。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/Usagi-org/ai-goofish-monitor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/Usagi-org/ai-goofish-monitor&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;先に結論&#34;&gt;先に結論
&lt;/h2&gt;&lt;p&gt;ai-goofish-monitor は、単純なキーワード通知スクリプトというより、「閒魚の購入インテリジェンスダッシュボード」に近いです。&lt;/p&gt;
&lt;p&gt;主な特徴は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;タスク、アカウント、AI 判定基準、ログ、結果を管理できる Web 管理画面。&lt;/li&gt;
&lt;li&gt;複数タスクの並行実行。各タスクでキーワード、価格、絞り込み条件、AI Prompt を設定できる。&lt;/li&gt;
&lt;li&gt;Playwright で閒魚ページを取得し、ログイン状態やページ操作が必要な場面に対応しやすい。&lt;/li&gt;
&lt;li&gt;キーワード一致だけでなく、AI で商品が条件に合うか判断する。&lt;/li&gt;
&lt;li&gt;ntfy.sh、企業微信、Bark、Telegram、Webhook などの通知に対応する。&lt;/li&gt;
&lt;li&gt;Cron 定期実行、複数アカウント管理、プロキシローテーション、失敗時リトライ、Docker デプロイに対応する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特定の商品をよく閒魚で探す人、たとえば中古デジタル機器、カメラ機材、GPU、HDD、ゲーム機、楽器、家電、コレクション品を探す人に向いています。ただし「自動で掘り出し物を買うツール」ではありません。閒魚の検索結果は変化し、ログイン状態は失効することがあり、プラットフォームのリスク制御も自動化の安定性に影響します。人間の判断を置き換えるものではなく、補助的なフィルタリングツールとして使うべきです。&lt;/p&gt;
&lt;h2 id=&#34;解決する問題&#34;&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;良い価格の出品は短時間で消える。&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;普通のキーワード通知で解決できるのは一部だけです。たとえば「ThinkPad X1」を検索すると、アクセサリ、壊れた画面、空箱、分解部品が混ざることがあります。「ソニー A7C」では、レンズセット、レンタル情報、釣りタイトル、異常価格に出会うこともあります。&lt;/p&gt;
&lt;p&gt;ai-goofish-monitor の考え方は、まず自動化で候補商品を集め、それを AI に渡して条件に合うか再判断し、最後に注目すべき結果を通知する、というものです。&lt;/p&gt;
&lt;h2 id=&#34;主な機能&#34;&gt;主な機能
&lt;/h2&gt;&lt;p&gt;README に列挙されている機能はかなりそろっています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web 可視化管理：タスク管理、アカウント管理、AI 基準編集、実行ログ、結果閲覧。&lt;/li&gt;
&lt;li&gt;AI 駆動：自然言語でタスクを作成し、マルチモーダルモデルで商品を分析。&lt;/li&gt;
&lt;li&gt;複数タスク並行：タスクごとにキーワード、価格、絞り込み条件、AI Prompt を個別設定。&lt;/li&gt;
&lt;li&gt;高度な絞り込み：送料無料、新規出品時間範囲、省 / 市 / 区の地域フィルタ。&lt;/li&gt;
&lt;li&gt;即時通知：ntfy.sh、企業微信、Bark、Telegram、Webhook など。&lt;/li&gt;
&lt;li&gt;定期実行：Cron による周期タスク。&lt;/li&gt;
&lt;li&gt;アカウントとプロキシのローテーション：複数アカウント、タスクへのアカウント紐付け、プロキシプール、失敗時リトライ。&lt;/li&gt;
&lt;li&gt;Docker デプロイ：コンテナ化された運用。&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;ol&gt;
&lt;li&gt;サービスをデプロイして Web UI を開く。&lt;/li&gt;
&lt;li&gt;閒魚アカウントのログイン状態をインポートする。&lt;/li&gt;
&lt;li&gt;監視タスクを作成する。&lt;/li&gt;
&lt;li&gt;キーワード、価格範囲、地域、新規出品範囲などを設定する。&lt;/li&gt;
&lt;li&gt;判定基準を書く、または AI に生成させる。&lt;/li&gt;
&lt;li&gt;タスクをリアルタイムまたは定期実行する。&lt;/li&gt;
&lt;li&gt;Playwright がページを開き、商品情報を取得する。&lt;/li&gt;
&lt;li&gt;AI がタイトル、説明、画像、Prompt をもとに条件適合を判断する。&lt;/li&gt;
&lt;li&gt;命中結果を SQLite に保存する。&lt;/li&gt;
&lt;li&gt;設定済みの通知チャネルで結果を送る。&lt;/li&gt;
&lt;li&gt;Web UI で結果、ログ、価格履歴を見る。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この流れで AI の価値が最も大きいのは 8 番目です。「状態が良い、価格が妥当、アクセサリだけではない、修理品ではない、できれば同城で手渡し」などの自然言語条件を理解できるため、単純なキーワード規則より柔軟です。&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;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-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/Usagi-org/ai-goofish-monitor &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ai-goofish-monitor
&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;vim .env
&lt;/span&gt;&lt;/span&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 app
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose down
&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;デフォルトの Web UI アドレス：&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:8000
&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;ghcr.io/usagi-org/ai-goofish:latest
&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;イメージ取得が遅い場合、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;docker pull ghcr.nju.edu.cn/usagi-org/ai-goofish:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker tag ghcr.nju.edu.cn/usagi-org/ai-goofish:latest ghcr.io/usagi-org/ai-goofish:latest
&lt;/span&gt;&lt;/span&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Docker イメージには Chromium が含まれているため、ホスト側に別途ブラウザを入れる必要はありません。デフォルトの永続化ディレクトリは次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;data/&lt;/code&gt;：SQLite の主ストレージ。タスク、結果、価格履歴を保存。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;state/&lt;/code&gt;：ログイン状態の cookie ファイル。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompts/&lt;/code&gt;：タスク用プロンプト。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;logs/&lt;/code&gt;：実行ログ。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;images/&lt;/code&gt;：商品画像とタスク一時画像ディレクトリ。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;.env&lt;/code&gt; の &lt;code&gt;SERVER_PORT&lt;/code&gt; を変更した場合は、&lt;code&gt;docker-compose.yaml&lt;/code&gt; のポートマッピングも合わせて変更します。&lt;/p&gt;
&lt;h2 id=&#34;最小構成&#34;&gt;最小構成
&lt;/h2&gt;&lt;p&gt;最小構成は主に AI モデルと Web UI ログインに関するものです。&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-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;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_api_key
&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;OPENAI_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_openai_compatible_base_url
&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;OPENAI_MODEL_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_multimodal_model
&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;WEB_USERNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;admin
&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;WEB_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;change_me
&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 つは AI モデル接続に必須です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;：モデル API Key。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OPENAI_BASE_URL&lt;/code&gt;：OpenAI 互換 API エンドポイント。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OPENAI_MODEL_NAME&lt;/code&gt;：画像入力に対応するモデル名。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;WEB_USERNAME&lt;/code&gt; と &lt;code&gt;WEB_PASSWORD&lt;/code&gt; は Web UI ログイン用です。README ではデフォルト認証情報が &lt;code&gt;admin/admin123&lt;/code&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;code&gt;http://127.0.0.1:8000&lt;/code&gt; を開く。&lt;/li&gt;
&lt;li&gt;Web UI にログインする。&lt;/li&gt;
&lt;li&gt;「閒魚アカウント管理」に入る。&lt;/li&gt;
&lt;li&gt;プロジェクト付属の Chrome 拡張で閒魚ログイン状態 JSON をエクスポートする。&lt;/li&gt;
&lt;li&gt;ログイン状態をシステムに貼り付ける。&lt;/li&gt;
&lt;li&gt;ログイン状態ファイルは &lt;code&gt;state/&lt;/code&gt; に保存される。例：&lt;code&gt;state/acc_1.json&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;「タスク管理」に戻り、タスクを作成してアカウントを紐付ける。&lt;/li&gt;
&lt;li&gt;タスクを実行し、結果を見る。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ここで最も重要なのはログイン状態です。閒魚は第三者が自由に取得できる標準 API を公開しているわけではないため、プロジェクトはブラウザのログイン状態を使って通常のページアクセスを模擬します。ログイン状態の失効、リスク制御、captcha、アカウント異常はいずれもタスク実行に影響します。&lt;/p&gt;
&lt;h2 id=&#34;ai-タスクとキーワードタスク&#34;&gt;AI タスクとキーワードタスク
&lt;/h2&gt;&lt;p&gt;プロジェクトは 2 種類のタスク作成方式をサポートします。&lt;/p&gt;
&lt;p&gt;1 つ目は &lt;code&gt;AI判断&lt;/code&gt; です。&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;同城優先、手渡しできるとなお良い。&lt;/li&gt;
&lt;li&gt;画像にシリアル番号、箱、重要付属品が写っている。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2 つ目は &lt;code&gt;关键词判断&lt;/code&gt; です。&lt;/p&gt;
&lt;p&gt;これは従来のルール型監視に近く、キーワード、価格、地域などの条件で直接タスクを作成します。AI 生成を使いません。ルールが単純で、多少の誤検知を許容できる場面に向いています。&lt;/p&gt;
&lt;p&gt;実際には併用できます。キーワードで初期フィルタし、AI で誤検知を減らす形です。&lt;/p&gt;
&lt;h2 id=&#34;web-ui-でできること&#34;&gt;Web UI でできること
&lt;/h2&gt;&lt;p&gt;Web UI は、このプロジェクトが普通のスクリプトと違う重要な部分です。&lt;/p&gt;
&lt;p&gt;タスク管理ページでは次を設定できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI 作成タスク。&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;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;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;ログイン失効、リスク制御、AI 呼び出し問題の調査。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;システム設定ページでは次ができます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;システム状態の確認。&lt;/li&gt;
&lt;li&gt;Prompt の編集。&lt;/li&gt;
&lt;li&gt;プロキシとローテーション設定の調整。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;長期監視では Web UI が重要です。タスクが増えると、設定、ログ、結果、通知はすぐ管理しにくくなります。&lt;/p&gt;
&lt;h2 id=&#34;データ保存&#34;&gt;データ保存
&lt;/h2&gt;&lt;p&gt;現在のオンライン主ストレージは SQLite で、デフォルトパスは次です。&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;data/app.sqlite3
&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 はデフォルトで SQLite の主 DB を次のようにマウントします。&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;./data:/app/data
&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;アプリ起動時に DB とテーブルを自動作成し、古い &lt;code&gt;config.json&lt;/code&gt;、&lt;code&gt;jsonl/&lt;/code&gt;、&lt;code&gt;price_history/&lt;/code&gt; から一度だけ履歴データをインポートしようとします。&lt;/p&gt;
&lt;p&gt;注意点として、&lt;code&gt;state/&lt;/code&gt;、&lt;code&gt;prompts/&lt;/code&gt;、&lt;code&gt;logs/&lt;/code&gt;、&lt;code&gt;images/&lt;/code&gt; は引き続きファイルシステム上のディレクトリであり、SQLite 内には入りません。商品画像は次のようなディレクトリに一時保存されます。&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;images/task_images_&amp;lt;task_name&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;/p&gt;
&lt;p&gt;この構成は個人または小規模チームに向いています。SQLite は軽量で移行しやすく、ファイルディレクトリにログイン状態、画像、ログが残るため調査もしやすいです。&lt;/p&gt;
&lt;h2 id=&#34;通知チャネル&#34;&gt;通知チャネル
&lt;/h2&gt;&lt;p&gt;プロジェクトは複数の通知チャネルに対応します。よく使う設定は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NTFY_TOPIC_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GOTIFY_URL&lt;/code&gt; / &lt;code&gt;GOTIFY_TOKEN&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BARK_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WX_BOT_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TELEGRAM_BOT_TOKEN&lt;/code&gt; / &lt;code&gt;TELEGRAM_CHAT_ID&lt;/code&gt; / &lt;code&gt;TELEGRAM_API_BASE_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WEBHOOK_*&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通知はこの種のツールの体験の中心です。監視システムが結果をバックエンドに書くだけなら、ユーザーは結局ページを何度も開く必要があります。プッシュ通知があれば、命中商品をすぐ受け取れます。&lt;/p&gt;
&lt;p&gt;実用的には商品価値で通知を分けるとよいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;普通のキーワード命中はバックエンドにだけ記録。&lt;/li&gt;
&lt;li&gt;AI 高信頼度の結果はスマホへ通知。&lt;/li&gt;
&lt;li&gt;高価値商品は企業微信または Telegram へ通知。&lt;/li&gt;
&lt;li&gt;デバッグ中はログを増やし、安定後にノイズを減らす。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;開発者向け実行&#34;&gt;開発者向け実行
&lt;/h2&gt;&lt;p&gt;Docker を使わないローカル開発には次が必要です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;Node.js + npm&lt;/li&gt;
&lt;li&gt;Playwright CLI&lt;/li&gt;
&lt;li&gt;Chromium または Chrome / Edge ブラウザ&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;/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/Usagi-org/ai-goofish-monitor
&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; ai-goofish-monitor
&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;/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;chmod +x start.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./start.sh
&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;start.sh&lt;/code&gt; は Playwright CLI とブラウザ条件を確認し、依存関係のインストール、フロントエンドビルド、成果物コピー、バックエンド起動を行います。&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;python -m src.app
&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;uvicorn src.app:app --host 0.0.0.0 --port &lt;span class=&#34;m&#34;&gt;8000&lt;/span&gt; --reload
&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;/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;nb&#34;&gt;cd&lt;/span&gt; web-ui
&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;npm 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;テストとビルド：&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;&lt;span class=&#34;nv&#34;&gt;PYTEST_DISABLE_PLUGIN_AUTOLOAD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; pytest
&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; web-ui &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
&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;ai-goofish-monitor は次のようなユーザーに向いています。&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;OpenAI 互換モデル API を持ち、AI 判定コストを受け入れられる人。&lt;/li&gt;
&lt;li&gt;Docker または基本的なコマンドラインデプロイに慣れている人。&lt;/li&gt;
&lt;li&gt;命中結果をスマホ、企業微信、Telegram に通知したい人。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あまり向いていないケース：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;デプロイを全く知らず、すぐ使える App だけが欲しい。&lt;/li&gt;
&lt;li&gt;ログイン状態、captcha、アカウントリスク制御を扱いたくない。&lt;/li&gt;
&lt;li&gt;公式認可された強いコンプライアンスのデータ API が必要。&lt;/li&gt;
&lt;li&gt;大規模かつ高頻度にプラットフォームデータを収集したい。&lt;/li&gt;
&lt;li&gt;AI に取引リスクを自動判断させ、注文まで代行してほしい。&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;/p&gt;
&lt;p&gt;閒魚には独自の利用規約、リスク制御、アカウント安全機構があります。自動化アクセスは制限を引き起こす可能性があります。高頻度に取得したり、リスク制御を回避したり、出品者への迷惑行為、プライバシーの一括収集、プラットフォーム秩序の破壊に使ってはいけません。&lt;/p&gt;
&lt;p&gt;第二に、アカウントのログイン状態を保護することです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;state/&lt;/code&gt; に保存されるのはログイン状態 cookie ファイルです。これは実質的にアカウントアクセス資格情報です。Git リポジトリにコミットせず、信頼できないサーバーにも置かないでください。サーバーをインターネットに公開する場合、Web UI のデフォルトパスワードは必ず変更し、VPN、リバースプロキシ認証、または内部ネットワークの背後に置くべきです。&lt;/p&gt;
&lt;p&gt;第三に、AI 判定は事実保証ではありません。&lt;/p&gt;
&lt;p&gt;AI は誤検知を減らせますが、商品の真偽、出品者の信頼性、価格の妥当性、取引安全性を保証しません。最終的には商品詳細、出品者評価、チャット履歴、配送方法、支払いプロセスを人間が確認する必要があります。&lt;/p&gt;
&lt;p&gt;第四に、コストに注意してください。&lt;/p&gt;
&lt;p&gt;すべての候補商品をマルチモーダルモデルで分析すると、呼び出しコストはすぐ増えます。まずキーワード、価格、地域で強く絞り込み、少数の候補だけを AI に渡すのがよいです。&lt;/p&gt;
&lt;p&gt;第五に、プライバシーに注意してください。&lt;/p&gt;
&lt;p&gt;商品スクリーンショット、チャット関連内容、アカウント状態、通知内容には機密情報が含まれる可能性があります。通知 Webhook、ログディレクトリ、データベースは適切に保護してください。&lt;/p&gt;
&lt;h2 id=&#34;普通のスクリプトとの違い&#34;&gt;普通のスクリプトとの違い
&lt;/h2&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;ai-goofish-monitor はさらに進んでいます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web UI でタスクとアカウントを管理する。&lt;/li&gt;
&lt;li&gt;AI Prompt で複雑な購入基準を表現する。&lt;/li&gt;
&lt;li&gt;マルチモーダルモデルで商品画像と説明を見る。&lt;/li&gt;
&lt;li&gt;SQLite に結果と価格履歴を保存する。&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;機能が多いぶん、デプロイと運用コストも高くなります。一般ユーザーには Docker デプロイが最も簡単です。開発者にとっては、Web UI、FastAPI、Playwright、SQLite の構成が二次開発しやすい形です。&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;キーワード：&lt;code&gt;A7C&lt;/code&gt;、&lt;code&gt;索尼 A7C&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;価格範囲：市場価格に基づいて上限を設定&lt;/li&gt;
&lt;li&gt;地域：同じ省または同じ市を優先&lt;/li&gt;
&lt;li&gt;新規出品範囲：直近 1 日または数時間&lt;/li&gt;
&lt;li&gt;AI 基準：レンズ単体を除外、修理品を除外、明らかなアクセサリを除外、シャッター数と状態に注目&lt;/li&gt;
&lt;li&gt;通知：AI 判定を通過した結果だけ通知&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安定して動くようになってから、タスク数を少しずつ増やします。最初から数十キーワード、複数アカウント、高頻度 Cron にしないでください。ログイン状態の安定性、誤検知率、AI コスト、通知ノイズを見てから調整するのが安全です。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;ai-goofish-monitor は、閒魚監視を「キーワードスクリプト」から「管理可能な AI 監視システム」へ進めるプロジェクトです。Playwright でページ操作を自動化し、AI で複雑な判断を行い、Web UI でタスクと結果を管理し、SQLite にデータを保存し、複数通知チャネルで結果を届けます。&lt;/p&gt;
&lt;p&gt;特定商品を監視したい個人や小規模チームに向いています。特に中古デジタル機器、ハードウェア、カメラ機材のように、価格変動が大きく、出品タイミングが重要で、説明ノイズが多いカテゴリに適しています。&lt;/p&gt;
&lt;p&gt;ただし慎重に使う必要があります。ログイン状態を保護し、デフォルトパスワードを変更し、取得頻度を抑え、AI 結果を人間が確認し、プラットフォーム規則とプライバシー境界を守ることが重要です。補助的なフィルタリングツールとしては価値がありますが、完全自動取引システムとして見ると能力を過大評価しやすいです。&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/Usagi-org/ai-goofish-monitor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Usagi-org/ai-goofish-monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Usagi-org/ai-goofish-monitor/blob/master/README_EN.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;プロジェクト英語 README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Usagi-org/ai-goofish-monitor/blob/master/DISCLAIMER.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;プロジェクト免責事項&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>OpenKB：ドキュメントを継続更新される LLM ナレッジベースへコンパイルする</title>
        <link>https://knightli.com/ja/2026/05/17/openkb-llm-knowledge-base/</link>
        <pubDate>Sun, 17 May 2026 17:15:08 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/17/openkb-llm-knowledge-base/</guid>
        <description>&lt;p&gt;OpenKB は、VectifyAI が公開しているオープンソースの LLM ナレッジベースツールです。&lt;/p&gt;
&lt;p&gt;これは、ドキュメントをチャンク化し、ベクトル化し、問い合わせ時にコンテキストを組み直すだけの従来型 RAG システムではありません。OpenKB はまず生のドキュメントを構造化された wiki にコンパイルします。そこには文書要約、概念ページ、相互参照、後続の問い合わせ、lint チェックが含まれます。言い換えると、資料を継続的に整理していくナレッジベース CLI に近い存在です。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/OpenKB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/VectifyAI/OpenKB&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;先に結論&#34;&gt;先に結論
&lt;/h2&gt;&lt;p&gt;OpenKB で注目したい点は 3 つあります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ナレッジベースを専用データベースに閉じ込めず、通常の Markdown ファイルとして出力する。&lt;/li&gt;
&lt;li&gt;PageIndex で長い PDF を処理し、ベクトル DB なしの長文ドキュメント検索を重視している。&lt;/li&gt;
&lt;li&gt;「知識のコンパイル」を重視し、毎回ゼロから検索するのではなく、LLM が要約、概念ページ、相互リンクを生成する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;そのため OpenKB は、論文読解、プロジェクト文書、社内資料、技術仕様、製品調査、個人ナレッジベースのように、資料を長期的に蓄積する場面に向いています。&lt;/p&gt;
&lt;p&gt;一方で万能の代替ではありません。高並行のオンライン Q&amp;amp;A、複雑な権限管理、Web 管理画面、企業向け監査、大規模なマルチテナント機能が必要なら、現時点の OpenKB は完全な企業ナレッジプラットフォームというより、開発者向けツール兼ナレッジベースのプロトタイプに近いです。&lt;/p&gt;
&lt;h2 id=&#34;openkb-とは&#34;&gt;OpenKB とは
&lt;/h2&gt;&lt;p&gt;OpenKB は Open Knowledge Base の略です。&lt;/p&gt;
&lt;p&gt;CLI として動作し、知識庫に入れた原始ドキュメントを変換、整理、要約し、一連の wiki ファイルを生成します。公式 README の説明は明快です。OpenKB は LLM を使って原始ドキュメントを構造化された相互リンク付き wiki スタイルのナレッジベースへコンパイルし、PageIndex によってベクトルレスな長文ドキュメント検索を支援します。&lt;/p&gt;
&lt;p&gt;対応する入力形式は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;Word&lt;/li&gt;
&lt;li&gt;Markdown&lt;/li&gt;
&lt;li&gt;PowerPoint&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;プレーンテキスト&lt;/li&gt;
&lt;li&gt;markitdown で変換できるその他の形式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;生成されたナレッジベースは &lt;code&gt;wiki/&lt;/code&gt; に置かれ、主に次の内容を含みます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.md&lt;/code&gt;：ナレッジベースの概要&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log.md&lt;/code&gt;：操作タイムライン&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;：ナレッジベース構造とメンテナンス方針&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sources/&lt;/code&gt;：変換後の原文&lt;/li&gt;
&lt;li&gt;&lt;code&gt;summaries/&lt;/code&gt;：各ドキュメントの要約&lt;/li&gt;
&lt;li&gt;&lt;code&gt;concepts/&lt;/code&gt;：ドキュメント横断の概念ページ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;explorations/&lt;/code&gt;：保存された問い合わせ結果&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reports/&lt;/code&gt;：lint レポート&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この設計の最大の利点は透明性です。ブラックボックスの検索インターフェイスから答えを受け取るだけでなく、Markdown ファイルを直接開いて知識庫を確認できます。&lt;/p&gt;
&lt;h2 id=&#34;従来型-rag-との違い&#34;&gt;従来型 RAG との違い
&lt;/h2&gt;&lt;p&gt;従来型 RAG の典型的な流れは次のようなものです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ドキュメントをチャンクに分割する。&lt;/li&gt;
&lt;li&gt;embedding を生成する。&lt;/li&gt;
&lt;li&gt;ベクトルデータベースに保存する。&lt;/li&gt;
&lt;li&gt;問い合わせ時に関連チャンクを取得する。&lt;/li&gt;
&lt;li&gt;それらを LLM に渡して回答を生成する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この流れは成熟しており、Q&amp;amp;A システムにも向いています。ただし、知識そのものは本当の意味では蓄積されません。質問のたびに、関連片を探し、コンテキストを組み立て、回答を生成し直すことになります。&lt;/p&gt;
&lt;p&gt;OpenKB の考え方は「先に整理し、それから問う」に近いです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ドキュメントを &lt;code&gt;raw/&lt;/code&gt; に入れる。&lt;/li&gt;
&lt;li&gt;短いドキュメントは markitdown で Markdown に変換する。&lt;/li&gt;
&lt;li&gt;長い PDF は PageIndex でツリーインデックスと要約を生成する。&lt;/li&gt;
&lt;li&gt;LLM が文書要約を生成する。&lt;/li&gt;
&lt;li&gt;LLM が既存の概念ページを読み、ドキュメント横断の概念を作成または更新する。&lt;/li&gt;
&lt;li&gt;ナレッジベースの索引、ログ、相互リンクを更新する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;その結果、新しいドキュメントを 1 つ追加することは、単に検索可能なファイルを 1 つ増やすことではありません。十数個の wiki ページが更新されることもあります。知識は概念ページに書き込まれ、既存資料と接続されます。&lt;/p&gt;
&lt;p&gt;これは人間がナレッジベースを維持する方法に近いです。新しい資料が入ったら、保管するだけではなく、トピックページを更新し、差分を要約し、参照を追加します。&lt;/p&gt;
&lt;h2 id=&#34;pageindex-が解決する問題&#34;&gt;PageIndex が解決する問題
&lt;/h2&gt;&lt;p&gt;長文ドキュメントは、RAG と LLM ナレッジベースにとって常に難所です。&lt;/p&gt;
&lt;p&gt;長い PDF を単純に多数の chunk に分けると、次の問題が起きやすくなります。&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;OpenKB は長い PDF の処理に PageIndex を使います。プロジェクト説明によると、PageIndex は長文ドキュメントに対してツリーインデックスと要約を作成し、LLM が全文を直接読むのではなく、文書ツリー上で推論できるようにします。&lt;/p&gt;
&lt;p&gt;この路線の要点は「ベクトル類似度が最も高い数段落」を探すことではありません。モデルが文書の階層構造を利用して関連内容を見つけられるようにすることです。研究レポート、論文、マニュアル、目論見書、コンプライアンス文書のような長い資料では、この考え方はかなり有効です。&lt;/p&gt;
&lt;p&gt;OpenKB はデフォルトでオープンソース版 PageIndex をローカル実行できます。OCR、複雑な PDF 処理、より高速な構造生成が必要な場合は、&lt;code&gt;PAGEINDEX_API_KEY&lt;/code&gt; を設定して PageIndex Cloud を使うこともできます。&lt;/p&gt;
&lt;h2 id=&#34;インストールとクイックスタート&#34;&gt;インストールとクイックスタート
&lt;/h2&gt;&lt;p&gt;OpenKB は pip で直接インストールできます。&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 openkb
&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;GitHub の最新バージョンを入れることもできます。&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 git+https://github.com/VectifyAI/OpenKB.git
&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;/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/VectifyAI/OpenKB.git
&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; OpenKB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -e .
&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;mkdir my-kb &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; my-kb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb init
&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;openkb add paper.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb add ~/papers/
&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;openkb query &lt;span class=&#34;s2&#34;&gt;&amp;#34;What are the main findings?&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;対話モードに入ります。&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;openkb 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;新しいファイルを自動処理したい場合は watch モードを使います。&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;openkb watch
&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;raw/&lt;/code&gt; にファイルを置くと、OpenKB が自動的に wiki を更新します。&lt;/p&gt;
&lt;h2 id=&#34;llm-設定&#34;&gt;LLM 設定
&lt;/h2&gt;&lt;p&gt;OpenKB は LiteLLM を通じて、OpenAI、Claude、Gemini など複数のモデルプロバイダーに対応します。&lt;/p&gt;
&lt;p&gt;モデルは初期化時に設定できますし、&lt;code&gt;.openkb/config.yaml&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gpt-5.4&lt;/span&gt;&lt;span class=&#34;w&#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;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;en&lt;/span&gt;&lt;span class=&#34;w&#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;pageindex_threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;w&#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;モデル名は LiteLLM の &lt;code&gt;provider/model&lt;/code&gt; 形式に従います。OpenAI モデルでは provider 接頭辞を省略できます。&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gpt-5.4&lt;/span&gt;&lt;span class=&#34;w&#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;Anthropic や Gemini のモデルは通常、次のように書きます。&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;anthropic/claude-sonnet-4-6&lt;/span&gt;&lt;span class=&#34;w&#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;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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gemini/gemini-3.1-pro-preview&lt;/span&gt;&lt;span class=&#34;w&#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 key は &lt;code&gt;.env&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;&lt;span class=&#34;nv&#34;&gt;LLM_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_llm_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;PageIndex Cloud を有効にする場合は、さらに追加します。&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;&lt;span class=&#34;nv&#34;&gt;PAGEINDEX_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_pageindex_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;h2 id=&#34;よく使うコマンド&#34;&gt;よく使うコマンド
&lt;/h2&gt;&lt;p&gt;OpenKB のコマンドは開発者にとって扱いやすいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;openkb init&lt;/code&gt;：新しいナレッジベースを初期化する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb add &amp;lt;file_or_dir&amp;gt;&lt;/code&gt;：ファイルまたはディレクトリを追加する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb remove &amp;lt;doc&amp;gt;&lt;/code&gt;：ドキュメントを削除し、関連する wiki ページ、画像、レジストリ、PageIndex 状態を整理する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb query &amp;quot;question&amp;quot;&lt;/code&gt;：ナレッジベースに対して単発の質問を行う。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb chat&lt;/code&gt;：複数ターンの対話に入る。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb watch&lt;/code&gt;：&lt;code&gt;raw/&lt;/code&gt; を監視し、自動更新する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb lint&lt;/code&gt;：構造と知識の健全性を確認する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb list&lt;/code&gt;：索引済みドキュメントと概念を一覧する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb status&lt;/code&gt;：ナレッジベースの統計を表示する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;openkb chat&lt;/code&gt; は、連続した探索には &lt;code&gt;openkb query&lt;/code&gt; より向いています。セッションの再開、一覧、削除に対応し、チャット内では &lt;code&gt;/status&lt;/code&gt;、&lt;code&gt;/list&lt;/code&gt;、&lt;code&gt;/add &amp;lt;path&amp;gt;&lt;/code&gt;、&lt;code&gt;/save&lt;/code&gt;、&lt;code&gt;/lint&lt;/code&gt; のような slash commands も使えます。&lt;/p&gt;
&lt;h2 id=&#34;markdown-wiki-が重要な理由&#34;&gt;Markdown wiki が重要な理由
&lt;/h2&gt;&lt;p&gt;多くのナレッジベースツールで厄介なのは移行コストです。&lt;/p&gt;
&lt;p&gt;資料が専用データベース、専用インデックス、専用フォーマットに入ると、直接確認、編集、バックアップ、移行するのが難しくなります。OpenKB は結果を通常の Markdown として書き出すため、既存ツールと自然に組み合わせられます。&lt;/p&gt;
&lt;p&gt;最も直接的な使い方は、Obsidian で &lt;code&gt;wiki/&lt;/code&gt; を開くことです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要約ページをそのまま読める。&lt;/li&gt;
&lt;li&gt;概念ページを &lt;code&gt;[[wikilinks]]&lt;/code&gt; で相互接続できる。&lt;/li&gt;
&lt;li&gt;グラフビューで知識間の関係を確認できる。&lt;/li&gt;
&lt;li&gt;問い合わせ結果を &lt;code&gt;explorations/&lt;/code&gt; に保存できる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; でナレッジベースの維持方法を定義できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これにより OpenKB は単なる Q&amp;amp;A ツールではなく、個人やチームの知識整理パイプラインにもなります。&lt;/p&gt;
&lt;h2 id=&#34;向いている場面&#34;&gt;向いている場面
&lt;/h2&gt;&lt;p&gt;OpenKB は特に次の場面に向いています。&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;個人 Obsidian ナレッジベースの自動メンテナンス。&lt;/li&gt;
&lt;li&gt;長い PDF、PPT、Word、Web 資料の構造化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;大量のドキュメントに向き合うとき、単に「一問一答」したいだけでなく、資料を徐々に閲覧可能、再利用可能、追跡可能な知識庫にしたいなら、OpenKB の方向性は合っています。&lt;/p&gt;
&lt;h2 id=&#34;使うときの注意点&#34;&gt;使うときの注意点
&lt;/h2&gt;&lt;p&gt;第一に、OpenKB は LLM の品質に依存します。&lt;/p&gt;
&lt;p&gt;要約、概念ページ、相互リンクはモデルによって生成されます。モデルが強いほど知識コンパイルの品質は安定します。モデル能力が不足していると、概念抽出、矛盾検出、ドキュメント横断の統合は弱くなります。&lt;/p&gt;
&lt;p&gt;第二に、コストは先に見積もるべきです。&lt;/p&gt;
&lt;p&gt;大量の長文ドキュメントを一度に投入すると、LLM 呼び出しコストは低くありません。まず小規模な資料セットで試し、出力構造と品質を確認してから範囲を広げるのがよいです。&lt;/p&gt;
&lt;p&gt;第三に、生成された wiki には人間の確認が必要です。&lt;/p&gt;
&lt;p&gt;OpenKB は資料を整理できますが、事実の完全な正確性を自動保証するものではありません。重要な知識庫では、要約、概念ページ、引用関係を人間が確認する必要があります。&lt;/p&gt;
&lt;p&gt;第四に、機密資料には慎重に扱う必要があります。&lt;/p&gt;
&lt;p&gt;クラウド LLM や PageIndex Cloud を使う場合、文書内のプライバシー、営業秘密、コンプライアンス要件に注意してください。社内資料では、モデルプロバイダー、データ保持方針、アクセス境界を先に確認するのが安全です。&lt;/p&gt;
&lt;p&gt;第五に、現時点では CLI ツール寄りです。&lt;/p&gt;
&lt;p&gt;ロードマップでは Web UI、データベースストレージ、大規模コレクション対応、階層型概念インデックスが挙げられています。ただし現在の段階では、チームメンバーがコマンドラインに慣れていない場合、導入のハードルはまだあります。&lt;/p&gt;
&lt;h2 id=&#34;obsidiannotebooklm企業-rag-との関係&#34;&gt;Obsidian、NotebookLM、企業 RAG との関係
&lt;/h2&gt;&lt;p&gt;OpenKB と Obsidian の関係は、「自動整理レイヤー」と「閲覧・編集レイヤー」と考えると分かりやすいです。&lt;/p&gt;
&lt;p&gt;Obsidian は人間が書き、直し、閲覧し、リンクを作るのに向いています。OpenKB は原始ドキュメントを Obsidian に入れられる wiki へまとめるのに向いています。&lt;/p&gt;
&lt;p&gt;OpenKB と NotebookLM の違いは、「ローカルで制御しやすいこと」と「開かれたファイル形式」にあります。&lt;/p&gt;
&lt;p&gt;NotebookLM は資料を入れてすぐ質問や要約を行う体験に優れています。OpenKB は、整理結果をローカルディレクトリに残し、Markdown として継続的に管理したい開発者に向いています。&lt;/p&gt;
&lt;p&gt;OpenKB と企業 RAG の関係は、置き換えではなく補完です。&lt;/p&gt;
&lt;p&gt;企業 RAG は権限、監査、サービス化、アクセス分離、監視、安定したスループットを重視します。OpenKB は、読みやすく編集しやすく長期的に蓄積できる知識レイヤーを作るのに向いています。将来的にオンライン Q&amp;amp;A を作る場合でも、OpenKB が生成した wiki は高品質なコーパスとして使えます。&lt;/p&gt;
&lt;h2 id=&#34;おすすめのワークフロー&#34;&gt;おすすめのワークフロー
&lt;/h2&gt;&lt;p&gt;OpenKB を試すなら、次の順番がよいです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;テスト用のナレッジベースディレクトリを作る。&lt;/li&gt;
&lt;li&gt;同じテーマのドキュメントを 3 から 5 件入れる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb add&lt;/code&gt; を実行する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wiki/&lt;/code&gt; を開いて要約と概念ページを確認する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb query&lt;/code&gt; で具体的な質問をいくつか試す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb lint&lt;/code&gt; でナレッジベースの健全性を確認する。&lt;/li&gt;
&lt;li&gt;Obsidian で &lt;code&gt;wiki/&lt;/code&gt; を開き、リンクグラフが意味を持つか見る。&lt;/li&gt;
&lt;li&gt;品質を確認してから、より大きなドキュメント集合を取り込む。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最初から数百ファイルを一気に投入しないほうがよいです。まず自分の資料タイプをうまく理解できるか、特に表、画像、長い PDF、複数文書の概念統合を確認しましょう。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;OpenKB の価値は、LLM ナレッジベースを「問い合わせ時に一時的にコンテキストを組む」段階から一歩前に進めることです。まず資料を wiki として整理し、その wiki 上で質問、チャット、検査、継続的なメンテナンスを行います。&lt;/p&gt;
&lt;p&gt;この方向性はすべての Q&amp;amp;A システムに合うわけではありませんが、長期的な蓄積が必要な知識作業には向いています。Markdown ファイル、Obsidian 互換、PageIndex による長文処理、複数モデル対応、CLI ワークフローを組み合わせると、開発者や調査型ユーザーにとって実用的なナレッジベースツールになります。&lt;/p&gt;
&lt;p&gt;大量の PDF、レポート、Web ページ、論文、プロジェクト文書を持っているなら、OpenKB は試す価値があります。成熟した企業ナレッジベースをすぐ置き換えるものではないかもしれませんが、資料整理の入口としては実用的です。まずドキュメントを読める、リンクできる、追跡できる知識に変え、その上で LLM を働かせることができます。&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/VectifyAI/OpenKB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VectifyAI/OpenKB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openkb.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenKB プロジェクトページ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://pageindex.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PageIndex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/markitdown&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;markitdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.litellm.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LiteLLM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Claude を Fusion 360 に接続する：AI で STEP モデルを修正する実例</title>
        <link>https://knightli.com/ja/2026/05/14/claude-fusion-360-mcp-step-model-edit/</link>
        <pubDate>Thu, 14 May 2026 20:58:04 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/14/claude-fusion-360-mcp-step-model-edit/</guid>
        <description>&lt;p&gt;Claude を Fusion 360 に接続すると、単に「考え方を説明する」だけでなく、CAD モデルの修正に直接参加できる。典型的な流れは、既存の STEP ファイルを開き、Claude に現在のモデルを読ませ、構造上の干渉を分析させ、寸法を計画させたうえで、Fusion プラグイン経由でモデリング変更を実行することだ。&lt;/p&gt;
&lt;p&gt;ここでは、遊星ギア分度器の修正を例に、Claude + Fusion 360 の基本的な使い方を整理する。&lt;/p&gt;
&lt;h2 id=&#34;まず-fusion-360-の-apimcp-サービスを有効にする&#34;&gt;まず Fusion 360 の API/MCP サービスを有効にする
&lt;/h2&gt;&lt;p&gt;Fusion 360 で最初に基本設定を行う。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;右上の &lt;code&gt;Preferences&lt;/code&gt; を開く。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;General&lt;/code&gt; または「通用」設定に入る。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;API&lt;/code&gt; オプションを見つける。&lt;/li&gt;
&lt;li&gt;MCP server を有効にする。&lt;/li&gt;
&lt;li&gt;ポート番号を控える。デフォルト例は &lt;code&gt;27182&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;次に Claude に戻り、&lt;code&gt;Connectors&lt;/code&gt; に入り、Fusion コネクタを見つけて、Fusion 360 のアドレスとポートを入力する。通常はデフォルトの &lt;code&gt;27182&lt;/code&gt; でよい。&lt;/p&gt;
&lt;p&gt;接続に成功すると、Claude は Fusion プラグインを通じて、現在開いているモデルとやり取りできる。&lt;/p&gt;
&lt;h2 id=&#34;step-ファイルを開き修正目標を明確にする&#34;&gt;STEP ファイルを開き、修正目標を明確にする
&lt;/h2&gt;&lt;p&gt;今回修正するのは、遊星ギア分度器の中の一つのギアだ。元の設計では、このギアは一本のねじを中心軸としてブラケットに固定されている。&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;最終モデルはスライサーに読み込め、3D プリントに使えるようにする。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;重要なのは、Claude に「ちょっと直して」とだけ言わないことだ。用途、組み立て方法、材料、製造方法をはっきり伝える必要がある。&lt;/p&gt;
&lt;h2 id=&#34;claude-はスクリーンショットで現在のモデルを理解できる&#34;&gt;Claude はスクリーンショットで現在のモデルを理解できる
&lt;/h2&gt;&lt;p&gt;Fusion プラグインはコマンドを実行するだけで、Claude にモデルを見せられないのではないか、と心配する人もいる。実際のテストでは、Claude はスクリーンショットを通じて現在のモデル状態を認識できた。&lt;/p&gt;
&lt;p&gt;このケースでは、Claude はギア構造を確認し、次のような作業を行えた。&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;このステップは重要だ。Claude が文字の指示だけで盲目的に修正しているのではなく、現在のモデルビューと構造判断を組み合わせられることを示している。&lt;/p&gt;
&lt;h2 id=&#34;材料と加工方法は事前に伝える&#34;&gt;材料と加工方法は事前に伝える
&lt;/h2&gt;&lt;p&gt;最終的に 3D プリントするモデルなら、材料と工法を明確に Claude に伝える必要がある。&lt;/p&gt;
&lt;p&gt;たとえば PLA でプリントする場合、ベアリング穴を CNC 金属加工の公差そのままで設計してはいけない。直径 6mm のベアリングを圧入するなら、穴径を約 &lt;code&gt;6.1mm&lt;/code&gt; にすることを検討できる。この寸法が適切かどうかは、プリンター精度、材料収縮、スライサー設定、実際のテストによって調整する必要がある。&lt;/p&gt;
&lt;p&gt;材料を伝えないと、Claude は CNC 加工の考え方で寸法を出す可能性がある。その場合、3D プリントでは穴が小さすぎ、後の組み立てが難しくなる。&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;このモデルは FDM 3D プリント用で、材料は PLA です。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;目標は直径 6mm のベアリングを取り付けることで、プリント公差と圧入を考慮してください。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CNC 金属加工の公差として扱わないでください。
&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;claude-にギア構造を修正させる&#34;&gt;Claude にギア構造を修正させる
&lt;/h2&gt;&lt;p&gt;目標が明確になったら、Claude に具体的な修正を実行させる。&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;このケースでは、Claude はまず計画を出し、その後 Fusion 360 を呼び出してモデリング操作を行った。たとえば、元のねじ穴と中心穴が衝突すると判断した後、穴位置を少し外側へ移動し、ベアリング取り付け空間を壊さないようにした。&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;面取りが組み立てに影響しないか；&lt;/li&gt;
&lt;li&gt;オーバーハング、薄肉、スライス上のリスクがないか。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ブラケットも一緒に修正する&#34;&gt;ブラケットも一緒に修正する
&lt;/h2&gt;&lt;p&gt;ギアだけを変更しても足りない。元のブラケットにはタッピングねじ用の取り付け穴がある。ギア中心をベアリングに変更するなら、ブラケット側もベアリング軸構造へ合わせる必要がある。&lt;/p&gt;
&lt;p&gt;Claude にブラケットにも同様の修正をさせられる。&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;CAD 修正が終わったら、実際の製造フローに進む必要がある。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fusion 360 から修正後のモデルをエクスポートする。&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;/ol&gt;
&lt;p&gt;AI が修正した CAD 結果は、画面上のモデルがきれいかどうかだけで判断してはいけない。必ずプリントして検証する必要がある。特にベアリング、穴位置、スナップ、ギアのような機械構造では、0.1mm レベルの誤差が、組み立てられるか、滑らかに回るかを決める。&lt;/p&gt;
&lt;h2 id=&#34;使用上の提案&#34;&gt;使用上の提案
&lt;/h2&gt;&lt;p&gt;Claude + Fusion 360 は次のようなタスクに向いている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;既存 STEP モデルへの局所的な改造；&lt;/li&gt;
&lt;li&gt;穴位置、面取り、ブラケット、取り付け座の調整；&lt;/li&gt;
&lt;li&gt;ねじ固定をベアリング、スナップ、ピン構造へ変更する；&lt;/li&gt;
&lt;li&gt;3D プリントモデルの公差補正；&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;Claude が構造を分析し、修正案を出す。&lt;/li&gt;
&lt;li&gt;Claude が Fusion を呼び出してモデリングを実行する。&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;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Claude を Fusion 360 に接続する価値は、CAD の基礎知識を置き換えることではない。「既存モデルの局所修正」を速くすることにある。&lt;/p&gt;
&lt;p&gt;目標、材料、寸法、公差、組み立て方法を明確に伝えれば、モデルを読み、干渉を見つけ、構造を修正し、面取りを追加し、プリント可能な状態へ進める手助けができる。3D プリント、オープンソース機械部品の改造、個人工房での小ロット試作において、この AI CAD ワークフローはすでに実用的だ。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Codex は中国系 LLM とどう接続する？CCX で OpenAI 互換 API を一元管理する</title>
        <link>https://knightli.com/ja/2026/05/13/ccx-ai-api-proxy-gateway/</link>
        <pubDate>Wed, 13 May 2026 23:20:40 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/13/ccx-ai-api-proxy-gateway/</guid>
        <description>&lt;p&gt;CCX は AI API プロキシ兼プロトコル変換ゲートウェイです。Claude Messages、OpenAI Chat Completions、OpenAI Images、Codex Responses、Gemini API を 1 つのサービス入口にまとめ、チャネル、キー、モデルマッピング、優先度、フェイルオーバー、トラフィック監視を設定する Web 管理画面も提供します。&lt;/p&gt;
&lt;p&gt;Claude、OpenAI、Gemini、Codex を同時に使っている場合や、OpenAI API 互換の上流サービスを複数維持している場合、CCX の価値は入口と管理の一元化にあります。クライアントは 1 つのサービスアドレスへ接続し、後続の上流チャネルは CCX が選択します。&lt;/p&gt;
&lt;p&gt;プロジェクト：&lt;a class=&#34;link&#34; href=&#34;https://github.com/BenedictKing/ccx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/BenedictKing/ccx&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;ccx-が解決すること&#34;&gt;CCX が解決すること
&lt;/h2&gt;&lt;p&gt;複数の AI API を混在させると、次の問題が起きやすくなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プロバイダーごとにパス、認証方式、リクエスト形式が異なる。&lt;/li&gt;
&lt;li&gt;同じ種類のモデルでも複数の上流があり、base URL や API key を手動で切り替える必要がある。&lt;/li&gt;
&lt;li&gt;ある key やチャネルが失敗したとき、クライアント側では自動でバックアップへ切り替わらないことが多い。&lt;/li&gt;
&lt;li&gt;チーム利用では、モデル許可リスト、プロキシ、カスタムヘッダー、呼び出しログの集中管理が難しい。&lt;/li&gt;
&lt;li&gt;Claude、Gemini、OpenAI Chat、画像 API、Codex Responses を同時に扱うと設定が散らばる。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CCX はこれらの差異をプロキシ層へ集約します。フロントエンドツール、スクリプト、業務サービスは CCX だけにアクセスし、CCX が API 種別、モデル、チャネル状態、優先度、ヘルス状態に基づいて適切な上流へ転送します。&lt;/p&gt;
&lt;h2 id=&#34;対応エンドポイント&#34;&gt;対応エンドポイント
&lt;/h2&gt;&lt;p&gt;CCX は統一されたバックエンド入口を提供します。デフォルトポートは &lt;code&gt;3000&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;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&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  /                         -&amp;gt; Web 管理画面
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GET  /health                   -&amp;gt; ヘルスチェック
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/api/*                         -&amp;gt; 管理 API
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/messages              -&amp;gt; Claude Messages プロキシ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/chat/completions      -&amp;gt; OpenAI Chat プロキシ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/responses             -&amp;gt; Codex Responses プロキシ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/images/generations    -&amp;gt; OpenAI Images 生成
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/images/edits          -&amp;gt; OpenAI Images 編集
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/images/variations     -&amp;gt; OpenAI Images バリエーション
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GET  /v1/models                -&amp;gt; モデル一覧
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1beta/models/*          -&amp;gt; Gemini プロキシ
&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;つまり、1 種類のプロトコルだけをプロキシするのではなく、Messages、Chat、Responses、Gemini、Images というよく使われる AI API 種別を個別のチャネルとして管理します。プロトコルごとにヘルス状態やログ空間が分かれるため、トラブルシュートしやすくなります。&lt;/p&gt;
&lt;h2 id=&#34;アーキテクチャの考え方&#34;&gt;アーキテクチャの考え方
&lt;/h2&gt;&lt;p&gt;CCX は Go バックエンドと Vue 3 フロントエンドで構成されています。フロントエンドのビルド成果物はバックエンドバイナリに埋め込まれるため、単一ポートでデプロイできます。同じサービスが Web UI、管理 API、プロキシ API を提供します。&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;Client -&amp;gt; Auth Middleware -&amp;gt; Route Handler -&amp;gt; Channel Scheduler -&amp;gt; Provider / Converter -&amp;gt; Upstream API -&amp;gt; Metrics / Channel Logs -&amp;gt; Client Response
&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;handlers&lt;/code&gt;: 各プロトコルのリクエストと管理操作を受け付ける。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;providers&lt;/code&gt;: 上流 API のリクエストとレスポンス処理をラップする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;converters&lt;/code&gt;: Responses などの場面でプロトコル変換を行う。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scheduler&lt;/code&gt;: 優先度、プロモーション期間、ヘルス状態、サーキットブレーカー状態、セッション親和性に基づいてチャネルを選ぶ。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;metrics&lt;/code&gt;: リクエスト数、成功率、遅延、ログ、サーキットブレーカー状態を記録する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config&lt;/code&gt;: ランタイム設定を管理し、ホットリロードとバックアップをサポートする。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この設計の要点は、すべての API を無理に 1 つの形式へ変換することではありません。プロトコル種別ごとに代理し、管理、スケジューリング、ログ、認証を統一することです。&lt;/p&gt;
&lt;h2 id=&#34;ccx-と-codexbridge-の違い&#34;&gt;CCX と CodexBridge の違い
&lt;/h2&gt;&lt;p&gt;CCX と CodexBridge はどちらも Codex と OpenAI 互換 API に関係しますが、解決する問題が違います。&lt;/p&gt;
&lt;p&gt;CodexBridge は専用の Codex ブリッジに近いツールです。目的は Codex CLI/SDK を OpenAI 互換の &lt;code&gt;/v1/chat/completions&lt;/code&gt; サービスとして公開し、OpenWebUI、Cherry Studio、スクリプト、その他の OpenAI 互換クライアントからローカル Codex を呼び出せるようにすることです。つまり、CodexBridge の焦点は「Codex を外へ出す」ことです。&lt;/p&gt;
&lt;p&gt;CCX は統一 AI API ゲートウェイに近いツールです。Codex Responses だけでなく、Claude Messages、OpenAI Chat、OpenAI Images、Gemini API も扱い、Web 管理画面、チャネル優先度、フェイルオーバー、ログ監視、複数 key 管理を提供します。つまり、CCX の焦点は「複数のモデルとプロバイダーをまとめて管理する」ことです。&lt;/p&gt;
&lt;p&gt;簡単な比較：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;項目&lt;/th&gt;
          &lt;th&gt;CodexBridge&lt;/th&gt;
          &lt;th&gt;CCX&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;中心的な位置づけ&lt;/td&gt;
          &lt;td&gt;Codex ローカルブリッジ&lt;/td&gt;
          &lt;td&gt;マルチプロトコル AI API ゲートウェイ&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;主な目的&lt;/td&gt;
          &lt;td&gt;Codex を OpenAI 互換エンドポイントにする&lt;/td&gt;
          &lt;td&gt;Claude、OpenAI、Gemini、Codex などのチャネルを一元管理する&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;管理画面&lt;/td&gt;
          &lt;td&gt;API サービス自体が中心&lt;/td&gt;
          &lt;td&gt;Web 管理画面を提供&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;チーム、多数の key、複数プロバイダー、複数プロトコル&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Codex を OpenWebUI や Cherry Studio に接続したいだけなら CodexBridge のほうが直接的です。Codex、Claude、Gemini、DeepSeek、Qwen、Kimi など複数の上流をまとめて管理したいなら CCX が向いています。&lt;/p&gt;
&lt;h2 id=&#34;クイックデプロイ&#34;&gt;クイックデプロイ
&lt;/h2&gt;&lt;p&gt;最も簡単なのはバイナリをダウンロードする方法です。ダウンロード後、同じディレクトリに &lt;code&gt;.env&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-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;PROXY_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your-proxy-access-key
&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;PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3000&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;ENABLE_WEB_UI&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;APP_UI_LANGUAGE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh-CN
&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;http://localhost:3000
&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 で WSL、Docker、PowerShell などから &lt;code&gt;localhost&lt;/code&gt; に接続できない場合は、Windows ホストの LAN IPv4 アドレスを使います。例：&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://192.168.1.23:3000
&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;CCX はデフォルトで &lt;code&gt;:PORT&lt;/code&gt; により全ネットワークインターフェースを待ち受けるため、LAN に公開する場合はアクセス制御に注意してください。&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;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;/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 run -d &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;  --name ccx &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;  -p 3000:3000 &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;  -e &lt;span class=&#34;nv&#34;&gt;PROXY_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your-proxy-access-key &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;  -e &lt;span class=&#34;nv&#34;&gt;APP_UI_LANGUAGE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh-CN &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;  -v &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/.config:/app/.config &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;  crpi-i19l8zl0ugidq97v.cn-hangzhou.personal.cr.aliyuncs.com/bene/ccx:latest
&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;docker-compose.yml&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;docker compose up -d
&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;自動更新が必要なら Watchtower 設定を重ねます：&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;docker compose -f docker-compose.yml -f docker-compose.watchtower.yml up -d
&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&lt;/code&gt; ディレクトリにはランタイム設定と永続データが保存されます。コンテナ再作成時に設定を失わないよう、ホストへマウントするのがおすすめです。&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;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;git clone https://github.com/BenedictKing/ccx
&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; ccx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp backend-go/.env.example backend-go/.env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make run
&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make run
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make frontend-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;フロントエンドのみの開発：&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;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; frontend
&lt;/span&gt;&lt;/span&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;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;バックエンドのみの開発：&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;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; backend-go
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make 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;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;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;/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;3000&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;ENV&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;production
&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;ENABLE_WEB_UI&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PROXY_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your-proxy-access-key
&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;ADMIN_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your-admin-secret-key
&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;APP_UI_LANGUAGE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh-CN
&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;LOG_LEVEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;info
&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;REQUEST_TIMEOUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300000&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;PROXY_ACCESS_KEY&lt;/code&gt; はプロキシ API 用で、必ず変更します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ADMIN_ACCESS_KEY&lt;/code&gt; は Web 管理画面と &lt;code&gt;/api/*&lt;/code&gt; 用で、プロキシ用キーとは分けるべきです。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ENABLE_WEB_UI&lt;/code&gt; は管理画面の有効化を制御します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REQUEST_TIMEOUT&lt;/code&gt; はリクエストタイムアウトです。長文コンテキストや画像タスクでは増やせます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LOG_LEVEL&lt;/code&gt; はログレベルです。本番環境では通常 &lt;code&gt;info&lt;/code&gt; または &lt;code&gt;warn&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;MAX_REQUEST_BODY_SIZE_MB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;50&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;/p&gt;
&lt;h2 id=&#34;チャネル編成とフェイルオーバー&#34;&gt;チャネル編成とフェイルオーバー
&lt;/h2&gt;&lt;p&gt;CCX の管理画面では複数チャネルを設定でき、各チャネルに次のような項目を指定できます：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上流サービス種別。&lt;/li&gt;
&lt;li&gt;API key または複数 key のローテーション。&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;スケジューリングでは、チャネル状態、優先度、プロモーション期間、Trace 親和性、サーキットブレーカー状態、利用可能な key を総合的に考慮します。簡単に言うと：&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;Trace 親和性により、同種のセッションをなるべく適切なチャネルに維持する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは複数 key、複数プロバイダー、複数地域の上流がある場合に便利です。個人の軽量利用なら、1 つのチャネルだけを設定して Web UI 付きプロキシ層として使うこともできます。&lt;/p&gt;
&lt;h2 id=&#34;ログと監視&#34;&gt;ログと監視
&lt;/h2&gt;&lt;p&gt;CCX はチャネル指標とリクエストログを提供します。確認できるもの：&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;本番環境では控えめなログ設定がよいです：&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;ENV&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;production
&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;LOG_LEVEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;info
&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;ENABLE_REQUEST_LOGS&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ENABLE_RESPONSE_LOGS&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;これにより基本的なリクエスト情報を残しつつ、完全なレスポンス内容をログに書かないようにできます。調査時には一時的に詳細ログを有効化できますが、終わったら戻すべきです。特に本番でリクエスト本文とレスポンス本文を長期出力し続けるのは避けます。&lt;/p&gt;
&lt;h2 id=&#34;セキュリティ上の注意&#34;&gt;セキュリティ上の注意
&lt;/h2&gt;&lt;p&gt;CCX はプロキシゲートウェイであり、上流 API key を保存します。したがって「動けばよい」だけで終わらせるべきではありません。少なくとも：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;デフォルトまたは短すぎる &lt;code&gt;PROXY_ACCESS_KEY&lt;/code&gt; を使わない。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ADMIN_ACCESS_KEY&lt;/code&gt; を別に設定する。&lt;/li&gt;
&lt;li&gt;Web 管理画面を直接インターネットへ公開しない。&lt;/li&gt;
&lt;li&gt;公開が必要な場合は、リバースプロキシ、VPN、アクセス制御、SSO の後ろに置く。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.env&lt;/code&gt;、&lt;code&gt;.config&lt;/code&gt;、ログファイルを Git にコミットしない。&lt;/li&gt;
&lt;li&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;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;&lt;span class=&#34;nv&#34;&gt;PROXY_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;openssl rand -base64 32&lt;span class=&#34;k&#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;ADMIN_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;openssl rand -base64 32&lt;span class=&#34;k&#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;h2 id=&#34;向いている人&#34;&gt;向いている人
&lt;/h2&gt;&lt;p&gt;CCX は次のような場面に向いています：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude、OpenAI、Gemini、Codex、画像 API を同時に維持している。&lt;/li&gt;
&lt;li&gt;複数の API key があり、ローテーション、分流、フェイルオーバーが必要。&lt;/li&gt;
&lt;li&gt;設定ファイルを手で編集するのではなく Web UI で上流チャネルを管理したい。&lt;/li&gt;
&lt;li&gt;各チャネルの成功率、遅延、リクエストログを観察したい。&lt;/li&gt;
&lt;li&gt;チームへ統一された AI API 入口を提供したい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;自分のマシンで単一モデルをたまに呼ぶだけなら、公式 SDK や単一の OpenAI 互換プロキシのほうが簡単です。CCX の強みは、複数チャネル、複数プロトコル、統一運用にあります。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;CCX は AI API ゲートウェイであり、特定モデルのクライアントではありません。Claude Messages、OpenAI Chat、OpenAI Images、Codex Responses、Gemini を 1 つのプロキシ層にまとめ、チャネル編成、フェイルオーバー、ログ監視、Web 管理画面を提供します。&lt;/p&gt;
&lt;p&gt;個人利用では API アドレスやキーの切り替えを減らせます。チームや長期運用サービスでは、軽量な 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/BenedictKing/ccx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/BenedictKing/ccx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;アーキテクチャ説明：&lt;a class=&#34;link&#34; href=&#34;https://github.com/BenedictKing/ccx/blob/main/ARCHITECTURE.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/BenedictKing/ccx/blob/main/ARCHITECTURE.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;環境変数説明：&lt;a class=&#34;link&#34; href=&#34;https://github.com/BenedictKing/ccx/blob/main/ENVIRONMENT.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/BenedictKing/ccx/blob/main/ENVIRONMENT.md&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>2026年の組み込み開発環境はどう選ぶべきか: Keil、STM32CubeIDE、VS Code、そして AI 協調</title>
        <link>https://knightli.com/ja/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/</link>
        <pubDate>Wed, 22 Apr 2026 23:05:00 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/</guid>
        <description>&lt;p&gt;マイコンや組み込み開発を続けていると、すぐにひとつの現実的な問いにぶつかります。2026 年になり、AI によるコーディング支援がかなり一般化してきた今、開発環境は結局どう選ぶのがよいのか、という問いです。&lt;/p&gt;
&lt;p&gt;表面的にはこれは IDE 同士の比較に見えます。しかし実際に問われているのは別のことです。つまり、単に「プロジェクトを動かせる道具」が欲しいのか、それとも「既存エコシステム、コーディング体験、AI 協調」を両立できるワークフローが欲しいのか、ということです。&lt;/p&gt;
&lt;p&gt;その観点で見ると、答えは &lt;code&gt;Keil&lt;/code&gt;、&lt;code&gt;STM32CubeIDE&lt;/code&gt;、&lt;code&gt;VS Code&lt;/code&gt;、&lt;code&gt;CLion&lt;/code&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;&lt;code&gt;Keil&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;STM32CubeIDE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VS Code&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLion&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;さらに遡れば &lt;code&gt;IAR&lt;/code&gt; を挙げる人もいます。ただ、今の議論で重要なのは「誰が一番古くからあるか」ではなく、「今の開発現実に誰が一番合っているか」です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/embedded-ide-comparison.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;組み込み開発環境の比較図&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;keil-エコシステムは強いが編集体験は明らかに古い&#34;&gt;Keil: エコシステムは強いが、編集体験は明らかに古い
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Keil&lt;/code&gt; は今でも避けて通りにくい存在です。理由は単純で、とにかく使われているからです。&lt;/p&gt;
&lt;p&gt;会社に残っている古いプロジェクト、オンライン上の教材、サンプルコード、共有されている既存資産の多くが、今でも &lt;code&gt;Keil&lt;/code&gt; を中心に組まれています。ビルド、書き込み、デバッグという一連の流れも依然として成熟しており、とにかく基板を動かすことが最優先なら、非常に短い道筋で済みます。&lt;/p&gt;
&lt;p&gt;その一方で、弱点もかなりはっきりしています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UI が古い&lt;/li&gt;
&lt;li&gt;編集体験が平凡&lt;/li&gt;
&lt;li&gt;AI 支援コーディングの主戦場にはなりにくい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり &lt;code&gt;Keil&lt;/code&gt; は、「プロジェクトの入口とデバッグ基盤」としては強いものの、2026 年の編集体験を担う理想的な環境とは言いにくいです。&lt;/p&gt;
&lt;h2 id=&#34;stm32cubeide-stm32-には親切だがどちらかといえば学習と立ち上げ向き&#34;&gt;STM32CubeIDE: STM32 には親切だが、どちらかといえば学習と立ち上げ向き
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;STM32&lt;/code&gt; のエコシステムを主に使っているなら、&lt;code&gt;STM32CubeIDE&lt;/code&gt; は最初に触れる環境になりやすいです。&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;/ul&gt;
&lt;p&gt;学生や初心者、立ち上げフェーズのプロジェクトには十分に直感的です。&lt;/p&gt;
&lt;p&gt;ただし、長期運用、チーム協業、より複雑なワークフローに入っていくと、徐々に限界が見えてきます。特に商用プロジェクトや重めのチーム開発では、必ずしも最も快適な主環境ではありません。&lt;/p&gt;
&lt;p&gt;そのため、これは「すばやく始めるための環境」であって、長期的な主力エディタとは限りません。&lt;/p&gt;
&lt;h2 id=&#34;vs-code-厳密には-ide-ではないがai-時代では優位性が増している&#34;&gt;VS Code: 厳密には IDE ではないが、AI 時代では優位性が増している
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;VS Code&lt;/code&gt; は厳密には従来型の IDE ではなく、拡張可能なコードエディタです。&lt;/p&gt;
&lt;p&gt;だからこそ、最初から二面性があります。&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;組み込み IDE の全工程をそのまま置き換えるわけではない&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;AI ツールや Agent ワークフローとの相性が良い&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今や多くの開発者が欲しいのは、単に「コードが書けること」ではなく、「AI 協調を自然に入れられること」です。その意味で、&lt;code&gt;VS Code&lt;/code&gt; の優位性はかなり明確です。&lt;/p&gt;
&lt;h2 id=&#34;clion-体験は良いが組み込みの主流ワークフローの中心ではない&#34;&gt;CLion: 体験は良いが、組み込みの主流ワークフローの中心ではない
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CLion&lt;/code&gt; が話題に出ることはよくあります。C/C++ の編集体験が良いからです。&lt;/p&gt;
&lt;p&gt;ただ、組み込み開発者にとって本当の問題は「良いか悪いか」より、「移る価値があるか」です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;組み込みでは利用者が比較的少ない&lt;/li&gt;
&lt;li&gt;既存の組み込みエコシステムとの接続が &lt;code&gt;Keil&lt;/code&gt; ほど直接的ではない&lt;/li&gt;
&lt;li&gt;AI 協調という観点でも、&lt;code&gt;VS Code&lt;/code&gt; より現実的な優位があるとは限らない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そのため、&lt;code&gt;CLion&lt;/code&gt; は「理屈上はかなり良い選択肢」ではあっても、今の組み込み主流ワークフローの自然な中心とは言いにくいです。&lt;/p&gt;
&lt;h2 id=&#34;より現実的な答え-ビルドとデバッグは-keil日常のコーディングは-vs-code&#34;&gt;より現実的な答え: ビルドとデバッグは Keil、日常のコーディングは VS Code
&lt;/h2&gt;&lt;p&gt;それぞれの道具を役割ごとに分けて考えると、かなり実務的な結論が見えてきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Keil&lt;/code&gt; には既存プロジェクト互換、ビルド、書き込み、デバッグを任せる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VS Code&lt;/code&gt; には日常のコーディング、検索、ジャンプ、AI 協調を任せる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この組み合わせの価値は、ひとつの道具ですべてをやろうとしない点にあります。それぞれを、本当に得意な位置に戻してあげるわけです。&lt;/p&gt;
&lt;p&gt;多くの組み込み案件では、&lt;code&gt;Keil&lt;/code&gt; のエコシステム自体を避けることができません。ならば、すべてを &lt;code&gt;Keil&lt;/code&gt; に押し込めるより、&lt;code&gt;Keil&lt;/code&gt; をビルド・デバッグのバックエンド入口と割り切り、実際の編集体験は &lt;code&gt;VS Code&lt;/code&gt; に任せる方が自然です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/keil-vscode-ai-workflow.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Keil と VS Code を組み合わせたワークフロー図&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;なぜこの組み合わせが-ai-時代に向いているのか&#34;&gt;なぜこの組み合わせが AI 時代に向いているのか
&lt;/h2&gt;&lt;p&gt;今や環境の違いは、「エディタが気持ちよく使えるか」だけではありません。「AI を自然に接続できるか」が大きな分かれ目です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;VS Code&lt;/code&gt; にはこの点でかなり実務的な強みがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI プラグインや Agent の動きが活発&lt;/li&gt;
&lt;li&gt;AI がプロジェクトを読み、変更するのに向いた閲覧体験&lt;/li&gt;
&lt;li&gt;現代的なプラグイン群と組み合わせやすい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、組み込み開発で面倒になりがちな作業の一部を AI に肩代わりさせやすくなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;既存プロジェクト内の関数や呼び出し関係を探す&lt;/li&gt;
&lt;li&gt;初期化コードを素早く生成する&lt;/li&gt;
&lt;li&gt;簡単な UART 出力を足す&lt;/li&gt;
&lt;li&gt;古いプロジェクト構造を説明させる&lt;/li&gt;
&lt;li&gt;既存ファイルの一部だけを小さく直す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;こうしたことは昔も不可能ではありませんでした。ただ、とにかくやりにくかったのです。&lt;code&gt;VS Code&lt;/code&gt; の価値は、見た目がよいことではなく、AI 協調の作業台になりやすいことです。&lt;/p&gt;
&lt;h2 id=&#34;重要な補助線-プラグインで-vs-code-と-keil-プロジェクトをつなぐ&#34;&gt;重要な補助線: プラグインで VS Code と Keil プロジェクトをつなぐ
&lt;/h2&gt;&lt;p&gt;このワークフローが現実に機能するかどうかは、&lt;code&gt;VS Code&lt;/code&gt; と &lt;code&gt;Keil&lt;/code&gt; プロジェクトをつなげられるかにかかっています。&lt;/p&gt;
&lt;p&gt;実用的な方向性のひとつは、&lt;code&gt;VS Code&lt;/code&gt; から &lt;code&gt;Keil&lt;/code&gt; のプロジェクト構造を読み取り、エディタ内部から &lt;code&gt;Keil&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;/ul&gt;
&lt;p&gt;そうすれば、日常のコーディングで二つの画面を行ったり来たりする必要が減ります。重いデバッグ、つまりステップ実行、ブレークポイント、レジスタ確認が必要なときだけ &lt;code&gt;Keil&lt;/code&gt; に戻ればよくなります。&lt;/p&gt;
&lt;p&gt;この種のプラグインの価値は、単に画面切り替えが減ることではありません。ワークフロー自体を途切れさせないことにあります。&lt;/p&gt;
&lt;h2 id=&#34;cc-の基本プラグイン設定を軽視しない&#34;&gt;C/C++ の基本プラグイン設定を軽視しない
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;VS Code&lt;/code&gt; を組み込みの主エディタとして使うなら、見落とされがちですが非常に重要な点があります。C/C++ の基本プラグインとプロジェクト索引をきちんと設定することです。&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;ヘッダ関係が崩れる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この状態を見て、「やはり &lt;code&gt;VS Code&lt;/code&gt; は組み込みに向かない」と判断してしまう人もいます。ですが実際には、プラグインと索引の接続が不十分なだけであることが少なくありません。&lt;/p&gt;
&lt;p&gt;この部分がきちんと整えば、&lt;code&gt;VS Code&lt;/code&gt; は大規模プロジェクトの読解、シンボル検索、AI を使った局所的なコード修正でかなり強さを発揮します。&lt;/p&gt;
&lt;h2 id=&#34;このワークフローが特に向いている人&#34;&gt;このワークフローが特に向いている人
&lt;/h2&gt;&lt;p&gt;この組み合わせは、特に次のような人に向いていると思います。&lt;/p&gt;
&lt;h3 id=&#34;1-すでに-keil-ベースの資産が大量にある人&#34;&gt;1. すでに Keil ベースの資産が大量にある人
&lt;/h3&gt;&lt;p&gt;会社の案件、教材、過去コードがすべて &lt;code&gt;Keil&lt;/code&gt; 中心なら、見た目を現代化したいだけでその資産を捨てる必要はありません。&lt;code&gt;Keil&lt;/code&gt; を残し、&lt;code&gt;VS Code&lt;/code&gt; を前段に足す方が、移行コストははるかに低いです。&lt;/p&gt;
&lt;h3 id=&#34;2-ai-に組み込みコードを手伝ってもらいたい人&#34;&gt;2. AI に組み込みコードを手伝ってもらいたい人
&lt;/h3&gt;&lt;p&gt;関数の説明、ひな形コードの生成、局所ロジックの修正などを AI に任せたいなら、従来型の組み込み IDE より &lt;code&gt;VS Code&lt;/code&gt; の方が自然にその役割を引き受けやすいです。&lt;/p&gt;
&lt;h3 id=&#34;3-学習資料と実案件の両方をつなぎたい人&#34;&gt;3. 学習資料と実案件の両方をつなぎたい人
&lt;/h3&gt;&lt;p&gt;学習資料は今でも &lt;code&gt;Keil&lt;/code&gt; ベースのものが多いですが、自分の作業環境までその時代に留まる必要はありません。&lt;code&gt;Keil&lt;/code&gt; を互換層、&lt;code&gt;VS Code&lt;/code&gt; を生産性層として分けて考える方が、全体としてバランスが取れます。&lt;/p&gt;
&lt;h2 id=&#34;結び&#34;&gt;結び
&lt;/h2&gt;&lt;p&gt;2026 年の組み込み開発環境で本当に問われているのは、「どの IDE が最も多機能か」ではなく、「どの組み合わせが今の仕事のしかたに最も合っているか」です。&lt;/p&gt;
&lt;p&gt;素早く始めたいだけなら &lt;code&gt;STM32CubeIDE&lt;/code&gt; には今でも価値があります。大量の既存資産を受け継ぐなら &lt;code&gt;Keil&lt;/code&gt; は依然として避けられません。ですが、現代的な編集体験と AI 協調まで取り込みたいなら、より現実的な答えは次の形になりやすいです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Keil&lt;/code&gt; にビルドとデバッグを任せ、&lt;code&gt;VS Code&lt;/code&gt; にコードを書く仕事を任せる。&lt;/p&gt;
&lt;p&gt;唯一の正解ではないとしても、今ある選択肢の中ではかなり無理の少ない答えだと思います。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
