Sub Documents

Laravel install & set up


 最近はインストールのやり方が山ほどあって環境によってもベストプラクティスがあっていろいろ面倒だなと思っている今日このごろです。が、ここでは開発環境をつくる手順の解説になります。

  1. composer install
  2. Laravel install
  3. Dockerの設定
  4. PHPMyAdminの設定
  5. Laravel ui
  6. .envの設定

https://getcomposer.org/download/

Laravel install

$ cd [DIR]
$ php composer.phar create-project laravel/laravel app
$ cd app
$ php artisan serve

http://127.0.0.1:8000/にアクセスするとビルトインサーバーが立ち上がっているので、いったんは正常起動が確認できると思います。でもこれは開発には使えないので、Ctrl+cいったんキャンセルしちゃってください。
続いてDBの設定をします。

% php artisan sail:install

 Which services would you like to install? [mysql]:
  [0] mysql
  [1] pgsql
  [2] mariadb
  [3] redis
  [4] memcached
  [5] meilisearch
  [6] minio
  [7] mailhog
  [8] selenium
 > 0

Sail scaffolding installed successfully.
...

これでDockerで DBが動くようになりました。
Dockerを立ち上げます。最初にDockerをBuildするので結構時間かかります。

$ ./vendor/bin/sail up -d

終わったらhttp://localhost/にアクセスます。これでDockerの立ち上げはOKです。停止はこのコマンド$ ./vendor/bin/sail downでいったん停止してください。
とはいえ:80はすでに他の開発で使っているポートだったりするので、Dockerのwebポートを変更します。./app/docker-compose.ymlを開いて修正します。14行目あたりの

- '${APP_PORT:-80}:80'
↓
- '${APP_PORT:-6265}:80'

こんな感じで修正します。余談ですが、sailのupコマンドはいろいろ面倒なので、以後は普通のdocker-composeのコマンドでDockerを立ち上げます。

$ docker-compose up -d
$ % docker-compose ps
       Name                 Command             State                               Ports
------------------------------------------------------------------------------------------------------------------
app_laravel.test_1   start-container         Up             0.0.0.0:5173->5173/tcp, 0.0.0.0:6266->80/tcp, 8000/tcp
app_mysql_1          /entrypoint.sh mysqld   Up (healthy)   0.0.0.0:3306->3306/tcp, 33060/tcp, 33061/tcp

となっていて、http://localhost:6266/でアクセスできるようになっています。

PHPMyAdminの設定

結局ここらのツールがないとつらいので入れておきます。プロはこのためだけにコンテナ立てますが私は面倒なのでLaravelのDockerに組み込んじゃいます。デプロイのときは外しましょう的なぐらいの感じでいいと思います。IP制限とかかけておけばデプロイしちゃっても問題問題ないです。(ちなみに大企業の仕事とかでこういうことやったら駄目です。)
phpmyadminをダウンロードしてDocumentroot(public)以下に格納しておきます。
Bringing MySQL to the web Download
寄付してくださいというダイアログが出るので寄付しましょう。

./app/public/phpmyadmin/

ぐらいにしておけばよいです。localhost:6266/pma/index.phpで認証画面で出ればOKです。続いてMySQLに接続する設定をします。config.sample.inc.phpをリネームしてconfig.inc.phpにしておきます。以下の部分を書き換えます。

$cfg['Servers'][$i]['host'] = 'localhost';
↓
$cfg['Servers'][$i]['host'] = 'mysql';

これはLaravelが用意するデフォルトのMySQLの設定がhost:mysql user:root password:password となっているので、それに従うだけです。これでDBの方の準備はOKです。ここまででだいたいの準備ができました。

Laravel ui (認証機能)を設定する

古い人間なのでUIを使います。イケてる人は、Laravel BreezeまたはLaravel Jetstreamパッケージを使いましょう。node.jsの設定はここでは端折ります。

$ php composer.phar require laravel/ui
$ php artisan ui bootstrap --auth
$ cd app
$ npm install && npm run dev
$ npm run build

以下のコマンドでLaravelをリフレッシュすると、右上にLoginとRegisterのリンクが出てきます。

./vendor/bin/sail php composer.phar update;
./vendor/bin/sail artisan optimize:clear;
./vendor/bin/sail artisan optimize;
./vendor/bin/sail artisan view:cache;
./vendor/bin/sail php composer.phar dump-autoload;

Migration

.envにDatabaseのアクセス先の記述をします。ローカルの開発環境なのでrootにしちゃいます。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel8
DB_USERNAME=root
DB_PASSWORD=password

DBにテーブルを作成します。

$ ./vendor/bin/sail artisan migrate

新規でテーブルが作成されますので確認しましょう。

failed_jobs
migrations
password_resets
personal_access_tokens
users

Migrationを済ますとインストールしたUIの認証動作ができるようになっています。

メールサーバーの設定

お金持ちはSendgrid使うけど、俺は貧乏なのでLolipopですよ!.envを設定します。自身の環境に合わせて設定してください。Gmailとか使うといいんじゃないですかね。

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

設定が終わったらtinkerで確認します。tinkerはめちゃくちゃキャッシュが強いのでリフレッシュしておきましょう。

$ ./vendor/bin/sail artisan tinker
>>> Mail::send('welcome', [], function($message) { $message->to('user@example.com')->subject('Testing mails'); });
=> Illuminate\Mail\SentMessage {#3685}

かつてはnullが返ってきたら送信成功というややこしい感じだったのだけど、Laravel9になってからはIDが返却されるようになってました。

Gitの設定 (おまけ)

私流のやり方なのですが、Laravelのプロジェクトの一つ上の階層でGit管理した方がいいです。いろいろと。バックアップとかDocumentとか置いたりできるので。

$ cd [DIR]
$ git init
$ mv ./app/.gitignore ./
$ mv ./app/.gitattributes ./

.gitignoreのパスを書き換えます。

/app/node_modules
/app/public/build
/app/public/hot
/app/public/storage
/app/storage/*.key
/app/vendor
/app/.env
/app/.env.backup
/app/.phpunit.result.cache
/app/Homestead.json
/app/Homestead.yaml
/app/auth.json
/app/npm-debug.log
/app/yarn-error.log
/app/.idea
/app/.vscode

必ず使うPackageを入れておく

$ php composer.phar require nesbot/carbon