Laravel

ウェブ職人のためのPHPフレームワーク

もっと学ぼう

人気急上昇のフレームワーク

Laravel(ララベル)とは、最近最も勢いのあるPHPのフレームワークの一つです。2011年当時人気を博していたCodeIgniterのようなPHPフレームワークの使いにくい部分を克服しようとして作成されました。そのあと、注目されるようになり、ここ数年人気が急上昇しています。

Google Trendsで比較してみてもその人気の高さがわかります。

かつて、PHPのフレームワークといえば日本ではCakePHPでしたが、そのCakePHPよりも人気あるPHPフレームワークであることがわかります。また、2016年8月からは、Ruby on Rails の人気を超えるまでになりました。

Laravelの特徴

Artisanコマンド

LaravelにはArtisanという独自コマンドが用意されています。このコマンドラインからコントローラやモデルの雛型ファイル(スケルトン)を作ることができます。 その他にもマイグレーションの実行やシーダーの実行、メンテナンスモードの実行など、かなり色々なコマンドが用意されています。


# コントローラのひな形の作成
php artisan make:controller UserController

# モデルのひな形の作成
php artisan make:model User

# マイグレーションの実行
php artisan migrate



Eloquent ORM

Laravelでデータベースと連携し、データを取得したり登録・更新・削除など一連の操作を行うにはEloquent ORMという、データ操作を簡単に行うための機能を使います。


// 名前空間インポート
use App\User;

// Eloquentを使って全件取得
$users = User::all();

// 各レコードごとの名前とメールを表示
foreach($users as $user){
    echo $user->name;
    echo $user->email;
}



ファサード

ファサードを使うと、どこからでも簡単にクラスを呼ぶことができます。コードをすっきり書くことができます。 例えばRouteファサードはルーティングを行う際に使うのですが、Routeファサードを使うことで、見やすく、簡単なルーティングを書くことができます。


Route::get('/home', 'HomeController@index');



Route:: と記述しているところがファサードになります。 Laravelではこの他に標準で37種類のファサードが提供されています。



ファサード名 使い方
Config config/app.phpの値を取得したりする。
DB クエリビルダなどを提供。普通はEloquentを使う。
Log ログの書き出しなど。storage/logsなどに書き出せるのでデバッグなどで重宝します。
Request $_REQUEST周りの処理。laravel5からはInputファサードの代わりにこちらを使う。



DI(Dependency Injection:依存性注入)

システム開発を行っていくと、クラスのインスタンス同士がさまざまに依存しあうようになります。 この依存度を極力下げて、実行時に外部から与えてもらえるようにした仕組みがDIです。 Laravelには、DIの仕組みが内蔵されていて、メソッドの引数にインジェクトしたいオブジェクトを書くだけで、DIできます。

Laravelは、このDIを実現する方法として、サービスコンテナというのを用いています。



コンストラクタインジェクション

コンストラクタの引数にインジェクトしたいオブジェクトを書きます。これだけで、コントローラー内のすべてのメソッドから、いちいちnewすることなくUserクラスのメソッドを呼び出すことができます。


#UserController.php

namespace App\Http\Controllers;
use App\User;

class UserController extends Controller
{
  private $user;

  public function __construct(User $user)
  {
    $this->user = $user;
  }
}



メソッドインジェクション

特定のアクションメソッド(ルーティングで使われるコントローラーのメソッド)だけで使用したいクラスもあります。その場合は、コンストラクタインジェクションではなくメソッドインジェクションを使います。


#UserController.php

// DIの際は実態ファイルをuseしておく
use Illuminate\Http\Request;

class ContactController extends Controller
{
  // 引数がメソッドインジェクション
  public function postIndex(Request $req)
  {
    // nameを取得
    $name = $req->name;
  }
}

Laravelはまだ歴史が浅く、フレームワーク自体もどんどん進化していますし、今後様々なサービスで導入されると思います。 そうなれば、大規模なサービスでの成功事例も多く生まれてくるのではないでしょうか。