Laravel5 First Impression

開発版ではありますが、一足先にLaravel5を利用してみました。

# Laravel5

今一番勢いに乗っているPHPのフレームワークLaravel。
現在のメジャーバージョン4系でも十分にモダンな機能を備えていますがそこで止まることなく、
来年さらにメジャーバージョンアップを予定しています。

## プロジェクト作成

composerを使ってフレームワークコアのインストールと一緒にスケルトンも作成するようです。
`php composer.phar create-project laravel/laravel [app-name] dev-develop --prefer-dist`

インストールすると以下の様なディレクトリやファイルが出来ます。

```
app-name
  app/
  assets/
  bootstrap/
  config/
  database/
  lang/
  public/
  strage/
  tests/
  vendor/
  views/
  .bowerrc
  .env.example
  .gitattributes
  .gitignore
  artisan
  bower.json
  composer.json
  composer.lock
  gulpfile.js
  package.json
  phpunit.xml
  readme.md
```

アプリケーションのコードは`app/`以下に書いていくようです。

## Migration

Laravelではデフォルトのプロジェクトでユーザー認証機能がついてきます。
この機能を有効にするには`artisan`というコマンドラインツールを利用してテーブルスキーマのマイグレーションを行います。

まずは、`config/database.php`でDBの設定を行います。
（デフォルトではMysqlを利用するようになっていますが、用意するのが面倒なのでsqliteを利用するように設定を変更します。）

```diff:[app-name]/config/database.php
	/*
	|--------------------------------------------------------------------------
	| Default Database Connection Name
	|--------------------------------------------------------------------------
	|
	| Here you may specify which of the database connections below you wish
	| to use as your default connection for all database work. Of course
	| you may use many connections at once using the Database library.
	|
	*/


-	'default' => 'mysql',
+	'default' => 'sqlite',
```

マイグレーションの機能を有効にするために、以下のコマンドを実行します。
`php artisan migrate:install`

> このコマンドを実行すると、DBにmigrationsというテーブルが作成されます。
このテーブルで、migrationがどこまで実行されているか？というバージョンの管理を行います。

この状態で`php artisan migrate:status`を実行すると以下の様に２つのマイグレーションが未実行であることが確認出来ます。

```
+------+------------------------------------------------+
| Ran? | Migration                                      |
+------+------------------------------------------------+
| ✗    | 2014_10_12_000000_create_users_table           |
| ✗    | 2014_10_12_100000_create_password_resets_table |
+------+------------------------------------------------+
```

このマイグレーションを実行するために以下のコマンドを実行します。
`php artisan migrate`

__Do you really wish to run this command?__ と聞かれるのでエンターを押して実行します。

再度、`php artisan migrate:status`を実行するとマイグレーションが実行されたことが確認出来ます。

```
+------+------------------------------------------------+
| Ran? | Migration                                      |
+------+------------------------------------------------+
| ✔    | 2014_10_12_000000_create_users_table           |
| ✔    | 2014_10_12_100000_create_password_resets_table |
+------+------------------------------------------------+
```

これでサーバを立ててアプリケーションにアクセスすると、ユーザの認証機能が利用出来るようになります。

これはかなり便利ですね！！

## Http/Middleware

MiddlewareにはHttpリクエストのフィルタリングを行う機能を定義します。
`[app-name]/app/Http/Middleware`以下に作成します。

Middlewareを有効にするには作成したクラスを`Http/Kernel`クラスに設定するようです。

## Http/Controller

Laravel5のコントローラは`[app-name]/app/Http/Controllers`以下に作成します。

コントローラの作成は`artisan`コマンドで行う事が可能で、
`php artisan make:controller FooController`というコマンドを実行することで、CRUDベースのメソッドをもったコントローラを作成することが可能です。
（CRUDベースのオプションが必要ない場合は`--plain`オプションをつけることで空のコントローラクラスを作成出来ます。）

### URLによるリソースフォーマットの変更

残念ながら、LaravelではURLによってリソースのフォーマットを変更することは出来ないようです。

## Http/Requests

RequestはHttpリクエストによるパラメタ、パラメタに対する処理等を定義します。
`[app-name]/app/Http/Requests`以下に作成します。
リクエストパラメタのバリデーションなどはここで行えるようです。

## Services

ビジネスロジックに関する処理はここでしょうか？
まだ詳しいドキュメントがありませんでした。

## DBアクセス層（ORM）

スケルトン生成時には`[app-name]`以下にUserクラスが作成されていました。
流石に、`[app-name]`にクラスを置いていくことは無いと思いますが、その辺りの詳しいドキュメントはまだありませんでした。
また、コマンドラインツールからもORMクラスを生成するオプションは見つかりませんでした。

## テンプレート

Laravelではテンプレートエンジンに`blade`を利用しています。
まだ詳しいドキュメントがありませんでしたが、Laravel4とそう変わらないはずです。

## asset

下記投稿に良くまとまっています。
http://qiita.com/localdisk/items/72bcbe71734253d1416f

# 独断と偏見による総評

まだ開発中のため、全てを試すことは出来ませんでしたが、
デフォルトで用意しようとしているフレームがかなり綺麗です。

Laravel5ではModelというディレクトリを与えないため（これから出来るかもしれないけど…）、
Fat modelになるような開発が起こりにくいと思われます。

またController層もHttpというディレクトリの中にRequestやMiddlewareというディレクトリがあるため、
Fat controllerというのも出来上がりにくいのではないでしょうか？ 

どのフレームワークもそうなんでしょうけど、グローバルに関数を展開するのはやっぱり頂けない。

---

総合的に見てLaravelはすごくいいフレームワークでした。
これが流行るのはよく分かる！