CF精算表パイプラインを全12論点に拡張した
朝、Googleタスクを開くと前日の積み残しが4件並んでいた。1つずつ潰しながらコードを読み返すうちに、借入金だけに対応していたCF精算表生成パイプラインの狭さが目に留まった。貸付金も資本政策もまだ手作業でExcelを作っている。今日はこれを全論点に広げると決めて、キーボードに手を置いた。
前日の積み残しを片づける
Googleタスクに残っていた4件は、前日に設計だけして実装が追いつかなかった項目。朝イチで集中して片づけたことで、午前中の残り時間をパイプライン拡張に充てられた。
進捗マトリックスの整理
論点が増えると「どこまで終わったか」が頭の中だけでは追えなくなる。縦軸に全12論点(3級6つ + 2級6つ)、横軸にステップ(a: 取引モジュール / b: Excel生成 / c: スプレッドシート変換)を並べたマトリックスを作った。
これで「貸付金のステップbが未着手」「資本政策のステップcが確認待ち」といった状態が一目で分かるようになった。
Excel命名規則の策定
ファイルが増えるほど命名のブレが痛くなる。以下の形式に統一した。
CF_{論点}_{ステップ番号}_{ステップ名}_{日時}.xlsx
ステップ番号は級ごとに帯域を分けた。3級は 30x、2級は 20x。これでファイル名をソートするだけで級もステップも区別できる。
貸付金のCFWS生成パイプライン構築
既存の gen_cfws_multi_year.py は借入金専用だった。ここに貸付金を追加するために、まず DUAL_ACCOUNTS を辞書形式にリファクタリングした。
# Before: リストでハードコード
DUAL_ACCOUNTS = ["短期借入金", "長期借入金", ...]
# After: 辞書で論点ごとに管理
DUAL_ACCOUNTS = {
"borrowing": ["短期借入金", "長期借入金", ...],
"lending": ["短期貸付金", "長期貸付金", ...],
}
辞書にしたことで、新しい論点を追加するときはキーを足すだけで済む構造になった。
資本政策(株主資本)Excel生成
gen_equity_lifecycle_xlsx.py に --level 引数を追加した。3級は設立のみ(300万円)、2級は増資パターンを含む。同じスクリプトで級別のExcelを分けて生成できるようになった。
出資額の計算式化
最初は出資額300万円をハードコードしていたが、途中で「1株単価 x 発行株数 = 出資額」の計算式に書き直した。増資パターンに対応するには、株数と単価を変数にしておかないと2級側が破綻する。
全取引モジュールに設立出資を共通追加
どの論点のExcelを開いても、取引No.1には会社設立の出資仕訳(300万円)が入っている必要がある。mf_journal.py に FOUNDING_JOURNALS 定数を追加し、全取引モジュールの先頭に差し込む形にした。
同様に、全Excel出力に TPL_資本政策 シートを追加した。gen_equity_lifecycle_xlsx.py の write_schedule_sheet() を呼び出す形で、各生成スクリプトから共通利用している。
金額の見直しと全Excel再生成
借入金と貸付金の金額を500万円から200万円に変更した。教材としての分かりやすさを優先した判断だが、変更の影響は全Excelに波及する。パイプラインが整備されていたおかげで、コマンド一発で再生成できた。手作業でExcelを開いて直していたら半日は潰れていたと思う。
試行錯誤の記録
SUMIFS数式化の断念
年次推移表の各セルをSUMIFS数式で動的に計算させようとした。月次仕訳データから年度ごとに集計すれば、仕訳を追加するだけで推移表が自動更新される。
しかし、繰越利益剰余金の扱いで手が止まった。当期の繰越利益剰余金は「前期末残高 + 当期純利益」だが、当期純利益自体が収益・費用の差額で、さらに配当控除も絡む。SUMIFSだけでは表現しきれず、数式が膨れ上がって可読性が消えた。ハードコード版にリバートして先に進んだ。
スプレッドシートエクスポートの数式問題
Excelで組んだ数式をGoogle Sheetsにエクスポートすると、数式が値に変換されてしまう場面があった。Pythonの openpyxl で書いた数式がそのまま残る保証がない。
対応策として、スプレッドシート側には gws CLI経由でPythonスクリプトから直接数式を書き込む方式に切り替えた。Excelをマスターにして、スプレッドシートは確認用として後追い変換する「Excelファースト」方針が固まった瞬間だった。
名称統一と旧ファイル退避
これまで「計算モジュール」と呼んでいたものを「取引モジュール」に統一した。実態は仕訳データ(取引の記録)を生成するモジュールであり、「計算」では意味が伝わりにくかった。
合わせて、命名規則変更前の旧ファイルは old/ ディレクトリに退避するルールを追加した。削除ではなく退避にしたのは、差分確認で戻りたい場面があるため。
Excelファースト方針のまとめ
今日の作業を通じて、開発フローが明確になった。
- 取引モジュール(Python)で仕訳データを定義
- Excel生成スクリプト(openpyxl)でマスターExcelを出力
- スプレッドシート変換(gws CLI)で確認用シートを後追い生成
Excelが唯一の正(Single Source of Truth)。スプレッドシートは閲覧・共有用。この順序を守る限り、数式消失の問題は起きない。
振り返り
朝4件だった積み残しが夕方にはゼロになり、代わりに全12論点のパイプラインが立ち上がった。SUMIFS数式化を試みて挫折し、ハードコードに戻す判断を30分で下せたのは、完成を優先する感覚が身についてきた証拠だと思う。
明日は残りの論点でステップb(Excel生成)を埋めていく。マトリックスの空欄を1つずつ塗り潰していけば、全体の完成時期が見通せるようになる。