AUTOVICE

TECH BLOG

ユーザー認証機能の導入手順と生成されたフォームを日本語化する方法を解説

2020-03-04

はじめに

Laravelではユーザー認証機能の導入が簡単にできてしまいます。この記事ではLaravelプロジェクトにユーザー認証機能を追加する手順と、生成されたフォーム(デフォルトでは英語)を日本語化する方法を解説します。

前提

Laravel 6.xを対象としています。

テーブル作成

ユーザー認証のためのマイグレーションは初めから用意されています。

  • database/migrations/Y_m_d_xxxxxx_create_users_table.php
  • database/migrations/Y_m_d_xxxxxx_create_password_resets_table.php

マイグレートを実行します。

$ php artisan migrate

テンプレート作成

ログインフォームやユーザー登録フォームなどのテンプレートを作成します。

ターミナルで以下のコマンドを実行します。

$ composer require laravel/ui --dev
Using version ^1.2 for laravel/ui
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating optimized autoload files

...

Package manifest generated successfully.

これでプロジェクトにlaravel/uiが追加されたので、これを使ってテンプレートを生成します。

$ php artisan ui bootstrap --auth
Bootstrap scaffolding installed successfully.
Please run "npm install && npm run dev" to compile your fresh scaffolding.
Authentication scaffolding generated successfully.

続いて以下のコマンドを実行します。

$ npm install && npm run dev

テストサーバーを起動し、http://localhost:8000/loginにアクセスしてみます。

ログインフォームが表示されていればOKです。

フォームの日本語化

認証機能は導入できたものの、表示されている文言がすべて英語のため、日本人ユーザーには優しくありません。レイアウトファイルを直接編集していくのは大変なので、以下の手順で一気に日本語化を行います。

以下のリポジトリからresources/lang/ja.jsonを自分のプロジェクトにコピーします。

sutara79/demo-laravel-crud: My practice for basic CRUD of Laravel5 on Heroku.

以上です。なんと、たったこれだけで認証機能の日本語化ができてしまいます。

ちゃんと日本語化されています。もちろん、ユーザー登録画面やパスワードリセット画面も同様に日本語化されています。

解説

resources/views/auth/login.blade.phpを見てみます。

...
<div class="card-header">{{ __('Login') }}</div>
...

__(アンダースコア2つ)はLang::getの別名で、多言語対応のための関数です。
Laravelではresources/lang/ja.jsonが存在する場合、引数で指定された文字列に対応する文字列を出力します。

resources/lang/ja.jsonは以下のようになっています。

{
    ...
    "Login": "ログイン",
    ...
}

このようにJSON形式で対応する文字列を定義しておけば、わざわざレイアウトファイルを直接編集しなくても日本語に変換してくれます。

おまけ

デフォルトではログイン成功時やユーザー登録完了時のリダイレクト先として/homeが設定されているため、/に変更しておきます。

リダイレクト先変更

まず、ログイン成功時のリダイレクト先は、app/Http/Controllers/Auth/LoginController.phpを以下のように設定します。

    protected $redirectTo = '/';

ユーザー登録完了時のリダイレクト先は、app/Http/Controllers/Auth/RegisterController.phpを以下のように設定します。

    protected $redirectTo = '/';

最後に、ログインしているときにログインページやユーザー登録ページにアクセスしたときのリダイレクト先は、app/Http/Middleware/RedirectAuthenticated.phpを以下のように設定します。

        if (Auth::guard($guard)->check()) {
            return redirect('/');
        }

不要ファイル削除

リダイレクト先を/homeから/に変更したことでホーム関連のファイルが不要となったため削除します。

以下のファイルを削除します。

  • app/Http/Controller/HomeController.php
  • resources/views/home.blade.php

ルーティングも削除します。routes/web.phpの以下の行を削除します。

Route::route('/home', 'HomeController');

まとめ

認証機能をこれほど簡単に作れるフレームワークはそうないと思います。(少なくともRuby on Railsにはこんな機能なかった…)Laravelが多くの人に支持され、多くのWebアプリで使用されている理由がわかった気がします。