世間がバイブコーディングで賑わう中、「AIにターミナル触らせるなんて怖すぎる」「AIのサブスク高いな〜」と思い、ChatGPTくらいしか触れて来ませんでした。
そんな中で、最近周囲にClaude Codeを推す人がすごく増えたと感じるようになりました。 そんなにいいなら使ってみようかと、重い腰をあげてコーディングAIを導入をすることを決意しました。
導入するにあたって要件は 3つ
- AIがコマンド実行できる環境を隔離可能
- 月500円以下の定額制
- コーディングの並列可能
要件2について「そんな夢のようなサービスあるわけないじゃん」と思われるかもしれませんが…
そんなに頻繁にプログラミングするわけではないので、レートリミットがキツめでもいいから強いモデルを使えるプランがあればいいなと思ったのです。
まぁなかったんですけどね
調べた結果、DockerコンテナにインストールしたOpenCodeで無料モデルを使う + Jujutsu で要件を満たせそうだったのでやってみることにしました。 おすすめされていたClaude Codeではありませんが、OpenCode+無料モデルでも悪くはないらしいのでお試しということで
OpenCode
OpenCode はオープンソースのAIコーディングエージェントです。 APIキーを入力してClaudeやChatGPTのモデルを使うだけでなく、APIキーなしで無料お試しモデルを使えたりローカルLLMでコーディングしたりもできます。
PC本体にOpenCodeをインストールしてもいいのですが、LLMがアクセスするテスト実行環境をDockerコンテナに隔離しようとすると結構大変そうでした。 どうせ開発環境はDockerコンテナとして構築しているので、それならそこにインストールした方が楽だよねという方針でやっていきます。
RUN curl -fsSL https://opencode.ai/install | bash
ENV PATH="/root/.opencode/bin:${PATH}"
インストールは簡単。 無料モデルを使うだけならDockerfileに2行追加するだけで済みます。 お手軽〜
試しにPythonコンテナにインストールして動かしてみましょう。
FROM python:3.12-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
bash \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://opencode.ai/install | bash
ENV PATH="/root/.opencode/bin:${PATH}"
WORKDIR /app
CMD ["bash"]
services:
sandbox:
build:
context: .
dockerfile: Dockerfile
tty: true
volumes:
- ./:/app
Dockerfile と docker-compose.yml を用意したら
docker compose build docker compose up -d docker compose exec sandbox "opencode"
コンテナをビルド&起動して、OpenCodeを実行します。

そうするとTUIが表示され、お仕事を頼める状態になります。 これにて完了!
Jujutsu
Jujutsu はGit互換のバージョン管理システムです。 過去のコミットが修正しやすかったり、コンフリクトの修正を後回しにできたり、ワークスペースというコミットが自動同期される作業ディレクトリを複数作成できたりとAI向きの特徴があります。
中でもワークスペース機能がミソで、これのおかげで並列コーディングが安全にできるようになるのです。
インストール
brew install jj
MacならHomebrewで一発です。
Macユーザーでない方は 公式ドキュメント を確認してください。
署名
jj config set --user user.name "USER_NAME" jj config set --user user.email "mail@example.com"
Gitと同じように署名とメールアドレスを設定しておきましょう。
よく使うコマンド一覧
JujutsuのコマンドはGitとは違うところもあるので、ぼくが使ったコマンドのひとくち解説を載せておきます。
詳しい使い方は 公式ドキュメント を見てくださいね。
リポジトリの準備
! 1 gitリポジトリのクローン jj git clone https://github.com/XXX/YYY cd YYY ! 2 既存GitリポジトリでJujutsuを有効化 jj git init --colocate ! 3 新規プロジェクトの作成 jj git init
新規チェンジの作成&移行
! 現在のチェンジの子を作成して移行 jj new ! 親になるチェンジを指定可能 jj new main ! コミットメッセージを事前に指定可能 jj new -m "コミットメッセージ"
チェンジはGitでいうコミットに対応する概念ですが、明示的なステージングやコミットが不要だったりといった違いがあります。
チェンジの修正
jj new 修正したいチェンジ jj squash
「jj squash」でカレントチェンジを親チェンジに合体させます。 Gitでいうところの「git rebase -i」です。
コミットメッセージの設定
jj desc -m "FEAT: XXX"
チェンジの状態確認
jj st
変更したファイル名・カレントチェンジ・親チェンジが表示されます。
変更内容の確認
jj diff
ファイルの変更内容が表示されます。
チェンジの移動
jj rebase -s 移動したいチェンジ -d 移動先で親になるチェンジ
ログの確認
! コミットのツリー jj log ! 修正やundoなども含む操作履歴 jj op log
取り消し
jj undo
ブックマークの作成
ブックマークはGitでいうブランチに対応する概念です。
jj bookmark create ブックマーク ! 省略形 jj b c ブックマーク
ブックマークの移動
ブックマークはブランチとは違い勝手に移動してくれないので明示的に動かす必要があります。
jj bookmark move ブックマーク ! 省略形 jj b m ブックマーク
これでカレントチェンジにブックマークが付きます。
ブックマークのプッシュ
jj git push --bookmark ブックマーク
Gitからはブランチとして見えます。
ワークスペースの作成
jj workspace add ワークスペース
ワークスペースの削除
jj workspace forget ワークスペース rm -rf ワークスペース
並列でコーディングさせてみる
ワークスペースを2つ作成し、並列でコーディングさせてみます。
\$ jj workspace add .w_A \$ jj workspace add .w_B \$ jj log @ zswuyrun mail@example.com 2026-01-17 15:43:01 default@ e3d46e4b │ (empty) (no description set) │ ○ ntqrkqtu mail@example.com 2026-01-17 15:43:22 ".w_B"@ d539b337 ├─╯ (empty) (no description set) │ ○ rxmxwmwn mail@example.com 2026-01-17 15:43:20 ".w_A"@ df0b74ec ├─╯ (empty) (no description set) ○ rlpoptxl mail@example.com 2026-01-17 15:42:56 0adae9ab │ INIT ◆ zzzzzzzz root() 00000000

ターミナルを2つ開き、それぞれcdコマンドでworkspaceへ移動したのちコンテナを起動してOpenCodeを実行します。
今回は素数を表示するプログラムとフィボナッチ数を表示するプログラムの作成を依頼しました。

どちらもちゃんとできていますね。
ファイルの生成ディレクトリがきちんと分かれていることから、環境分離と並列コーディングがうまくいっていることが確認できます。
$ jj rebase -s ntqrkqtu -d rxmxwmwn $ jj new ntqrkqtu Working copy (@) now at: vlsurrwx 307d3b91 (empty) (no description set) Parent commit (@-) : ntqrkqtu b1948a7d (no description set) Added 2 files, modified 0 files, removed 0 files $ jj log @ vlsurrwx mail@example.com 2026-01-17 15:59:56 default@ 307d3b91 │ (empty) (no description set) ○ ntqrkqtu mail@example.com 2026-01-17 15:57:59 ".w_B"@ b1948a7d │ (no description set) ○ rxmxwmwn mail@example.com 2026-01-17 15:55:59 ".w_A"@ ffa1a901 │ (no description set) ○ rlpoptxl mail@example.com 2026-01-17 15:42:56 0adae9ab │ INIT ◆ zzzzzzzz root() 00000000 $ ls docker-compose.yml Dockerfile fibonacci.py prime.py
rebaseして一本道に整えてみました。
並列コーディングの成果をちゃんとマージできていますね。
アプリなどを作ったりしています! よかったらみていってください→
つくったもの
今のイチオシ↓

