Laravel インストール後の初期設定と入門

公開
更新
注意最終更新から 7 年以上経過しています。最新の情報もあわせてご確認ください。

Laravel に限りませんが、新しい PHP フレームワークに入門した時って、まずはインストール。そして初期設定、そして、MVC の一連の流れをなぞる為に HelloWorld の出力。という流れは、入門あるあるかなと思います。

今回は、インストール後の初期設定と、基本的な MVC を使って HelloWorld を表示させる、そして、軽くデータの受け渡しまでを行います。

検証環境について

今回の検証環境に関しては以下になります。

  • Linux CentOS 7
  • Apache 2.4
  • PHP 7.2
  • Laravel 5.7

Linux 環境でなくても(XAMPP など)進めていけます。

途中、artisan コマンドを叩きますが、環境的に難しい場合は手動でのファイル作成でも進めていけます。

初期設定

まずは、必須ではありませんが、インストール直後にやっておくと良い初期設定を以下に紹介します。

日時設定

デフォルトでは UTC に設定されているので、日本時間よりもマイナス9時間で出力されます。これを、日本時間にしておきます。

laravel/config/app.php68行目あたり「timezone 」を変更します。
'timezone' => 'UTC',
↓
'timezone' => 'Asia/Tokyo',

ログの設定

デフォルトでは1つのファイルに溜める設定になっているので、日別でファイルを分割するようにして、ログファイルは30日分とします。

ログに関する設定ファイルはバージョンによって異なります。

Laravel5.7/5.6

ver 5.6 から、ログに関する設定ファイルが専用ファイルに切り出されました。 ver 5.7 では設定項目が1つ増えています。

laravel/config/logging.php
<?php

use Monolog\Handler\StreamHandler;

return [
    'default' => env('LOG_CHANNEL', 'stack'),
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 7,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => 'critical',
        ],

        /* ▼ 5.7から追加 ▼ */
        'stderr' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stderr',
            ],
        ],
        /* ▲ 5.7から追加 ▲ */

        'syslog' => [
            'driver' => 'syslog',
            'level' => 'debug',
        ],

        'errorlog' => [
            'driver' => 'errorlog',
            'level' => 'debug',
        ],
    ],
];

基本となる各チャネルの設定を行い、適宜、使用するログドライバをまとめて stack で指定するという流れになっています。

default(デフォルトログチャネル)

このオプションは、メッセージをログに書き込むときに使用されるデフォルトのログチャネルを定義します。 このオプションで指定された名前は、 "channels"設定配列で定義されたチャンネルの 1 つと一致する必要があります。

channels(ログチャネル)

ここでは、アプリケーションのログチャネルを設定することができます。 デフォルトで Monolog PHP ロギングライブラリを使用します。 これにより、さまざまな強力なログハンドラ/フォーマッタを利用できます。

  • stack 使用ログチャネルを指定します。
    • channels配列の形で指定したチャネルでロギングが走ります。
  • single ログを1つのファイルに出力します。
    • path 出力するログファイルの場所です。デフォルトでは storage() ヘルパーで設定されているので、出力先は laravel/storage/logs/laravel.log になります。
    • level ログを出力するレベルを設定します。
  • daily ログを日別で出力します。
    • path 出力するログファイルの場所です。デフォルトでは storage() ヘルパーで設定されているので、出力先は laravel/storage/logs/laravel.log になります。
    • level ログを出力するレベルを設定します。
    • days ログファイルを何日間保持するか設定します。
  • stderr ログを標準エラーに出力します。
    • driver ログを出力するドライバを指定します。
    • handler ログを出力する際のハンドラを指定します。
    • with >> stream ストリームを指定します
  • slack ログを slack に出力します。
    • url Slack の Webhook URL を指定します。
    • username ユーザ名を指定します。
    • emoji 絵文字を指定します。
    • level ログを出力するレベルを設定します。
  • syslog ログを syslog に出力します。
    • level ログを出力するレベルを設定します。
  • errorlog ログを errorlog に出力します。
    • level ログを出力するレベルを設定します。

今回は、日別でログを出力するようにしますので、以下のように設定します。(変更した箇所のみ表示します)

<?php

return [
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily'], // ← ココ
        ],
        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 30, // ← ココ
        ],
    ],

];

Laravel5.5~ 5.3

ver 5.5 以下のバージョンは app.php にログ設定を記述します。

laravel/config/app.php124行目あたり「log 」を変更し、「log_max_files 」を追加します。
'log' => env('APP_LOG', 'single'),
↓
'log' => env('APP_LOG', 'daily'),
'log_max_files' => 30,

エラーメッセージを日本語化する

デフォルトでは英語のエラーメッセージが出力されるので、日本語設定にします。

laravel/config/app.php81行目あたり「locale 」を「ja 」へ変更
'locale' => 'en',
↓
'locale' => 'ja',

メッセージの日本語ファイルはデフォルトでは提供されていないので、Laravel 日本語言語ファイル からダウンロードしたファイルを、laravel/resources/lang/ja ディレクトリを作成し、設置します。

  • 最新版は ver 5.7 用です。
  • 5.6 と 5.5 の言語ファイルセットはブランチを切り替える事で入手可能です。

最終的には以下のようなディレクトリ構成になります。

laravel
├── resources
│   ├── lang
│   │   ├── en
│   │   │   ├── auth.php
│   │   │   ├── pagination.php
│   │   │   ├── passwords.php
│   │   │   └── validation.php
│   │   └── ja
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php

データベースの接続設定

既に接続するべきデータベースが用意できている場合は設定しておきましょう。

laravel/.env8行目あたりからの設定項目に記述する
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

HelloWorld の表示

Laravel のインストールが終わり、初期設定も終わったら、次は一通りの MVC(Model View Controller モデル・ビュー・コントローラ)の流れの中でページを表示させるまでを簡単に行っていきます。

今回は、
「http://YOURDOMAIN/beginner にアクセスしたら、Hello World!! と表示される」
までの一連の流れを作ってみます。

ルーティング

まずはルーティングからです。ルーティングとは
「ここにアクセスしたら、このコントローラの、このアクションを実行します」
というのを指定する部分になります。

設定は laravel/routes/web.php で行えます。開いてみます。

<?php

Route::get('/', function () {
  return view('welcome');
});

なにやら1つだけ記述がありますね。これは、Laravel をインストールした直後にブラウザアクセスで表示された welcome 画面のルーティングです。

「サイトルートにアクセスしてきたら、welcome ビューを返します」 という記述になっていますが、コントローラもモデルも挟んでいないので、本当に簡単な記述になっています。

それではこの下に、ルーティングを追加します。記述は以下のようになります。

<?php

Route::get('/', function () {
    return view('welcome');
});

Route::get('beginner', 'BeginnerController@index');

たった一行だけの追加です。
「http://YOURDOMAIN/beginner にアクセスしたら、Beginner コントローラの index アクションを実行する」
という意味になります。

ルーティングはこれで完了です。

コントローラ

次に、コントローラを作っていきます。ファイル名は、ルーティングの時に決めた、「BeginnerController 」になります。

artisan コマンド

Laravel には「artisan コマンド」と言って、作成するファイルの書式をいちいち覚えていなくても、コマンド一発でファイルを生成してくれる便利なコマンドがあるので、それを使ってコントローラファイルを生成します。

Laravel ルートディレクトリへ移動し、以下の artisan コマンドを叩きます。

# laravel のルートディレクトリへ移動
cd /path/to/laravel

# artisan コマンドでコントローラを生成
php artisan make:controller BeginnerController

# 実行結果
[demo@localhost laravel]# php artisan make:controller BeginnerController
Controller created successfully.

「Controller created successfully.」と表示されたら生成成功です。

コントローラファイルは laravel/app/Http/Controllers に生成されます。そしてここが、コントローラの場所になります。

laravel
├── app
│   ├── Http
│   │   ├── Controllers
│   │   │   ├── Auth
│   │   │   ├── BeginnerController.php
│   │   │   └── Controller.php

生成された BeginnerController.php を開いてみます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BeginnerController extends Controller
{
    //
}

クラス宣言されているだけの、最小限の内容になっています。(もし何らかの理由で artisan コマンドが叩けない場合でも、上記内容でコントローラファイルを手動で作成すれば OK です。)

それではここに、ルーティングで指示した index アクションを記述します。以下のようになります。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BeginnerController extends Controller
{
  public function index()
  {
    return view('beginner');
  }
}

index アクションでは、「beginner 」ビューを返しています。今回はこの記述だけで OK です。

ビュー

次に、ビューを作成します。

Blade テンプレート

Laravel では、「Blade テンプレート」と言って、色々便利な事が出来る HTML というか PHP ファイルというか、、いわゆるそいつをビューファイルとして作成していきます。

ビューの設置場所は laravel/resources/view です。ここに、「beginner.blade.php 」という名前で PHP ファイルを作成します。

laravel
├─ resources
│  └─ views
│     ├─ beginner.blade.php
│     └─ welcome.blade.php

作成したら、以下のように簡単な HTML を記述します。

beginner.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>First Page</title>
</head>
<body>
  <p>Hello World!!</p>
</body>
</html>

何の変哲もない HTML5 のみの記述ですが、「HelloWorld 」さえ入っていれば問題ありません。サクッとハローワールドが目的ですからね。

動作確認

それでは、ブラウザから実際にアクセスしてみましょう。

ルーティングにも記述した通り、http://YOURDOMAIN/beginner にアクセスしてみます。

helloworld 確認画面

HelloWorld が表示されました。おめでとうございます! Laravel の一連の流れの基本はあなたによって掌握されました!

データの受け渡し

一連の流れの基本は抑えられたので、次にやってみたくなる事といえば、データの受け渡しです。

コントローラからビューへ、データをパスする流れを書いてみます。

BeginnerController.php を開いて、以下のように記述します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BeginnerController extends Controller
{
  public function index()
  {
    // 配列の初期化
    $data = array();

    // データ格納
    $data['name'] = 'rito';
    $data['message'] = 'こんにちは';

    // 現在日時
    $today = date('Y年m月d日 H:i:s');

    return view('beginner', ['data' => $data, 'today' => $today]);
  }
}

配列と変数を用意して、それぞれにデータを格納しています。

そして、ビューの指定と共に、それらをセットしています。

わざわざ現在日時を別の変数に入れたのは、変数や配列などは、いくつでもこうしてビューの指定時にセット出来ますよという意図です。

次に、ビューです。

beginner.blade.php を開いて、以下のように記述します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>First Page</title>
</head>
<body>
  <p>{{$data['name']}}さん</p>
  <p>{{$data['message']}}</p>
  <p>現在は {{$today}} です</p>
</body>
</html>

変数の部分が見慣れない書き方だと思いますが、これは Blade記法と言って、Laravel で提供されている Blade テンプレート独自の書式です。

{{変数}}

とする事で、そのまま変数を展開できます。わざわざ

<?php echo $data['name']; ?>

こう書かなくても良いので、慣れると楽です。(もちろん、上記のように書いても表示されます。)

それではブラウザからアクセスして確認してみましょう。

データ受け渡し確認画面

ばっちりデータの受け渡しがされていますね。

まとめ

以上で今回の作業は完了です。

今回はモデルが出てこなかったと思いますが、データの受け渡しデモの時に、直接値を記述していましたが、モデルからデータベースの値を受け取り、それをビューに表示する。といった流れになりますので、これで一連の流れは掴めたと思います。

それでも Laravel にはまだまだ便利で強力な機能がたくさんありますので、ぜひ色々と試してみてください。

尚、今回のサンプルソースは Github から取得できます。

[Github]www.ritolab.com-sample-sources-Laravel-Beginner-mvc

next:Laravel 入門[MVC]モデルを使ってデータベースからデータ取得・表示を行う

Ritolabo