「インストール - OpenCode」の版間の差分
編集の要約なし |
|||
| (同じ利用者による、間の11版が非表示) | |||
| 17行目: | 17行目: | ||
セッション管理、マルチセッション対応を備え、会話履歴の保存、復元、エクスポートが可能である。<br> | セッション管理、マルチセッション対応を備え、会話履歴の保存、復元、エクスポートが可能である。<br> | ||
<br> | <br> | ||
Desktop | Desktop アプリはElectronベースのネイティブアプリケーションとして実装されており、TypeScriptで実装された内部CLI、SolidJS + Viteで構築されたフロントエンドを組み合わせている。<br> | ||
<br><br> | <br><br> | ||
| 42行目: | 42行目: | ||
| 組み込みエージェント || build (開発用)<br>plan (読み取り専用分析)<br>general (調査用)<br>explore (コード探索用) | | 組み込みエージェント || build (開発用)<br>plan (読み取り専用分析)<br>general (調査用)<br>explore (コード探索用) | ||
|- | |- | ||
| Desktop アプリ || | | Desktop アプリ || Electronベースのネイティブアプリ | ||
|- | |- | ||
| IDE拡張機能 || VS Code、JetBrains等のIDE拡張 | | IDE拡張機能 || VS Code、JetBrains等のIDE拡張 | ||
| 351行目: | 351行目: | ||
*: リーダーキーの設定 | *: リーダーキーの設定 | ||
*: デフォルト : <code>ctrl+x</code> | *: デフォルト : <code>ctrl+x</code> | ||
<br><br> | |||
== サブエージェントの自動復旧 == | |||
OpenCodeのサブエージェント (taskツールで起動されるエージェント) は、ストールや一時的な通信障害で <u>Task aborted</u> 等のエラーで停止することがある。<br> | |||
<br> | |||
これは、opencode-auto-resumeプラグインを使用することにより、自動的な復旧を行うことができる。<br> | |||
<br> | |||
==== opencode-auto-resumeプラグイン ==== | |||
opencode-auto-resumeプラグインは、OpenCodeのセッションがストールした際に自動的に復旧を試みるプラグインである。<br> | |||
主に以下の状況で有効である。<br> | |||
<br> | |||
* サブエージェントが停止応答なくハングした場合 | |||
* ツール実行が一時的なエラーで中断した場合 | |||
* ストリームが長時間停止した場合 | |||
<br> | |||
===== インストール ===== | |||
以下に示すいずれかの方法でインストールする。<br> | |||
<br> | |||
npm経由でインストールする。<br> | |||
npm install -g opencode-auto-resume | |||
<br> | |||
または、OpenCodeの設定ファイル (<u>opencode.json</u> / <u>opencode.jsonc</u>) の <code>plugin</code> 配列に追加する。<br> | |||
OpenCode起動時に自動的にインストールされる。<br> | |||
<br> | |||
===== 設定例 ===== | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"$schema": "https://opencode.ai/config.json", | |||
"plugin": [ | |||
[ | |||
"opencode-auto-resume", | |||
{ | |||
"chunkTimeoutMs": 60000, | |||
"gracePeriodMs": 5000, | |||
"maxRetries": 3 | |||
} | |||
] | |||
] | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
下表に、opencode-auto-resumeプラグインの主な設定項目を示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ opencode-auto-resume 設定項目 | |||
! 設定項目 !! デフォルト値 !! 説明 | |||
|- | |||
| <code>chunkTimeoutMs</code> || 45000 || ストリームが停止とみなされるまでの無応答時間 (ミリ秒) | |||
|- | |||
| <code>gracePeriodMs</code> || 3000 || 動作を起こす前の猶予時間<br>ユーザのESC中止を誤検出しないように調整する。 | |||
|- | |||
| <code>maxRetries</code> || 3 || 最大自動復旧試行回数 | |||
|- | |||
| <code>checkIntervalMs</code> || 5000 || 状態監視のポーリング間隔 | |||
|- | |||
| <code>subagentWaitMs</code> || 15000 || 孤立した親セッションを停止とみなすまでの待機時間 | |||
|} | |||
</center> | |||
<br> | |||
===== 注意事項 ===== | |||
以下に示す事柄に注意して設定すること。<br> | |||
<br> | |||
* <code>chunkTimeoutMs</code> を短くしすぎると、処理の重いタスクが誤って停止判定されることがある。 | |||
* ユーザが意図的に[ESC]キーで中止した場合は、自動復旧させないよう <code>gracePeriodMs</code> を適切に設定する。 | |||
* oh-my-openagent等の他プラグインと併用する場合は、<code>plugin</code> 配列の順序に影響されることがある。 | |||
<br><br> | |||
==== runtime_fallbackの設定 (oh-my-openagent) ==== | |||
oh-my-openagentプラグインを使用している場合は、APIエラーやレート制限、プロバイダ障害時にモデルを自動フォールバックする <code>runtime_fallback</code> 設定も併用することを推奨する。<br> | |||
これにより、サブエージェントの停止リスクをさらに減らすことができる。<br> | |||
<br> | |||
<u>~/.config/opencode/oh-my-openagent.json</u> に以下に示すように設定する。<br> | |||
<br> | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"runtime_fallback": { | |||
"enabled": true, | |||
"retry_on_errors": [400, 429, 503, 529], | |||
"max_fallback_attempts": 3, | |||
"cooldown_seconds": 60, | |||
"timeout_seconds": 30, | |||
"notify_on_fallback": true | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
下表に、設定項目の説明を示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ runtime_fallbackプラグインの設定項目 | |||
! 設定項目 !! 説明 | |||
|- | |||
| <code>enabled</code> || ランタイムフォールバックの有効 / 無効を設定する。 | |||
|- | |||
| <code>retry_on_errors</code> || 自動リトライを行うHTTPステータスコードのリスト | |||
|- | |||
| <code>max_fallback_attempts</code> || セッションあたりの最大フォールバック試行回数 | |||
|- | |||
| <code>timeout_seconds</code> || 指定時間内にモデルが応答しない場合に次のフォールバック先へ切り替える。 | |||
|- | |||
| <code>notify_on_fallback</code> || フォールバック発生時に通知を表示する。 | |||
|} | |||
</center> | |||
<br> | |||
===== 併用時の推奨設定 ===== | |||
opencode-auto-resumeプラグイン と runtime_fallbackプラグインは目的が異なるため、併用することでカバー範囲が広がる。<br> | |||
<br> | |||
* opencode-auto-resume | |||
*: サブエージェントのハングやストールに対処する。 | |||
* runtime_fallback | |||
*: API障害やレート制限等のプロバイダ側エラーに対処する。 | |||
<br> | |||
両方を有効にした後はOpenCodeを再起動して、プラグインが正常に読み込まれることを確認する。<br> | |||
<br> | |||
起動ログに <u>opencode-auto-resume ready</u> 等のメッセージが表示されれば正常に動作している。<br> | |||
<br><br> | <br><br> | ||
| 490行目: | 606行目: | ||
<br><br> | <br><br> | ||
== CLIバイナリのビルド | == CLIバイナリのビルド == | ||
==== ビルドの前提条件 ==== | ==== ビルドの前提条件 ==== | ||
<center> | <center> | ||
| 499行目: | 613行目: | ||
! 項目 !! 要件 | ! 項目 !! 要件 | ||
|- | |- | ||
| | | Bun || 1.3.13以上<br>(リポジトリルートの <u>package.json</u> 内の <code>packageManager</code> フィールドで <code>bun@1.3.13</code> が指定されている) | ||
|- | |- | ||
| | | git || 必須ではない。<br>(<u>packages/script/src/index.ts</u> 内で <code>git branch --show-current</code> が呼び出されるが、環境変数で回避可能) | ||
|- | |- | ||
| | | ネットワーク || ビルド時に https://models.dev/api.json からモデル定義を取得 | ||
|- | |- | ||
| | | ディスク空き容量 || 約3[GB]以上 (依存パッケージ + バイナリ約150[MB]) | ||
|} | |} | ||
</center> | </center> | ||
<br> | <br> | ||
===== 前提条件の確認コマンド ===== | ===== 前提条件の確認コマンド ===== | ||
# Bunバージョン確認 (1.3. | # Bunバージョン確認 (1.3.13以上が必要) | ||
bun --version | bun --version | ||
# ネットワーク接続の確認 | # ネットワーク接続の確認 | ||
curl -s https://models.dev/api.json | head -c 100 | curl -s https://models.dev/api.json | head -c 100 | ||
<br> | <br> | ||
==== ビルド方式の説明 ==== | ==== ビルド方式の説明 ==== | ||
<center> | <center> | ||
| 525行目: | 636行目: | ||
! 項目 !! 内容 | ! 項目 !! 内容 | ||
|- | |- | ||
| 言語 || TypeScript ( | | 言語 || TypeScript (Bunランタイム) | ||
|- | |- | ||
| ビルド方式 || <code>Bun.build()</code> の <code>compile | | ビルド方式 || <code>Bun.build()</code> の <code>compile</code> オプションでスタンドアロン実行ファイルを生成 | ||
|- | |- | ||
| ビルドスクリプト || <u>packages/opencode/script/build.ts</u> | | ビルドスクリプト || <u>packages/opencode/script/build.ts</u> | ||
|- | |- | ||
| 出力 || Bunランタイムを内蔵した単一バイナリ (<code>opencode</code>) | | 出力 || Bunランタイムを内蔵した単一バイナリ (<code>opencode</code>) | ||
|- | |||
| 出力先 || <u>packages/opencode/dist/opencode-linux-x64/bin/opencode</u> | |||
|- | |||
| バイナリサイズ || 約150MB (Bunランタイム、TypeScriptコード、Web UIアセットを含む) | |||
|} | |} | ||
</center> | </center> | ||
<br> | <br> | ||
==== 環境変数の設定 ==== | ネイティブモジュール (<code>@opentui/core</code>、<code>@parcel/watcher</code>) は、ビルドスクリプトが各プラットフォーム向けの <u>事前ビルド済みバイナリ</u> をダウンロードするため、<br> | ||
CLIビルドではC/C++のソースコードからのコンパイルは発生しない。<br> | |||
このため、CLIのビルドにおいては、デスクトップアプリビルドのようなGCC 10以降の要件はない。<br> | |||
<br> | |||
==== ソースコードのダウンロード ==== | |||
[https://github.com/anomalyco/opencode/releases OpenCodeのGithub]にアクセスして、ソースコードをダウンロードする。<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
<br> | |||
tar xf opencode-<バージョン>.tar.gz | |||
cd opencode-<バージョン> | |||
<br> | |||
==== ビルド手順 ==== | |||
===== Step 1 : 環境変数の設定 ===== | |||
ソースディレクトリがGitリポジトリでない場合 (tarballから展開しただけの場合等) は、<u>packages/script/src/index.ts</u> 内で <code>git branch --show-current</code> が実行されて失敗するため、環境変数を設定する。<br> | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
export OPENCODE_VERSION=<バージョン 例 : 1. | export OPENCODE_VERSION=<バージョン 例 : 1.14.41> | ||
export OPENCODE_CHANNEL=latest | export OPENCODE_CHANNEL=latest | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br> | ||
環境変数 <code>OPENCODE_VERSION</code> に <code>0.0.0-</code> で始まらない値を指定すると、<code>git</code> コマンドの呼び出しが回避される。<br> | |||
==== 依存パッケージのインストール ==== | 環境変数 <code>OPENCODE_CHANNEL</code> はビルド成果物の <code>--version</code> 表示およびユーザエージェント文字列に使用される。<br> | ||
<br> | |||
===== Step 2 : Bunのlinker設定 ===== | |||
デスクトップアプリビルドのセクションと同様に、リポジトリルートの <u>bunfig.toml</u> に <code>linker = "hoisted"</code> を追加する。<br> | |||
<br> | |||
vi /path/to/opencode-<バージョン>/bunfig.toml | |||
<br> | |||
<syntaxhighlight lang="toml"> | |||
[install] | |||
exact = true | |||
linker = "hoisted" | |||
[test] | |||
root = "./do-not-run-tests-from-root" | |||
</syntaxhighlight> | |||
<br> | |||
CLI単体のビルドではViteは使用されないため、isolated linkerでも動作する可能性がある。<br> | |||
<u>ただし、OpenCode Desktopのビルドと環境を共有する場合は、整合性を保つためhoistedモードを推奨する。</u><br> | |||
<br> | |||
===== Step 3 : 依存パッケージのインストール ===== | |||
リポジトリルートで依存パッケージをインストールする。<br> | |||
このリポジトリはBunワークスペース構成のモノレポであるため、ルートでの <code>bun install</code> 実行で全パッケージの依存関係がインストールされる。<br> | |||
<br> | |||
isolated linkerからhoistedに切り替えた直後、または、過去のnode_modulesが残存している場合は、全てのnode_modulesディレクトリを削除してから再インストールする。<br> | |||
<br> | |||
cd /path/to/opencode-<バージョン> | cd /path/to/opencode-<バージョン> | ||
rm -rf node_modules packages/*/node_modules packages/*/*/node_modules | |||
bun install | bun install | ||
<br> | <br> | ||
もし、bun installに失敗する場合は、node-gypをインストールする。<br> | |||
< | <br> | ||
bun add node-gyp -D | |||
# または | |||
npm install -g node-gyp | |||
<br> | |||
==== ビルドの実行 ==== | ===== Step 4 : ビルドの実行 ===== | ||
ビルドスクリプトを実行する。<br> | ビルドスクリプトを実行する。<br> | ||
<br> | |||
./packages/opencode/script/build.ts --single | ./packages/opencode/script/build.ts --single | ||
<br> | <br> | ||
<code>--single</code> | <code>--single</code> フラグは、現在のプラットフォームのみをビルドする。(例: <u>linux-x64</u>)<br> | ||
フラグなしで実行すると、全12プラットフォーム分のクロスコンパイルを試みる。<br> | |||
(<u>linux-x64</u>、<u>linux-arm64</u>、<u>darwin-x64</u>、<u>darwin-arm64</u>、<u>win32-x64</u>、<u>win32-arm64</u>、各baselineおよびmuslバリアント)<br> | |||
<br> | <br> | ||
ビルドスクリプトの処理内容を以下に示す。<br> | |||
<br> | |||
# <u>packages/opencode/script/generate.ts</u> が https://models.dev/api.json からモデルデータを取得して、<u>packages/opencode/src/provider/models.ts</u> 等のスナップショットを生成する。 | |||
# Web UI (<u>packages/app</u>) を <code>vite build</code> でビルドして、生成されたアセットを単一バイナリに埋め込む。 | |||
# <code>@opentui/core</code> および <code>@parcel/watcher</code> の全プラットフォーム向けプリビルドバイナリをインストールする。(<code>bun install --os="*" --cpu="*"</code>) | |||
< | # <code>Bun.build()</code> の <code>compile</code> オプションでTypeScriptをスタンドアロンバイナリにコンパイルして、<u>packages/opencode/dist/opencode-linux-x64/bin/opencode</u> に出力する。 | ||
# 自動Smoke testとして、生成されたバイナリの <code>--version</code> を実行して、出力を確認する。 | |||
<br> | |||
==== 動作確認 ==== | ==== 動作確認 ==== | ||
ビルドが完了した後、バイナリが生成されたかどうかを確認する。<br> | |||
ls -la packages/opencode/dist/opencode-linux-x64/bin/opencode | ls -la packages/opencode/dist/opencode-linux-x64/bin/opencode | ||
<br> | |||
バージョンを表示する。<br> | |||
./packages/opencode/dist/opencode-linux-x64/bin/opencode --version | |||
<br> | |||
ヘルプを表示する。<br> | |||
./packages/opencode/dist/opencode-linux-x64/bin/opencode --help | ./packages/opencode/dist/opencode-linux-x64/bin/opencode --help | ||
<br> | |||
TUIを起動する。<br> | |||
./packages/opencode/dist/opencode-linux-x64/bin/opencode | |||
<br><br> | <br><br> | ||
===== システムへのインストール ===== | |||
ビルドしたバイナリを <u>/usr/local/bin/</u> にコピーすると、システム全体で <code>opencode</code> コマンドとして使用できる。<br> | |||
<br> | |||
sudo cp packages/opencode/dist/opencode-linux-x64/bin/opencode /usr/local/bin/opencode | |||
sudo chmod +x /usr/local/bin/opencode | |||
<br> | |||
ユーザディレクトリにのみインストールする場合は、<u>~/.local/bin/</u> 等にコピーする。<br> | |||
mkdir -p ~/.local/bin | |||
cp packages/opencode/dist/opencode-linux-x64/bin/opencode ~/.local/bin/opencode | |||
chmod +x ~/.local/bin/opencode | |||
<br> | |||
==== トラブルシューティング ==== | ==== トラブルシューティング ==== | ||
<center> | <center> | ||
| 579行目: | 755行目: | ||
! 問題 !! 原因 !! 対策 | ! 問題 !! 原因 !! 対策 | ||
|- | |- | ||
| <code>git branch --show-current</code> 失敗 || ソースがGitリポジトリではない || | | <code>git branch --show-current</code> 失敗 || ソースがGitリポジトリではない || 環境変数を設定する。<br><br><code>export OPENCODE_VERSION=1.14.41</code><br><code>export OPENCODE_CHANNEL=latest</code> | ||
|- | |||
| <code>models.dev</code> に接続できない || ネットワーク制限またはプロキシ環境 || 事前に <u>api.json</u> をダウンロードしておき、環境変数 <code>MODELS_DEV_API_JSON=/path/to/api.json</code> で指定する。<br>詳細は、後述の[[#オフライン環境でのビルド|オフライン環境でのビルド]]を参照すること。 | |||
|- | |||
| <code>This script requires bun@^X.X.X, but you are using bun@X.X.X</code> || Bunのバージョンが古い || Bunをアップグレードする。<br><pre>bun upgrade</pre> | |||
|- | |- | ||
| | | GLIBCバージョン不足 || GLIBCバージョンが古い || <code>--single</code> に加えて <code>--baseline</code> フラグを追加してビルドする。<br>または、muslビルドを検討する。 | ||
|- | |- | ||
| <code>error: File not found ".../packages/sdk/js/node_modules/cross-spawn"</code> || isolated linker時代の壊れたシンボリックリンクが残存している || 全ての <u>node_modules</u> を削除して、再インストールする。<br>詳細は、Step 3を参照すること。 | |||
|- | |- | ||
| | | Smoke testの失敗 || バイナリの実行可能パーミッションがない、またはGLIBCバージョン不足 || <code>chmod +x</code> でパーミッションを付与する。<br>GLIBCの場合は <code>--baseline</code> フラグを試行する。 | ||
< | |||
|} | |} | ||
</center> | </center> | ||
| 592行目: | 771行目: | ||
===== オフライン環境でのビルド ===== | ===== オフライン環境でのビルド ===== | ||
ネットワークに接続できない場合、モデルデータを事前にダウンロードしておく必要がある。<br> | ネットワークに接続できない場合、モデルデータを事前にダウンロードしておく必要がある。<br> | ||
オンライン環境で事前にダウンロードする。<br> | |||
<br> | |||
curl -o api.json https://models.dev/api.json | curl -o api.json https://models.dev/api.json | ||
<br> | |||
ビルド時にローカルファイルを指定する。<br> | |||
<br> | |||
export MODELS_DEV_API_JSON=/path/to/api.json | export MODELS_DEV_API_JSON=/path/to/api.json | ||
./packages/opencode/script/build.ts --single | ./packages/opencode/script/build.ts --single | ||
<br | <br | ||
===== baselineビルド ===== | ===== baselineビルド ===== | ||
CPUがAVX2命令セットをサポートしていない場合、<code>--baseline</code> フラグを追加する。<br> | CPUがAVX2命令セットをサポートしていない場合、<code>--baseline</code> フラグを追加する。<br> | ||
./packages/opencode/script/build.ts --single --baseline | ./packages/opencode/script/build.ts --single --baseline | ||
<br> | |||
baselineビルドの出力先は <u>packages/opencode/dist/opencode-linux-x64-baseline/bin/opencode</u> となる。<br> | |||
<br> | |||
===== 全プラットフォーム向けクロスコンパイル ===== | |||
<code>--single</code> フラグを外して実行すると、全12プラットフォーム向けのバイナリを生成する。<br> | |||
<br> | |||
./packages/opencode/script/build.ts | |||
<br> | |||
ただし、Smoke testは現在のプラットフォーム向けのバイナリのみで実行される。<br> | |||
他プラットフォーム向けのバイナリは、対象プラットフォーム上で別途動作確認する必要がある。<br> | |||
<br><br> | <br><br> | ||
== デスクトップアプリケーションのビルド == | == デスクトップアプリケーションのビルド == | ||
OpenCode | OpenCode Desktopは、Electronベースのデスクトップアプリケーションである。<br> | ||
<br> | |||
<u>バージョン 1.14.40以降、Tauri v2からElectronへ移行されており、Rustツールチェーンは不要となっている。</u><br> | |||
<br> | <br> | ||
==== デスクトップアプリケーションの構成 ==== | ==== デスクトップアプリケーションの構成 ==== | ||
| 612行目: | 805行目: | ||
|+ Desktop アプリの構成 | |+ Desktop アプリの構成 | ||
! 項目 !! 内容 | ! 項目 !! 内容 | ||
|- | |||
| フレームワーク || Electron 41.x + electron-vite + electron-builder | |||
|- | |- | ||
| フロントエンド || SolidJS + Vite (TypeScript) | | フロントエンド || SolidJS + Vite (TypeScript) | ||
|- | |- | ||
| | | メインプロセス || Node.js (TypeScript、<u>packages/desktop/src/main/</u>) | ||
|- | |- | ||
| サイドカー || OpenCode | | サイドカー || OpenCode サーバの Node.js バンドル<br><u>packages/opencode/dist/node/</u> として生成され、<code>utilityProcess.fork</code> でメインプロセスから子プロセスとして起動される。 | ||
|- | |- | ||
| | | パッケージング || electron-builder | ||
|- | |- | ||
| 出力形式 (Linux) || | | 出力形式 (Linux) || AppImage、debパッケージ、rpmパッケージ | ||
|- | |- | ||
| ソースディレクトリ || <u>packages/desktop/</u> ( | | ソースディレクトリ || <u>packages/desktop/src/main/</u> (Electronメインプロセス)<br><u>packages/desktop/src/preload/</u> (preloadスクリプト)<br><u>packages/desktop/src/renderer/</u> (SolidJSフロントエンド) | ||
|- | |||
| 設定ファイル || <u>packages/desktop/electron.vite.config.ts</u> (electron-vite)<br><u>packages/desktop/electron-builder.config.ts</u> (electron-builder) | |||
|} | |} | ||
</center> | </center> | ||
<br> | |||
旧Tauri版とは異なり、<u>独立したCLIバイナリをサイドカーとしてバンドルしない</u>。<br> | |||
代わりに、<u>packages/opencode/src/node.ts</u> から生成されるNode.jsバンドル (<u>packages/opencode/dist/node/</u>) がメインプロセスのutilityProcessとして起動される。<br> | |||
そのため、CLIバイナリのビルドセクションでビルドした <u>opencode</u> バイナリは、デスクトップアプリのビルドには使用されない。<br> | |||
<br> | <br> | ||
==== ビルドの前提条件 ==== | ==== ビルドの前提条件 ==== | ||
===== | ===== Bun ランタイム ===== | ||
ビルドにはBun 1.3.13以上が必要である。<br> | |||
<u> | ルートの <u>package.json</u> 内 <code>packageManager</code> フィールドで <u>bun@1.3.13</u> が指定されている。<br> | ||
< | bun --version | ||
<br> | |||
<br><br> | <br><br> | ||
===== 依存ライブラリのインストール ===== | ===== 依存ライブラリのインストール ===== | ||
Electron-builderがLinuxパッケージ (rpm / deb / AppImage) を生成するために、以下に示すツールが必要である。<br> | |||
<br> | |||
sudo zypper install -t pattern devel_basis | sudo zypper install -t pattern devel_basis | ||
sudo zypper install | sudo zypper install rpm-build dpkg fakeroot | ||
<br> | |||
* <u>rpm-build</u> | |||
*: rpmパッケージの生成に必要 | |||
* <u>dpkg</u>、<u>fakeroot</u> | |||
*: debパッケージの生成に必要 | |||
<br> | |||
electron-builderはAppImageを生成するために必要なツールを内部で自動取得するため、追加のインストールは不要である。<br> | |||
<br> | |||
Tauri版とは異なり、<u>Rustツールチェーン (rustc、cargo) およびwebkit2gtk3-develは不要</u> である。<br> | |||
<br> | <br> | ||
===== ソースコードのダウンロード ===== | ===== ソースコードのダウンロード ===== | ||
[https://github.com/anomalyco/opencode/releases OpenCodeのGithub]にアクセスして、ソースコードをダウンロードする。<br> | [https://github.com/anomalyco/opencode/releases OpenCodeのGithub]にアクセスして、ソースコードをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
<br> | |||
tar xf opencode-<バージョン>.tar.gz | tar xf opencode-<バージョン>.tar.gz | ||
cd opencode-<バージョン> | cd opencode-<バージョン> | ||
<br> | <br> | ||
==== ビルド ==== | |||
==== | |||
===== Step 1 : 環境変数の設定 ===== | ===== Step 1 : 環境変数の設定 ===== | ||
ソースディレクトリがGitリポジトリでない場合、ビルド過程で <code>git branch --show-current</code> が実行されて失敗するため、環境変数を設定する。<br> | |||
<br> | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
export OPENCODE_VERSION=<バージョン 例 : 1. | export OPENCODE_VERSION=<バージョン 例 : 1.14.41> | ||
export OPENCODE_CHANNEL= | export OPENCODE_CHANNEL=<prod / dev / beta のいずれかを指定> | ||
</syntaxhighlight> | |||
<br> | |||
環境変数 <code>OPENCODE_VERSION</code> に <code>0.0.0-</code> で始まらない値を指定すると、Git呼び出しが回避される。<br> | |||
<br> | |||
環境変数 <code>OPENCODE_CHANNEL</code> は <code>dev</code>、<code>beta</code>、<code>prod</code> のいずれかを指定する。<br> | |||
それ以外の値を指定した場合、<u>packages/desktop/electron-builder.config.ts</u> および <u>packages/desktop/electron.vite.config.ts</u> 内で <code>dev</code> として扱われる。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ OPENCODE_CHANNELの値 | |||
! 値 !! appId !! productName !! RPMパッケージ名 | |||
|- | |||
| dev || ai.opencode.desktop.dev || OpenCode Dev || opencode-dev | |||
|- | |||
| beta || ai.opencode.desktop.beta || OpenCode Beta || opencode-beta | |||
|- | |||
| prod || ai.opencode.desktop || OpenCode || opencode | |||
|} | |||
</center> | |||
<br> | |||
===== Step 2 : Bunのlinker設定 ===== | |||
Bun 1.3のデフォルトのisolated linkerでは、各パッケージの依存関係が <u>node_modules/.bun/</u> 配下に隔離されたシンボリックリンク構造で配置される。<br> | |||
この構造では、Vite (electron-viteのレンダラビルド) のCommonJSリゾルバが、ワークスペース外の <code>shiki</code> 等のtransitive依存を解決できず、以下に示すエラーが発生する。<br> | |||
<br> | |||
[commonjs--resolver] Failed to resolve entry for package "shiki". | |||
The package may have incorrect main/module/exports specified in its package.json. | |||
<br> | |||
このエラーを回避するため、リポジトリルートの <u>bunfig.toml</u> を編集して、linkerをhoistedモード (npm互換のフラットなnode_modules構造) に切り替える。<br> | |||
<br> | |||
vi /path/to/opencode-<バージョン>/bunfig.toml | |||
<br> | |||
<u>bunfig.toml</u> ファイルの <code>[install]</code> セクションに <u>linker = "hoisted"</u> を追加する。<br> | |||
<br> | |||
<syntaxhighlight lang="toml"> | |||
[install] | |||
exact = true | |||
linker = "hoisted" | |||
[test] | |||
root = "./do-not-run-tests-from-root" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
===== Step | ===== Step 3 : 依存パッケージのインストール ===== | ||
プロジェクトルートで依存パッケージをインストールする。<br> | |||
このリポジトリはBunワークスペース構成のモノレポであり、ルートで <code>bun install</code> を実行することで全パッケージの依存関係がインストールされる。<br> | |||
<br> | |||
すでに過去にisolated linkerで <code>bun install</code> を実行している場合、各パッケージの <u>node_modules</u> 配下に古いシンボリックリンクが残っている。<br> | |||
hoistedモードで再構築する前に、すべての <u>node_modules</u> ディレクトリを削除する。<br> | |||
<br> | |||
cd /path/to/opencode-<バージョン> | cd /path/to/opencode-<バージョン> | ||
rm -rf node_modules packages/*/node_modules packages/*/*/node_modules | |||
<br> | |||
削除しないまま <code>bun install</code> を実行した場合、isolated時代の壊れたシンボリックリンクが残存し、ビルド時に以下に示すエラーが発生する。<br> | |||
<br> | |||
error: File not found "/path/to/opencode-<バージョン>/packages/sdk/js/node_modules/cross-spawn" | |||
<br> | |||
クリーンアップ後、依存パッケージをインストールする。<br> | |||
<br> | |||
bun install | bun install | ||
<br> | |||
<code>postinstall</code> フックで <code>fix-node-pty</code> が自動実行される。<br> | |||
<br> | <br> | ||
もし、bun installに失敗する場合は、node-gypをインストールする。<br> | もし、bun installに失敗する場合は、node-gypをインストールする。<br> | ||
<br> | |||
bun add node-gyp -D | bun add node-gyp -D | ||
# または | # または | ||
npm install -g node-gyp | npm install -g node-gyp | ||
<br> | <br> | ||
===== Step | ===== Step 4 : Electronビルドの実行 ===== | ||
Electronメインプロセス、preload、レンダラのビルドを実行する。<br> | |||
<br> | <br> | ||
bun run --cwd packages/desktop build | |||
<br> | <br> | ||
<u>build</u> スクリプト実行時、以下の処理が <code>prebuild</code> フックで自動実行される。<br> | |||
* <u>packages/desktop/scripts/copy-icons.ts</u> でチャンネル別のアイコンを <u>resources/icons/</u> にコピーする。 | |||
* <u>packages/opencode/script/build-node.ts</u> でNode.jsサイドカーバンドルを <u>packages/opencode/dist/node/</u> に出力する。 | |||
<br> | <br> | ||
その後、<code>electron-vite build</code> がメインプロセス (<u>out/main/</u>)、preload (<u>out/preload/</u>)、レンダラ (<u>out/renderer/</u>) の3つのバンドルを生成する。<br> | |||
<br> | <br> | ||
ネットワーク接続が必要である。<br> | |||
* <u>packages/opencode/script/generate.ts</u> が https://models.dev/api.json からモデル定義を取得する。 | |||
* SentryのPlugin等が外部リソースにアクセスする場合がある。 | |||
<br> | <br> | ||
===== Step 5 : Linuxパッケージの生成 ===== | |||
electron-builderでAppImage、debパッケージ、rpmパッケージを生成する。<br> | |||
<br> | <br> | ||
electron-builderは、<code>@electron/rebuild</code> を内部で実行して、ネイティブモジュール (<u>msgpackr-extract</u> 等) を Electron向けに再コンパイルする。<br> | |||
<u>msgpackr-extract</u> のビルドには <code>-std=gnu++20</code> オプションが指定されるため、<u>C++20をサポートするGCC 10以降が必要</u>である。<br> | |||
<br> | <br> | ||
<u> | <u>※注意</u><br> | ||
<u>GCC 9以前では、以下に示すエラーが発生してビルドが失敗する。</u><br> | |||
<br> | <br> | ||
g++: error: unrecognized command line option '-std=gnu++20'; did you mean '-std=gnu++03'? | |||
* | make: *** [extract.target.mk:142: Release/obj.target/extract/src/extract.o] エラー 1 | ||
⨯ node-gyp failed to rebuild '/path/to/opencode-<バージョン>/node_modules/msgpackr-extract' | |||
<br> | <br> | ||
< | この時、環境変数 <code>CC</code> および <code>CXX</code> にGCC 9以降を指定する。<br> | ||
<br> | <br> | ||
<syntaxhighlight lang="sh"> | |||
export CC=gcc-9 | |||
export CXX=g++-9 | |||
</syntaxhighlight> | |||
<br> | <br> | ||
electron-builderを実行する。<br> | |||
<br> | <br> | ||
bun run --cwd packages/desktop package:linux | |||
<br> | <br> | ||
このコマンドは、<code>electron-builder --linux --config electron-builder.config.ts</code> を実行する。<br> | |||
<u>packages/desktop/electron-builder.config.ts</u> 内の <code>linux.target</code> に AppImage、deb、rpmが指定されている。<br> | |||
<br> | <br> | ||
特定の形式のみ生成する場合は、<code>--linux</code> の後に形式を指定する。<br> | |||
<br> | <br> | ||
# rpmのみ | |||
bun run --cwd packages/desktop package:linux -- rpm | |||
# / | |||
# debのみ | |||
bun run --cwd packages/desktop package:linux -- deb | |||
# AppImageのみ | |||
bun run --cwd packages/desktop package:linux -- AppImage | |||
<br> | <br> | ||
===== 生成されたファイルの確認 ===== | ===== 生成されたファイルの確認 ===== | ||
出力先は <u>packages/desktop/dist/</u> である。<br> | |||
# | ファイル名のフォーマットは <u>packages/desktop/electron-builder.config.ts</u> 内の <code>artifactName</code> で指定される。<br> | ||
ls -la packages/desktop/ | (デフォルト: <code>opencode-desktop-${os}-${arch}.${ext}</code>)<br> | ||
<br> | |||
# rpmパッケージ | |||
ls -la packages/desktop/dist/*.rpm | |||
# debパッケージ | # debパッケージ | ||
ls -la packages/desktop/ | ls -la packages/desktop/dist/*.deb | ||
# | # AppImage | ||
ls -la packages/desktop/ | ls -la packages/desktop/dist/*.AppImage | ||
<br> | <br> | ||
==== 動作確認 ==== | ==== 動作確認 ==== | ||
rpmパッケージをインストールして起動を確認する。<br> | |||
# | # rpmパッケージをインストール | ||
sudo zypper install ./packages/desktop/ | sudo zypper install ./packages/desktop/dist/opencode-desktop-linux-x64.rpm | ||
## | # OpenCodeデスクトップアプリを起動 | ||
# OPENCODE_CHANNEL=devでビルドした場合 | |||
opencode-dev | |||
./packages/desktop/ | <br> | ||
debパッケージで動作確認する場合は、以下に示すコマンドを実行する。<br> | |||
sudo dpkg -i ./packages/desktop/dist/opencode-desktop-linux-x64.deb | |||
<br> | |||
AppImageの場合、ダウンロードしたファイルに実行権限を付与してそのまま起動する。<br> | |||
chmod +x ./packages/desktop/dist/opencode-desktop-linux-x64.AppImage | |||
./packages/desktop/dist/opencode-desktop-linux-x64.AppImage | |||
<br> | |||
==== トラブルシューティング ==== | ==== トラブルシューティング ==== | ||
<center> | <center> | ||
| 786行目: | 1,022行目: | ||
! 問題 !! 原因 !! 対策 | ! 問題 !! 原因 !! 対策 | ||
|- | |- | ||
| | | <code>git branch --show-current</code> 失敗 || ソースがGitリポジトリではない || 環境変数を設定する。<br><br><code>export OPENCODE_VERSION=1.14.41</code><br><code>export OPENCODE_CHANNEL=dev</code> | ||
|- | |||
| <code>[commonjs--resolver] Failed to resolve entry for package "shiki"</code> || Bunのisolated linkerが原因で、ワークスペース外の transitive 依存をViteが解決できない || <u>bunfig.toml</u> ファイルの <code>[install]</code> セクションに <code>linker = "hoisted"</code> を設定して、<code>bun install</code> を再実行する。<br>詳細は、Step 2を参照すること。 | |||
|- | |- | ||
| | | <code>error: File not found ".../packages/sdk/js/node_modules/cross-spawn"</code> || isolated linkerで作成された壊れたシンボリックリンクが残存している || 全ての <u>node_modules</u> を削除して、再インストールする。<br><br><pre>rm -rf node_modules \ | ||
packages/*/node_modules \ | |||
packages/*/*/node_modules | |||
bun install</pre> | |||
|- | |- | ||
| | | <code>models.dev</code> に接続できない || ネットワーク制限 || 事前に <u>api.json</u> をダウンロードしておき、<code>MODELS_DEV_API_JSON=/path/to/api.json</code> を環境変数で指定する。 | ||
|- | |- | ||
| | | rpmパッケージが生成されない || rpm-buildツール不足 || <code>sudo zypper install rpm-build</code> でrpmビルドツールをインストールする。 | ||
|- | |||
| debパッケージが生成されない || dpkg / fakeroot不足 || <code>sudo zypper install dpkg fakeroot</code> でdebビルドツールをインストールする。 | |||
|- | |||
| Wayland環境で画面が真っ白になる || ElectronのデフォルトがX11プロトコル || 起動時に <code>--ozone-platform=wayland</code> または <code>--ozone-platform-hint=auto</code> フラグを付与する。<br>例 : <code>opencode-dev --ozone-platform-hint=auto</code> | |||
|- | |||
| node-ptyのビルド失敗 || ネイティブモジュールのコンパイル環境不足 || ビルドツールをインストールする。<br><pre>sudo zypper install gcc gcc-c++ make python3</pre> | |||
|- | |||
| Electronのダウンロード失敗 || ネットワーク制限またはプロキシ環境 || プロキシ環境では <code>HTTPS_PROXY</code> 環境変数を設定する。<br>または <code>ELECTRON_MIRROR</code> 環境変数でミラーURLを指定する。 | |||
|} | |} | ||
</center> | </center> | ||
<br> | <br> | ||
===== デバッグビルド ===== | ===== デバッグビルド ===== | ||
問題の調査が必要な場合、開発モードで起動できる。<br> | |||
bun run --cwd packages/desktop | bun run --cwd packages/desktop dev | ||
<br> | <br> | ||
このコマンドは <code>electron-vite dev</code> を実行し、HMR (Hot Module Replacement) 対応の開発サーバを起動する。<br> | |||
DevToolsが自動的に有効になり、レンダラプロセスを <u>[Ctrl] + [Shift] + [I]</u> で検証できる。<br> | |||
<br><br> | <br><br> | ||
== Oh my OpenCode == | == Oh my OpenAgents (Oh my OpenCode) == | ||
Oh my | Oh my OpenAgentsは、OpenCode用のマルチエージェントオーケストレーションプラグインである。<br> | ||
フック、MCPサーバ、スキル、専門エージェントを活用してOpenCodeの機能を拡張する。<br> | フック、MCPサーバ、スキル、専門エージェントを活用してOpenCodeの機能を拡張する。<br> | ||
<br> | <br> | ||
| 819行目: | 1,061行目: | ||
<br> | <br> | ||
==== 主な機能 ==== | ==== 主な機能 ==== | ||
Oh my | Oh my OpenAgentsは以下に示す機能を提供する。<br> | ||
<br> | <br> | ||
<center> | <center> | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Oh my | |+ Oh my OpenAgents 機能一覧 | ||
! 機能 !! 説明 | ! 機能 !! 説明 | ||
|- | |- | ||
| 839行目: | 1,081行目: | ||
<br> | <br> | ||
==== 専門エージェント ==== | ==== 専門エージェント ==== | ||
Oh my | Oh my OpenAgentsは以下の専門エージェントを提供する。<br> | ||
<br> | <br> | ||
<center> | <center> | ||
| 864行目: | 1,106行目: | ||
* Node.js または Bun | * Node.js または Bun | ||
<br> | <br> | ||
Oh my | Oh my OpenAgentsをインストールする。<br> | ||
bunx oh-my-opencode@latest | bunx oh-my-opencode@latest | ||
# または | # または | ||
| 967行目: | 1,209行目: | ||
<br> | <br> | ||
==== 注意事項 ==== | ==== 注意事項 ==== | ||
Oh my | Oh my OpenAgentsを使用する際は以下の点に注意すること。<br> | ||
<br> | <br> | ||
* AnthropicモデルのOpenCode対応はコミュニティ主導の取り組みであり、Anthropicの公式サポート対象外である。 | * AnthropicモデルのOpenCode対応はコミュニティ主導の取り組みであり、Anthropicの公式サポート対象外である。 | ||
| 999行目: | 1,241行目: | ||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | ||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 | |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 | ||
|description={{PAGENAME}} - | |description={{PAGENAME}} - OpenCodeのインストール、設定、使用方法、ビルド手順、サブエージェントの自動復旧に関する情報 | This page is {{PAGENAME}} in our wiki about OpenCode installation, configuration, usage, build instructions and subagent recovery | ||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |image=/resources/assets/MochiuLogo_Single_Blue.png | ||
}} | }} | ||
2026年6月13日 (土) 11:41時点における最新版
概要
OpenCodeは、オープンソースのAIコーディングエージェントである。
ターミナルベースのTUI (ターミナルユーザーインターフェース) を提供し、75以上のLLMプロバイダに対応している。
主要な特徴として、以下が挙げられる。
- Anthropic (Claude)、OpenAI (GPT)、Google (Gemini)、GitHub Copilot、Ollama等のモデルの主要プロバイダをサポート
- 2026年1月にGitHub Copilotとの公式パートナーシップを発表
- プライバシー重視の設計
- コードは送信されず、ローカルでの処理を優先
- CLI、TUI、Desktop アプリ、IDE拡張機能、Webインターフェースを提供
- MCP (Model Context Protocol) とLSP (Language Server Protocol) をサポート
- 組み込みエージェント
- build (開発用)
- plan (読み取り専用分析)
OpenCodeは、Go言語でBubble Tea TUIフレームワークを使用して実装されている。
セッション管理、マルチセッション対応を備え、会話履歴の保存、復元、エクスポートが可能である。
Desktop アプリはElectronベースのネイティブアプリケーションとして実装されており、TypeScriptで実装された内部CLI、SolidJS + Viteで構築されたフロントエンドを組み合わせている。
主な機能
OpenCodeは、多様な機能を提供する包括的なAIコーディングツールである。
| 機能 | 説明 |
|---|---|
| TUI (Bubble Tea) | ターミナルベースの対話型インターフェース |
| マルチプロバイダ対応 | 75以上のLLMプロバイダをサポート |
| セッション管理 | 会話履歴の保存、復元、エクスポート |
| ツール統合 | ファイル操作、Bash実行、テスト実行等 |
| MCP (Model Context Protocol) | 外部ツールとの統合プロトコル |
| LSP (Language Server Protocol) | 25以上の組み込みLSPサーバーによる言語サーバーとの連携 |
| 組み込みエージェント | build (開発用) plan (読み取り専用分析) general (調査用) explore (コード探索用) |
| Desktop アプリ | Electronベースのネイティブアプリ |
| IDE拡張機能 | VS Code、JetBrains等のIDE拡張 |
| カスタムコマンド | .opencode/commands/ ディレクトリ内でユーザ定義コマンド作成 |
| Git統合 | /undo、/redo コマンドでGitバック付きの変更管理
|
対応AIプロバイダとモデル
OpenCodeは、75以上のLLMプロバイダに対応している。
主要プロバイダ一覧
| プロバイダ | 認証方法 | 備考 |
|---|---|---|
| Anthropic | APIキー (ANTHROPIC_API_KEY) |
Claude 4.x系をサポート |
| OpenAI | APIキー (OPENAI_API_KEY) |
GPT-4o、o3等をサポート |
APIキー (GOOGLE_API_KEY) |
Gemini 3等をサポート | |
| GitHub Copilot | GitHub認証 (OAuth) | /connect コマンドで認証
|
| Z.AI | APIキー | GLM-5、GLM-4.7等をサポート GLM Coding Plan対応 |
| AWS Bedrock | AWS認証情報 | Anthropicモデルのホスティング |
| Azure OpenAI | Azureエンドポイント | OpenAIモデルのホスティング |
| Ollama | ローカル実行 (認証不要) | ローカルモデルの実行 |
| OpenRouter | APIキー | 複数プロバイダのルーティング |
| Groq | APIキー | 高速推論 |
| Together AI | APIキー | オープンソースモデル |
| Fireworks AI | APIキー | 高速推論 |
推奨モデル
| 用途 | 推奨モデル |
|---|---|
| 高精度コーディング | Claude Sonnet 4.5、GPT-4o |
| 高速処理 | Claude Haiku 4.5、Gemini 2.5 Flash |
| 複雑な推論 | Claude Opus 4.6、o3 |
| ローカル実行 | Qwen 2.5 Coder (Ollama) |
| コスト効率重視 | GLM-4.7、GLM-5 (Z.AI Coding Plan) |
ローカルモデル (Ollama)
Ollamaを使用することで、ローカル環境でモデルを実行できる。
Ollamaのインストール
Ollamaの公式サイトからインストールスクリプトをダウンロードして実行する。
curl -fsSL https://ollama.com/install.sh | bash
モデルのダウンロード
Ollamaでモデルをダウンロードする。
ollama pull qwen2.5-coder
OpenCodeでの設定
opencode.json でOllamaプロバイダを設定する。
{
"$schema": "https://opencode.ai/config.json",
"model": "ollama/qwen2.5-coder"
}
前提条件
OpenCodeをインストールするには、以下の前提条件を満たす必要がある。
標準インストール時の前提条件
| 要件 | 詳細 |
|---|---|
| OS | Linux、MacOS、Windows |
| Node.js | npm経由のインストールに必要 (Node.js 18以上) |
| ネットワーク | AIプロバイダへの接続に必要 |
| AIプロバイダのAPIキー | 使用するプロバイダのAPIキーまたは認証情報 |
インストール
OpenCodeのインストール方法を以下に示す。
クイックインストール (Linux)
公式のインストールスクリプトを使用してインストールする。
curl -fsSL https://opencode.ai/install | bash
Homebrew (MacOS)
Homebrewを使用してインストールできる。
brew install opencode
npm (全プラットフォーム)
npmを使用してグローバルインストールする。
npm install -g opencode
Windows (Scoop / Chocolatey)
Windowsでは、ScoopまたはChocolateyを使用してインストールできる。
Scoopでのインストール
scoop install opencode
Chocolateyでのインストール
choco install opencode
デスクトップアプリケーション
OpenCodeの公式Webサイトにアクセスして、デスクトップアプリケーションをダウンロードする。
対応プラットフォーム:
- Linux (deb、rpm)
- MacOS (dmg)
- Windows (exe)
バージョン確認
インストール後、バージョンを確認する。
opencode --version
初期設定
OpenCodeの初期設定を以下に示す。
プロバイダの認証
OpenCodeの初回起動時に、/connect コマンド または opencode auth login コマンドでAIプロバイダとの認証を設定する。
GitHub Copilotとの連携
OpenCodeはGitHub Copilotの公式パートナーであり、/connect コマンドで認証を設定できる。
OpenCodeを起動する。
opencode
認証を設定する。
/connect
例えば、GitHub Copilotを選択する。
Webブラウザが開き、GitHub認証ページが表示される。
認証を完了すると、OpenCodeでGitHub Copilotが使用可能になる。
APIキーによる認証
環境変数でAPIキーを設定する方法もある。
export ANTHROPIC_API_KEY="sk-..."
export OPENAI_API_KEY="sk-..."
export GOOGLE_API_KEY="..."
環境変数を永続化する場合は、~/.profileファイル等に環境変数 ANTHROPIC_API_KEY を設定する。
export ANTHROPIC_API_KEY="sk-..."
Z.AI (GLM) との連携
Z.AIのGLMモデル (GLM-5、GLM-4.7等) をOpenCodeで使用するには、Z.AI GLM または GLM Coding Planのサブスクリプション契約およびAPIキーが必要である。
GLM / GLM Coding Planの概要
GLM / GLM Coding Planは、Z.AIが提供するAIコーディング向けのサブスクリプションプランである。
| プラン | 月額 | GLM-5対応 | 5時間あたりの目安 |
|---|---|---|---|
| Lite | $10 | 対応 | 約80プロンプト |
| Pro | $30 | 対応 | 約400プロンプト |
| Max | $120 | 対応 | 約1,600プロンプト |
使用可能なモデルは以下の通りである。
- GLM-5 (ProプランおよびMaxプランのみ)
- GLM-4.7
- GLM-4.6
- GLM-4.5
- GLM-4.5-Air
GLM-5はピーク時 (日本時間 15:00〜19:00) に3倍、オフピーク時に2倍のクォータを消費する。
日常的なタスクにはGLM-4.7を使用し、複雑なタスクにのみGLM-5を使用することが推奨される。
認証の設定手順
Z.AIのAPIコンソールにアクセスして、APIキーを取得する。
opencode auth login コマンドを実行して、プロバイダ選択で Z.AI Coding Plan を選択する。
opencode auth login
┌ Add credential │ ◆ Select provider │ ● Z.AI Coding Plan │ ... └
Z.AIのAPIキーを入力する。
┌ Add credential │ ◇ Select provider │ Z.AI Coding Plan │ ◇ Enter your API key │ <Z.AIのAPIキーを入力> └
OpenCodeを起動して、/models コマンドでGLM-5 / GLM-4.7等のモデルを選択する。
opencode
/models
トラブルシューティング : Insufficient balance
GLMモデルの使用時に、以下に示すエラーメッセージが表示される場合がある。
Insufficient balance or no resource package. Please recharge.
このエラーは、OpenCodeのプロバイダ設定がGLM Coding Plan専用のエンドポイントに接続されていない場合に発生する。
GLM Coding Planでは、専用のAPIエンドポイント (https://api.z.ai/api/coding/paas/v4) を使用する必要がある。
プロバイダ選択で Z.AI (通常のAPI) を選択した場合、標準エンドポイント (https://api.z.ai/api/paas/v4) に接続されるため、Coding Planの残高が認識されず、上記のエラーが発生する。
| エンドポイント | URL | 用途 |
|---|---|---|
| 標準 (通常API) | https://api.z.ai/api/paas/v4 | 従量課金のAPI利用 |
| Coding Plan専用 | https://api.z.ai/api/coding/paas/v4 | GLM Coding Planサブスクリプション利用 |
対処方法として、一旦Z.AIの認証情報をログアウトしてから、Z.AI Coding Plan で再度ログインする。
Z.AIの認証情報をログアウトする。
opencode auth logout
再度ログインして、プロバイダ選択で Z.AI Coding Plan を選択する。
opencode auth login
┌ Add credential │ ◆ Select provider │ ● Z.AI Coding Plan ← Z.AI ではなく、Z.AI Coding Planを選択すること │ ... └
APIキーを入力して認証を完了した後、OpenCodeを起動して正常にGLMモデルが使用できることを確認する。
設定ファイル
OpenCodeの設定ファイルは、プロジェクトルート または ホームディレクトリ に配置する。
設定ファイルの場所
設定ファイルは以下の順序で検索される。
- プロジェクトルート
- opencode.json
- ホームディレクトリ
- ~/.opencode/config.json
設定ファイルの例
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5-20250929",
"small_model": "anthropic/claude-haiku-4-5-20251001",
"keybinds": {
"leader": "ctrl+x"
}
}
設定可能な項目を以下に示す。
model- 使用するモデル名 (プロバイダ/モデル名 形式)
- 例:
anthropic/claude-sonnet-4-5-20250929、openai/gpt-4o
small_model- 軽量タスク用のモデル (コスト削減に有効)
- 例:
anthropic/claude-haiku-4-5-20251001
keybinds.leader- リーダーキーの設定
- デフォルト :
ctrl+x
サブエージェントの自動復旧
OpenCodeのサブエージェント (taskツールで起動されるエージェント) は、ストールや一時的な通信障害で Task aborted 等のエラーで停止することがある。
これは、opencode-auto-resumeプラグインを使用することにより、自動的な復旧を行うことができる。
opencode-auto-resumeプラグイン
opencode-auto-resumeプラグインは、OpenCodeのセッションがストールした際に自動的に復旧を試みるプラグインである。
主に以下の状況で有効である。
- サブエージェントが停止応答なくハングした場合
- ツール実行が一時的なエラーで中断した場合
- ストリームが長時間停止した場合
インストール
以下に示すいずれかの方法でインストールする。
npm経由でインストールする。
npm install -g opencode-auto-resume
または、OpenCodeの設定ファイル (opencode.json / opencode.jsonc) の plugin 配列に追加する。
OpenCode起動時に自動的にインストールされる。
設定例
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
[
"opencode-auto-resume",
{
"chunkTimeoutMs": 60000,
"gracePeriodMs": 5000,
"maxRetries": 3
}
]
]
}
下表に、opencode-auto-resumeプラグインの主な設定項目を示す。
| 設定項目 | デフォルト値 | 説明 |
|---|---|---|
chunkTimeoutMs |
45000 | ストリームが停止とみなされるまでの無応答時間 (ミリ秒) |
gracePeriodMs |
3000 | 動作を起こす前の猶予時間 ユーザのESC中止を誤検出しないように調整する。 |
maxRetries |
3 | 最大自動復旧試行回数 |
checkIntervalMs |
5000 | 状態監視のポーリング間隔 |
subagentWaitMs |
15000 | 孤立した親セッションを停止とみなすまでの待機時間 |
注意事項
以下に示す事柄に注意して設定すること。
chunkTimeoutMsを短くしすぎると、処理の重いタスクが誤って停止判定されることがある。- ユーザが意図的に[ESC]キーで中止した場合は、自動復旧させないよう
gracePeriodMsを適切に設定する。 - oh-my-openagent等の他プラグインと併用する場合は、
plugin配列の順序に影響されることがある。
runtime_fallbackの設定 (oh-my-openagent)
oh-my-openagentプラグインを使用している場合は、APIエラーやレート制限、プロバイダ障害時にモデルを自動フォールバックする runtime_fallback 設定も併用することを推奨する。
これにより、サブエージェントの停止リスクをさらに減らすことができる。
~/.config/opencode/oh-my-openagent.json に以下に示すように設定する。
{
"runtime_fallback": {
"enabled": true,
"retry_on_errors": [400, 429, 503, 529],
"max_fallback_attempts": 3,
"cooldown_seconds": 60,
"timeout_seconds": 30,
"notify_on_fallback": true
}
}
下表に、設定項目の説明を示す。
| 設定項目 | 説明 |
|---|---|
enabled |
ランタイムフォールバックの有効 / 無効を設定する。 |
retry_on_errors |
自動リトライを行うHTTPステータスコードのリスト |
max_fallback_attempts |
セッションあたりの最大フォールバック試行回数 |
timeout_seconds |
指定時間内にモデルが応答しない場合に次のフォールバック先へ切り替える。 |
notify_on_fallback |
フォールバック発生時に通知を表示する。 |
併用時の推奨設定
opencode-auto-resumeプラグイン と runtime_fallbackプラグインは目的が異なるため、併用することでカバー範囲が広がる。
- opencode-auto-resume
- サブエージェントのハングやストールに対処する。
- runtime_fallback
- API障害やレート制限等のプロバイダ側エラーに対処する。
両方を有効にした後はOpenCodeを再起動して、プラグインが正常に読み込まれることを確認する。
起動ログに opencode-auto-resume ready 等のメッセージが表示されれば正常に動作している。
CLIコマンド
OpenCodeは、CLIモードと対話モードの両方で使用できる。
主要コマンド
| コマンド | 説明 |
|---|---|
opencode |
TUIを起動 |
opencode run "プロンプト" |
非対話モードでプロンプトを実行 |
opencode --model プロバイダ/モデル名 |
モデルを指定して起動 |
opencode --continue |
前回のセッションを継続して起動 |
opencode auth login |
プロバイダの認証を設定 |
opencode auth logout |
認証情報を削除 |
opencode models |
使用可能なモデル一覧を表示 |
opencode mcp list |
MCPサーバ一覧を表示 |
opencode mcp add サーバー名 |
MCPサーバを追加 |
opencode serve |
ヘッドレスバックエンドサーバを起動 |
opencode --version |
バージョンを表示 |
opencode --help |
ヘルプを表示 |
非対話モード
非対話モードでは、プロンプトをコマンドライン引数として渡すことができる。
使用例
プロジェクトの概要を説明する。
opencode run "このプロジェクトの概要を説明して"
モデルを指定してテストを実行する。
opencode run "テストを実行して" --model anthropic/claude-sonnet-4-5-20250929
TUI (ターミナルユーザーインターフェース)
OpenCodeのTUIは、ターミナルベースの対話型インターフェースである。
スラッシュコマンド
TUI内でスラッシュコマンドを使用して、様々な操作を実行できる。
| コマンド | 説明 |
|---|---|
/new |
新しいセッションを開始 |
/init |
プロジェクト構造を分析 |
/undo |
直前の変更を元に戻す (Git連携) |
/redo |
元に戻した変更をやり直す |
/compact |
会話を要約して圧縮 |
/share |
会話の共有リンクを生成 |
/export |
会話をMarkdownでエクスポート |
/sessions |
過去のセッション一覧を表示 |
/models |
使用可能なモデル一覧を表示 |
/agents |
エージェント一覧を表示 |
/connect |
プロバイダ認証を設定 |
/status |
現在のステータスを表示 |
/mcp |
MCPサーバ一覧を表示 |
/theme |
テーマを変更 |
/editor |
外部エディタで入力 |
/help |
ヘルプを表示 |
/commands |
コマンド一覧を表示 |
/exit |
OpenCodeを終了 |
キーバインド
OpenCodeのリーダーキーのデフォルトは、[Ctrl] + [X]キーである。
リーダーキーを押した後に各キーを入力する。
| キー | 説明 |
|---|---|
| [Ctrl] + [X] -> [N] | 新しいセッション |
| [Ctrl] + [X] -> [L] | セッション一覧 |
| [Ctrl] + [X] -> [T] | タイムライン |
| [Ctrl] + [X] -> [M] | モデル選択ダイアログ |
| [Ctrl] + [X] -> [C] | コンパクト表示 |
| [Ctrl] + [P] | コマンドパレット |
| [Tab] | Plan/Buildエージェント切替 |
| [Page Up] / [Page Down] | スクロール |
| [Shift] + [Enter] | 改行入力 |
ファイル参照とBashコマンド
TUI内でファイル参照とBashコマンドの実行ができる。
ファイル参照
@ でファイルをファジー検索して参照を追加する。
@filename
Bashコマンドの実行
! をプレフィックスとしてBashコマンドを実行する。
!ls -la !git status
CLIバイナリのビルド
ビルドの前提条件
| 項目 | 要件 |
|---|---|
| Bun | 1.3.13以上 (リポジトリルートの package.json 内の packageManager フィールドで bun@1.3.13 が指定されている)
|
| git | 必須ではない。 (packages/script/src/index.ts 内で git branch --show-current が呼び出されるが、環境変数で回避可能)
|
| ネットワーク | ビルド時に https://models.dev/api.json からモデル定義を取得 |
| ディスク空き容量 | 約3[GB]以上 (依存パッケージ + バイナリ約150[MB]) |
前提条件の確認コマンド
# Bunバージョン確認 (1.3.13以上が必要) bun --version # ネットワーク接続の確認 curl -s https://models.dev/api.json | head -c 100
ビルド方式の説明
| 項目 | 内容 |
|---|---|
| 言語 | TypeScript (Bunランタイム) |
| ビルド方式 | Bun.build() の compile オプションでスタンドアロン実行ファイルを生成
|
| ビルドスクリプト | packages/opencode/script/build.ts |
| 出力 | Bunランタイムを内蔵した単一バイナリ (opencode)
|
| 出力先 | packages/opencode/dist/opencode-linux-x64/bin/opencode |
| バイナリサイズ | 約150MB (Bunランタイム、TypeScriptコード、Web UIアセットを含む) |
ネイティブモジュール (@opentui/core、@parcel/watcher) は、ビルドスクリプトが各プラットフォーム向けの 事前ビルド済みバイナリ をダウンロードするため、
CLIビルドではC/C++のソースコードからのコンパイルは発生しない。
このため、CLIのビルドにおいては、デスクトップアプリビルドのようなGCC 10以降の要件はない。
ソースコードのダウンロード
OpenCodeのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf opencode-<バージョン>.tar.gz cd opencode-<バージョン>
ビルド手順
Step 1 : 環境変数の設定
ソースディレクトリがGitリポジトリでない場合 (tarballから展開しただけの場合等) は、packages/script/src/index.ts 内で git branch --show-current が実行されて失敗するため、環境変数を設定する。
export OPENCODE_VERSION=<バージョン 例 : 1.14.41>
export OPENCODE_CHANNEL=latest
環境変数 OPENCODE_VERSION に 0.0.0- で始まらない値を指定すると、git コマンドの呼び出しが回避される。
環境変数 OPENCODE_CHANNEL はビルド成果物の --version 表示およびユーザエージェント文字列に使用される。
Step 2 : Bunのlinker設定
デスクトップアプリビルドのセクションと同様に、リポジトリルートの bunfig.toml に linker = "hoisted" を追加する。
vi /path/to/opencode-<バージョン>/bunfig.toml
[install]
exact = true
linker = "hoisted"
[test]
root = "./do-not-run-tests-from-root"
CLI単体のビルドではViteは使用されないため、isolated linkerでも動作する可能性がある。
ただし、OpenCode Desktopのビルドと環境を共有する場合は、整合性を保つためhoistedモードを推奨する。
Step 3 : 依存パッケージのインストール
リポジトリルートで依存パッケージをインストールする。
このリポジトリはBunワークスペース構成のモノレポであるため、ルートでの bun install 実行で全パッケージの依存関係がインストールされる。
isolated linkerからhoistedに切り替えた直後、または、過去のnode_modulesが残存している場合は、全てのnode_modulesディレクトリを削除してから再インストールする。
cd /path/to/opencode-<バージョン> rm -rf node_modules packages/*/node_modules packages/*/*/node_modules bun install
もし、bun installに失敗する場合は、node-gypをインストールする。
bun add node-gyp -D # または npm install -g node-gyp
Step 4 : ビルドの実行
ビルドスクリプトを実行する。
./packages/opencode/script/build.ts --single
--single フラグは、現在のプラットフォームのみをビルドする。(例: linux-x64)
フラグなしで実行すると、全12プラットフォーム分のクロスコンパイルを試みる。
(linux-x64、linux-arm64、darwin-x64、darwin-arm64、win32-x64、win32-arm64、各baselineおよびmuslバリアント)
ビルドスクリプトの処理内容を以下に示す。
- packages/opencode/script/generate.ts が https://models.dev/api.json からモデルデータを取得して、packages/opencode/src/provider/models.ts 等のスナップショットを生成する。
- Web UI (packages/app) を
vite buildでビルドして、生成されたアセットを単一バイナリに埋め込む。 @opentui/coreおよび@parcel/watcherの全プラットフォーム向けプリビルドバイナリをインストールする。(bun install --os="*" --cpu="*")Bun.build()のcompileオプションでTypeScriptをスタンドアロンバイナリにコンパイルして、packages/opencode/dist/opencode-linux-x64/bin/opencode に出力する。- 自動Smoke testとして、生成されたバイナリの
--versionを実行して、出力を確認する。
動作確認
ビルドが完了した後、バイナリが生成されたかどうかを確認する。
ls -la packages/opencode/dist/opencode-linux-x64/bin/opencode
バージョンを表示する。
./packages/opencode/dist/opencode-linux-x64/bin/opencode --version
ヘルプを表示する。
./packages/opencode/dist/opencode-linux-x64/bin/opencode --help
TUIを起動する。
./packages/opencode/dist/opencode-linux-x64/bin/opencode
システムへのインストール
ビルドしたバイナリを /usr/local/bin/ にコピーすると、システム全体で opencode コマンドとして使用できる。
sudo cp packages/opencode/dist/opencode-linux-x64/bin/opencode /usr/local/bin/opencode sudo chmod +x /usr/local/bin/opencode
ユーザディレクトリにのみインストールする場合は、~/.local/bin/ 等にコピーする。
mkdir -p ~/.local/bin cp packages/opencode/dist/opencode-linux-x64/bin/opencode ~/.local/bin/opencode chmod +x ~/.local/bin/opencode
トラブルシューティング
| 問題 | 原因 | 対策 |
|---|---|---|
git branch --show-current 失敗 |
ソースがGitリポジトリではない | 環境変数を設定する。export OPENCODE_VERSION=1.14.41export OPENCODE_CHANNEL=latest
|
models.dev に接続できない |
ネットワーク制限またはプロキシ環境 | 事前に api.json をダウンロードしておき、環境変数 MODELS_DEV_API_JSON=/path/to/api.json で指定する。詳細は、後述のオフライン環境でのビルドを参照すること。 |
This script requires bun@^X.X.X, but you are using bun@X.X.X |
Bunのバージョンが古い | Bunをアップグレードする。bun upgrade |
| GLIBCバージョン不足 | GLIBCバージョンが古い | --single に加えて --baseline フラグを追加してビルドする。または、muslビルドを検討する。 |
error: File not found ".../packages/sdk/js/node_modules/cross-spawn" |
isolated linker時代の壊れたシンボリックリンクが残存している | 全ての node_modules を削除して、再インストールする。 詳細は、Step 3を参照すること。 |
| Smoke testの失敗 | バイナリの実行可能パーミッションがない、またはGLIBCバージョン不足 | chmod +x でパーミッションを付与する。GLIBCの場合は --baseline フラグを試行する。
|
オフライン環境でのビルド
ネットワークに接続できない場合、モデルデータを事前にダウンロードしておく必要がある。
オンライン環境で事前にダウンロードする。
curl -o api.json https://models.dev/api.json
ビルド時にローカルファイルを指定する。
export MODELS_DEV_API_JSON=/path/to/api.json ./packages/opencode/script/build.ts --single
<br
baselineビルド
CPUがAVX2命令セットをサポートしていない場合、--baseline フラグを追加する。
./packages/opencode/script/build.ts --single --baseline
baselineビルドの出力先は packages/opencode/dist/opencode-linux-x64-baseline/bin/opencode となる。
全プラットフォーム向けクロスコンパイル
--single フラグを外して実行すると、全12プラットフォーム向けのバイナリを生成する。
./packages/opencode/script/build.ts
ただし、Smoke testは現在のプラットフォーム向けのバイナリのみで実行される。
他プラットフォーム向けのバイナリは、対象プラットフォーム上で別途動作確認する必要がある。
デスクトップアプリケーションのビルド
OpenCode Desktopは、Electronベースのデスクトップアプリケーションである。
バージョン 1.14.40以降、Tauri v2からElectronへ移行されており、Rustツールチェーンは不要となっている。
デスクトップアプリケーションの構成
| 項目 | 内容 |
|---|---|
| フレームワーク | Electron 41.x + electron-vite + electron-builder |
| フロントエンド | SolidJS + Vite (TypeScript) |
| メインプロセス | Node.js (TypeScript、packages/desktop/src/main/) |
| サイドカー | OpenCode サーバの Node.js バンドル packages/opencode/dist/node/ として生成され、 utilityProcess.fork でメインプロセスから子プロセスとして起動される。
|
| パッケージング | electron-builder |
| 出力形式 (Linux) | AppImage、debパッケージ、rpmパッケージ |
| ソースディレクトリ | packages/desktop/src/main/ (Electronメインプロセス) packages/desktop/src/preload/ (preloadスクリプト) packages/desktop/src/renderer/ (SolidJSフロントエンド) |
| 設定ファイル | packages/desktop/electron.vite.config.ts (electron-vite) packages/desktop/electron-builder.config.ts (electron-builder) |
旧Tauri版とは異なり、独立したCLIバイナリをサイドカーとしてバンドルしない。
代わりに、packages/opencode/src/node.ts から生成されるNode.jsバンドル (packages/opencode/dist/node/) がメインプロセスのutilityProcessとして起動される。
そのため、CLIバイナリのビルドセクションでビルドした opencode バイナリは、デスクトップアプリのビルドには使用されない。
ビルドの前提条件
Bun ランタイム
ビルドにはBun 1.3.13以上が必要である。
ルートの package.json 内 packageManager フィールドで bun@1.3.13 が指定されている。
bun --version
依存ライブラリのインストール
Electron-builderがLinuxパッケージ (rpm / deb / AppImage) を生成するために、以下に示すツールが必要である。
sudo zypper install -t pattern devel_basis sudo zypper install rpm-build dpkg fakeroot
- rpm-build
- rpmパッケージの生成に必要
- dpkg、fakeroot
- debパッケージの生成に必要
electron-builderはAppImageを生成するために必要なツールを内部で自動取得するため、追加のインストールは不要である。
Tauri版とは異なり、Rustツールチェーン (rustc、cargo) およびwebkit2gtk3-develは不要 である。
ソースコードのダウンロード
OpenCodeのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf opencode-<バージョン>.tar.gz cd opencode-<バージョン>
ビルド
Step 1 : 環境変数の設定
ソースディレクトリがGitリポジトリでない場合、ビルド過程で git branch --show-current が実行されて失敗するため、環境変数を設定する。
export OPENCODE_VERSION=<バージョン 例 : 1.14.41>
export OPENCODE_CHANNEL=<prod / dev / beta のいずれかを指定>
環境変数 OPENCODE_VERSION に 0.0.0- で始まらない値を指定すると、Git呼び出しが回避される。
環境変数 OPENCODE_CHANNEL は dev、beta、prod のいずれかを指定する。
それ以外の値を指定した場合、packages/desktop/electron-builder.config.ts および packages/desktop/electron.vite.config.ts 内で dev として扱われる。
| 値 | appId | productName | RPMパッケージ名 |
|---|---|---|---|
| dev | ai.opencode.desktop.dev | OpenCode Dev | opencode-dev |
| beta | ai.opencode.desktop.beta | OpenCode Beta | opencode-beta |
| prod | ai.opencode.desktop | OpenCode | opencode |
Step 2 : Bunのlinker設定
Bun 1.3のデフォルトのisolated linkerでは、各パッケージの依存関係が node_modules/.bun/ 配下に隔離されたシンボリックリンク構造で配置される。
この構造では、Vite (electron-viteのレンダラビルド) のCommonJSリゾルバが、ワークスペース外の shiki 等のtransitive依存を解決できず、以下に示すエラーが発生する。
[commonjs--resolver] Failed to resolve entry for package "shiki". The package may have incorrect main/module/exports specified in its package.json.
このエラーを回避するため、リポジトリルートの bunfig.toml を編集して、linkerをhoistedモード (npm互換のフラットなnode_modules構造) に切り替える。
vi /path/to/opencode-<バージョン>/bunfig.toml
bunfig.toml ファイルの [install] セクションに linker = "hoisted" を追加する。
[install]
exact = true
linker = "hoisted"
[test]
root = "./do-not-run-tests-from-root"
Step 3 : 依存パッケージのインストール
プロジェクトルートで依存パッケージをインストールする。
このリポジトリはBunワークスペース構成のモノレポであり、ルートで bun install を実行することで全パッケージの依存関係がインストールされる。
すでに過去にisolated linkerで bun install を実行している場合、各パッケージの node_modules 配下に古いシンボリックリンクが残っている。
hoistedモードで再構築する前に、すべての node_modules ディレクトリを削除する。
cd /path/to/opencode-<バージョン> rm -rf node_modules packages/*/node_modules packages/*/*/node_modules
削除しないまま bun install を実行した場合、isolated時代の壊れたシンボリックリンクが残存し、ビルド時に以下に示すエラーが発生する。
error: File not found "/path/to/opencode-<バージョン>/packages/sdk/js/node_modules/cross-spawn"
クリーンアップ後、依存パッケージをインストールする。
bun install
postinstall フックで fix-node-pty が自動実行される。
もし、bun installに失敗する場合は、node-gypをインストールする。
bun add node-gyp -D # または npm install -g node-gyp
Step 4 : Electronビルドの実行
Electronメインプロセス、preload、レンダラのビルドを実行する。
bun run --cwd packages/desktop build
build スクリプト実行時、以下の処理が prebuild フックで自動実行される。
- packages/desktop/scripts/copy-icons.ts でチャンネル別のアイコンを resources/icons/ にコピーする。
- packages/opencode/script/build-node.ts でNode.jsサイドカーバンドルを packages/opencode/dist/node/ に出力する。
その後、electron-vite build がメインプロセス (out/main/)、preload (out/preload/)、レンダラ (out/renderer/) の3つのバンドルを生成する。
ネットワーク接続が必要である。
- packages/opencode/script/generate.ts が https://models.dev/api.json からモデル定義を取得する。
- SentryのPlugin等が外部リソースにアクセスする場合がある。
Step 5 : Linuxパッケージの生成
electron-builderでAppImage、debパッケージ、rpmパッケージを生成する。
electron-builderは、@electron/rebuild を内部で実行して、ネイティブモジュール (msgpackr-extract 等) を Electron向けに再コンパイルする。
msgpackr-extract のビルドには -std=gnu++20 オプションが指定されるため、C++20をサポートするGCC 10以降が必要である。
※注意
GCC 9以前では、以下に示すエラーが発生してビルドが失敗する。
g++: error: unrecognized command line option '-std=gnu++20'; did you mean '-std=gnu++03'? make: *** [extract.target.mk:142: Release/obj.target/extract/src/extract.o] エラー 1 ⨯ node-gyp failed to rebuild '/path/to/opencode-<バージョン>/node_modules/msgpackr-extract'
この時、環境変数 CC および CXX にGCC 9以降を指定する。
export CC=gcc-9
export CXX=g++-9
electron-builderを実行する。
bun run --cwd packages/desktop package:linux
このコマンドは、electron-builder --linux --config electron-builder.config.ts を実行する。
packages/desktop/electron-builder.config.ts 内の linux.target に AppImage、deb、rpmが指定されている。
特定の形式のみ生成する場合は、--linux の後に形式を指定する。
# rpmのみ bun run --cwd packages/desktop package:linux -- rpm # debのみ bun run --cwd packages/desktop package:linux -- deb # AppImageのみ bun run --cwd packages/desktop package:linux -- AppImage
生成されたファイルの確認
出力先は packages/desktop/dist/ である。
ファイル名のフォーマットは packages/desktop/electron-builder.config.ts 内の artifactName で指定される。
(デフォルト: opencode-desktop-${os}-${arch}.${ext})
# rpmパッケージ ls -la packages/desktop/dist/*.rpm # debパッケージ ls -la packages/desktop/dist/*.deb # AppImage ls -la packages/desktop/dist/*.AppImage
動作確認
rpmパッケージをインストールして起動を確認する。
# rpmパッケージをインストール sudo zypper install ./packages/desktop/dist/opencode-desktop-linux-x64.rpm # OpenCodeデスクトップアプリを起動 # OPENCODE_CHANNEL=devでビルドした場合 opencode-dev
debパッケージで動作確認する場合は、以下に示すコマンドを実行する。
sudo dpkg -i ./packages/desktop/dist/opencode-desktop-linux-x64.deb
AppImageの場合、ダウンロードしたファイルに実行権限を付与してそのまま起動する。
chmod +x ./packages/desktop/dist/opencode-desktop-linux-x64.AppImage ./packages/desktop/dist/opencode-desktop-linux-x64.AppImage
トラブルシューティング
| 問題 | 原因 | 対策 |
|---|---|---|
git branch --show-current 失敗 |
ソースがGitリポジトリではない | 環境変数を設定する。export OPENCODE_VERSION=1.14.41export OPENCODE_CHANNEL=dev
|
[commonjs--resolver] Failed to resolve entry for package "shiki" |
Bunのisolated linkerが原因で、ワークスペース外の transitive 依存をViteが解決できない | bunfig.toml ファイルの [install] セクションに linker = "hoisted" を設定して、bun install を再実行する。詳細は、Step 2を参照すること。 |
error: File not found ".../packages/sdk/js/node_modules/cross-spawn" |
isolated linkerで作成された壊れたシンボリックリンクが残存している | 全ての node_modules を削除して、再インストールする。rm -rf node_modules \ packages/*/node_modules \ packages/*/*/node_modules bun install |
models.dev に接続できない |
ネットワーク制限 | 事前に api.json をダウンロードしておき、MODELS_DEV_API_JSON=/path/to/api.json を環境変数で指定する。
|
| rpmパッケージが生成されない | rpm-buildツール不足 | sudo zypper install rpm-build でrpmビルドツールをインストールする。
|
| debパッケージが生成されない | dpkg / fakeroot不足 | sudo zypper install dpkg fakeroot でdebビルドツールをインストールする。
|
| Wayland環境で画面が真っ白になる | ElectronのデフォルトがX11プロトコル | 起動時に --ozone-platform=wayland または --ozone-platform-hint=auto フラグを付与する。例 : opencode-dev --ozone-platform-hint=auto
|
| node-ptyのビルド失敗 | ネイティブモジュールのコンパイル環境不足 | ビルドツールをインストールする。sudo zypper install gcc gcc-c++ make python3 |
| Electronのダウンロード失敗 | ネットワーク制限またはプロキシ環境 | プロキシ環境では HTTPS_PROXY 環境変数を設定する。または ELECTRON_MIRROR 環境変数でミラーURLを指定する。
|
デバッグビルド
問題の調査が必要な場合、開発モードで起動できる。
bun run --cwd packages/desktop dev
このコマンドは electron-vite dev を実行し、HMR (Hot Module Replacement) 対応の開発サーバを起動する。
DevToolsが自動的に有効になり、レンダラプロセスを [Ctrl] + [Shift] + [I] で検証できる。
Oh my OpenAgents (Oh my OpenCode)
Oh my OpenAgentsは、OpenCode用のマルチエージェントオーケストレーションプラグインである。
フック、MCPサーバ、スキル、専門エージェントを活用してOpenCodeの機能を拡張する。
- GitHubリポジトリ
- https://github.com/code-yeongyu/oh-my-opencode oh-my-opencode
主な機能
Oh my OpenAgentsは以下に示す機能を提供する。
| 機能 | 説明 |
|---|---|
| ultrawork | 複雑なタスクを専門エージェントに自動分割して並列処理するマジックワード |
| フック統合 | ツール実行前後に自動実行されるフック (コード品質チェック、テスト自動実行等) |
| MCP統合 | Context7 (ライブラリドキュメント取得)、Sequential Thinking (構造的推論) |
| LSP/AST解析 | Language Server ProtocolとAST解析による高精度なコード理解 |
| スキルシステム | 再利用可能なプロンプトテンプレート 例: /ultra
|
専門エージェント
Oh my OpenAgentsは以下の専門エージェントを提供する。
| エージェント名 | 役割 |
|---|---|
| Sisyphus | プランニングと実装を担当するメインエージェント タスク分割、実装、テスト、反復改善を行う。 |
| Oracle | コードベース全体の調査・分析を担当 プロジェクト構造の把握、依存関係の追跡を行う。 |
| Frontend Engineer | フロントエンド開発を担当 React / Next.js等のUI実装、アクセシビリティ対応を行う。 |
| Librarian | ドキュメント管理を担当 README、API仕様書、変更履歴の作成・更新を行う。 |
| Explorer | 未知のコードベースの探索を担当 新しいプロジェクトの構造理解や技術スタックの調査を行う。 |
インストール
インストールの前提条件は以下の通りである。
- OpenCode v1.0.150以上
- Node.js または Bun
Oh my OpenAgentsをインストールする。
bunx oh-my-opencode@latest # または npx oh-my-opencode@latest
非対話モードでインストールする場合は以下のコマンドを実行する。
bunx oh-my-opencode@latest --non-interactive
設定
設定ファイルは以下の場所に配置する。
- プロジェクト単位
- .opencode/oh-my-opencode.json
- グローバル
- ~/.config/opencode/oh-my-opencode.json
設定ファイルはJSONC (コメント付きJSON) 形式で記述する。
以下に設定ファイルの例を示す。
{
"mcpServers": {
"context7": true,
"thinking": true
},
"agents": {
"sisyphus": true,
"oracle": true,
"frontend": true,
"librarian": true,
"explorer": true
},
"hooks": {
"afterEdit": true,
"afterWrite": true
},
"skills": {
"ultra": true
}
}
下表に、各設定項目の説明を示す。
| カテゴリ | 設定項目 | 説明 |
|---|---|---|
| mcpServers | - | MCPサーバの有効 / 無効を設定する。 |
| context7 | ライブラリドキュメント取得サーバ | |
| thinking | 構造的推論サーバ | |
| agents | - | 専門エージェントの有効/無効を設定する。 |
| sisyphus | 個別に制御可能 | |
| oracle | 個別に制御可能 | |
| frontend | 個別に制御可能 | |
| librarian | 個別に制御可能 | |
| explorer | 個別に制御可能 | |
| hooks | - | フックの有効 / 無効を設定する。 |
| afterEdit | ファイル編集後に自動チェックを実行する。 | |
| afterWrite | ファイル作成後に自動チェックを実行する。 | |
| skills | - | スキルの有効 / 無効を設定する。 |
| ultra | ultraworkスキルを有効化する。 |
使用方法
プロンプトに ultrawork というキーワードを含めるだけで、複雑なタスクを専門エージェントに自動分割して並列処理する。
使用例を以下に示す。
- 大規模リファクタリング
ultrawork このプロジェクトの認証システムをリファクタリングして
- 新機能実装
ultrawork ユーザ管理機能を実装して
- ドキュメント調査
ultrawork このコードベースを分析してドキュメントを作成して
アンインストール
プロジェクト単位の設定ファイルを削除する。
rm -rf .opencode/agents \
.opencode/hooks \
.opencode/skills \
.opencode/mcp.json \
.opencode/oh-my-opencode.json
グローバル設定を削除する。
rm -rf ~/.config/opencode/oh-my-opencode.json
注意事項
Oh my OpenAgentsを使用する際は以下の点に注意すること。
- AnthropicモデルのOpenCode対応はコミュニティ主導の取り組みであり、Anthropicの公式サポート対象外である。
- フック機能により外部コマンドが自動実行されるため、設定内容を事前に確認すること。
- MCPサーバはネットワークアクセスを行う場合があるため、セキュリティポリシーに準じて使用すること。
注意事項
プライバシーとデータ取り扱い
OpenCodeはオープンソースであり、コードの透明性を確保している。
- ローカルでの処理を優先、コードの送信は最小限に抑制する。
- 使用するAIプロバイダのプライバシーポリシーを確認すること。
- GitHubリポジトリで実装を検証可能
生成コードの検証
AIが生成したコードは必ずレビューして検証する。
- コードの動作を確認
- セキュリティ上の問題がないか確認
- ライセンス上の問題がないか確認
- コーディング規約に準拠しているか確認
セキュリティ
APIキーやパスワード等の機密情報をコードに含めないように注意する。
- APIキー、パスワード等の機密情報をコードに含めない。
- 環境変数や設定ファイルで管理する。
- .gitignore ファイルで機密情報を含むファイルを除外する。