RitoLabo

Laravelインストール後の初期設定と入門/簡単にMVCでHelloWorld&データ受け渡しを行う

  • 公開:
  • 更新:
  • カテゴリ: PHP Laravel
  • タグ: PHP,Laravel,install,5.5,Beginner,MVC,5.6

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

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

アジェンダ
  1. 検証環境について
  2. 初期設定
    1. 日時設定
    2. ログの設定
      1. Laravel 5.6
      2. Laravel 5.5~5.3
    3. エラーメッセージを日本語化する
    4. データベースの接続設定
  3. HelloWorldの表示
    1. ルーティング
    2. コントローラ
    3. ビュー
    4. 動作確認
  4. データの受け渡し

検証環境について

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

  • Linux CentOS 7
  • Apache 2.4
  • PHP 7.1
  • Laravel 5.6/5.5

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

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

初期設定

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

日時設定

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

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

'timezone' => 'Asia/Tokyo',

ログの設定

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

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

Laravel5.6

ver 5.6から、ログに関する設定ファイルが専用ファイルに切り出されました。

laravel/config/logging.php
<?php

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',
],

'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
ログファイルを何日間保持するか設定します。
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.php
124行目あたり「log」を変更し、「log_max_files」を追加します。
'log' => env('APP_LOG', 'single'),

'log' => env('APP_LOG', 'daily'),
'log_max_files' => 30,

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

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

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

'locale' => 'ja',

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

※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/.env
8行目あたりからの設定項目に記述する
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-Laravel5.5-Beginner-mvc
(5.6/5.5両バージョンで使えます。)

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