Skip to main content

ホームディレクトリ衛生 (~/.moai) NEW

更新 2026-08-21 5分で読めます GitHub で編集 ↗
NEW · v3.1.1

ホームディレクトリ衛生 (~/.moai)

MoAI がプロジェクトの外に置く状態は、すべて ~/.moai の一箇所に集まります。プロファイルごとのデバッグログ、ダウンロードしたリリースバイナリ、セッションレジストリ、ワークツリー台帳、バックアップがここに溜まっていきます。長く使ったマシンでは、このディレクトリは静かに数ギガバイトまで育ちます — 誰も見ない場所なので、ディスクが埋まるまで気づかれません。

情報
一行でいうと: MOAI_HOME がホームルートの場所を決め、moai doctor がどれだけ埋まっているかを教え、moai clean --home が許可リストの内側だけを整理します。三つの表面でひとつの話です。

何がどこに溜まるか

flowchart TD
    Root["~/.moai (ホームルート)"] --> Keep["保護 — 決して削除されない"]
    Root --> Clean["整理対象 — 許可リスト 4 カテゴリ"]

    Keep --> K1["config/ · state/ · projects/
worktrees/ · mcp/ · bin/
search/ · studio/ · plugins/"] Keep --> K2["launch.yaml · preferences.yaml
credentials で始まるすべてのファイル"] Clean --> C1["claude-profiles/<プロファイル>/debug/
(保持期間を過ぎたもの)"] Clean --> C2["releases/
(現行バージョン + 最新 3 個を除く)"] Clean --> C3["logs/
(ルートのログ、保持期間を過ぎたもの)"] Clean --> C4["backups/removed-*
(保持期間を過ぎたもの)"]

許可リストにないものはスキャナからそもそも見えません。そして保護は許可リストの内側でも勝ちます — 古い backups/removed-* ディレクトリの中に credentials で始まるファイルが一つでもあれば、そのディレクトリは丸ごとスキップされます。部分削除でバックアップを半端にするくらいなら、まったく手を触れません。

~/.claude はどの経路でも削除されません。moai doctor はサイズを報告するだけで、moai clean --home は読みもしません。

MOAI_HOME — ホームルートを移す

~/.moai の位置を別の場所に移すには、MOAI_HOME 環境変数にルートのパスを指定します。

bash
export MOAI_HOME=/Volumes/work/moai-home

規則は三つです。

動作
空でない絶対パスそのパスがホームルートになります
空文字列未設定と同じ — ~/.moai に戻ります
相対パス無視されます — ~/.moai に戻ります
注意
シェルフックは MOAI_HOME に従いません。 この変数を読むのは Go バイナリ(moai CLI とそのサブコマンド)だけです。.claude/hooks/ 配下のシェルスクリプトラッパーや、~/.moai のパスを文字列として直接書く外部ツールはこの変数を参照しないため、既定の位置を見続けます。つまり MOAI_HOME を移すとGo 側の状態だけが付いてきて、シェルフックが使うパスとは分かれます。この制約を受け入れられるときだけ使ってください。

ユーザーのホーム自体は HOME 優先で解決されます。HOME が空でなければその値をそのまま使い、空のときだけ OS のホーム照会にフォールバックします。おかげでテストやコンテナで HOME を差し替えると、どのプラットフォームでも同じように効きます。

moai doctor — まずどれだけ埋まっているかを見る

moai doctor の診断一覧に Home Disk Usage 項目が並びます。勧告 (advisory) の性格なので、超過しても他のコマンドを止めません。

bash
moai doctor

この項目が報告するもの:

項目内容
全体サイズ~/.moai の総容量と上位 3 項目
プロファイル別内訳claude-profiles/<プロファイル> それぞれのサイズとカテゴリ分解
リリース数releases/ に残るバイナリ数と現行バージョン
整理可能量下の moai clean --home が実際に削除できる推定バイト数
~/.claudeサイズのみ報告 — 決して整理対象ではない

整理可能量が閾値(コンパイル既定値 500 MB)を超えると状態が WARN に変わり、メッセージが moai clean --home を勧めます。それ未満なら OK のままです。整理可能量の推定は moai clean --home が使うのと同じスキャナを呼ぶので、doctor が言う数字と clean が削除する一覧がずれることはありません。

moai clean --home — 許可リストの内側だけを整理

bash
# 既定は dry-run — 何が削除されるかを報告するだけ
$ moai clean --home

# 実際に削除
$ moai clean --home --force
  • dry-run が既定です。--force を明示しないかぎり何も削除されません。
  • 削除範囲は上の図の許可リスト 4 カテゴリだけです。
  • releases/ では現在実行中のバージョン残りのうち最新 3 個が保護され、それ以外のバイナリと対になる .sha256 ファイルが候補になります。version.jsonLATEST は候補になりません。
  • 残り三つのカテゴリ(debug/、ルートの logs/backups/removed-*)は保持期間を過ぎたものだけが候補になります。

state.home_retention_days

保持期間は HOME ティアの設定ファイル ~/.moai/config/sections/state.yaml から読まれます。

yaml
state:
  home_retention_days: 30
動作
キーなし / ファイルなしコンパイル既定値の 30 日
正の整数その日数より古い項目だけが候補
0整理無効 — 候補が一つも出ません
情報
このキーは、プロジェクトの .moai/config/sections/state.yaml にある state.retention_days(プロジェクトの実行成果物の保持)とは別のキーで別のティアです。ホームは一つなのにプロジェクトは複数あるため、プロジェクトごとに異なる保持期間で同じホームを整理してしまわないよう、読む場所を分けてあります。

手を動かす順序

flowchart TD
    A["moai doctor
Home Disk Usage を確認"] --> B{"整理可能量が
閾値を超えているか"} B -->|いいえ| Z["やることなし"] B -->|はい| C["moai clean --home
(dry-run — 一覧を読む)"] C --> D{"一覧は
納得できるか"} D -->|いいえ| E["state.home_retention_days を調整し
もう一度 dry-run"] E --> C D -->|はい| F["moai clean --home --force"] F --> G["moai doctor で再確認"]

関連ドキュメント