1 ポイント 投稿者 GN⁺ 2025-05-30 | まだコメントはありません。 | WhatsAppで共有
  • 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は状態を直接保存する構造へ変更した
    • 入力をハッシュ化する
    • 状態をJSON文書としてS3に保存する
    • ハッシュの短縮形をgodbolt.org/z/hashbit URLとして提供する
    • DynamoDBで短いハッシュと完全パスの対応を保存する
  • 短縮リンクのハッシュに不快な単語が含まれないかも検査していた
    • 不快な単語が出た場合は文書に意図的に追加情報を入れて別のハッシュが出るようにした
    • この挙動は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」という約束を守るには、スタック全体を自ら所有しなければならない

まだコメントはありません。

まだコメントはありません。