AIで作るデジタル商品の案内文、仮URLを販売前に弾く見本

購入後に渡す案内文へ、存在しないURLが1つ混じる場合もあります。商品の中身ではなく、最初の案内で購入者を止める失敗です。そこで今回は、AIに下書きを頼む場面を想定し、Markdownの案内文から仮URLを弾く小さな検査を見本で試しました。
これは販売実績や実在の購入者対応を記録したものではありません。example.comとTODOを意図的に残した架空の商品案内を使う、公開前確認の合成見本です。公開前の小さな関所。
先に確認したいのはリンクが開くかではなく、仮のままかです
案内文には、購入ページ、使い方、問い合わせ先、テンプレートの複製先など、役割の違うURLが並びます。AIに文章の形を整えてもらうときも、仮のURLを一度置いてから本番のURLへ差し替える流れは珍しくありません。
問題は、リンクがURLらしい形をしている点です。https://example.com/downloadは文法上のURLですが、購入者へ渡す先ではありません。販売ページを公開してから気づくより、案内ファイルを作った直後に止めたいところです。
ここではリンク切れまで調べません。外部サービスの応答は時刻や権限で変わるからです。対象は、自分で置いた仮URLと未完了の印だけ。
見本の案内文を作り、最初の検査で止める
検査用のフォルダに、架空のデジタル商品「案件ふりかえりテンプレート」の案内文を置きます。最初の版に置くのは、ダウンロード先の仮URLとTODO。
mkdir -p product-guide
cat > product-guide/START-HERE.md <<'EOF'
# 案件ふりかえりテンプレート
ダウンロード: https://example.com/download
使い方: https://docs.example.net/product-guide
問い合わせ: TODO
EOF
次のスクリプトは、URLのうちexample.comで終わるホストと、TODOを含む行を表示します。ここで持たせる規則は2つです。
python3 - <<'PY'
from pathlib import Path
import re
path = Path("product-guide/START-HERE.md")
text = path.read_text(encoding="utf-8")
issues = []
for number, line in enumerate(text.splitlines(), start=1):
if "TODO" in line or re.search(r"https?://(?:[\w-]+\.)*example\.com(?:/|$)", line):
issues.append(f"{number}: {line}")
if issues:
print("HOLD: 仮の案内が残っています")
print("\n".join(issues))
raise SystemExit(1)
print("OK: 仮URLとTODOは見つかりません")
PY
期待したとおり、初回は終了コード1で止まります。確認用に実行した出力は次のとおりでした。
HOLD: 仮の案内が残っています
3: ダウンロード: https://example.com/download
5: 問い合わせ: TODO
ここで大切なのは、リンクを開いたかどうかではありません。商品を渡す前に、仮の値が残った場所を行番号付きで返せたことです。修正箇所は2行。
直すのは検査ではなく案内文です
example.com以外なら通す規則にする方法もあります。しかし、それではTODOが残ったままでも合格します。検査を緩めるより、案内文の未完了を消すほうが、販売前の確認として自然です。
見本では、ダウンロード先を実在の販売URLではなく、購入後に案内するファイル名へ置き換えます。問い合わせ先も、実際に読む窓口を明記するまで公開しない前提にします。
python3 - <<'PY'
from pathlib import Path
path = Path("product-guide/START-HERE.md")
text = path.read_text(encoding="utf-8")
text = text.replace("https://example.com/download", "./files/project-retrospective-template.zip")
text = text.replace("問い合わせ: TODO", "問い合わせ: 販売ページの連絡先を確認してください")
path.write_text(text, encoding="utf-8")
PY
同じ検査をもう一度実行すると、出力は1行だけになります。
OK: 仮URLとTODOは見つかりません
この結果は、リンク先の存在や購入処理を保証しません。問い合わせ先の窓口が実在するかも、この検査とは別の確認です。それでも、案内文に残った明白な仮値を公開前に落とせます。外部URLの到達確認は、販売先が決まってから別の確認として行うほうが、失敗した理由を分けやすくなります。
AIへの依頼文にも確認の出口を置く
AIへ案内文の下書きを頼むなら、最初から「未確定のURLはTODOと書く」と指定する方法があります。もっとも、TODOが見える形で残るので、公開前に必ず検査する規則が必要です。
迷いやすいのは、AIへの指示を細かくしすぎることです。依頼文に販売経路や問い合わせの例外を並べすぎると、直したい箇所より指示の保守が重くなります。今回の見本では、案内文の形式はAIに任せ、仮値を見つける規則だけを短いコードに分けています。
個人で小さなデジタル商品を出す段階なら、確認項目を増やすより、止める条件を2つに絞るほうが続きます。まずはexample.comとTODOです。実際の販売経路が固まったら、独自ドメイン、配布ファイル名、問い合わせ先を検査対象へ少しずつ足します。
出典
- Python 3 documentation: pathlib(テキストファイルをパスとして読み書きする方法)
- Python 3 documentation: re(URLの一部を正規表現で検出する方法)


