開発Tips

移行したのに、そのまま消した — google_sign_in v7 対応と機能削除の判断

「ぽんっ!」(旧称:でいりんぐ)で google_sign_inv7 に移行しました。ところがその直後、Google/Apple 連携そのものを実装しない方針が固まり、機能ごと削除しました。一見ムダに見えますが、ここには「休眠コードをどう扱うか」という学びがありました。

背景(当時の状況)

少し珍しい経緯の記録です。Dependabot が上げてきた google_sign_in のメジャー更新に対応して v7 へ移行したその直後、2026-07-17 に「Google/Apple 連携はそもそも実装しない」という方針が確定し、移行したばかりのコードを機能ごと削除しました。ムダに見えて、実は「休眠コードをどう扱うか」を考える良い機会でした。

まず v7 移行で得た設計の学び

削除する前の v7 移行では、いくつか良いパターンが得られました(将来復活させるなら再利用できます)。

  • 初期化ゲート: GoogleSignIn.instance を使う前に初期化を保証するゲートを置く(memo 化し、失敗時は破棄して再初期化できるように)。これは課金 SDK の「設定完了を保証してから呼ぶ」と同じ発想です。
  • 設定は設定ファイルに委ねる: サーバクライアント ID をコードにハードコードせず、Android / iOS それぞれの Firebase 設定ファイルから自動構成させる。flavor による差異も吸収できる。
  • キャンセルの契約を維持: v7 でキャンセルが例外方式に変わったため、既存の呼び出し側契約を保つよう自前の例外型に変換し、仕様テストで固定した。

そして「機能ごと削除」を選んだ

移行の直後に方針が変わり、Google/Apple 連携は当面実装しないことになりました。ここで選択肢は 2 つです。

  1. コードは残す(将来のために取っておく)。
  2. 機能ごと削除する。

ぽんっ!では 2(削除) を選びました。理由は、この連携コードが当時から UI に到達できない休眠コードだったからです。

休眠コードを抱えるコスト

「いつか使うかも」で残したコードには、地味なコストがあります。

  • 依存が増えるgoogle_sign_in とその推移的依存、iOS 側 SDK など)。攻撃面・ビルド時間・更新追従の負担が増える。
  • 保守対象になる。使っていないのに、依存更新のたびに壊れていないか気にすることになる。
  • 読み手を惑わせる。到達不能なコードは「使われているのか?」という疑問を生む。

将来必要になったら、そのときのバージョンで作り直すほうが健全だと判断しました。過去の実装は git 履歴(移行 PR)に残るので、参照はできます。

まとめ

  • 依存移行で得た設計パターン(初期化ゲート・設定ファイル委譲・例外契約の維持)は、機能を消しても再利用できる資産になる。
  • 休眠コード(UI 到達不能なコード)は、依存・保守・可読性のコストを静かに増やす。「いつか使うかも」より、必要になったら作り直すほうが健全なことが多い。
  • 消す判断をしても、実装は git 履歴に残る。復活の可能性は履歴で担保できるので、思い切って削除できます。