【初心者必見】Spring Bootの「return redirect:/game」と「return game」の違いを徹底解説!

こんにちは。ゆうせいです。

Spring Boot × ThymeleafでWebアプリケーションを作っていると、必ず一度は迷うポイントがあります。それが――

return "redirect:/game";return "game"; は何が違うの?」

という問題です。

見た目はとても似ている2つのコード。でも、実は動き方がまったく違うんです。

この違いを理解しないままアプリを作ると、予想外のエラーや不具合に悩まされることになりますよ!

この記事では、初心者の方でもわかりやすいように、図解・たとえ・具体例を交えてこの2つの使い分け方を解説します。


📘 まずは2つのコードの意味を整理しよう!

return "game";

これはテンプレート名を返すコードです。

Spring Bootでは、以下のようなテンプレートがあるとします:

src/main/resources/templates/game.html

このとき、return "game"; と書けば、そのまま game.html が表示されます

return "redirect:/game";

これはリダイレクト命令です。

実行されると、ブラウザに対してこう指示します:

「いったん /game にアクセスし直して!」

つまり、今のリクエストを終了して、新しいリクエストを開始するのです。


🔍 たとえ話で理解しよう!

たとえるなら、こんな感じです:

方法たとえ
return "game"今いる部屋でそのまま作業を続ける
return "redirect:/game"別の部屋(画面)に移動して、改めて作業を始める

✅ 表で比較してみよう!

項目return "game"return "redirect:/game"
動作そのままテンプレートへ遷移URLを再読み込み
リクエスト数1回2回(リダイレクトあり)
URL変わらない変わる(/game に)
セッション再取得しない再取得される
主な用途データを表示したいとき処理の後にURLを変えたいとき/再実行したいとき

🔁 こんな時はどっちを使う?

return "game" を使うべき場面

  • ユーザーに何か情報を表示したいだけ
  • 今のリクエスト中に完結している処理
  • ゲーム画面を初めて表示するとき など

return "redirect:/game" を使うべき場面

  • フォーム送信後、ページをリロードしても再送信されないようにしたい(PRGパターン)
  • セッションに保存したデータを使って、コントローラーのメソッドを再実行したいとき
  • 状態の再初期化(例:ゲームをリスタート)など

🎮 実例で見てみよう:数当てゲーム

@GetMapping("/game/restart")
public String restart(HttpSession session) {
    session.setAttribute("kazuate", new Kazuate());
    return "redirect:/game";  // ← ここが大事!
}

このケースではリスタートのたびに /game を再実行させたいので、リダイレクトが必要なんです。

これをもし return "game"; にしてしまうと、テンプレートは表示されるけれど、コントローラーの処理(セッションのチェックや初期化)が実行されません!


🔚 まとめ:新人エンジニアへのアドバイス

「見た目は似ていても、中身はまったく違う!目的に応じて使い分けよう」

目的選ぶべきコード
表示だけならreturn "game";
URLをリセットしたい・処理を再実行したいreturn "redirect:/game";

🎓 次のステップとして学ぶべきこと!

  • forward:との違い(サーバー内部の転送)
  • PRG(Post-Redirect-Get)パターンの理解
  • RedirectAttributesを使った一時データの渡し方
  • ユーザー体験をよくするためのリダイレクト設計

迷ったときは、「この遷移、リクエストを再実行する必要あるかな?」と自分に問いかけてみてくださいね。

リダイレクトとテンプレート表示の正しい使い分けができるようになると、あなたのWebアプリはぐっと安定して、意図通りに動くようになりますよ!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。