API のバージョンと後方互換性をどう保ちますか

足す変更は互換、消す変更と型を変える変更は互換を壊す、と分けて答える問い。住所やヘッダーでの版の分け方、古い版を閉じる手順、スマホアプリの古い版への手当てまで話します。

答えてみる

面接官に「API のバージョンと後方互換性をどう保ちますか」と聞かれたつもりで、答えを見る前に自分の言葉で答えます。

声に出して答えた人は「書かずに答えを見る」で開けます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「API のバージョンと後方互換性をどう保ちますか」
  • 「API の項目の名前を変えたくなったら、どう進めますか」
  • 「スマホアプリの古い版が残っていると、何が困りますか」

面接官が見ている点

  • どの変更が互換を壊すか (破壊的変更) を、具体的に分けられるか
  • 版を分ける方法 (住所の /v1/、ヘッダー) と、それぞれの向き不向きを知っているか
  • 古い版をいきなり消さず、知らせて、使われていないのを確かめてから閉じる、という手順を言えるか
  • スマホアプリは古い版が長く残るので、更新を促す仕組みも要る、と分かっているか

短い答え

  • まず、項目を足すだけの変更で済むよう設計し、既存の項目を消す、名前や型を変える、といった互換を壊す変更は避けます。
  • どうしても壊すときは、住所 (/v1/ と /v2/) やヘッダーで版を分け、しばらく両方を動かして利用者に移ってもらいます。
  • スマホアプリは古い版が残り続けるので、古い版を閉じる前に、更新を強く促す仕組みを用意しておきます。

少し詳しい答え

互換を保つ変更と壊す変更

後方互換性とは、API を変えたあとも、前から使っている呼び出し側がそのまま動くことです。

  • 互換を保つ応答に新しい項目を足す、受け取る項目に省略してよい物を足す、新しい住所を足す
  • 互換を壊す項目を消す、名前を変える、型を変える (数を文字列にする など)、省略してよかった項目を必須にする、エラーの形を変える

たとえば、name を fullName に変えたいときは、いきなり置き換えず、しばらく両方を返します。

JSON

{
  "id": 7,
  "name": "山田 花子",
  "fullName": "山田 花子"
}

呼び出し側が fullName に移ったのを確かめてから、name を消します。ここで大事なのは、呼び出し側が「知らない項目が来ても無視する」作りになっていることです。そうなっていれば、足す変更で落ちません。

版の分け方

壊す変更をまとめて出すときは、版を分けます。

http

GET /v1/users/7
GET /v2/users/7

住所に版を入れると、見て分かりやすく、試すのも簡単です。ヘッダーで版を指定する方法は、住所をきれいに保てますが、ブラウザで開くだけでは試しにくく、キャッシュでも版の違いを考える必要があります。どちらにするかより、チームで 1 つに決めてそろえることのほうが大事です。

古い版を閉じる手順とトレードオフ

古い版は、いきなり止めません。

  1. 新しい版を出し、古い版は「いつ閉じるか」を文書や応答のヘッダーで知らせます
  2. 古い版への呼び出しの数を記録で見て、誰がまだ使っているかを確かめます
  3. 使う人がほぼいなくなってから閉じます

スマホアプリは、利用者が更新しない限り古い版が残ります。起動のときに「この版はもう使えません。更新してください」と出せる仕組みを、最初の版から入れておくと、あとで古い API を閉じられます。

版を分けることにも弱点があります。動かす版が増えるほど、直す場所も試す場所も増えます。だから、版を上げるのは本当に壊す変更が要るときだけにし、ふだんは足す変更で進めます。社内の画面からしか呼ばない API で、画面とサーバーを同時に出せるなら、版を分けずに一緒に直すほうが軽いこともあります。

話すときは、自分が関わったサービスで項目の名前を変えた、または版を上げた例を 1 つ用意し、どう移行したかを順に話します。

よくある間違い

  • 項目の名前をいきなり変える古い呼び出し側が、その日から落ちます。しばらく両方を返して移ってもらいます
  • 小さな変更でも毎回版を上げる動かす版が増えて手間がかさみます。足す変更で済むならそれで進めます
  • スマホアプリの古い版を忘れる更新しない利用者が残るので、更新を促す仕組みが無いと、古い API をいつまでも閉じられません

深掘りの問い

  • 「必須でなかった項目を必須にしたいときは」まず省略されたときの既定の値をサーバーで決めて受け入れ、呼び出し側が送るようになってから必須にする、と答えます
  • 「エラーの形を変えたいときは」エラーの形も約束の一部なので、壊す変更として扱い、版を分けるか、両方の形をしばらく返す、と答えます
  • 「誰が古い版を使っているか、どう調べますか」呼び出しの記録に版と呼び出し元 (API キーやアプリの版) を残し、数を見て決める、と答えます

確認日 2026年10月24日

技術面接問題の一覧へ戻る