Laravel Sparkをインストールする


## 概要
Laravel SparkというサービスをLaravelユーザーの方はご存知でしょうか？
名前は聞いた事ありましたが具体的にどんなものか知らなかったのでLaravelユーザーとしては使ってみようという事でインストールしてみました。

公式ドキュメント通りに環境構築しても、色々とハマったりしたので今後試す人の参考になればと。

## Laravel Sparkとは?
[Laravel Spark](https://spark.laravel.com/)とはLaravel + Vue.jsで作成されたWebアプリケーションテンプレート。
有料ライセンスでありソフトウェアをインストールすると次のような機能がすでに実装されている。

* 認証
* 顧客の請求書ダウンロード
* サブスクリプション
* チームでのユーザー作成、招待
* 二段階認証
* ユーザー向けAPIトークンの作成
* ユーザー偽装してのデバッグ機能 etc...

上記のような機能はすでに提供されるので`よりサービスに近い部分に開発を注力できる`というのが特徴です。
このような機能や画面を`Laravel + Vue.js`で作成できるというのもメリットですね。

## Laravel Sparkをインストールする前に...
公式ドキュメントによるとLaravel Sparkは次のコンポーネントで構成されていると記載があります。

* Composer
* Laravel Framework 5.6+
* Laravel Mix
* Bootstrap 4 (SASS)
* Node.js & NPM

Vue.jsはもちろん使えますが、他のJSフレームワークを使用するのも自由なようです。

## ライセンス
Laravel Sparkは有料ライセンスになっています。
公式サイトによると次のような料金体系になっています。

* 1つのWebサイトで使用する場合: $99
* 無制限に使用する場合: $299

# 環境構築
以下の環境でインストールしました。

* MacOSX Sierra
* Composer1.6.3
* PHP7.2.3
* MYSQL5.7.19
* npm5.6.0

# インストール
まずはLaravel Sparkに登録が必要です。[公式サイト](https://spark.laravel.com/)のRegisterからアカウント登録しましょう。
[lisenceを購入してないとインストールできない](https://laracasts.com/discuss/channels/spark/403-forbidden-response-in-installing-laravel-spark)ようです。試す方はクレジットカード登録し$99のライセンスを購入します。

ライセンス購入後、公式のLaravel SparkサイトにログインしGithubのリポジトリへJoinしましょう。Laravel Sparkの公式サイトにログインしていれば`Settings -> Github`からJoinできます。Joinをしておかないとパッケージをインストールする際に`403`で弾かれます。

Laravel Sparkをインストールするにはいくつか方法があります。
`spark installer`と`laravel installer`がありますが、どうも上手くできなかったので`composer`コマンドからインストールしました。

まずはlaravelプロジェクトを作成します。
※`composer`と`npm`が事前に必要なため、事前にインストールしておいて下さい

```
$ composer create-project --prefer-dist laravel/laravel spark-sandbox
```
composer経由でインストールする場合はLaravel SparkのSatisリポジトリを登録する必要があるようです。`composer.json`に追記します。

```composer.json
"repositories": [
    {
        "type": "composer",
        "url": "https://spark-satis.laravel.com"
    }
],
```

続いて`composer.json`の`require`に`"laravel/spark-aurelius": "~6.0",`を追加します。

```
$ composer require laravel/spark-aurelius:~6.0
```

決済サービスをStripeかBraintreeを使う場合で使用するパッケージは変わるようです。とりあえずインストールしたい場合は不要な気がしますが、僕は`laravel/cachier`を選択して`require`に追加しました。

```
$ composer require laravel/cashier:~7.0
```

`composer.json`に必要パッケージを追加したら`composer update`します。

```
$ composer update
```

これで依存ライブラリがインストールされます。vendorディレクトリにもろもろインストールされたら`app.php`にServiceProviderを登録します。

```app.php
Laravel\Spark\Providers\SparkServiceProvider::class,
Laravel\Cashier\CashierServiceProvider::class,
```

登録したら次のコマンドを実行します。

```
$ php artisan spark:install --force
```

再度、`app.php`にServiceProviderを登録します。　

```app.php
App\Providers\SparkServiceProvider::class,
```

最後に`npm install`、`npm run dev`を実行します。

`npm run dev`の時に`cross-env not found error`が僕の環境では発生しました。`package.json`を見てみると`scripts `の`dev`セクションで`cross-env`コマンドを使用していたので、`npm i -g cross-env`でglobalインストールして解決しました。

```package.json
{
  "private": true,
  "scripts": {
    "dev": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
// 以下、省略
```

最後に`php artisan migrate`を実行するため、`.env`に任意のデータベースの設定をします。

```.env
DB_DATABASE=spark_sandbox
```

データベースにアクセスできる状態になったら`migrate`して必要なテーブルを作成します。

```
$ php artisan migrate
```

公式ドキュメントによると`storage`ディレクトリへのSymlinkが必要との事なので以下のコマンドを実行します。

```
$ php artisan storage:link
```

ここまで出来たらビルドインサーバを起動してアクセスしてみます。

```
$ php artisan serve
```

## 結果
![spark-top.png](https://qiita-image-store.s3.amazonaws.com/0/72518/3ed1d390-a48c-1c48-d9f9-ffa395cf1419.png "spark-top.png")

## 所感
公式ドキュメント通りに試しましたがインストールするのに結構ハマりました...。
Laracastでも同じ箇所でハマっている人がいたので、あるあるなのかも知れません。

インストール後、２段階認証を試してみたのですが一行追加するだけで組み込めました。そちらは別のポストで記載できればと。