「動くコードを書いた」だけでは済まない時代
Webスクレイピングのコードを書いて動かす。ログインが必要なサイトにライブラリでアクセスする。セキュリティ診断のつもりで他社サービスの脆弱性を調べる。エンジニアならこうした行為を技術的な延長として捉えがちですが、これらは状況によって刑事罰の対象になり得ます。
不正アクセス禁止法は2000年2月の施行以来、インターネット時代の「デジタル侵入」を取り締まるために機能し続けています。違反した場合は最大3年以下の懲役または100万円以下の罰金が科されます。法律の存在は知っていても「自分のコードがどこから違法になるのか」の線引きが曖昧なエンジニアは少なくありません。この記事では、法律の構造から具体的な違法・グレーゾーン・安全な実践まで、実務目線で整理します。
免責事項:本記事は法的アドバイスを提供するものではありません。具体的な案件については必ず弁護士にご相談ください。
不正アクセス禁止法の構造を理解する
法律が禁止している行為は大きく4種類です。
1. 不正アクセス行為そのもの(第3条)
最も重要な禁止行為です。具体的には以下の2パターンがあります。
他人の識別符号を無断使用する行為:IDとパスワードでアクセス制御されているシステムに、他人のIDとパスワードを無断で入力してログインする行為です。不正に入手した認証情報を使う、他人が書き留めたパスワードを無断で使う、共有アカウントの範囲外で使用するといったケースが該当します。
セキュリティホールを突く行為:認証情報を使わず、プログラムの脆弱性を利用してアクセス制限を回避する行為です。SQLインジェクションやバッファオーバーフローなどでアクセス制御を突破するケースが該当します。
ここで重要なのは「アクセス制御機能が存在するかどうか」です。ログイン機能があるサイトの認証を突破すれば第3条違反です。誰でもアクセスできる公開Webページを閲覧するだけなら、この条文には抵触しません。
2. 識別符号の不正取得・保管(第4条・第5条)
他人のIDやパスワードを不正に取得する行為、および不正アクセスに使用する目的でこれを保管する行為が禁止されています。フィッシング詐欺によって盗んだ認証情報を所持しているだけでも処罰対象になります。
3. 不正アクセスを助長する行為(第6条)
正当な理由なく他人のIDとパスワードを第三者に教える行為も違法です。「友達のアカウントを頼んで借りた」「テスト用に先輩のパスワードを教えてもらった」という行為もここに抵触し得ます。
4. フィッシング行為(第7条)
アクセス管理者になりすまして、利用者のIDやパスワードを不正に入力させるよう誘導する行為です。偽のログインフォームの設置やフィッシングメールの送信が該当します。
| 禁止行為 | 法条 | 罰則 |
|---|---|---|
| 不正アクセス行為 | 第3条 | 3年以下の懲役または100万円以下の罰金 |
| 識別符号の不正取得 | 第4条 | 1年以下の懲役または50万円以下の罰金 |
| 識別符号の不正保管 | 第5条 | 1年以下の懲役または50万円以下の罰金 |
| 不正アクセスの助長 | 第6条 | 1年以下の懲役または50万円以下の罰金 |
| フィッシング行為 | 第7条 | 1年以下の懲役または50万円以下の罰金 |
スクレイピングと不正アクセス禁止法の関係
「スクレイピング自体は違法ではない」——これは概ね正しい認識です。誰でも閲覧できる公開Webページから情報を取得する行為は、不正アクセス禁止法の「アクセス制御機能」に触れないため、不正アクセスには該当しません。しかし、スクレイピングが複数の法律に抵触するケースは確実に存在します。
明確に違法になるスクレイピングのパターン
パターン1:ログインが必要なページへの無断アクセス
会員限定コンテンツ、企業の管理画面、マイページなどはアクセス制御が施されています。正規の認証を経ずに(あるいは他人の認証情報を用いて)これらのページにスクレイピングすることは、不正アクセスに該当します。
たとえば「退会したが過去のデータを取り出したい」という理由でも、退会後に旧アカウントでログインしてデータを取得することは第3条違反です。また「テスト用に別人のアカウントを借りてアクセスした」も、借りた本人の承諾があったとしても、そのサービスのアクセス管理者(サービス運営者)の承諾を得ていなければ違法と判断される可能性があります。
パターン2:サーバーに過大な負荷をかけて業務を妨害する行為
スクレイピング時に過剰なリクエストを送り、サーバーをダウンさせたり応答不能にしたりした場合、不正アクセス禁止法ではなく刑法の偽計業務妨害罪または電子計算機損壊等業務妨害罪(刑法第233条・第234条の2)が適用される可能性があります。
この点について、エンジニアが知っておくべき重要な事件があります。
Librahack事件(岡崎市立中央図書館事件・2010年)
2010年、愛知県の男性が岡崎市立中央図書館のWebサイトに新着図書データを取得するプログラムを実行し、1秒に1回のペースで33,000回以上のアクセスを行いました。男性に攻撃の意図はなく、自身のために使いやすいデータベースを作ろうとしたものでした。
しかしライブラリシステム側に不具合があり、このアクセスによってサーバーが不安定になりました。男性は偽計業務妨害の疑いで逮捕され、21日間勾留された後、起訴猶予処分で釈放されました。後に原因はシステム側の設計不備にあることが判明し、業界に大きな波紋を呼んだ事件です。
この事件が示す教訓は明確です。悪意がなくても、サーバー側に予期しない影響を与えた場合に法的リスクが生じること、そして「1秒に1回」という一般的な頻度でも状況によっては問題視されること——つまりアクセス頻度の安全基準は一律に存在しないということです。
パターン3:取得したデータの著作権侵害
スクレイピングで取得したデータを無断で商用利用したり、大量に複製・公開したりすると著作権法違反になります。記事・写真・データベースの構成などに創作性が認められれば著作物として保護されます。取得した「情報」を別の形で活用するビジネス用途では、特に注意が必要です。
パターン4:個人情報を含むデータの取得・利用
スクレイピングで取得したデータに氏名・住所・メールアドレスなどの個人情報が含まれる場合、その取得・保存・利用は個人情報保護法の対象となります。取得目的の明示、利用目的の制限、第三者提供の禁止といった義務が発生します。
グレーゾーン——判断が難しいケース
不正アクセス禁止法のうち、特にエンジニアが迷いやすいグレーゾーンをまとめます。
利用規約でスクレイピングが禁止されているサイト
多くのサービスは利用規約で「自動的なデータ取得を禁止する」と規定しています。利用規約は民事上の契約であり、違反した場合は債務不履行や不法行為による損害賠償請求の対象になりますが、それ自体が即座に刑事罰を意味するわけではありません。
ただし、ログイン後に規約に同意してアクセス制限のあるページを操作する場合は話が変わります。「規約に同意してログインした上でのスクレイピング」は、アクセス管理者が許可した範囲外の利用として、不正アクセスと認定される余地が生じます。
robots.txtで禁止されているサイトへのアクセス
robots.txt は技術的なルールファイルであり、法的拘束力がある文書ではありません。robots.txtを無視してクロールしても、それだけで直ちに違法にはなりません。しかし、サイト運営者の明示的な意思表示を無視した行動は、民事上の紛争や評判上のリスクにつながります。また、robots.txtへの準拠は検索エンジンなどが長年守ってきた業界慣行でもあります。
セキュリティ診断目的でのアクセス
「脆弱性を調べたい」「このサービスは大丈夫か確認したい」という目的で、許可なく他社のサービスに対して診断ツールを実行することは、不正アクセス禁止法に抵触する可能性が高いです。善意であっても、権限のないシステムへのアクセスは違法です。
ペネトレーションテストや脆弱性診断を行う場合は、必ずサービス運営者から書面での承諾を得た上で行う必要があります。「バグバウンティプログラムの範囲内」であれば運営者の承諾があるとみなせますが、それ以外の自己判断による診断は法的リスクを伴います。
退職した企業のシステムへのアクセス
2023年に実際に検挙された事例として、退職した元従業員が在職中に知り得た上司・同僚のIDとパスワードを使い、退職後も社内ネットワークにログインしてデータを閲覧・削除した事件があります。「自分が以前使っていた環境へのアクセス」であっても、退職後は利用権限が消滅しており、明確な不正アクセスです。
安全なスクレイピングのための実践的チェックリスト
スクレイピングを行う際に確認すべき事項を整理します。
- アクセス制御の有無を確認する:ログインが必要なページかどうか。ログイン後のページへのスクレイピングは原則として許可を得てから行う。
- 利用規約を必ず読む:スクレイピング・自動取得の禁止条項がないか確認する。禁止されている場合は運営者に問い合わせるか断念する。
- robots.txtに従う:技術的に回避できても、robots.txtで禁止されているパスへのアクセスは避ける。
- アクセス頻度を制御する:リクエスト間に適切なインターバル(最低でも1〜数秒)を設ける。対象サービスのトラフィックを著しく増加させないようにする。
- User-Agentを偽装しない:ブラウザを偽装して制限を回避するような行為は避ける。適切なUser-Agentを設定する。
- 個人情報を不必要に収集しない:取得データに個人情報が含まれる場合、利用目的を明確にし、不要なデータは収集しない。
- 著作物を無断複製しない:取得したコンテンツを転載・販売する場合は権利者の許諾を得る。
- 公式APIが存在する場合はAPIを使う:TwitterやGitHubなどは公式APIを提供している。APIがある場合は必ずそれを使う。
import time
import requests
from urllib.robotparser import RobotFileParser
def safe_scrape(url: str, delay: float = 2.0) -> str | None:
"""安全なスクレイピングの基本パターン"""
# 1. robots.txtを確認
base_url = "/".join(url.split("/")[:3])
rp = RobotFileParser()
rp.set_url(f"{base_url}/robots.txt")
rp.read()
if not rp.can_fetch("*", url):
print(f"robots.txtにより禁止: {url}")
return None
# 2. 適切なUser-Agentを設定
headers = {"User-Agent": "MyResearchBot/1.0 (+https://example.com/bot-info)"}
# 3. アクセス間隔を守る
time.sleep(delay)
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
return response.text
まとめ——「技術的にできる」と「法的に許される」は別の話
不正アクセス禁止法は「悪意があるかどうか」だけでなく、「アクセス制御を回避したかどうか」という客観的な行為の事実によって判断されます。Librahack事件が示したように、善意であっても、相手のシステムに影響を与えた時点で法的手続きに巻き込まれることがあります。
スクレイピングを含む自動アクセス行為は、以下の一文を常に念頭に置いて設計してください。
「権限のないシステムには近づかない。権限の範囲内であっても、相手への影響を最小化する」
技術的に実装できることと、法的に許容されることの間には明確なラインがあります。そのラインを知り、守ること——これはエンジニアとしての基本的な職業倫理です。不安な場合は、実装を始める前に法律の専門家に相談することを強くお勧めします。