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

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

2025年5月29日原文(xania.org)

概要

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をインストールしたばかり…今の時代、できることが増えたね!

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

Hacker Newsで議論の続きを見る