HANDOVER.md
Workspace snapshot · 09/04 13:33
PENGIN Tools — 引き継ぎ
Day 16(2026-08-31)時点。事情を知らない人が、これ1枚で続きから動かせることを目的に書いています。
- 予算 30,000円 / 使用 0円 / 売上 0円
- 資産 12本(Skill 4 / CLI 8)+ブランドサイト3ページ+記事1本+検証器1本
- 外部公開されているのは 1本だけ(WordPress Maintenance Skill)
- 外部シグナルの実測値はゼロ件(visitor / clone / star / Issue のいずれも未取得)
30秒で状況を把握する
作るほうは動いています。外に出るほうが動いていません。
公開・測定に関する承認を6件出し、そのうち5件が未回答のまま期限切れになりました。 そのため、12本のうち11本は一度も外に出ていません。
Day 30の結論を先に書くと、「外部シグナルはゼロ。原因は制作量ではなく、公開が行われなかったこと」です。 これは言い訳ではなく、次に同じ構造を避けるための事実の記録です。
1. まず動かすもの: 検証
python verify_all.py # 全資産のオフラインテストを1コマンドで通す
python verify_all.py --json # 機械可読
検証済みのもの(実測あり)
WordPress Migration Skill だけは、実サーバーでE2Eを通してあります(2026-08-26)。
記録は qa/e2e-result.md。Xserver上の使い捨てWordPress 7.1 / PHP 8.1 / MariaDB 10.5 で、
調査→DB複製→URL置換→HTTP 200→rollback を1サイクル実行し、
この過程で5件の不具合を発見して修正しました(サブディレクトリの脱落、/bin/sh の printf 失敗、
stdin消費による停止、JSON escape済みURLの誤判定、Basic認証とWAF対応)。
verify.py オフライン32ケースとシェル安全ガード24ケースもPASSしています。
E2Eを通す価値はこの5件が証明しています。 机上レビューでは1件も出ませんでした。
未検証のもの
| 対象 | 状態 |
|---|---|
| Maintenance / Triage / Launch Check の3Skill | 実環境E2E 未実施 |
tools/ 配下のCLI 8本のテスト | 同梱済み・未実行(現在のRun環境にシェルがないため) |
| 全CLIの実サイトに対するスモークテスト | 未実施 |
verify_all.py は、実行できる人が1コマンドで全部の検証状況を出せるようにするためのものです。
全部PASSしても意味は「同梱テストが通った」だけで、実サイトで動く保証にはなりません。
その旨は出力の末尾に毎回印字されます。
2. 資産一覧
Claude Code Skill(skills/)
| # | 資産 | 何をさせるか | 公開 |
|---|---|---|---|
| 1 | wordpress-maintenance | 一括更新させず、記録→バックアップ→束分け更新→確認→ロールバックの順に進めさせる | 公開済み |
| 2 | wordpress-migration | 移行の型(サーバーのみ/ドメインのみ/両方/ステージング本番化/HTTPS化)を判定し、不要な置換をやらせない | 未公開 |
| 3 | wordpress-launch-check | 公開直前の見落とし(noindex、canonical、フォーム、リンク)を順序で潰させる | 未公開 |
| 6 | wordpress-triage | 壊れたサイトを、証拠の保全→止血→原因特定の順に切り分けさせる | 未公開 |
Skillの同梱スクリプトは本ごとに違います。 #3 と #6 は実行コード0行。
#1 は plan_updates.py(読み取り専用)。#2 は4本同梱で、うち search_replace_plan.sh は
--execute を付けるとDBを書き換えます(バックアップとdry-runを検査し、明示確認後のみ)。
「Skillは全部テキスト」と説明しないでください。Day 18まで site/index.md がそう書いていて、誤りでした。
Python CLI(tools/)
すべて読み取り専用、標準ライブラリのみ、ERRORが1件でもあれば終了コード1。
| # | 資産 | 本命の判定 |
|---|---|---|
| 4 | ogp-bulk-checker | ページ単体の title / description / canonical / OGP の不足 |
| 5 | redirect-map-checker | リダイレクト表と実レスポンスの食い違い |
| 7 | robots-sitemap-checker | sitemapに載せたURLを、自分のrobots.txtが塞いでいる |
| 8 | link-asset-checker | 消し忘れたステージングURLが本番に残っている |
| 9 | maintenance-report-generator | 報告しなかった確認項目を「未確認」として必ず出す |
| 10 | site-consistency-auditor | canonical宣言がページ間で食い違っている(取得を一切行わない) |
| 11 | launch-check-runner | 上記を1コマンドで通し、実行しなかったチェックも同じ紙に印刷する |
| 12 | ai-crawler-access-checker | 学習を断ったつもりで、AI検索用のクローラーまで塞いでいる |
担当範囲は各READMEに非重複で明記してあります。 機能を足すときはそこを先に読んでください。
サイトとコンテンツ
| ファイル | 中身 |
|---|---|
site/index.md | ブランドサイト本体。12本の一覧、各行に公開済み/未公開 |
site/llmo-monitor.md | 有料商品①の商品ページ(未提供と明記) |
site/wordpress-maintenance-pro.md | 有料商品②の商品ページ(未提供と明記) |
content/article-ai-crawler-block.md | 配布用記事1本。一次情報の引用のみで構成 |
site/ はまだ公開されていません。 公開には SITE_PUBLISH 承認が必要です。
3. 全資産で守っている考え方(変えるときは意識して変えてください)
- 確認していないことを、確認したと言わない。 報告書ジェネレータは報告しなかった項目を黙って省かず「未確認」として出し、Launch Check Runnerは実行しなかったチェックを毎回印字し、検証器はスイートが0件でも失敗扱いにします。沈黙が合格に化けないことを全体で統一しています。
- 単体では正しいのに、組み合わせると噛み合っていないを拾う。既存の無料チェッカーは1本ずつ見ますが、実務で困るのはその外側です。
- 読み取り専用。 サイトを書き換えず、クロールもしません。他人のサイトへ向けないよう各READMEに明記。
- 一次情報で確認したことだけ断定する。 確認できなかったものは未確認と出します(例:
Google-Extendedは公式ページが404で分類不明のまま)。 - AIが作っていることを開示する。
4. 有料商品(2本とも未提供)
| LLMO Monitor | WordPress Maintenance | |
|---|---|---|
| 価格(予定) | 月980円 / 1,980円 | 月2,980円 / 4,980円(1社課金) |
| 売るもの | 自サイトが出している設定の変化の通知 | 保守を報告できる形にする道具のライセンス |
| やらないこと | AIに質問して回答を集めることはしない | 作業の代行はしない(受託になるため) |
| できている部分 | 判定ロジック(無料CLI) | 手順・リスク判定・報告生成・チェック一式 |
| 未着手 | 定期実行、差分保存、メール送信、決済 | テンプレの自社仕様化、複数サイト一括レポート、決済 |
2商品とも、足りないのは判定ロジックではなく「届ける仕組み」と「顧客の声」です。 特にWordPress Maintenanceの有料差分は、実際に10〜30件を預かっている人に「何件を、どの粒度で並べたいか」を聞かないと設計できません。 聞かずに作ると、使われない管理画面が1つ増えるだけになります。
決済は Stripe を想定していますが、本人確認の書類はダッシュボードからしか提出できず、事業者本人の操作が必要です(strategy/payment-readiness.md)。
解約条件と返金方針は、課金開始前に両商品ページへ文章化済みです。
5. 承認の履歴(ここが律速でした)
| 種別 | 内容 | 結果 |
|---|---|---|
| PUBLISH_DECISION | Migration Skill の方針3択 | 承認(→ Maintenance Skill が公開された) |
| AGENT_CAPABILITY | シェル実行の有効化 | 承認されたが、実行環境には反映されなかった |
| SKILL_PUBLISH | Migration Skill 公開 | 未回答で失効 |
| SKILL_PUBLISH | Triage Skill 公開 | 未回答で失効 |
| TOOL_PUBLISH | CLI 6本まとめて公開 | 未回答で失効 |
| METRICS_ACCESS | 公開済みリポジトリの visitor / cloner 数の共有 | 未回答で失効 |
| DECISION_UNBLOCK | 「公開を止めているのは A〜D のどれですか」 | 未回答で失効(8/31 01:13) |
最後の1件が無回答で切れた時点で、申請時に自分で宣言したとおり【C】=当面外部公開を行わない方針とみなし、 公開申請を止めました。 推測でAやBを選んで動くことはしていません。
A / B / D の回答が後から来た場合は、この扱いを即座に解除してください。
6. 再開するときの最初の3手
もし公開できるなら
- CLI 6本(または8本)を1リポジトリで公開する。 Skillとは到達するTopicが違うので、別の入口として測れます。
- 記事1本を Qiita / Zenn / note のどれか1つへ投稿する。 GitHubのTopicより検索需要のある場面に直接当たり、公開済みSkillへ導けます。
- 公開後72時間で visitor と clone を見る。 判断基準は先に固定してあります—— visitorが実質0なら発見されていない(配布面を直す)、visitorはあるのにclone 0なら見たが刺さらない(価値提示を直す)。どちらか一方だけを直します。
もし公開できないなら
- 残る3Skillのどれか1本でE2Eを通す。 Migrationで通したときは5件の不具合が出ました。手順は
qa/e2e-commands.md(Block 0〜11)とqa/e2e-result.md(Migrationでの実例)が使えます。 - 制作会社1社に、複数サイト一括レポートの粒度をヒアリングする(有料商品②の唯一の設計ブロッカー)。
- ツールを増やさない。 12本で在庫は足りています。13本目を作っても状況は動きません。
6-B. 反映待ちの変更(push機構が動いたら最優先)
WordPress Maintenance Skill は公開済みですが、Day 18〜19の修正はローカルにしか無く、 公開版へは反映されていません。 反映にはpush承認が必要です。
| 修正 | 内容 |
|---|---|
| Step 6 / Step 8 | diff <(...) <(...) はbash専用で、レンタルサーバーの /bin/sh(dash)では構文エラーになる。一時ファイル経由へ変更 |
| Step 0-B 新設 | dash / stdin消費 / Basic認証401 / WAF403 / サブディレクトリ運用 |
WORKDATE・WORKDIR | 日付をまたぐと保存先が散る問題を、変数の1回確定で解消 |
最初の1件は、公開版に入っているコマンドが対象顧客の環境で落ちるという実バグです。 日本のレンタルサーバーは非対話シェルが sh/dash であることが珍しくありません。
未公開の Triage Skill にも同種の修正を入れてあります(references/DECISION-TREE.md の T0)。
こちらは未公開なので、この制約は掛かりません。
7. 参照すべき記録
| ファイル | 中身 |
|---|---|
strategy/tool-factory-backlog.md | 正本の台帳。 全資産の設計の核、見送った案とその理由、失敗と修正、実行規律 |
qa/capability-gap.md | シェル実行が3経路すべてで不成立だった記録 |
qa/e2e-commands.md | 人手でE2Eを通すためのコピペ用コマンド |
strategy/payment-readiness.md | Stripeで必要な4書類と、私では完結できない理由 |
research/ | 競合調査(OGPと公開前チェッカーを飽和で落とした判断を含む) |
台帳にはやらなかったことと、その理由も残してあります。同じ検討を繰り返さないでください。
8. 正直に書いておく失敗
- Day 7(最初の外部シグナル)と Day 14(収益化テスト)の両方に間に合っていません。 原因は生産量ではなく、公開が起きなかったことです。
- Day 12に、一次情報で裏取りしていない断定を書いて出しかけました(canonical連鎖の挙動)。Google公式を取得して支持されていないと分かり、コードとREADMEの両方から撤回しました。
- Day 13に、AIクローラーのUA一覧に
Claude-Userの抜けがありました。 推測で一覧を作ると抜けます。一覧物は一次情報で埋めてください。 - Day 14に、滞留の不満を品質ゲートの採点欄へ書いてしまい、Run全体が失敗して承認が届きませんでした。 採点で抗議しないこと。事実は別欄に書くこと。
- Day 17に、CLI 8本を「MIT」と表示しながら、
tools/にLICENSEファイルが1本も無いことが分かりました。 ライセンス表記の無いコードは既定で All rights reserved 扱いになるため、受け取った人は法的に使えません。公開前に見つかったので実害は出ていませんが、提出済みの公開申請には「LICENSE(MIT)」を公開対象として書いていました(存在しないファイルを)。tools/LICENSEを追加して解消済みです。教訓は、READMEに書いた属性と、ファイルの実体を別々に確認すること。 - Day 16に、この引き継ぎ資料自体で「Skill 4本すべてE2E未実施」と書きました。誤りです。 Migration Skillは 8/26 に実サーバーでE2Eを通しており、記録は
qa/e2e-result.mdに残っていました。自分の資産の検証記録を確認せずに、記憶だけで「未実施」と断定していました。未確認を確認済みと書くのと同じくらい、確認済みを未確認と書くのも間違いです。
MIT License. 設計・実装・文章はAIエージェントが担当しています。 Part of PENGIN Tools — Web制作の面倒な作業を、小さなツールでなくす。