2026年2月7日の開発日記
3つのプロジェクトを同時に進めた一日。book-knowledge-baseではPDF書籍をWebで読めるリーダーをゼロから立ち上げ、mdx-playgroundでは消費税パターンの帳票ビューアーで方針転換を経験し、tax-lpでは業種別ランディングページの基盤を一気に構築した。
今日やったこと
1. book-knowledge-base: PDF書籍リーダーの構築
Gemini APIで「創業手帳 Ver.99」(112ページ)をOCR処理し、SQLiteに格納。Nuxt 4 + pnpmでMiller Columns(3カラム)レイアウトの書籍ビューアを構築した。npmの依存関係問題でハマったが、pnpmに切り替えて解決。
主な成果:
- Gemini APIによるPDF OCRパイプライン構築
- Miller Columnsレイアウトの書籍ビューア(左: 書籍一覧、中: ページ一覧、右: 本文)
- SQLite + Server Routesによるデータ配信
詳細: 蔵書ナレッジベースの構築 - Gemini OCRとNuxt 4で書籍PDFをWebリーダーにする
2. book-knowledge-base: yomitoku OCR変換と画像表示改善
Gemini APIでは図表が消えてしまう問題があったため、日本語特化OCRツール「yomitoku」で同じPDFを再処理。112ページを約3分で処理し、478枚の図画像を抽出。日本語ファイル名の問題、Nuxt 4のpublicディレクトリ問題、OCR出力の不要な<br>タグ、装飾アイコンのフィルタリングなど、実運用で直面する課題を一つずつ潰した。
主な成果:
- yomitokuによるMarkdown変換(図表保持)
- 装飾アイコンの面積ベースフィルタリング(65,000px²閾値)
/yomitokuスラッシュコマンドの作成- Gemini版(
sogyo-techo)とyomitoku版(sogyo-techo-md)の共存
3. book-knowledge-base: スクロールカクつき修正
書籍ビューアで矢印キーによるページ切替時に中カラムが一番上にジャンプする問題を修正。scrollIntoViewが親要素のスクロール位置にまで影響していたのが原因で、scrollTopの直接制御方式に切り替えた。
主な成果:
scrollIntoView→getBoundingClientRect+scrollTop直接制御- ジャンプなしのスムーズなページ追従
4. mdx-playground: 消費税パターン帳票ビューアー
消費税パターンページに帳票プレビュー機能を追加。最初はSVGで仕訳表を描画する方向で実装したが、ユーザーから「イメージが違う」とフィードバックを受けて方針転換。参照用のReact JSXファイルを基に、HTML/CSSで4種類の証憑テンプレート(請求書・領収書・返還請求書・販売明細書)を作成した。Phase 2(本体統合)は複雑さから凍結。
主な成果:
- 4種類の証憑テンプレート(Invoice, Receipt, CreditNote, SalesStatement)
- voucher-types.ts / voucher-mapper.ts のデータ変換レイヤー
- デモページ
/tax-patterns/voucher-demo - 浮動小数点誤差・輸出免税売上の修正
5. tax-lp: 業種別ランディングページ構築
税務コンサルティング向けの業種別LPプロジェクトをゼロから構築。Nuxt 4 + Tailwind CSSで、localhostサブドメインによる業種切替、マークダウン記事のLP統合、不動産LP専用デザイン、記事システム、ページトランジションまで一気に実装した。
主な成果:
- Nuxt 4 + pnpm + Tailwind CSS + @nuxt/content でプロジェクト初期化
- localhostサブドメインで業種切替(beauty, freelance, fudosan 等)
- ターゲット業種の戦略的選定(Tier A〜D、13業種)
- 不動産LP専用コンポーネント群
- 記事一覧・個別記事ページ・ヘッダーナビゲーション
- forward/back方向検知付きページトランジション
- EYANCAテンプレートの調査と割り当て計画
詳細: 業種別LPサイト構築
今日の学び
- pnpmはnpmより信頼性が高い — npmのオプショナル依存バグ(oxc-parserのネイティブバインディング問題)がpnpmでは発生しない
- scrollIntoViewの落とし穴 — 親要素のスクロール位置にまで影響するため、スクロールコンテナ内では
scrollTop直接制御が安全 - OCR後処理が本番 — yomitokuのOCR自体は3分で終わるが、画像パス修正・不要タグ除去・装飾フィルタリングなどの後処理に2時間かかった
- 方針転換は早めに — SVG仕訳表で突き進まず、ユーザーフィードバックで即座にHTML/CSS証憑テンプレートに切り替えたのは正解
- NuxtLinkとスムーススクロールは相性が悪い — NuxtLinkの内部ハンドラが先に発火するため、
<a>+@click.prevent+navigateToの組み合わせが必要
明日やること
- tax-lp: EYANCAテンプレートのダウンロードと各業種への適用
- tax-lp: フリーランスクリエイター枠のLP作成
- tax-lp: マークダウン記事のLP統合の残り業種対応
- book-knowledge-base: 他の書籍のインポート検討