まず前提:ブラウザに届いたHTMLは必ず見える
結論から書くと、ブラウザで表示できるHTMLのソースを、閲覧者から完全に隠す方法はありません。ページを表示するということは、HTML・CSS・JavaScriptの中身が相手の端末まで届くということだからです。届いたデータは、開発者ツールや「ページのソースを表示」から誰でも確認できます。
これは仕組み上の制約であり、サービスの良し悪しの問題ではありません。静的なHTMLとして公開する以上、表示に必要なコードはそのまま相手の手元に渡ります。サーバー側で処理を隠せるPHPなどと違い、静的公開ではブラウザが受け取った内容がそのまま見える、という点を最初に押さえておきましょう。
そのため、「ソースを隠す」を目標に置くと、いつまでも完全な解決にたどり着けません。発想を変えて、「そもそも誰にページを届けるか」と「ソースに何を載せるか」という2つの軸で考えると、現実的な落としどころが見えてきます。
難読化やコピー禁止では守れない理由
ソースを見られたくないと考えると、JavaScriptの難読化、右クリックの禁止、コピー防止といった手段がまず思い浮かびます。しかし、これらは閲覧そのものを止める力を持ちません。難読化されたコードも実行のためにブラウザへ渡るので、保存して読み解くことは可能です。
右クリック禁止やコピー防止も、ショートカットキーや開発者ツール、ページの保存機能で容易に回避できます。むしろ通常の操作を妨げて、閲覧者に不便を感じさせるだけになりがちです。「見えなくする小細工」は、本気で中を見ようとする相手には効果が薄い、と割り切ったほうが判断を誤りません。
守るべきなのはコードの文字列そのものではなく、その先にある「見せたくない相手に内容を渡さないこと」です。ここを取り違えると、手間をかけた割に肝心の情報が守れていない、という事態になりかねません。
- 難読化したJavaScriptもブラウザへ渡るため、保存して解析できる
- 右クリック禁止はショートカットや開発者ツールで回避される
- コピー防止はページ保存機能の前ではほぼ無力
- 小細工は閲覧者の操作性を下げる割に効果が限定的
よくあるNG例と安全な直し方
ソースを見られたくないHTMLをどう見せるか、という考え方では、「検索に出さない」と「見られないようにする」を混同しないことが重要です。noindexやrobots.txtは検索エンジンへの指示であり、アクセス制限そのものではありません。
安全に共有するには、誰に見られると困るかを先に決め、URL共有だけで足りるのか、認証や期限が必要なのかを選びます。共有相手と機密度が決まったら、URLのみ・パスワード・メール認証・会社ドメイン認証のどれで渡すかを選びます。
- NG: 機密情報入りHTMLを認証なしURLで共有し、noindexだけで安心する
- OK: パスワード・メール認証・会社ドメイン認証で閲覧者を絞る
- NG: テスト用APIキーや社内URLをHTML内に残したまま渡す
- OK: 公開前に外部送信先、秘密情報、フォーム送信先を確認する
守りたいものを「閲覧者」と「機密情報」に分ける
ソースを見られたくない理由は、たいてい次のどちらかに分けられます。1つは「制作物そのものを関係者以外に見せたくない」というケース。もう1つは「コードの中に外部へ出してはいけない情報が含まれている」というケースです。両者では取るべき対策がまったく異なります。
前者であれば、対策はソースではなくアクセスの制御です。リンクを知っている人だけ、パスワードを知っている人だけ、特定のメールや会社ドメインを持つ人だけ、というように閲覧できる相手を絞れば、無関係な第三者にソースが渡ること自体を防げます。
後者であれば、対策は公開前にソースから機密情報を取り除くことです。APIキーや個人情報、社内限定のメモなどは、たとえ閲覧者を絞っても、届いた相手には見えてしまいます。静的公開に不要な情報は、そもそも載せないのが原則です。
- 制作物を関係者だけに見せたい → 閲覧できる相手を認証で絞る
- コードに機密が混入している → 公開前にソースから取り除く
- 検索結果に出したくないだけ → noindexで対応(ただし閲覧制限ではない)
noindexは「検索除け」であって閲覧制限ではない
見られたくない対策として、検索エンジンに載せないnoindexを思い浮かべる人もいます。確かに検索結果から外す効果はありますが、これはアクセス制御ではありません。URLを知っている人は、検索を経由せず直接ページを開けてしまいます。
つまりnoindexは「偶然たどり着かれること」を減らす手段にすぎず、「URLが第三者に転送された場合」には無力です。本当に閲覧者を限定したいなら、noindexだけに頼らず、パスワードやメール認証といった認証を重ねる必要があります。
検索除けと閲覧制限は別物だと分けて考えると、必要な対策の組み合わせが整理しやすくなります。社外秘の内容ほど、この区別を曖昧にしないことが大切です。
ギガサイト便で「見せる相手」を絞る手順
ここまでの考え方を実際に形にするなら、認証付きの共有URLとしてHTMLを公開できるギガサイト便が使えます。サーバー構築やデプロイ設定は不要で、ファイルをアップロードして閲覧条件を選ぶだけです。手順は次のとおりです。
- HTMLファイル、またはCSS・画像を含むZIPをアップロードする
- アップロード時のセキュリティスキャンで、APIキーらしき文字列や外部スクリプト依存などの警告を確認する
- 認証方式を選ぶ(パスワード認証、メール認証、会社ドメイン認証など)
- 公開期限を設定し、確認が終わったあとも残り続けないようにする
- 発行されたURLを関係者に送り、必要に応じてアクセスログで閲覧状況を確認する
完璧な秘匿ではなく、現実的な線引きを
静的HTMLの共有では、ソースを一切見せない完璧な秘匿は実現できません。しかし、見せる相手を認証で絞り、機密情報を事前に取り除き、必要なら公開期限で残さないようにすれば、実務で困らない水準の安全は十分に確保できます。
大事なのは、「ソースを隠す」という達成しにくい目標を追わず、「無関係な人に届かない」「届いても困る情報が載っていない」という状態を作ることです。この線引きができれば、HTMLを安心して相手に見せられます。
よくある質問
HTMLのソースコードを完全に見られないようにできますか?
いいえ、ブラウザで表示できるHTMLのソースを閲覧者から完全に隠すことはできません。ページを表示する時点で、HTMLやCSS、JavaScriptは相手の端末に届いてしまうためです。隠すのではなく、見せる相手を認証で絞り、ソースに機密情報を載せない方向で考えるのが現実的です。
JavaScriptを難読化すればソースは守れますか?
難読化は読みにくくはできますが、コード自体は実行のためにブラウザへ渡るので、保存して解析することは可能です。閲覧そのものを止める力はないため、機密を守る手段としては不十分です。本当に守りたい情報は、難読化に頼らず公開前にソースから取り除いてください。
noindexを付ければ他人に見られませんか?
noindexは検索結果に出さないための設定で、アクセス制限ではありません。URLを知っている人は直接ページを開けるため、転送されれば第三者にも見えます。関係者だけに限定したい場合は、パスワード認証やメール認証など、閲覧者を絞る仕組みを併用してください。
見せる相手を限定してHTMLを公開するにはどうすればよいですか?
認証付きの共有URLとして公開できるサービスを使うのが手軽です。ギガサイト便ではファイルをアップロードし、パスワード認証・メール認証・会社ドメイン認証などから閲覧条件を選べます。公開期限も設定でき、確認後にURLが残り続けるのを防げます。
noindexを設定すれば認証は不要ですか?
不要ではありません。noindexは検索結果への表示を抑えるための指定で、URLを知っている人の閲覧を止める仕組みではありません。閲覧者を制限したい場合は認証が必要です。