Laravelのオフィシャルパッケージの紹介

この記事はLaravelアドベントカレンダー https://qiita.com/advent-calendar/2017/laravel の23日目の記事です。

# オフィシャルパッケージとは
Laravelが公式にサポートしているパッケージです。
どれもロゴが付いていてかっこいいですね。いつか自分でもライブラリ作ってロゴつけてgithubにあげたいですね。

https://github.com/laravel から漁ったら結構たくさん見つかりました。

- Laravel Horizon
- Laravel Socialite
- Laravel Echo
- Laravel Valet
- Laravel Scout
- Laravel Tinker
- Laravel Dusk
- Laravel Passport

ついでに https://github.com/laravel には無かったですが、公式のドキュメントで紹介されていて自分もよく使っているので、

- Laravel Mix

も足しておきます。

実際に使っていないのもあるので情報が薄いのもありますが、いつか使うかもしれないということでまとめておきます。

# Laravel Horizon
<img width="377" alt="スクリーンショット 2017-12-21 16.49.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/7bded1ae-f26a-4dfd-6828-3454d6e09bd0.png">

<a href="https://github.com/laravel/horizon">Laravel Horizon</a>はRedisキューのモニタリングができる美しいダッシュボードとコード駆動の設定を提供します。

![1_RylFrnbJWNVtBnjESk9ztw.png](https://qiita-image-store.s3.amazonaws.com/0/47882/f14c38d4-5ab2-0bc4-36d8-54c8568c19ac.png)


# Laravel Socialite
<img width="358" alt="スクリーンショット 2017-12-21 16.49.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/9413b4a9-ecff-ffec-74c4-46b48b2141b4.png">

<a href="https://github.com/laravel/socialite">Laravel Socialite</a>はFacebook,Twitter,Google,Linkedin,Hithub,Bitbucketに対応したOAuth認証を行えるパッケージです。

```php
<?php

namespace App\Http\Controllers\Auth;

use Socialite;

class LoginController extends Controller
{
    /**
     * Redirect the user to the GitHub authentication page.
     *
     * @return \Illuminate\Http\Response
     */
    public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }

    /**
     * Obtain the user information from GitHub.
     *
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('github')->user();

        // $user->token;
    }
}
```

事前に設定しておけば、Facadeを使って簡単にOAuthのサービスプロバイダーにリダイレクトをして、リダイレクト時のtokenを取得できます

# Laravel Echo
<img width="318" alt="スクリーンショット 2017-12-21 16.48.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/3ebcc2c7-1000-5673-a074-990007ad89d0.png">

<a href="https://github.com/laravel/valet">Laravel Echo</a>はTypescriptで書かれたWebSocketのイベントを受け取るようのライブラリです。それだけだと、別にLaravel関係ないじゃん…という感じですが、Laravelの`App\Events`の名前空間とWebsocketで受け取るイベントがマッピングされているので多少便利ではあります。

LaravelのイベントブロードキャストはRedisと<a href="https://pusher.com/">Pusher</a>というPaaSをサポートしているのですが、Pusherの方を使うととても簡単にWebSocketが使えるようになっています。Redisの方は少し面倒ですが、Redisのイベントを自前のNodejsサーバーで受け取って、クライアントのLaravel Echoに飛ばすという形になるようです。そのための<a href="https://github.com/tlaverdure/laravel-echo-server">laravel-echo-server</a>というライブラリも開発が進められているようです。 

# Laravel Valet
<img width="338" alt="スクリーンショット 2017-12-21 16.50.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/0f47f1ea-10e2-f119-5612-07ab181c0fb3.png">

Laravel ValetはMacユーザー用の小さなLaravel開発環境です。VagrantやDockerは使わずにMac本体にLaravelの開発環境を立ち上げます。自分がプログラミングを始めたばかりのときは<a href="https://www.mamp.info/en/">MAMP</a>というソフトを使って、Mac上に開発環境を一括で立ち上げるということをしましたが、それに近いですね。もう6年前かあ。MAMPはApacheですがValetはnginxが中で動いているようです。たった7MBで開発環境が作れるというのが推しのようです。

# Laravel Scout
<img width="349" alt="スクリーンショット 2017-12-21 16.50.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/730a3fee-34e6-669d-5b5d-9b957de41fda.png">

<a href="https://github.com/laravel/scout">Laravel Scout</a>は全文検索エンジンとEloquentのデータを簡単に同期してくれます。過去に<a href="http://kazuhei.hatenablog.com/entry/2014/08/09/102443">Apache Solrをデータインポートハンドラでmysqlと同期する</a>という記事を自分のブログで書いていたのですが、ここの部分を便利にやってくれるということですね。Scoutでは<a href="https://www.algolia.com/">Algolia</a>というPaaSを使うためのコードが最初から用意されています。SolrやElasticSearchを自サーバーで使いたい場合はそれ用のエンジンを書く必要があると思いますが、PHP側でそこを頑張るのはどうなんだという気もするので、PaaS使わないのであればあんまりいらないのかな。もちろん、統一したインターフェースで扱えるという利点はあるんでしょうけども。

# Laravel Tinker
<img width="357" alt="スクリーンショット 2017-12-21 16.50.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/70f08afb-36d1-443b-e8f9-8bd578e142a6.png">

<a href="https://github.com/laravel/tinker">Laravel Tinker</a>はLaravel用のREPLです。Eloquentの操作を試すのに使うと便利ですね。

# Laravel Dusk
<img width="367" alt="スクリーンショット 2017-12-23 2.02.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/a8b677a8-b9be-6e2b-db7e-f37c61a262f6.png">


<a href="https://github.com/laravel/dusk">Laravel Dusk</a>はSeleniumなどを入れなくてもChromeDriverを使って簡単にブラウザテストをすることができるパッケージです。

# Laravel Passport
<img width="392" alt="スクリーンショット 2017-12-21 16.51.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/c3c8541b-9e37-f8ba-c082-546f3b60b863.png">

<a href="https://github.com/laravel/passport">Laravel Passport</a>はOAuth2サーバーの実装を提供します。ちょうどLaravel Socialiteと対になる機能ですね。

# Laravel Mix
<img width="317" alt="スクリーンショット 2017-12-22 11.47.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/47882/30050e6f-5e7a-e65f-d030-ec87bae67497.png">

<a href="https://github.com/JeffreyWay/laravel-mix">Laravel Mix</a>はcssやjsのアセットコンパイルをいい感じにやってくれます。gulpやwebpackの面倒な設定から逃げたいPHPerには良いツールだと思っています。自分は逃げたいので使ってますがPHP側でHTMLを用意して返す一般的なWebであればやりたいことはほぼできるのでちょうどよいです。内部ではWebpackが動いています。

# まとめ
Laravelのオフィシャルパッケージについて調べましたが、思った以上にいろいろありました。ミドルウェアを便利に使う系のパッケージはPaaSとのつなぎこみまで最初から提供されているのが良いですね。Laravelは最初からストレージはAWS S3、キューはAWS SQS、メールもAWS SESやその他のサービスに簡単につながるようにできてます。それらに加えて、今回紹介した公式パッケージを使うことで、外部サービスを駆使しながらスピーディーに開発するのがLaravel流なのかなと思いました。