OpenCodeでもループエンジニアリングはできる|しかも無料で
前回の「Codex編」、前々回の「Claude Code編」に引き続き、今回は OpenCode でループエンジニアリングを試してみた。
先に結論を言う。できた。しかも無料で。
この企画の流れ
この記事は3部作のオチにあたる。
Claude Code編 — サブエージェント+フックで本格ループ(有料)
Codex編 — FizzBuzzで小さく試す(一部無料枠あり)
OpenCode編 ← イマココ。DeepSeekモデルなら完全無料
Claude CodeとCodexは月$20~+API課金・追加使用量どちらも使えば使うほどお金がかかる。じゃあ、無料の組み合わせでもループエンジニアリングってできるの? というのが今回のテーマだ。
結論から言うと、できる。しかも気持ちよく回る。
OpenCodeって何
OpenCodeはCLIベースのオープンソースAIエージェントだ。
Claude Codeにインスパイアされつつ、いくつかアプローチが違う。いちばんの違いは、モデルを自由に選べること。OpenAIでもAnthropicでも、そして DeepSeek でも動く。DeepSeekは推論モデルがかなり安く、無料枠もある。つまり、お金をかけずにループエンジニアリングが試せる。
今回の検証内容
前回のCodex編とまったく同じ条件で試した。
わざとバグを入れたFizzBuzzを用意する(15でだけ "Fizz" を返してしまう)
テストを書いて期待値を固定する
テストを実行して失敗を確認する
最小差分で直す
再実行してPASSするまで回す
この「書く人」と「採点する人」を分けて、合格するまで自動で繰り返す仕組みがループエンジニアリングだ。
用意したもの
プロジェクト構成は以下の通り。
loop_engineering/
├── fizzbuzz.py # わざとバグ入り
├── test_fizzbuzz.py # unittest (4ケース)
└── AGENTS.md # ループエンジニアリングのルール
バグ入りFizzBuzz(fizzbuzz.py)
def fizzbuzz(value: int) -> str:
if value % 3 == 0:
return "Fizz"
if value % 5 == 0:
return "Buzz"
return str(value)
15のとき、3の倍数判定が先に来るので "Fizz" が返ってしまう。あるある。
テスト(test_fizzbuzz.py)
class TestFizzBuzz(unittest.TestCase):
def test_normal(self):
self.assertEqual(fizzbuzz(1), "1")
def test_fizz(self):
self.assertEqual(fizzbuzz(3), "Fizz")
def test_buzz(self):
self.assertEqual(fizzbuzz(5), "Buzz")
def test_fizzbuzz(self):
self.assertEqual(fizzbuzz(15), "FizzBuzz") # ← ここが落ちる
15のときだけ "FizzBuzz" を期待する。これが完了条件の基準になる。
実演:ループを回す
1周目:テスト実行→FAIL確認
$ python test_fizzbuzz.py
..F.
======================================================================
FAIL: test_fizzbuzz
AssertionError: 'Fizz' != 'FizzBuzz'
想定どおり、15のケースだけ落ちた。エラーメッセージは明確で、何を直せばいいかが一瞬でわかる。
2周目:最小差分で修正
ここがポイント。余計なリファクタリングは一切しない。 直すべきは1箇所だけ。15の倍数判定を最初に持ってくる。
def fizzbuzz(value: int) -> str:
if value % 15 == 0:
return "FizzBuzz" # ←15の倍数を先に判定
if value % 3 == 0:
return "Fizz"
if value % 5 == 0:
return "Buzz"
return str(value)
3周目:再実行→PASS確認
$ python test_fizzbuzz.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s
OK
全4ケースPASS。たった1行追加しただけで完了。
ループは2周で終わった。かかった時間は数十秒、課金はゼロ。
なんでOpenCodeだと「無料」なのか
普通、AIエージェントを使うと「呼ぶたびにお金がかかる」という壁がある。ループエンジニアリングはテスト→修正を繰り返すから、回せば回すほど課金が気になる。
OpenCode + DeepSeekの組み合わせだと、この壁がほぼなくなる。
モデルが安い — DeepSeekはGPTより1桁安い
無料枠がある — 軽い検証なら十分収まる
オープンソース — 自分でホストすればAPI代すら不要
「気にせずループを回せる」というのは、実は結構なアドバンテージだ。
Claude Code / Codex / OpenCode 比較

OpenCodeに足りないものもある。サブエージェントの管理体系はClaude Codeほど成熟していないし、Stopフックのような強制ループ機構もない。
でも、「AGENTS.mdにルールを書いて、テストで検証して、合格するまで回す」という基本設計は、Claude Codeとまったく同じ思想で書ける。
大事なのはツールじゃない
今回3つのツールで同じFizzBuzzを回してみて、気づいたことがある。
ループエンジニアリングの本質は、ツールの機能ではない。
そうではなくて、「完了条件を機械判定可能な形で定義する」「実装と検証を分離する」「合格するまで諦めない」という3つの考え方だ。これはClaude CodeでもCodexでもOpenCodeでも、あるいは人間同士のコードレビューでも同じように機能する。
高級なツールを使えば成功率が上がることはある。でも、「なければできない」ものではない。
まとめ
OpenCode + DeepSeek でもループエンジニアリングはできる。
今回のFizzBuzzでは、バグの特定→修正→再実行→合格までを数十秒で完了できた。課金はゼロ。つまり、お金を理由にループエンジニアリングを諦める必要はない。
まずはFizzBuzzで試す
完了条件をテストとして書く
ルールをAGENTS.mdに書く
回す。直す。合格するまで。
これだけ。無料でできる。だから、やってみてほしい。
