Compiler Explorerと「永続するURL」の約束
(xania.org)- Compiler Explorerは共有リンクを長く生かすため、2012年から保存方式を変えてきたが、goo.glの終了により過去の
godbolt.org/g/abc123リンクの保全が急務となっている - 当初はコンパイラの状態全体をURLに含めていたが、2014年にはGoogleのURL短縮サービスを導入し、2016年にStack Overflowが短縮URLを禁止した後は
godbolt.org/g/abc123という迂回リンクを作った - URL長の制限がより大きな問題になった2018年以降は、状態をS3上のJSON文書として保存し、DynamoDBで短いハッシュと完全なパスの対応を管理する独自方式へ移行した
- Googleがgoo.glリンクを2025年8月に終了すると既存のgoo.glベースのリンク解決が難しくなるため、公開Webとログから見つけた約12,000件の
gリンクとそのリダイレクト先を独自データベースに集めている - 古いCompiler Explorerリンクを持つユーザーが今そのリンクにアクセスすれば保全対象に入る可能性があり、長く残すべき共有知識は中核インフラを自ら所有しているほうが安全だ
Compiler Explorerのリンク保存方式の変遷
- 2012年にはCompiler Explorerの状態全体をURL内に保存していた
- コンパイラの状態全体をURLにエンコードする方式は長くなりすぎて扱いにくく、2014年3月にGoogleのgoo.gl短縮URL対応が追加された
- 当時の短縮リンクは
goo.gl/abc123形式で、クリックするとCompiler Explorerサイトの完全URLへリダイレクトされ、その後URL内の状態をデコードしていた
Stack Overflowの禁止後の迂回リンク
- 2016年、Stack Overflowは実際のリンク先を隠せることを理由にURL短縮サービスを禁止した
- この措置はCompiler Explorerのリンクにも影響したが、当時はユーザーデータを自前で保存する意図はなかった
- 迂回策はgoo.glを使い続けつつ、ユーザーには
godbolt.org/g/abc123形式のリンクを提供する方式だったabc123はgoo.glの固有IDだった/g/abc123へのアクセスはgoo.gl/abc123へリダイレクトされる- goo.glはさらに状態を含むgodbolt.orgの完全URLへリダイレクトした
- その後はGoogle APIを使って複数段のリダイレクトチェーンを避けるようにした
2018年の独自ストレージへの移行
- 2018年にはURL長の制限がさらに大きな問題となり、すでにURL内データの圧縮も行っていた
- Compiler Explorerは状態を直接保存する構造へ変更した
- 短縮リンクのハッシュに不快な単語が含まれないかも検査していた
- 不快な単語が出た場合は文書に意図的に追加情報を入れて別のハッシュが出るようにした
- この挙動はbug #1297につながった
goo.gl終了が生んだ保全問題
- Compiler Explorerは今も
godbolt.org/g/abc123リンクをサポートしている - Googleは既存リンクが意図されたリンク先へ引き続きリダイレクトされるとしていたが、goo.glは数年前に読み取り専用となっており、2025年8月に最終終了予定となっている
- 終了後はgoo.glベースのリンクをこれ以上解決できなくなる
- 実際の
goo.glリンク自体はCompiler Explorer側ではどうにもできないが、godbolt.org/g/abc123リンクは独自データベースで保全できる
既存リンクの収集と独自データベース
- ここ数日、公開されたさまざまな情報源から既存リンクとそのリダイレクト先URLを集めている
- 現時点で約12,000件のリンクを見つけている
- Google Web検索API
- GitHub API
- 独自のWebログ
- archive.orgのStack Overflowデータダンプ
- Archive.orgが保存したWebページ一覧
- 内部的にはgoo.glよりも独自データベースを優先して使うよう変更した
- まだデータベースにない新しい
gリンクも監視している - ローカルにはsqliteデータベースがあり、本番側ではDynamoを使っている
ユーザーが手伝えること
- 古い
godbolt.org/g/abc123リンクを別途保管しているなら、今のうちに各リンクへアクセスしておくと役に立つ - リンクにアクセスすればWebログに残り、その後データベースへ追加される可能性がある
- そうでなければ、2025年8月以降にそのリンクは動作しなくなるかもしれない
- この事例は重要インフラをサードパーティサービスに依存することの危険を示している
- 「永続するURL」という約束を守るには、スタック全体を自ら所有しなければならない
まだコメントはありません。