Garbage collecting OpenCodeの2.4GBセッションデータベース

Dev.to / 2026/4/15

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • OpenCodeのローカルSQLiteセッションデータベース(opencode.db)は、各ターンごとに「思考(reasoning)」の出力全文やツール結果を保存するため、急速に肥大化する可能性があります。そのため、使用が軽い場合でもディスク使用量が数GBに達することがあります。
  • この記事では、OpenCodeにこれらの保存済みセッションを自動的にクリーンアップする機能(ガーベジコレクション)が内蔵されていないため、データベースが無期限に増え続け、最終的にストレージの「ブラックホール」になり得ると述べています。
  • 同じ期間でのストレージ増加をClaude Code(約86MB)やCodex(約95MB)と比較し、OpenCodeの方式が相対的に重いことを強調しています。
  • 著者は「ocgc」(OpenCode Garbage Collector)を紹介し、`ocgc status` や `ocgc analyze` といったコマンドで、どこに容量が消費されているかを調べ、最も大きいセッションを特定できるようにしています。
  • 提案されるワークフローは、ガーベジコレクタを実行して、古い/不要なセッションデータを削除し、opencode.dbファイルの制御されない増大を抑えてディスク容量を回収することです。

私は約1か月ほど、時々OpenCodeを使っていました。主に、小さなVPSで単一のサイドプロジェクトに取り組んでいるだけです。空きディスク容量がどんどん減ってきたので掃除しようと思ったところ、これが目に留まりました:

$ ls -lh ~/.local/share/opencode/opencode.db
-rw-r--r-- 1 ubuntu ubuntu 2.4G Apr 15 03:25 opencode.db

1か月、ヘビーではない利用、単一プロジェクト、セッションDBが2.4GB。これは正気ではないように思えます。

何がスペースを食っているのか

エージェントに詳しい背景を教えてもらったところ、OpenCodeはすべてのターンについて、思考&推論の出力を丸ごと1つのSQLiteデータベースに保存していることが分かりました。私の場合、この2.4GBの大半は推論トークンとツール結果で、実際の会話テキストは全体の1%にも満たないです。それらをすべて残しておくことの本当の価値がよく分かりません。しかも(強力なSQLiteのおかげで)単一のSQLiteデータベースに溜まっていくのには驚きました。そして、OpenCodeにこのための組み込みのクリーンアップがないのを見てさらに驚きました。なのでこれは、node_modulesよりも巨大なブラックホールになるまで、ずっと増え続けるだけです。

参考までに、Claude Codeは同期間で86MBです。Codexは95MBです。

OpenCodeのセッションDBをガベージコレクトしよう

そこで私は(実際にはclaude codeが)ocgc(OpenCode Garbage Collector)を作りました。

uv tool install ocgc

ocgc statusで、どこに容量が消えているかが分かります:

ocgc status showing OpenCode database size breakdown

ocgc analyzeでは、最も重いセッションと、データベースがどれくらいの速さで増えているかが表示されます:

ocgc analyze showing top OpenCode sessions by size

実際のガベージコレクトはocgc purgeで行います:

ocgc purge --subagents --older-than 7d

ocgc purge removing 809 sessions and freeing 1.9 GB after vacuum

809セッション、1.8GB。なくなりました。続いてocgc vacuumで、ディスク容量を実際に取り戻します。2.3GBから438MBへ減りました。

データベースを掃除した後、OpenCodeのsnapshot/session_diff/ディレクトリでもかなり容量を使っていることに気づきました。そのためocgcはそれらもあわせてクリーンアップします。

~/.local/share/opencode/opencode.dbを確認してみてください。ディスク容量は木から生えてきません。