🛠️

私的Laravelプロジェクトの始め方

2021/03/16に公開

はじめに

最近メンター業をやっています。そこでの気づきとしてLaravel始めてそんなに経ってない人には、いれておくべきパッケージとか、やっておくべき設定など基本的なことが知れ渡っていないのかなという印象を抱きました。そこで今回は、Laravelのプロジェクトを始める時に、私がどんな手順を踏んでいるかをご紹介したいと思います。もちろんこれが絶対的な正解という訳ではありません。必要に応じてアレンジ等していただければと思います。

前提

ここでは、会員登録ありのサービスの開発を行う前提で始めたいと思います。利用するPHP、Laravel、Composerのバージョンは以下の通りです。

  • PHP7.4
  • Laravel8.x
  • Composer2.x

開発環境は以下を想定しています。

  • Mac
  • Docker

Laravelプロジェクトセットアップの流れ

laravel-installerのアップデート

まずはinstallerから。常に最新にしておいて良いと思います。巷では、composerを使ったLaravelのインストールを教えているところもあります。installerからだと常にLaravel最新版がインストールされてしまうため、Laravelのバージョンを指定してインストールしたい人は、composerを使ってインストールしましょう。

composer global require "laravel/installer:^4.0"

バージョン確認は以下のコマンド。

laravel --version

また今回が初めてのインストールであれば、パスが通ってないので環境変数を登録しておきましょう。

#zshの場合(Mac Mojave以降はこっちが標準)
echo 'export "PATH=$PATH:$HOME/.composer/vendor/bin"' >> ~/.zshrc
source ~/.zshrc

#bashの場合
echo 'export "PATH=$PATH:$HOME/.composer/vendor/bin"' >> ~/.bash_profile
source ~/.bash_profile

Laravelプロジェクトの作成

Laravelコマンドを使ってプロジェクトを作成します。この時会員登録/認証のスカフォールドとしてJetstreamをインストールします。使用するスタックはLivewireとします。シンプルなスカフォールドを使いたい人は、Laravel Breezeがオススメですが、Livewireを併せてインストールでき、かつプロフィール画面も用意してくれるJetstreamの方が個人的には都合が良いためこちらを使います。

# myprojectの部分は自分のプロジェクト名を代入
# teamsはnoを指定する
laravel new {myproject} --jet --stack=livewire

# vueやreactなどフロントエンドも使いたい人はこっち
laravel new {myproject} --jet --stack=inertia

--gitと--githubオプション

laravel-installer4.2以降は、--git--githubオプションが使えるようになりました。PCに最新のgitコマンドとghコマンドが入っていれば、--gitを使うことでインストール時にローカルリポジトリを作成することができ、--githubを使うことでリモートプライベートリポジトリを作成することができます。後者を使う場合は、 あらかじめ gh auth login でghからGitHubへの認証設定を済ませていることが条件となります。認証設定済みかどうかは、 gh auth status で確認してください。

# ローカルリポジトリを作成する場合
laravel new {myproject} --jet --stack=livewire --git

# リモートプライベートリポジトリを作成する場合
laravel new {myproject} --jet --stack=livewire --github

初期設定

laravel-installerを使った場合、内部でartisan key:generateartisan storage:linkを実行してくれているので、この手順は割愛します。composer使ってインストールする場合は必要になります。

まずメールの送受信には50通までの受信なら無料で使えるメールサンドボックスサービスmailtrapを使用します。

なのでMailtrapのマイページにLaravel用の設定を出力できるので、コピーして、.env の所定の場所に上書きしましょう。

さらに、.env の以下のパラメータを漏れなく設定しておきます。今回は後述の通りLaravel Sailは使わないので、APP_URLをlocalhostに書き換えておきます。

#変更前
MAIL_FROM_ADDRESS=null
APP_NAME=Laravel
APP_URL=http://hoge.test

#変更後
MAIL_FROM_ADDRESS=適当なメールアドレス
APP_NAME=サービスの名前
APP_URL=http://localhost

Laravel実行環境の導入

Docker用の実行環境としては、最近公式が発表したLaravel Sailがありますが、まだ成熟しているとは言えないので、Laravel SailがインスパイアされたというVesselを導入します。インストールと初期化をするだけで、簡単に起動します。

インストール

composer require shipping-docker/vessel --dev
php artisan vendor:publish --provider="Vessel\VesselServiceProvider"

初期化

bash vessel init

カスタマイズと起動

起動前にdocker-compose.ymlを編集し、appコンテナのimageの名前を変更しておきます。これはローカルで複数バージョンのPHPの案件を扱う時のトラブル防止のための措置です。

# docker-compose.yml
# 変更前
image: vessel/app

# 変更後
image: vessel/app74

yml編集後、vesselを起動します。初回ではvessel/app74イメージのビルドが走るため、少々時間がかかります。

./vessel start

あとはせっかくなのでキャッシュとセッションはredisを使う様に.envの設定を変えておきます。

CACHE_DRIVER=redis
SESSION_DRIVER=redis

Jetstream有効化

vesselによる開発環境ができたら、Jetstreamの有効化を行います。今回の環境では、assetsのpublishをやってないと、livewire.jsを読み込めないので、プロフィール画面でNameやEmailが入力欄に表示されなくなります。Jetstreamのマニュアルには載ってないので、マニュアル見ながらセットアップしているとここでハマります(Livewireのマニュアルには載っているのでセーフ?)。

./vessel npm install
./vessel npm run dev
./vessel art livewire:publish --assets
./vessel art migrate

デバッグ用パッケージの導入

環境ができたら、Laravel実行時にデバッグできるようにします。最近、英語圏のLaravel界隈にて2,790円/年のRAYというツールが評判になっていますが、今回は無償で利用可能なbarryvdh/laravel-debugbarを導入します。

インストール

本番では使わないので--devオプションをつけてインストールしましょう。

composer require barryvdh/laravel-debugbar --dev

初期設定

Debugbarが有効になるよう.envファイルを以下のように書き換えます。

# 変更前
APP_DEBUG=false
# 変更後
APP_DEBUG=true

日本語化

当たり前ですが、Laravelのプロジェクトは英語圏で使うことを前提にしているため、日本語のプロジェクトとして使うにはいくつか設定を変更しなくてはいけません。このあたりは別の記事でまとめてあるので、そちらをご参照ください。

ロギング

Laravelでは特に何も設定しなくてもログ自体は取得できるわけですが、日ごとにファイルを分けたほうが調査するときに効率が良いので、設定を変更します。以下の変更により日次ファイルが作られます。ファイルは14日分保持され、それより古いものは削除されるようになります。

.envの変更

#変更前
LOG_CHANNEL=stack

#変更後
LOG_CHANNEL=daily

さいごに

最初こそ手順を読むのに時間がかかるし、やってみると手順通りに行かないぞってなるかもしれませんが、慣れてしまえばプロジェクトのセットアップは5-10分程度で済む(composerの頑張り次第ではある)ようになります。

そんなに何度もプロジェクトなんて作らないかもしれませんが、案外OSSコードリーディングついでに触ってみたり、個人開発でアプリを作ったり、最新のLaravelを試すってことがあり、セットアップのハードルを下げておくと学習が捗るのではないかと思います。

Discussion