世界を動かす技術を、日本語で。

コンパイラエクスプローラーと永遠に続くURLの約束

概要

Compiler ExplorerのURL管理の歴史と課題を解説。 外部サービス依存による問題点と自前インフラへの移行経緯。 goo.gl短縮URL終了による影響と救済策を紹介。 12,000件以上のリンクをデータベース化し保存活動を実施。 永続的なURL維持へのコミットメントを強調。

Compiler Explorerリンクの歴史と課題

  • 2012年当初、Compiler Explorerの全状態を URLに直接保存 していた設計。
  • URLが肥大化 し扱いづらくなったため、 2014年3月にGoogleのgoo.gl短縮URL を導入。
  • goo.glリンク(例: goo.gl/abc123)をクリックすると、元の長いURLにリダイレクトし、状態を復元する仕組み。
  • 2016年、Stack Overflowが短縮URLを禁止。理由は、リンク先の偽装や悪用リスク。
  • Compiler Explorerのリンクも影響を受け、 ユーザーデータを保存しない方針 から独自ハックを実装。
    • goo.glのIDを利用し、 godbolt.org/g/abc123 形式のリンクを配布。
    • godbolt.org/g/abc123へのアクセスを goo.gl/abc123へリダイレクト し、最終的に元のURLへ誘導。
    • 最大3回のリダイレクト が発生し、複雑化。

独自ストレージへの移行

  • Google APIを活用 し、リダイレクト回数を削減。
  • 2018年、URL保存の限界 (長さ制限・圧縮済み)に直面し、 独自保存方式 を開発。
    • 入力内容を ハッシュ化し、JSONドキュメントとしてS3に保存
    • 短縮ハッシュをgodbolt.org/z/hashbit形式 で配布。
    • DynamoDBで短縮ハッシュとフルパスのマッピング を管理し、部分的な衝突にも対応。
    • 短縮ハッシュに不適切な単語が含まれないか自動チェック し、問題があれば追加情報で回避。
    • この仕組みが バグ#1297 の原因となり、印象的なエピソードに。

goo.gl終了とリンク救済活動

  • godbolt.org/g/abc123 リンクは引き続きサポート中。
  • しかし、 Googleのgoo.glは2025年8月に完全終了予定
    • 既存リンクのリダイレクトも不可能となり、 goo.glベースのリンクは無効化
  • 「リンクは永遠に残す」 という理念のもと、 独自データベース構築 を決意。
    • 各所から リンク収集・救出作業 を実施。
      • Google Web Search API
      • GitHub API
      • 自社Webログ
      • archive.org
      • Stack Overflowデータダンプ
      • archive.orgのアーカイブリスト
    • 12,298件以上のリンクを救出しデータベース化
    • 新たな「g」リンクも監視・追加中。
  • Peter Cordes氏 による問題提起に感謝。

ユーザーへの呼びかけと今後

  • godbolt.org/g/abc123形式のリンクを所持している場合、今のうちにアクセス推奨。
    • アクセス履歴から データベースに登録 され、 リンク消失を防止
  • 2025年8月以降、未登録リンクは 利用不可 となるリスク。
  • 第三者サービス依存のリスク を改めて認識。
    • 自前インフラでの永続的運用 が唯一の解決策。
  • リンク保存活動はプログラミング知識の保存活動
    • 古いCompiler Explorerリンクの再訪問・保存協力を呼びかけ。

まとめと教訓

  • 外部サービスへの過信は禁物
  • 自分でインフラを持つことが永続性の鍵
  • インターネットの知識共有の一端を守る活動 の重要性。
  • 2012年の約束「 URLは永遠に残す」を守るための取り組み。
  • 今後もユーザー協力のもと、知識保存を継続

免責事項・謝辞

  • 本記事は人間が執筆、リンクの提案・文法チェックはLLM利用。
  • ローカルはsqlite、プロダクションはDynamoDB使用
  • Peter Cordes氏 の貢献に謝意。
  • 2025年5月28日 10:12:00 CDT投稿

Hackerたちの意見

https://wiki.archiveteam.org/index.php/Goo.gl

新しいサービスを作るために既存のものを「殺す」ってのは大したことじゃないし、特に言うほどのことでもないよね。でも、既存のサービスを潰すのは、もっとひどい行為だと思う。特に、Googleが自社のアプリ用に何らかの形でまだ残してるのに。

https://wiki.archiveteam.org/index.php/URLTeam

確か、ArchiveTeamはGoo.glの短縮URLをブルートフォース攻撃してたはずで、「既知の」リンクを通ってなかったから、Compiler ExplorerのURLもたくさん持ってると思うよ。(だから、連絡してみるのがいいと思う)

2010年以前は、リンクは永遠に続くものだと疑いもなく思ってたんだ。ブラウザのブックマーク機能をめっちゃ使ってたし。しばらくして、ブックマークの大半がリンク切れでほとんど使えなくなってることに気づいた。そこからは、ウェブページをPDFとして印刷するのが俺のやり方になった。その後、リーダービューが人気になった時には、リーダービューから内容をコピーしてRTFファイルにペーストするようになった。

ちなみに、公式のウェブアーカイブのブラウザ拡張をインストールすれば、訪れたページを自動でアーカイブするように設定できるよ。

大事なことだけ覚えておくか、少なくともどこにあるかを知っておくのが俺の解決策だね。まだ死んでないから、まあうまくいってるのかな。

参照って、継続性に賭けることだよね。根本的には、壊れたウェブサイトのリンクとC言語のダングリングポインタは同じなんだ。

自分はSingleFile拡張機能を使って、訪れたページを全部アーカイブしてるよ。設定は簡単なんだけど、ディスクスペースめっちゃ食うから注意してね。$ du -h ~/archive/webpages 1.1T /home/andrew/archive/webpages https://github.com/gildas-lormeau/SingleFile

WARCを使ってみて: https://en.wikipedia.org/wiki/WARC_(file_format) それとWebRecorder: https://webrecorder.net/

ウェブページをテキストファイルに変換するようなツールってある?Beautiful Soup(か、Pythonの標準ライブラリの4行くらい)でできるのは知ってるけど、普段はスマホで必要なんだよね。スマホのブラウザには「リーダービュー」ってポップアップがあるけど、たまにしか出ないし、必要なページでは大抵出ないんだよね!編集: Termuxにw3mをインストールしたばかり…今の時代、できることが増えたね!

その仮定はどの情報源にも当てはまらないの?物事はガラッと変わることがあるからね。文字通り変わるものもあれば、意味が変わるものもある。修正されるから変わることもあるけど、他にも理由があるよね。もちろん、君がやろうとしていることには何かしらの利点があると思うけど。私がまだできたらいいなと思っているのは、連絡先リストから誰かの電話番号を「アーカイブ」すること。昔私たちの番号だったり、亡くなった家族や友達の番号だったり。

2010年以前は、リンクは永遠に続くものだと疑いもなく思ってた。どんなサイトや会社も、何かが永遠に続くと約束するのは、真剣に妄想しているか、意図的に嘘をついていると思うよ。大多数の時間の理論とは違うなら別だけど。

リンクがタイムアウトしたときに自動的にweb.archive.orgに飛ぶブラウザ拡張機能ってある?

この文章は人間が書いたけど、リンクはLLMによって提案され、文法チェックもされてる。こんな免責事項を見たのは今日2回目だ。新しいトレンドの始まりを目撃してるみたいだね。

そんな注意書きが必要だなんて、マジでびっくりだよ。

どうなんだろう、URLが永遠に続くなんて無理じゃない?ドメイン名を維持するのにお金がかかるし。URLが消えるのも悪いことじゃないかもしれない。人類は良いものを残すために特別な努力をするし、残りは歴史のゴミ収集に行くんだ。

でも歴史家は、もっと歴史のゴミを手に入れたいと思ってるよね。「本当の」生活についての洞察を得るために、価値があると思われる部分だけじゃなくて。もしタイムジャンプできたら、1000年後の歴史家が、デジタルメディアが腐って情報が跡形もなく消えていく時代をどう振り返るのか見てみたいな。

URLの消滅が良いことになるかもしれないって思うんだ。人類は良いものを残すために特別な努力をするからね。残りは歴史のゴミ箱行き。賛成だよ。前にここに思ったことを書いたことがあるよ: https://boehs.org/node/internet-evanescence

URLが永遠に続くっていうのは素敵な夢だったけど、実際には99%のURLは永遠には続かないみたいだね。無駄な戦いを続けるより、インフラが永久じゃないって前提で技術を作った方がいいかも。

インフラが永久じゃないって前提で技術を作った方がいいかも? そうだね。それに、URL短縮サービスをインフラとして使わないこともね。

そうだね。ドメイン名はしょっちゅう売買されるし、永遠に続くはずのURLが時間が経つにつれて悪質なフィッシングリンクに変わることもあるよ。

URLはネットワーク上のリソースの場所を特定するものであって、リソースそのものではないから、永続的でユニークである必要はないんだ。だから「ユニフォームリソースロケーター」って呼ばれているんだよ。この問題は1997年に認識されて、デジタルオブジェクト識別子が発明された理由でもある。

リンク短縮サービスをデータベースみたいに使って、その後に元のリンクを失ってネットのあちこちから大切なリンクを探し出すのって、なんか詩的だよね。

短縮リンクを使ってURLを圧縮しただけじゃなかった? 彼らは自分のURLを「データベース」として使ってたんだよね(つまりコンパイラの状態を保持してた)。

長いURLを短くするのがURL短縮サービスの本来の使い方だよね。本当に悪用してるのは、詐欺やスパム、違法サイトを隠すために短縮サービスを使って、どこにでも投稿する人たちだよ。

Googleが読み取り専用バージョンを閉鎖するために努力する価値があるなんて、ちょっと驚きだな。プライベートリンクへのリダイレクトをオンラインに残すことで法的リスクを恐れてるのかな。

外から見ると難しいけど、サービスが古いライブラリとか不安定なランタイムを使ってる可能性があるね。それを止めたがってるのかも。ただ、正直言って、単なるコスト削減で、過去の約束とか善意なんて関係なく切り捨ててる可能性もあるよね。

驚くことに、purl.orgのURLは25年経ってもまだ使えるんだ。インターネットアーカイブのおかげだね。

永遠に続くURLの副産物は、永遠に保存するためのコスト(ずっとお金がかかる)と、永遠の制度的ケアと記憶が必要になることだよね。URLが長持ちするのは、現実の部分で使われない場合だと思う。もっと言うと、名前空間のためのUUIDみたいなもの。例えば、XMLやJava、Goで。