![見出し画像](https://assets.st-note.com/production/uploads/images/51485209/rectangle_large_type_2_e5fb0e33d26d34e0e82a3f749d5b7411.png?width=1200)
[laravel8] 環境変数とデータベース接続
環境変数
Laravelをインストールするとインストールされたディレクトリに
.env
という名前のファイルが作られます。その環境に特有の情報を保持し、以下のようなファイルになります。
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:gILoHPN33bYs5TiZbw3bfVpwzacP100j5EKSZnYyHe4=
APP_DEBUG=true
APP_URL=http://blog.test
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
一部を見てみると、例えば
APP_DEBUG=true
この環境ではデバッグモードはONになっていて
DB_CONNECTION=mysql
DB_USERNAME=root
DB_PASSWORD=***
データベースの接続はMYSQLを使用し、ログインするユーザーネームはrootでパスワードは***です。
また、以下のようなAWSのKEYやIDなども含みます。
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
このようにこの.envファイルはその環境に特有、そしてとても重要な情報を保持しています。
そのため、同じディレクトリに .gitignoreファイル(gitに含めないファイルを定義するファイル)があるかと思いますが、
/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
.env
.env.backup
.phpunit.result.cache
docker-compose.override.yml
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
この.envファイルが含まれていて、gitでpushして公開されることはありません。
ではどのようにして、このパスワードやトークンなど.envファイルに記述されている値を使用するのでしょうか?
データベースのコンフィグファイル(設定ファイル)を確認してみましょう。
config/database.php
'default' => env('DB_CONNECTION', 'mysql'),
ここはデータベースの接続に何が使われるかを設定している箇所になります。
laravel のenv関数が使われていて
もし.envファイルにDB_CONNECTIONが定義されていたらその値がリターンされ、定義されていない場合は第2パラメータにある値がリターンされます。
つまり.envにDB_CONNECTIONが定義されている場合はDB_CONNECTIONの値が使われ、ない場合は'mysql'が使用されます。
もしmysqlではなくsqliteを使用したい場合は
.env
DB_CONNECTION=sqlite
と変更することでmysqlからsqliteへ変更することが可能になります。
データベース接続
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=
.envファイルを確認すると、
mysqlが使われ、データベースのホストは127.0.0.1、ポートは3306番、データベース名はblog、mysqlへのログインのユーザーネームはroot、そのmysqlのパスワードはブランク
開発環境でmysqlのパスワードを空白(ブランク)にするというのはよくあります。(もちろんここではあなたの環境に合わせて値を変更してください、ここからはユーザーネームがrootでパスワードがブランクであるとして進めていきます。)
ここからはMySQLを使用していくので、ローカルでMySQLを起動している必要があります。まだない場合は次のコマンドでインストールしてください。
$brew install mysql
MySQLがローカルで動いていることが確認できたらデータベースを作っていきます。
ログインします。
$mysql -uroot -p
パスワードを聞かれるのでブランクの場合はそのままエンターキーを、パスワードがある場合はパスワードを入力してからエンターキー
$mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.23 Homebrew
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Mysqlへログインできたら、プロジェクトで使うデータベースを作成します。
今回は blog という名前のデータベースを作成します。
mysql> create database blog;
Query OK, 1 row affected (0.05 sec)
mysql>
データベースが作成されれば上のように出力されます。
マイグレーション
Laravelではデータベースのテーブルの管理を行う方法としてマイグレーションと呼ばれる仕組みがあります。
laravelではデフォルトで使用されるテーブルがあるので、それを作成しましょう。
ターミナルでプロジェクトのディレクトリへ行きmigrateコマンドを叩く
$php artisan migrate
$php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (29.36ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (15.79ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (14.69ms)
上の出力が確認できると成功
再びMysqlにログインしてみて、blogデータベースにテーブルが追加されているか確認してみます
$mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.23 Homebrew
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use blog;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------+
| Tables_in_blog |
+-----------------+
| failed_jobs |
| migrations |
| password_resets |
| users |
+-----------------+
4 rows in set (0.00 sec)
mysql>
データベースblogを作成しただけだったが、migrateコマンドを実行しただけで、4つのテーブルが作成されたことが確認できました。
まとめ
.envに書かれている事は環境に特有なそして大事に情報が含まれている。
Laravelのデータベースの設定ファイル config/database.php もこの.envファイルの値を使用している。
Laravelのプロジェクトを開始するときは.envに自分で定義したデータベースを作成してからスタートする。