1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「できる」と「やってよい」は別だった 〜Claude Code がスクレイピングの実装前に利用規約を読み、辞退した話〜

1
Posted at

「このサイトから、見出しを取ってきて」。AIに頼めば、おそらく数十分で動くコードが返ってきます。でも、動くことと、やってよいことは別でした。

日本株のAI銘柄スクリーニング&継続学習端末「ALPHA FORGE(アルファフォージ)」を個人で開発・運用しています(開発には Claude Code を使っています)。この記事では、有料の投資情報サイトから見出しを毎日自動で集めたいと頼んだところ、Claude Code がコードを書く前に利用規約と robots.txt を確認し、実装を辞退した件と、その後の「空けておく」設計をまとめます。

【要約】

  1. 「見出しを取ってきて」と一言で頼んだところ、Claude Code は実装の前に利用規約と robots.txt を確認した。robots.txt は全許可だったが、有料会員向けの利用規約が「コンピューター等を利用して自動取得する行為」を禁止しており、実装を辞退した
  2. 辞退だけで終わらず、代わりの道(法人向けの正規窓口・手作業での転記・保留)を3つ出し、人間が「保留」を選んだ
  3. コードは1行も変えず、理由を決定ログに残した。データソースの差し込み口は、フラグ付きのスタブとして空けたままにしてある

※本記事はnote連載[ALPHA FORGE 開発秘話 #11] の技術的な部分を、エンジニア向けに再構成したものです。

環境

項目 内容
開発 Claude Code(CLI)
バックエンド Python 3.11 / FastAPI / Celery + Redis
財務データ J-Quants API + 自前の銘柄ノート(Obsidian の frontmatter)
時点データの保存 ポイント・イン・タイム台帳(前回の記事)

何を頼んだか

ほしかったのは、四季報の業績欄の見出し(絶好調、独自増額のように、業績の勢いを一言で表したもの)です。前回の記事で作った、「その日に分かっていた値」を日付つきで積み上げる台帳に、毎日の収集として組み込む案でした。

9月18日の昼すぎ、Claude Code にこう頼みました。

四季報は(サイトのURL)からヘッドラインをとってきて

依頼文は「取ってきて」の一言だけで、そのサイトを自動で読んでよいかどうかには触れていません。

Claude Code は、コードより先に規約を読んだ

02_wall.jpg

技術的には扉を開けられても、その先に入ってよいかは利用規約が決める

最初の返答は、こうでした(要旨)。

まず利用規約とrobots.txtを確認し、実際にページがどう見えるか、ログインが必要か、どんな情報が取れるかを調べます

そのうえで報告してきた内容は次のとおりです。

確認したもの 結果
robots.txt 全面的に許可
有料会員向けの利用規約 「コンピューター等を利用して自動取得する行為」を禁止行為として列挙
同じ規約の別の条項 私的利用の範囲を超えた複製・公衆送信の制限と、違反時の違約金(最低でも数百万円)の定め

判断はこうでした。robots.txt は検索エンジンなどのクローラーを想定したもので、会員規約の禁止事項のほうが優先される。毎日自動で取りに行く仕組みは、規約違反を前提にした実装になってしまうので、作れない。依頼から返答までは約1分半でした。

robots.txt が許可していても、利用規約で自動取得が禁止されていることがあります。ログインが必要なページ、有料会員向けのページは特に、robots.txt だけで判断しないほうが安全です。

断ったあとに出てきた3つの道

03_fix.jpg

断ったあとに残る道を3つ並べ、人間が選んだ。選んだのは「保留」

Claude Code は断るだけで終わらず、代わりの道を3つ出しました。

  1. 正規の窓口を使う:データを正式に提供している法人向けのサービスがある。ただし個人向けではなく、法人としての契約になる
  2. 人間が手で写す:自分で四季報を見て、気になる見出しだけを手元の銘柄ノートに書き写す。私的利用の範囲に収まるが、自動化はできないので毎日の収集には乗せられない
  3. 調達を保留にする:四季報は使わずに進める

選んだのは3つ目の「保留」です。財務の数値は、J-Quants API と自前の銘柄ノートで扱っています。

空けておく設計:フラグ付きのスタブ

四季報の差し込み口は、構築の最初から「データソースが確定するまでスタブ」として用意してありました。今回の判断で、この空き枠はそのまま残っています。

backend/services/data/shikiho.py(抜粋)
async def get_shikiho(code: str) -> ShikihoRecord | None:
    """指定コードの四季報構造化情報を返す(スタブ期間中は常に ``None``)."""
    global _warned
    if not settings.shikiho_enabled:
        return None
    if not _warned:
        logger.warning(
            "SHIKIHO_ENABLED=true ですが四季報データソースは未実装です(%s ほか全銘柄で None を返します)",
            code,
        )
        _warned = True
    return None
backend/config.py(抜粋)
# --- 四季報(当面スタブ) ---
shikiho_enabled: bool = Field(default=False, validation_alias="SHIKIHO_ENABLED")

ポイントは3つです。

  • 呼び出し側は「None なら四季報なし」として扱えばよく、フラグを意識しなくてよい
  • フラグを誤って true にしても、データソースが無いことを1回だけ警告して None を返す。黙って空の値を流さない
  • 将来の型(ShikihoRecord)には、本文や記事の生テキストを含めない。LLM のプロンプトに渡すのは構造化フィールドだけ、というプロンプトインジェクション対策の境界を、空き枠の段階から決めてある

正規のデータソースが手に入ったら、ここへ差し込みます。それまでは「無い」ことが正しい状態です。

決定ログに「辞退した理由」を残す

辞退のあと、Claude Code が提案したのは決定ログへの記録でした。「規約を確認して、自動取得は不可と分かった。今後また同じ提案が出て無駄骨にならないよう、記録しておく」。コードは1行も変えず、理由だけを文書に残しています(要旨)。

四季報データソース:調達を保留(2026-09-18、ユーザー確認)。同サイトの会員規約が自動取得を禁止行為として列挙しているため、このサイトを対象にした自動収集は実装しない(今後同じ提案が出ても再度スクレイピングを試みないこと)。代替候補:法人向けの正規データサービス、またはユーザーが手動で銘柄ノートへ転記する運用(自動収集タスクには乗せない)

Claude Code は会話ごとに記憶がリセットされますが、決定ログは次の会話でも読めます。「前にも検討して、辞退した」ことが、次のセッションにも伝わります。

プロンプトの学び:「取ってきて」の前に「取ってよいか」を確かめさせる

今回は Claude Code が自分から規約を確認しましたが、毎回そうなるとは限りません。外部のサイトを相手にする依頼では、次のように頼むのがおすすめです。

  1. 取得する前に、利用規約と robots.txt を確認して、結果を先に報告させる
  2. ログインの要否、取れる情報の種類、自動取得の禁止条項の有無を並べさせる
  3. 禁止されていたら実装せず、代わりの選択肢を出させる
  4. 断った理由と結論は、決定ログに残させる(次の会話で同じ提案が出ないように)

本記事は、特定のサイトの利用規約の解釈を断言するものではありません。実際に使うときは、必ず最新の利用規約を確認してください。

まとめ

  1. robots.txt の許可は、利用規約の許可ではない。会員向け・有料のページは特に規約を先に読む
  2. 断るときは、代わりの道を並べて人間に選ばせる
  3. 使わないと決めたデータソースは、フラグ付きのスタブとして「空けておく」。呼び出し側は None を扱うだけにする
  4. 辞退の理由は決定ログに残し、次のセッションで同じ提案が出ないようにする

四季報の見出しを取り込みたいという目的と、「取ってきて」という依頼を出したのは人間です。実装の前に規約を確認して辞退し、代わりの道を出して記録を残したのは Claude Code でした。3つの道から「保留」を選び、再開するかどうかを決めるのは人間です。

次回は、ローカルLLMで全銘柄のチャートを読ませてみた実験と、撤退の話です。

☕ note.comで開発秘話と毎朝の検証ログを連載中

note.comでは、ALPHA FORGE の開発秘話と、毎朝のアルゴリズム検証ログを公開しています。

👉 元記事(note連載第11話):
【ALPHA FORGE 開発秘話 #11】四季報の自動取得を“辞退”した日 ― 「できる」と「やってよい」は別だった


免責事項
本記事は個人開発およびAIエージェントを活用したシステム開発の技術記録です。特定の銘柄の売買推奨や投資助言を行うものではありません。本ツールは証券会社等への発注機能を持ちません。記事中のコードは抜粋であり、パスや環境固有の値は省略しています。利用規約の内容や解釈について、本記事は法的な助言ではありません。

⚠️ 【システム検証記録に関する免責事項・注意事項】

  • 本記事は、独自開発アルゴリズム「ALPHA FORGE」の動作検証およびデータ分析過程を公開する技術・運用の個人的な記録ログです。
  • 掲載されているすべてのデータ(各スコア、基準観測値、統計的変動上限、シナリオ無効化水準など)は、過去の市場データに基づき数式(ATR等)により機械的に算出されたバックテスト・シミュレーション用のパラメータであり、特定の有価証券の売買勧誘、取引の推奨、投資助言・代理行為を目的としたものではありません。
  • また、将来の株価変動や運用成果を保証するものではありません。実際の投資判断および最終決定は、必ずご自身の責任と判断において行っていただけますようお願いいたします。
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?