Laravel開発環境構築~ログイン機能の作成

テーマ

まいどおおきに!!naoto555です。今回はAWS環境でのLaravel9.X+PHP8.Xでの開発環境の導入方法~ログイン機能作成までを記事にしていこうと思います。(2024.1作成)

開発環境

統合開発環境 aws cloud9
PHP 8.1.16
Laravel 9.52
login機能 Laravel/jetstream(livewire)
Database SQlite(version 3.7.17)

解説

①PHP、コンポーザー、Laravelとプロジェクトの導入を行います。

以下の順にターミナルにLinuxコマンドを打ち込んでいきます。

PHPのパッケージを全てアンインストールして、php8.1Xを導入

#PHPパッケージを一度全てアンインストール
sudo yum -y remove php-*

#PHP8.1導入のためEPELとRemiレポジトリを有効化(※途中インストールしてよいか聞かれるので、y(yes)を入力しEnter)
sudo amazon-linux-extras install epel
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

#PHP8.1を導入(※途中インストールしてよいか聞かれるので、y(yes)を入力しEnter)
sudo yum install php81 php81-php-mbstring php81-php-mysqlnd php81-php-gd php81-php-xml php81-php-fpm

 

以下コマンドで、バージョン情報が取得できればインストール成功

#phpのバージョン確認
php81 -v

 

PHP81コマンドを通常のPHPコマンドと統合し、コンポーザーを導入

#PHP81コマンドとPHPコマンドを統合
sudo alternatives --install /usr/bin/php php /usr/bin/php81 1
# →"php -v"でバージョンが取得できるようになっていれば、統合成功

#コンポーザーのダウンロードとインストール(23.3 コンポーザー仕様変更によるVer変更 2.4.2=>2.5.5)
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=2.5.5

#mbstringを導入し、日本語に対応(※途中インストールしてよいか聞かれるので、y(yes)を入力しEnter)
sudo yum install php-mbstring

#Laravelの導入(AppNameの部分はご自身のアプリ名を入力下さい)
composer create-project --prefer-dist laravel/laravel AppName "9.*"

※(23.3追記) composerの仕様変更のためか、ver2.4.2ではcomposer.jsonの記載とJetStreamのバージョン制約、Illuminate/Consoleパッケージに不一致がおきJetStreamのダウンロードででエラーが起きるようになった。composer.jsonの中身を書き換えてもいいが、面倒なので、対策としてcomposerのバージョンを2.5.5を使用する。

②データベースの構築

今回は、Sqliteをデータベースとして使用します。まずは、プロジェクトの直下にある”.env”というファイルを書き換えていきます。
”.env”が表示されてない場合は歯車ボタンを押し”Show Hidden Files”にチェックを入れてください。

環境ファイル、”.env”に以下の変更を加えていきます。

.env(変更前)

##  --------中略--------

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=database
SESSION_LIFETIME=120

##  --------中略--------

.env(変更後)

##  --------中略--------

DB_CONNECTION=sqlite
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=laravel
#DB_USERNAME=root
#DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

##  --------中略--------

 

次に、以下コマンドをターミナルで打ち、データベースを有効化します。

#プロジェクトフォルダに移動(※AppNameはご自信のフォルダ名)
cd AppName

#Sqliteのファイルを開き、".table"と打ち、テーブルを有効化します、その後".exit"で抜ける
sqlite3 database/database.sqlite
sqlite> .table
sqlite> .exit

#マイグレーションの実行を行う
php artisan migrate

③ログイン機能の実装

#ログイン機能のパッケージをインストール
composer require Laravel/jetstream
php artisan jetstream:install livewire

※livewireインストール後に”.env”のSESSION_DRIVER=databaseに戻ってしまう場合があるので、その場合はSESSION_DRIVER=fileに書き直して④を行う。

④HTTPS対応

app/Http/Middleware/TrustProxies.php

<?php

namespace App\Http\Middleware;

use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array<int, string>|string|null
     */
    //protected $proxies;
    protected $proxies = '**';

    //-----------以下、省略-----------

↑の17行目の”protected $proxies;”を削除し、”protected $proxies = ‘**’;”を追加します。

⑤マイグレーションの実行

jetstreamの導入をデータベースに反映させるため、もう一度マイグレーション

#マイグレーションの実行を行う
php artisan migrate

 

完成図

開発環境の構築、ログイン機能の実装に関してはこれで完了です。以下コマンドをターミナルに打ち、Preview Running Applicationで作成されたログイン画面をご確認してください。
(※終了するには、ターミナル上で、windowsなら”ctrl+C”, Macなら”cmd+C”を押してください。)

php artisan serve --port=8080

まとめ

Jetstreamは、Laravel8から導入されたフルスタックな認証機能のためのパッケージです。

Laravel7までは一般的だったlaravel/uiが、Laravel8以降で非推奨になったため、Jetstreamが登場しました。
Jetstreamでは、Bladeファイルを使用するLivewire版とVue.jsを使用するInertia版が用意されており、どちらかのライブラリを選択できます。 今回はBladeでの開発をしたかったので、Livewire版を採用しました。 ログイン機能、登録、メール認証、2段階認証、セッション管理、プロフィール管理、チーム機能など、かなり充実した機能が用意されています。

全ての機能を使いこなすのは大変なので、作成したアプリに必要な機能だけを有効にしていく形で使うのがお勧めです。