2026年2月12日の開発日記
朝から確定申告資料の整理に始まり、tax-assistantのマルチクライアント運用を本格化させた一日。資料リネーム92件、クライアント切替機能の設計から実装完了、仕訳ルール自動推測・提案機能の構築、医療費明細OCR対応、PDF複数ページ変換、新規クライアント登録設計まで、9つのトピックを一気に進めた。
今日やったこと
1. 確定申告資料の一括リネームとスプレッドシート連携
Google共有ドライブ上の確定申告資料(PDF・画像・CSV)92件を命名規則に沿ってリネームした。ImageMagickでPDFを画像変換し、Claude Codeで中身を読み取ってファイル名を生成。リネーム手順をtax-doc-renameスキルとしてパッケージングし、Googleスプレッドシートにドライブリンクも登録した。
主な成果:
- 92件 + 追加6件のリネーム完了
- 命名規則:
2025_タイトル_金額形式 - tax-doc-renameスキルの作成(来年以降の再利用用)
- Googleスプレッドシートにドライブリンク一括登録
2. tax-assistant: 医療費明細対応と帳票設定改善
医療費明細の帳票タイプ追加、OcrSchemaEditorのバグ修正、帳票タイプの論理削除によるクライアント別管理、インポートスクリプトの改善、25件のレシートOCR処理を実施した。
主な成果:
- OcrSchemaEditorの
X-Client-Idヘッダー未送信バグ修正 - 医療費明細のOCRスキーマ追加、確定申告帳票でのUI分岐
- 帳票タイプの論理削除(
is_activeフラグ) - 読取一覧の帳票種別をAPI動的取得に変更
- 25件のレシートOCR処理と並列バリデーション
詳細: 医療費明細対応と帳票設定改善
3. tax-assistant: CSV取込 & 仕訳ルールインポート
新規クライアント(個人事業主)を登録し、マネーフォワードからエクスポートしたカード明細CSVをインポートした。さらにGoogleスプレッドシートで管理していた自動仕訳ルール85件をDBに取り込んだ。
主な成果:
- 新規クライアント登録(client_003)
- DBパスのハードコード問題を発見・修正
- document_typesテーブルの初期化漏れを修正
- 自動仕訳ルール85件をgogcli経由でインポート
詳細: CSV取込と仕訳ルールインポート
4. tax-assistant: クライアント切替機能の設計
複数クライアントのDBを運用し始めたため、UIからのクライアント切替機能が必要になった。1月末に作った計画書をベースに、Planエージェントで詳細設計を行い、Codex(GPT-5.3)にレビューしてもらった。
主な成果:
- 既存計画書と現状実装の差分分析
- 10タスク(バックエンド6 + フロントエンド3 + テスト1)に分割
- Codexから7件の指摘(セキュリティ対策、profile API追加等)を反映
詳細: クライアント切替機能の設計
5. tax-assistant: クライアント切替機能の実装
設計済みの10タスクを一気に実装。dependencies.pyでクライアントパス管理を集約し、59のAPIエンドポイントをX-Client-Idヘッダー対応に移行した。フロントエンドではClientSelectorドロップダウンとPiniaストアを実装。2つ目のクライアント追加で表面化した5つのバグ(native fetchのヘッダー漏れ、勘定科目マスター未登録、税区分表示バグなど)も修正した。
主な成果:
- 全10タスク(バックエンド6 + フロントエンド3 + テスト1)完了
- 仕訳ルール関連5箇所のnative fetch()にX-Client-Idヘッダー追加
- レシートなしでもルールマッチング実行するよう修正(534件中214件マッチ)
- 勘定科目マスター174件をコピーして新クライアント初期化
詳細: クライアント切替機能の実装
6. tax-assistant: 仕訳ルール自動推測・提案機能
クレカ明細のうち仕訳ルールに未マッチの明細を分析し、AIが勘定科目・税区分を推測して登録を支援する機能を新規構築した。Miller Column Layoutで6カラムの段階的絞り込みUI、キーボードナビゲーション、マッチタイプ選択、Googleスプレッドシートでの顧客確認フローまで一気に実装した。
主な成果:
- rule_suggestionsテーブル + 4エンドポイント新設
- RuleSuggestionView: 帳票種別→帳票→勘定科目→税区分→補助科目→詳細の6カラム
- /suggest-rulesコマンドで142件の摘要を分析、事業主貸64件は顧客確認シート自動作成
- フロントエンド27テスト + バックエンド11テスト
詳細: 仕訳ルール自動推測・提案機能
7. tax-assistant: 新規クライアント登録フロー設計
クライアント切替機能完成後に必要になった新規登録フローを設計。Planエージェントで6タスク構成を作り、Codex(GPT-5.3)で4ラウンドのレビューを実施して設計を段階的に洗練した。
主な成果:
- 6タスク構成の設計(バックエンドAPI → フロントエンドAPI → Store → モーダルUI)
- Codex 4ラウンドで計20件以上の指摘を反映
- INSERT-only関数でUPSERT回避、FK CASCADE、原子的トランザクション
詳細: 新規クライアント登録フロー設計
8. tax-assistant: PDF複数ページ変換と画像表示修正
領収書の裏表をスキャンしたPDFを1枚の画像に変換する機能を追加し、マルチクライアント環境での画像表示404問題も修正した。Codexレビュースキルの分割(doc/uncommitted)も行った。
主な成果:
- pdf_converter.py新規作成(PyMuPDF + Pillow、25テスト)
- 縦連結→横連結に修正(裏表が左右に並び視認性向上)
- 画像URLにclient_idクエリパラメータを付与し404解消(7箇所統一)
- Codexレビュースキルを
/codex-review-docと/codex-review-uncommittedに分割
9. mdx-playground: 特定ページのSSGプリレンダリング除外
書籍の内容をそのまま載せているページ(tax-patterns配下)を、本番環境から除外し開発環境のみ閲覧可能にした。
主な成果:
nuxt.config.tsのprerender.ignoreに/tax-patternsを追加- ホームページのリンクカードを
v-if="isDev"で開発環境のみ表示 - Cloudflare Pagesデプロイ後に除外を確認
詳細: SSGプリレンダリング除外の実装
今日の学び
- 確定申告資料のリネームはスキル化しておくと来年以降が楽。年1回の作業こそ手順書化が効く
- client_001だけで開発していると見えない問題が、2つ目のクライアントを追加した途端に噴出する。DBパスのハードコード、スキーマ初期化漏れ、native fetch()のヘッダー漏れなど
- 論理削除(
is_activeフラグ)を使えば、クライアントごとに帳票タイプの表示を柔軟に制御できる - Planエージェント設計 -> memo保存 -> Codexレビュー -> 指摘反映、という設計レビューフローが定着。4ラウンド回すと1回では拾えない構造的な指摘が出てくる
- Miller Column Layoutは階層的なデータの絞り込みに有効。仕訳ルール提案では6カラムまで拡張した
- AIの推測結果をそのまま登録せず、顧客確認フロー(Googleスプレッドシート)を挟むことで品質を担保
<img>タグからHTTPヘッダーは送れない。マルチテナント環境では画像URLにクライアントIDをクエリパラメータで渡す.find()は最初の一致のみ返す。複数一致がありうる場面では.filter()を使う- Nuxt 3の
prerender.ignoreとimport.meta.devを組み合わせると、SSGで特定ページを本番から除外しつつ開発環境では表示できる
明日やること
- 新規クライアント登録フローの実装開始
- 仕訳ルール提案のレビュー・登録作業
- 事業主貸の顧客確認シートの回収と反映