tools/README.md
Workspace snapshot · 09/04 13:33
PENGIN Tools — CLI
Web制作の面倒な確認作業を、小さなコマンドでなくす。 公開前チェック、移行後の確認、保守報告のための読み取り専用CLI集です。
- 外部パッケージ不要。 すべてPython 3.10以上の標準ライブラリだけで動きます。
- サイトを書き換えません。 全ツールが読み取り専用です。
- 判定は明示的。 ERRORが1件でもあれば終了コード1。CIやリリース前チェックに挟めます。
6つのツール
| ツール | 一言で | 本命の判定 |
|---|---|---|
ogp-bulk-checker | URL一覧のtitle / description / canonical / OGPを一括取得 | ページ単体の不足と重複 |
robots-sitemap-checker | robots.txt と sitemap の矛盾を検出 | sitemapに載せたURLを自分のrobots.txtが塞いでいる |
link-asset-checker | リンク切れ・混在コンテンツ・ステージング残骸 | 消し忘れたステージングURLが本番に残っている |
site-consistency-auditor | ページ間の矛盾(取得なし) | canonical宣言の食い違い / canonical先がnoindex |
redirect-map-checker | リダイレクト表を実レスポンスと突き合わせ | 想定外の遷移先・多段リダイレクト |
maintenance-report-generator | 更新前後の証跡から保守報告を生成 | 未確認を「問題なし」と書かない |
共通している考え方
単体では正しいのに、組み合わせると噛み合っていない。 それが一番気づきにくい取りこぼしです。
無料のチェッカーは「このURLはインデックスできるか」を1本ずつ見ます。 ここにあるツールが見るのは、その先です。robots.txtとsitemapの関係、ページ同士のcanonicalの関係、 公開したHTMLと参照先ホストの関係。関係のほうが、単体より壊れやすく、単体より見つけにくい。
もうひとつは、確認していないことを確認したと言わないこと。 保守報告ジェネレータは、報告しなかった項目を黙って省かず「未確認」として必ず出します。 沈黙が合格に化けると、報告書そのものが信用を失うからです。
使い方の例(公開前チェック)
# 1. 各ページのメタ情報を集める
python ogp-bulk-checker/ogp_check.py --file urls.txt --format json --output meta.json
# 2. ページ間の矛盾を見る(ネットワーク不要)
python site-consistency-auditor/site_consistency.py meta.json --format markdown
# 3. robots.txt と sitemap の整合
python robots-sitemap-checker/robots_sitemap_check.py https://example.com
# 4. リンク切れ・混在コンテンツ・ステージング残骸
python link-asset-checker/link_asset_check.py --file urls.txt
機能を重ねていません
同じ判定を2箇所に置かないようにしてあります。各READMEに「これは見ない、あちらの担当」と書いてあります。
- ページ単体の不足 →
ogp-bulk-checker - ページ間の関係 →
site-consistency-auditor - robots.txt と sitemap →
robots-sitemap-checker - URLの到達性と混在コンテンツ →
link-asset-checker
使ってよい対象と、実際に飛ぶリクエスト
自分が所有または管理を委任されたサイトにのみ使用してください。
対象サイトへの書き込みは一切行いません(DB・ファイル・設定を変更しません)。
書き出すのは --output で指定したローカルファイルだけです。
ただし「クロールしない」はツールによって意味が違うので、正確に書きます。
| ツール | 取得するURL |
|---|---|
ogp-bulk-checker / redirect-map-checker | 指定したURLだけ |
robots-sitemap-checker | 指定サイトの robots.txt、sitemap、ルートページ |
ai-crawler-access-checker | 指定サイトの robots.txt と llms.txt |
site-consistency-auditor | 取得を一切行いません(他ツールのJSONを読むだけ) |
maintenance-report-generator | 取得を一切行いません(ローカルの作業ログを読むだけ) |
link-asset-checker | 指定ページ+そのページ内で見つけたリンクとアセットを1階層だけ取得します |
launch-check-runner | 上記4ツールを呼ぶため、それぞれの範囲を合算した分 |
link-asset-checker は、リンク切れを判定するために発見したURLへ実際にリクエストを送ります。
リンクが多いページでは相応の件数になります。リクエスト間隔(既定あり)と件数上限(MAX_TARGETS)で
抑えてありますが、再帰的にページを辿ることはしません(1階層で止まります)。
他人のサイトへ向けることは想定していません。
テスト
各ツールに、ネットワークへ出ないオフラインテストを同梱しています。
# 全ツールまとめて(推奨)— リポジトリのルートで
python verify_all.py
# 1本だけ
cd <ツールのディレクトリ> && python -m unittest discover -s tests
verify_all.py は全スイートを別プロセスで実行し、1枚の表と終了コードで返します。
スイートが1本も見つからなかった場合も終了コード1です(沈黙を成功として扱いません)。
全部PASSでも、確認していない範囲を毎回あわせて印字します。
検証状況
- 各ツールの判定ロジックのオフラインテスト: 同梱済み。ただし作成環境では未実行です。
実行結果を伴わない「テスト済み」表示はしません。
python verify_all.pyを1回叩けば、 この行が実測に置き換わります。 - 実サイトに対するスモークテスト: 未実施
正直に書きます。これらは実サイトで一度も走らせていません。読み取り専用なので壊すことはありませんが、 期待どおり動くという保証は、まだこちらにありません。 動かない箇所があればIssueでお知らせください。
License
MIT.
Part of PENGIN Tools — 制作・移行・保守・AI検索まで、Web制作者のためのツールボックス。