フルスタックエンジニア面接でよく聞かれる質問
文責 Aaron Cao · 更新

フルスタック面接では、レイヤーとレイヤーの継ぎ目が見られます。API 契約をどう設計し変更するか、ログインがブラウザからデータベースまでどのように機能するか、そしてある機能がスキーマから画面までどのように伝わるかが問われます。コーディングラウンド、機能構築の課題、そしてクライアントとサーバーにまたがる設計ディスカッションが行われるのが一般的です。
フルスタックエンジニアの面接では実際に何が試されるのか?
フルスタックの面接だと、通常なら一つの面接に使う時間で、フロントエンドとバックエンドという二つの完全な面接をまるごと準備しなければならないように感じるかもしれません。その心配はもっともですが、この節ではその仕事が見た目ほど大きくない理由を説明します。面接官がフロントエンドやバックエンド専門の面接をそのまま繰り返すことはめったになく、レイヤーが交わる部分を探ります。そここそが、フルスタックエンジニアが真価を発揮する場所だからです。
多くの面接プロセスは、四種類のラウンドを組み合わせています:
- コーディング:データ構造の問題、あるいはレコードのパース、グループ化、ページネーションのような実践的な課題で、多くの場合 JavaScript、TypeScript、Python、Java のいずれかで行われます。
- 機能構築:API に保存してバリデーションエラーを表示するフォームのような、小規模なエンドツーエンドの課題を、共有エディタや持ち帰りのリポジトリで行います。
- スタック横断の設計:コメントや通知のような機能を、スキーマ、API、クライアント側の状態、ネットワーク障害時の挙動まで含めて設計します。
- 行動面接:チケットから本番リリースまで機能を担当した経験や、レイヤーをまたいで追いかけたバグについて話します。
レイヤーごとの深掘りも依然として出題され、フロントエンドとバックエンドそれぞれのエンジニア向けページを含む専用の質問集は面接質問ハブにあります。このページでは、その両者の間にあるものを扱います。
API 契約やデータに関する質問で特に多いものは?
API はあなたの仕事の両側をつなぐ契約であるため、面接官は双方の視点から質問します:
- ある機能のエンドポイントをどう設計しますか、そして成功時と失敗時にそれぞれ何を返しますか?
- すでに本番稼働しているクライアントを壊さずに API を変更するにはどうしますか?(バージョニング、追加的な変更、非推奨化の猶予期間。)
- オフセット方式とカーソル方式のページネーション:アクティビティフィードにはどちらを使いますか、その理由は?
- クライアントがタイムアウトした場合に POST を安全に再試行できるようにするにはどうしますか?(冪等性キー。)
- ある特定のクライアント向けに REST、GraphQL、RPC のどれを選ぶかで、キャッシュ、オーバーフェッチ、エラーハンドリングはどう変わりますか?
- バリデーションはクライアント、サーバー、あるいは両方のどこに置くべきで、どちらが正とされますか?
- 一覧エンドポイントがネストしたデータを返す場合、N+1 クエリをどう避けますか?
優れた回答は、選択肢だけでなくトレードオフを名指しします。「カーソルページネーションにします。ユーザーがスクロールしている間に挿入された行はオフセットをずらし、項目を重複させてしまうからです」という回答は、両方の選択肢を並べるだけで終わるよりも優れています。
認証と機能トレースの質問にはどう答えるべきか?
フルスタックの候補者と専門職を分ける質問が二種類あります。一つ目はエンドツーエンドの認証です。ユーザーがログインフォームを送信してから、認証済みの API 呼び出しが成功するまでに何が起きるかを説明します。面接官は、認証情報がどこに保存されているか(Cookie かクライアント側ストレージか)、サーバーがどうそれを検証するか、なぜ HttpOnly Cookie がスクリプトからのアクセスに耐えるのか、Cookie ベースのセッションにどのような CSRF 対策が必要か、CORS が異なるオリジンのフロントエンドにどう影響するか、そしてログアウトとトークンの有効期限がどう扱われるかに注目しています。
二つ目はトレース問題です。「ユーザーが保存をクリックしても何も起きません。どうデバッグするか説明してください。」良い回答は、当てずっぽうではなく、ブラウザのコンソールとネットワークタブから、リクエストとレスポンス、サーバーのログ、データベースへの書き込みへと、レイヤーごとに順を追って進みます。
中規模の SaaS 企業で面接を受けているフルスタックエンジニアの例が典型的です。コメント機能がどう動くか尋ねられた彼女は、テーブル(投稿 ID、投稿者 ID、タイムスタンプを持ち、投稿ごとにインデックスされたコメント)から説明を始め、カーソルページネーションを使った一覧エンドポイントを定義し、クライアント側での楽観的レンダリングと POST 失敗時のロールバックを説明し、最後にダブルクリックによる二重投稿をどう防ぐかで締めくくりました。彼女は各レイヤーを簡潔にまとめ、面接官のフォローアップの質問は、まさに彼女が名指しした継ぎ目に集中しました。
どう練習すべきか、そしてリアルタイムアシスタントはどこで役立つか?
トレースを声に出して練習しましょう。毎日使っているアプリから一つ機能を選び、スキーマから画面までを説明し、次に障害を注入してもう一度やってみます:API が遅い、書き込みが部分的にしか成功しない、リクエストの途中でユーザーがログアウトされる、といった具合です。自分の説明を録音するか、AI 模擬面接で質問に取り組めば、話した回答に基づくフォローアップが返ってきます。
実際の面接では、macOS と Windows 向けの SubcueAI デスクトップアプリが、面接のルールで支援が許可されている場合に限り、面接官の発言を文字起こしし、設計や行動に関する回答の構成を提案できます。Chrome/Edge 拡張機能はブラウザのタブ通話をカバーし、iPhone アプリは別のデバイスで再生されている通話を聞き取ります。フルスタックの面接では、この正直な限界がとりわけ重要です。機能構築とコーディングのラウンドはしばしば画面共有の上で行われ、画面共有中はすべてが見えてしまうため、そこでは支援の対象外となります。監督付きのオンライン評価や会社管理のデバイスも対象外です。セットアップ方法はチュートリアルにあります。