Skip to content

refactor: 葛飾図書館スクリプトの重複を共通モジュールに抽出#1

Open
ojimpo wants to merge 10 commits into
mainfrom
refactor/claude-20260702
Open

refactor: 葛飾図書館スクリプトの重複を共通モジュールに抽出#1
ojimpo wants to merge 10 commits into
mainfrom
refactor/claude-20260702

Conversation

@ojimpo

@ojimpo ojimpo commented Jul 2, 2026

Copy link
Copy Markdown
Owner

概要

sync_katsushika_to_kashidashi.py(cron で稼働中)と import_katsushika_history_once.py(実行済みの一括取込)にほぼ丸ごと重複していた HTML 解析・1Password 認証・ログインフローを scripts/katsushika_common.py に一本化しました。

app/ 本体の安全なリファクタ6件は main にマージ済みのため、この PR の差分はスクリプト変更と依存関係の明記のみです。

変更内容

  • scripts/katsushika_common.py(新規): strip_tags / jp_date_to_iso / parse_dl_map / parse_detail_fields / map_type / key_of / get_credentials / login_session を集約
  • scripts/sync_katsushika_to_kashidashi.py: 共通モジュールを利用する形に書き換え。sync_katsushika_with_events.py からの既存 import 互換のため主要関数は re-export 維持。挙動変更なし(characterization test で固定済み)
  • scripts/import_katsushika_history_once.py: 圧縮記法を通常スタイルに展開し共通モジュールへ載せ替え。履歴ページ固有の「書名」「ISBN」欄はローカルのラッパー map_history_type で吸収
  • requirements.txt: scripts が以前から使っていた requests を明記、実環境で検証している pytest 9 系を許容
  • Dockerfile: コンテナ内でもテスト一式が動くよう scripts/ をイメージに含める

レビューポイント

  1. map_type の判定差分: 共通版には出版社・ページ数による book 判定フォールバックがあり、履歴取込スクリプトの旧実装で other になっていた一部資料が book と判定される可能性があります(一括取込は実行済みのため実影響はない想定)
  2. cron 稼働中の sync スクリプト: import 構造が変わるため、マージ後の初回実行ログ(logs/sync_katsushika_*.log)の確認を推奨します

テスト

  • pytest 81件パス(scripts の純粋関数・リップ照合・イベント CLI の characterization test 62件を含む)
  • npm run test:ui 9件パス
  • 実アプリを起動し、登録・重複409・バリデーション422・PATCH・ソート・UI 配信を手動確認済み

🤖 Generated with Claude Code

ojimpo and others added 10 commits July 2, 2026 16:45
リファクタリングに先立ち、Katsushika 同期スクリプトの純粋関数・リップ照合
ロジック・イベント通知 CLI・services のバリデーションメッセージの現状の
挙動をそのまま固定する。テスト実行方法を README に追記。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
model_dump() は常に全フィールドを含むため setdefault は不到達コードだった。
None のときだけ既定値を入れる意図を or 1 行で表現する。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4 種別×同型の if/elif が繰り返されていたため、作成者フィールドの必須/禁止
関係と専用フィールドグループを宣言的なテーブルに抽出した。エラー文言と
出力順は characterization test で固定した現状のまま。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ソート順の追加時に if 連鎖を触らず 1 行足すだけで済むようにする。
未知の値は従来どおり borrowed_date_desc にフォールバックする。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
一覧 API のクエリは main.py で個別パラメータとして受けており、
このモデルはどこからも参照されていなかった。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
HTML 解析・1Password 認証・ログインフローを共通モジュールへ移し、
sync スクリプトはそれを利用する形にした。挙動は変えていない。
既存の import 互換のため主要関数は re-export している。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
sync スクリプトと重複していた strip_tags・日付変換・型判定・認証・
ログインを katsushika_common に一本化し、圧縮された記法を通常の
スタイルに展開した。履歴ページ固有の「書名」「ISBN」欄は
ローカルのラッパーで吸収。共通の map_type には出版社・ページ数による
book 判定フォールバックがあるため、旧実装で other になっていた一部の
資料が book と判定される可能性がある(一括取込は実行済みのため影響なし)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
既定の図書館名は ItemCreate のフィールド既定値と apply_library_default
validator で保証されており、services 側の再適用は不到達だった。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
同期スクリプトとその characterization test は requests に依存しているが
requirements.txt に載っていなかった。コンテナ内でもテスト一式を実行
できるよう scripts/ をイメージに含め、実際に検証している pytest 9 系を
許容するよう上限を緩めた。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant