大きな機能を、安全に少しずつ出すには、どうしますか

配備と公開を分け、機能を出し入れできる仕組み (フィーチャーフラグ) で、社内、一部の利用者、全員、と段階を踏んで広げる、と答える問い。同じ人にはいつも同じ側を見せる分け方、すぐ切れる手、使い終わったフラグを消す後始末まで話します。

まず 4 択で考える

2 問

答えに入れるべき考えを選びます。選ぶと、すぐに正誤と解説が出ます。そのあと下の欄で、自分の言葉で答えてみます。

  1. 問 1「10% の人に新しい画面を見せる」とき、見せる人の決め方として正しいものはどれか

  2. 問 2フィーチャーフラグで出した機能の扱いとして、正しいものはどれか

2 問中 0 問に答えました

答えてみる

面接官に「大きな機能を、安全に少しずつ出すには、どうしますか」と聞かれたつもりで、答えを見る前に自分の言葉で、声に出して答えてみます。

解説を読む

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

こう聞かれます

  • 「大きな機能を、安全に少しずつ出すには、どうしますか」
  • 「新しい決済の画面を、一部の人にだけ先に見せたいです。どう作りますか」
  • 「長く作り続ける機能のブランチは、いつまで分けておきますか」

面接官が見ている点

  • コードを出すこと (配備) と、利用者に見せること (公開) を分けて考えられるか
  • 広げる段階ごとに、何を見て次へ進むかを決めているか
  • 問題が出たとき、配備を戻さずにすぐ切れる手を用意しているか
  • フラグが増え続けて、コードが読めなくなる怖さを知っているか

短い答え

  • 配備と公開を分けます。新しい機能はフラグで閉じたまま本番に出し、フラグを開ける範囲で、誰に見せるかを決めます。
  • 社内の人、一部の利用者 (たとえば 1%、10%)、全員、と段階を踏んで広げ、段階ごとにエラーや遅さの数字を見て、次へ進むか戻すかを決めます。
  • 問題が出たらフラグを閉じるだけで止められます。全員に出し終えたら、フラグと古い道のコードは消します。

この問いを含む分野をレッスンで練習する

レッスンを開く

少し詳しい答え

配備と公開を分ける

大きな機能を長いブランチで作り続けると、最後にまとめて混ぜる (マージする) ときにぶつかりが大きくなり、出す日に何が起きるか読めません。

フラグを使うと、作りかけのコードも閉じたまま小さく本番に出せます。本番に出ても、フラグが閉じていれば利用者には見えません。見せるかどうかは、配備とは別の日に、別の人が決められます。

同じ人には同じ側を見せる

「10% の人に見せる」を、見るたびの乱数で決めると、同じ人が開くたびに新しい画面と古い画面を行き来します。利用者の ID から決まった番号 (0 から 99) を出し、その番号が割合より小さい人に見せます。

JavaScript

function bucket(key) {
  let h = 2166136261;
  for (const ch of key) {
    h = Math.imul(h ^ ch.charCodeAt(0), 16777619) >>> 0;
  }
  return h % 100;
}

function isEnabled(flag, userId) {
  if (!flag.on) {
    return false;
  }
  return bucket(flag.name + "/" + userId) < flag.percent;
}

const flag = { name: "new-checkout", on: true, percent: 30 };
const users = ["u1", "u2", "u3", "u4", "u5", "u6", "u7", "u8", "u9", "u10"];

console.log(users.filter((u) => isEnabled(flag, u)));
console.log(isEnabled(flag, "u3") === isEnabled(flag, "u3"));

flag.on = false;
console.log(users.filter((u) => isEnabled(flag, u)));
[ 'u1', 'u2', 'u6', 'u7' ]
true
[]

同じ ID ならいつも同じ番号になるので、同じ人はいつも同じ側を見ます。割合を 30 から 50 に上げても、すでに見ていた人は見たままです。フラグの名前を番号の計算に混ぜているのは、どの機能でも同じ人ばかりが先に当たらないようにするためです。on を閉じれば、割合に関係なく全員が古い道に戻ります。

段階と、進む基準

段階ごとに、何を見て次へ進むかを先に決めます。たとえばエラーの割合と遅さが、古い道と比べて悪くなっていないか、です。新しい道と古い道で数字を分けて見られるように、記録にフラグの状態を残します。

DB の形を変える機能は、フラグを閉じても古い道が動けるように、DB は先に両方が動ける形にしておきます。フラグで戻せるのは、コードの道だけだからです。

後始末

全員に出し終えたフラグは、古い道のコードごと消します。残すと、どの組み合わせが本番で動いているのか分からなくなり、試験の数も増えます。フラグを作るときに、消す時期と持ち主を決めておきます。

話すときは、自分が出した機能で、どの段階で何を見たか、途中で戻したことがあるかの例を 1 つ用意します。話す例は架空の例で構いません。

よくある間違い

  • 見るたびの乱数で見せる人を決める同じ人が開くたびに画面が変わり、混乱と問い合わせを生みます
  • 進む基準を決めずに割合を上げる問題が出ていても気づかず、全員に広げてしまいます
  • フラグを消さずに残し続ける古い道と新しい道が混ざり、コードが読めなくなり、思わぬ組み合わせで不具合が出ます
  • フラグで DB の変更まで戻せると思う 戻せるのはコードの道だけです。DB は両方の道が動ける形にしておきます

深掘りの問い

  • 「フラグの値はどこに置きますか」配備せずに変えられるよう、設定の置き場や専用の仕組みに置き、変えた記録を残す、と答えます
  • 「A/B テストと何が違いますか」仕組みは近いが、目的が違う。安全に出すためのフラグは全員に出したら消し、A/B テストはどちらが良いかを数字で比べるために使う、と答えます
  • 「フラグの置き場が落ちたら」読めないときは閉じた側 (古い道) で動くように作る、と答えます

確認日 2026年10月30日書き手 小尾 知希 (講師)

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