要件はシンプル
- 長いURLを “短い一意のID” に変換
- その短いURLにアクセスすると元のURLにリダイレクトする
元URL:
https://example.com/articles/2025/11/27/why-url-shortener-is-powerful-for-system-design
短縮URL:
https://sho.rt/aBcD12- ユーザーが長いURLを送る
- サービスが短い文字列(ID)を作る
- https://sho.rt/<短いID> を返す
- ブラウザが sho.rt/abc123 にアクセス
- DB or キャッシュから元URLを検索
- 302 or 301 リダイレクトを返す
- 1時間
- 7日
- 永久保存 etc、用途に応じて TTL を決める
- 何回クリックされたか
- ユーザーの地域
- ブラウザ・デバイス
- 参照元(referrer) etc.
Slack や Twitter が裏で使ってる理由がこの辺りにあるらしい
- URLが正しい形式かチェック
- マルウェア / フィッシングURLは拒否
- 1秒で終わる必要あり(UX的に)
URL短縮は機能より 非機能要件 が鬼のように重要。
- URL短縮 → クリックした瞬間ページに飛びたい(遅いと使い物にならない)
Twitter や LINE と連携すると 1秒間に数十万リダイレクトが来る。
- 短縮URLが死ぬとリンクが全部死ぬ
- ID重複したら大事故
- クリックイベントは激重(PVが爆発するなど仮定する)