LaravelのテストでCSRFやセッションの扱いをやさしく理解しよう!初心者向け完全ガイド
生徒
「Laravelでテストを書いていると、CSRFエラーやセッションが原因で失敗することがあります…」
先生
「Laravelのテストでは、CSRFやセッションを正しく理解すると、とてもスムーズに書けるようになります。」
生徒
「CSRFやセッションって、そもそも何なんですか?」
先生
「仕組みとテストでの扱い方を、順番に見ていきましょう。」
1. Laravelのテストとは何をするもの?
Laravelのテストとは、アプリケーションが正しく動作しているかを自動で確認する仕組みです。人の目で毎回画面を操作しなくても、プログラムが期待どおりに動くかをチェックできます。特にWebアプリでは、フォーム送信やログイン処理など、毎回同じ動きを保証したい部分をテストすることが大切です。LaravelではPHPUnitというテストツールが最初から用意されており、コマンド一つでテストを実行できます。
2. CSRFとは?初心者向けに超かんたん解説
CSRFとは「なりすまし送信」を防ぐための仕組みです。たとえば、知らないうちに勝手にフォームを送信されてしまうのを防ぐ役割があります。Laravelでは、フォーム送信時に「この画面から本当に送られたものか」を確認するための合言葉のようなトークンを使います。これがCSRFトークンです。普段は意識しなくても自動で処理されますが、テストではこの仕組みを知っておく必要があります。
3. LaravelのテストではCSRFはどう扱われる?
LaravelのHTTPテストでは、基本的にCSRFチェックは自動で無効化されています。そのため、フォーム送信のテストを書いても、CSRFエラーで失敗することはほとんどありません。これは「テストでは安全性よりも動作確認を優先する」という考え方です。実際の画面とは違い、テストでは純粋に処理の結果だけを確認できます。
public function test_form_post()
{
$response = $this->post('/contact', [
'name' => 'テスト太郎',
]);
$response->assertStatus(200);
}
4. セッションとは何かをイメージで理解しよう
セッションとは、Webサイトが「この人はさっきの続きの人だ」と覚えておくための仕組みです。たとえばログイン状態や、一時的なメッセージの保存に使われます。イメージとしては、一時的なメモ帳をサーバー側で持っているようなものです。Laravelでは、このセッションを使ってユーザー情報や通知メッセージを管理しています。
5. Laravelテストでセッションを使う基本方法
Laravelのテストでは、セッションの中身を簡単に設定できます。これにより「ログインしている状態」や「特定の値が保存されている状態」を再現できます。初心者の方でも、配列の形で指定するだけなので安心です。
public function test_session_value()
{
$response = $this->withSession([
'user_name' => 'テストユーザー',
])->get('/mypage');
$response->assertStatus(200);
}
6. ログイン状態をセッションでテストする例
ログインが必要なページでは、セッションにユーザー情報が入っているかが重要です。Laravelでは、認証済みユーザーを簡単に再現できます。これにより、ログイン後の画面表示を安全に確認できます。
public function test_login_user_page()
{
$user = User::factory()->create();
$response = $this->actingAs($user)->get('/dashboard');
$response->assertStatus(200);
}
7. フラッシュセッションのテスト方法
フラッシュセッションとは、「一回だけ表示するメッセージ」のことです。フォーム送信後の「保存しました」などが代表例です。Laravelのテストでは、そのメッセージが正しく保存されたかを確認できます。これにより、ユーザーに伝えたい情報が正しく表示されるかをチェックできます。
public function test_flash_message()
{
$response = $this->post('/post');
$response->assertSessionHas('message');
}