Module Split Extract
指定されたファイルから1つのモジュールを抽出し、分割を実行する。
引数: 抽出元ファイルパス(例: packages/core/src/root.zig)
手順
- •対象ファイルを読み、関数一覧と行範囲を把握する
- •target structure に基づき、抽出すべきモジュールを特定する
- •最も依存が少ないモジュールから順に 1つだけ抽出する(一度に全部やらない)
- •抽出の実行:
a. 新ファイルを作成し、対象関数を移動
b. 元ファイルで
@importと関数呼び出しを修正 c.zig buildでコンパイル確認 d.zig build testでユニットテスト確認 e.bash tests/differential/run.shで差分テスト確認 - •全テストが通ったらコミット(1モジュール = 1コミット)
- •
wc -lで元ファイルサイズを確認し報告
Zigモジュール分割パターン
Database structのメソッドを外部ファイルの free function に変換する:
zig
// convert.zig
const std = @import("std");
const value_mod = @import("value.zig");
const Value = value_mod.Value;
pub fn valueToText(allocator: std.mem.Allocator, val: Value) ![]const u8 {
// self.allocator → allocator に置き換え
}
pub fn formatFloat(allocator: std.mem.Allocator, f: f64) ![]const u8 {
// ...
}
zig
// root.zig
const convert = @import("convert.zig");
// 呼び出し側: self.valueToText(val) → convert.valueToText(self.allocator, val)
重要な注意事項
- •一度に1モジュールだけ抽出する
- •各抽出後に必ず全テストを実行する
- •テストが壊れたら即座に修正する
- •Database structのフィールドやpub fnは root.zig に残す
- •抽出先ファイルも500行以内であること
- •コミットメッセージ:
refactor: extract <module> from <source>