Laravel管理画面ライブラリVoyagerとLaravel-adminの比較

## 概要
Laravelの管理画面ライブラリである[**Voyager**](https://laravelvoyager.com/)と[**Laravel-admin**](http://laravel-admin.org/docs/)どちらが良いか検証してみました。
管理画面ライブラリは他にも存在しますが今回はこの2つに絞ります。
検証項目は調べたかった部分を重点的に調べたので、当たり前ですがこれが全てではないです。

## 検証環境
Homestead 8.2.0
PHP 7.3.1
Larval 5.5.45
Voyger 1.2
Larval-admin 1.6.11

## 環境構築ドキュメント
[Laravel Homestead 5.5 Laravel](https://readouble.com/laravel/5.5/ja/homestead.html)
[Installation - Voyager](https://docs.laravelvoyager.com/getting-started/installation)
[Installation - Laravel-admin](https://laravel-admin.org/docs/#/en/installation)

## Voyager

動画です。英語ですが雰囲気や操作等の使用感はわかると思います。
[Voyager - The Missing Laravel Admin](https://laravelvoyager.com/academy/)

#### Voygerでできること
インストールするといくつかの機能のModle, Controller, View, データベース等が用意されてます。
**ブラウザ上**からデータベースの追加や、新規ページの追加などの操作が可能です。

データベースやBREADの作成
<img width="1440" alt="スクリーンショット 2019-04-17 0.13.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/33e98f0a-a4d0-18d4-8dbb-55ce65cebc22.png">

データベースの作成画面
<img width="1440" alt="スクリーンショット 2019-04-17 0.14.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/c3639c88-9fc5-a91a-d02f-eb771bfb0034.png">

BREADの作成画面
<img width="1440" alt="スクリーンショット 2019-04-17 0.14.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/d1959281-8e22-d667-813d-21a0c9767e49.png">

BREADの作成画面ではカラムの表示や操作の設定なども行えます。
<img width="1440" alt="スクリーンショット 2019-04-17 0.15.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/79172eef-e210-7265-0773-cf904e545210.png">

データベースとBREADを作成するとデータを作成・編集する管理画面を生成することができます。
<img width="1440" alt="スクリーンショット 2019-04-17 0.36.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/98a33e16-030a-0d92-d840-804f8adc98ae.png">

#### カスタマイズ
Modle, Controller, Viewはそれぞれオーバーライドしてカスタマイズ可能です。
[Overriding files - Voyager](https://docs.laravelvoyager.com/customization/overriding-files)
削除操作は論理削除に変更可能です。
[Enabling Soft-Delete - Voyager](https://docs.laravelvoyager.com/customization/enabling-soft-delete)

#### ユーザ認証
UserとRoleのデータベースが用意されており、ユーザや権限を追加可能です。
<img width="1440" alt="スクリーンショット 2019-04-17 0.40.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/0dd63c49-27bf-6931-ea90-9e6a490a4684.png">
権限はデフォルトでは各メニューのBREADの有無を設定できます。
<img width="1440" alt="スクリーンショット 2019-04-17 0.42.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/3ed991a0-dfe6-6a5c-c83c-0a5afc1cd941.png">

権限もカスタマイズ可能です。
[Roles and Permissions - Voyager](https://docs.laravelvoyager.com/core-concepts/roles-and-permissions)

#### UIコンポーネント
Bootstrapを使用しているため使い回し可能です。

#### バリデーション
BREADの設定画面でjsonで指定します。
[BREAD Builder - Voyager](https://docs.laravelvoyager.com/core-concepts/bread-builder#validation)
<img width="1440" alt="スクリーンショット 2019-04-17 0.50.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/fc9b5027-4dc2-4faf-50a1-063bb87abb45.png">


#### ファイルパス
{project_dir}/vendor/tcg/voyager/
{project_dir}/config/voyager.php

#### その他気になること
・Avaterの画像が壊れている
・Menu BuilderのBuilderのメニューが0個の場合に表示がバグる
・BREAD作成後にDatabase名を変更するとバグる

## Laravel-admin

公式のデモです。
[Demo - Laravel-admin](https://demo.laravel-admin.org/)

#### Laravel-adminでできること
[Quick start - Laravel-admin](https://laravel-admin.org/docs/#/en/quick-start)
上記記事に沿って、マイグレーション実行->Model作成->Controller作成->ルート設定 を行います。
Laravel-adminのコマンド`admin:make`を実行すると、Modelのカラムに合わせてControllerを生成され、ページが作成されます。

ページ追加後の画面
<img width="1440" alt="スクリーンショット 2019-04-17 0.54.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/0dfd93c7-2547-33fb-74b3-aa979555ffc3.png">


#### カスタマイズ
ページの表示はControllerのshow(), grid(), form()関数内等で変更可能です。
<img width="1440" alt="スクリーンショット 2019-04-17 0.58.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/6a954e88-f92d-14ef-c3ab-66e83cd86a09.png">

#### ユーザ認証
UserとPermissionとRoleのデータベースが用意されており、ユーザや権限を追加可能です。
<img width="1440" alt="スクリーンショット 2019-04-17 1.00.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/905f2efb-c31e-db23-01d9-cf17848966db.png">

権限はデフォルトでHTTP method+HTTP pathの組み合わせで指定できます。
<img width="1440" alt="スクリーンショット 2019-04-17 1.02.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/87583b35-6882-b7b0-fe6d-fdead410ecc8.png">

また、マルチ認証に必要な**ガードやプロバイダ**があらかじめ設定されています。

#### UIコンポーネント
Bootstrapを使用しているので使い回し可能です。

#### バリデーション
Laravelに則ってControllerから指定します。
[バリデーション 5.5 Laravel](https://readouble.com/laravel/5.4/ja/validation.html#available-validation-rules)
[Laravel5.7 laravel-admin バリデーションルールの追加 | のるぼるのるの](https://tac-blog.tech/index.php/2018/10/04/laravel-admin-validation/)

#### 関連ファイル
{project_dir}/app/Admin
{projcet_dir}/vendor/encore/laravel-admin
{projcet_dir}/config/admin.php

#### その他気になること
・LaravelのLTS(安定版)のみ公式サポートしているようなのでLaravel5.5を使うのが無難そう
・ フッターの`Powered by laravel-admin`の表示。消せるかな？
・ダッシュボードのデモのリンクが404
・ドキュメントの軽微な誤字

## VoyagerとLaravel-adminの比較
### Voyagerのメリット
####・ ブラウザからの直感的な操作ができる

データベースや、BREADと呼ばれるコントローラのようなものをブラウザ上から作成・編集することができるので直感的に操作できます。

####・ 学習コストが低い
ブラウザからある程度開発的な操作をできるため、学習コストが低く始めるのに敷居が低いです。

#### ・ 多機能
上記に加え、ドキュメントのようなものをまとめたcompassという機能や、簡易ブログや画像の管理画面のようなものがあらかじめ用意されており、機能が豊富です。

####・ デザインがリッチでアニメーションがぬるぬる動く
全体的な質感やメニューの出方などがいい感じです。

### Voyagerのデメリット

####・ 若干コードの全体像が見えにくい
自分の手に負えない部分で何かエラーが起きた時に対処しづらそうな気がします。

####・ ドキュメントが少ない
Voyagerを使ってカスタマイズしたという記事が少なく、自力で解決できる力が必要かもしれません。

### Laravel-adminのメリット

####・ コードからの素早い編集
基本的にLaravelの作法に則っていてコマンドやコードから作成・編集するのでコードの全体像が把握しやすいです。

####・ 関連記事が多い
日本語・英語ともに関連記事が多い印象です。

####・ マルチ認証に必要なガードやプロバイダが設定済
admin_userとuserテーブルが分かれていたり、ガードやプロバイダが設定されていて認証の追加設定が不要なのでその分の工数がかかりません。

### Laravel-adminのデメリット

####・ 学習コストがかかる
コードを触る部分が多いので、比較的学習コストがかかります。

####・ デザインが質素
華やかさはあんまりないです。

####・ 機能が最小限
あらかじめ用意されている機能は少なめです。


## 感想

やれることにそこまで違いはなく、どう実装するかという好みの問題が大きいので開発者が何を重視するかによりそうです。
個人的な意見としては、Laravel-adminは必要十分な機能で自分の手の中にある感じがあって実装しやすそうです。
一方、Voyagerのとっつきやすさとぬるぬるさは好きです。笑
それぞれに良いところがあると思います。
自分なら個人開発ならVoyager使うけど、規模が大きくてカスタマイズする可能性が高いならLarave-adminを選ぶかも？

## 最後に

記事に間違いや不明な点があれば遠慮なくご指摘ください。
雑談ですが4月に転職したばっかりで新しく取り組むことが多いので最近更新頻度高めです。
やっぱり自分の興味あることを仕事にできるっていいですね。