インストール - Laravel
概要
Composerは、依存性管理ツールである。
依存性管理とは、任意のライブラリは、特定のライブラリが存在しないと動作しないということを管理する。
したがって、Composerを使用してLaravelをインストールすることで、Laravelが正常に動作する環境になる。
ここでは、ComposerとLaravelのインストール手順について記載する。
前提条件
インストール - PHPの記事にアクセスして、PHPおよびPHPモジュールをインストールする。
php.iniファイル等に設定したXdebugの設定をコメントアウトする。
Composerのインストール
以下に、Composerの公式Webサイトを示す。
https://getcomposer.org/download
Composerのインストーラをダウンロードする。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
インストーラのSHA-384を確認する。
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') \ { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Composerをインストールする。
composer.pharファイルが生成される。
php composer-setup.php --install-dir=<Composerのインストールディレクトリ> --filename=composer
composerファイルのバージョンを確認する。
composer -V
.profileファイル等に、Composerのインストールディレクトリを環境変数PATH
に追加する。
vi ~/.profile
~/.profileファイル export PATH="/<Composerのインストールディレクトリ>:$PATH"
また、Composerをアンインストールする場合は、以下のコマンドを実行する。
php -r "unlink('composer-setup.php');"
Laravelのインストール
Composerを使用して、Laravelをインストールする。
まず、Laravelを使用したプロジェクトを作成するため、以下のコマンドを実行する。
mkdir ~/htdocs cd ~/htdocs composer create-project laravel/laravel --prefer-dist <Laravelを使用するプロジェクト名> # Laravelのバージョンを指定する場合 composer create-project laravel/laravel --prefer-dist <Laravelを使用するプロジェクト名> "X.Y" # 例1: メジャーバージョンのみを指定する場合 (マイナーバージョンは最新のものがダウンロードされる) composer create-project laravel/laravel --prefer-dist <Laravelを使用するプロジェクト名> "8.*" # 例2: メジャーバージョンとマイナーバージョンを指定する場合 composer create-project laravel/laravel --prefer-dist <Laravelを使用するプロジェクト名> "8.6"
composer create-project laravel/laravel <プロジェクト名>
コマンドにおいて、laravel/laravelの部分は、<ベンダー (開発元) の名前>/<パッケージ名> の形式である。
例えば、laravel/laravelはLaravelという組織が提供する、Laravelプロジェクトの基本テンプレートという意味になる。
これは、Laravelの公式スターターキット (プロジェクトテンプレート) を指す。
GitHubでは、https://github.com/laravel/laravel として公開されている。
Laravelの基本的なプロジェクト構造、設定ファイル、必要なディレクトリ等が含まれている。
Composerでの扱いにおいては、Composerのパッケージリポジトリ (Packagist) に登録されているパッケージを指定する形式である。
composer create-project
コマンドは、このパッケージをテンプレートとして使用して新しいプロジェクトを作成する。
これは、他のフレームワークやライブラリでも同様の命名規則が使用されている。
- symfony/symfony
- guzzlehttp/guzzle
VSCode / VSCodiumの拡張
- PHP Extension Pack
- PHP Intelephense
- コード補完や定義元へのコードジャンプ、クラスインポート等を行う。
- VSCode標準のPHP言語機能は無効化する必要がある。
- [拡張機能]へ移動する。
- 検索バーに@builtin phpと入力する。
- [無効にする]ボタンを選択する。
- PHP import checker
- 使用していないクラスのインポートをハイライトする。
- PHP DocBlocker
- メソッドの定義後のPHPDocの作成をサポートする。
- PHPDocとは、関数やメソッドの上にアノテーションと呼ばれる@から始まる特殊な記法で引数や戻り値の型を補足するものである。
- 使用方法は、/**と入力した後に[Enter]キーを押下する。
- タイプヒンティングや戻り値の型指定が存在する場合は、自動で読み取る。
- Laravel Extension Pack
- Laravel用のオートコンプリート機能を追加してくれる拡張機能である。
- 主に、ルート名およびパラメータ、ビュー、変数、コンフィグ、バリデーションルールの補完を行う。
- Laravel Intelephense
- Laravel goto Controller
- Route等で指定しているコントローラーのファイル名を選択することにより、そのコントローラファイルを開く。
- Laravel Blade Spacer
- Bladeファイルにコードを記述する場合、以下に示すタグに自動でスペースを挿入する。
- {{ }}
- {!! !!}
- {{– –}}
- Bladeファイルにコードを記述する場合、以下に示すタグに自動でスペースを挿入する。
仮想ホストを構築しない場合(非推奨)
作成したLaravelのプロジェクトディレクトリに移動する。
cd <Laravelを使用するプロジェクトディレクトリ>
プロジェクトのトップディレクトリで、以下のコマンドを実行する。
php -S localhost:8000 -t public
仮想ホストを構築する場合 (推奨)
外部のクライアントPCからLaravelのプロジェクトに接続する場合、仮想ホストを構築すべきである。
SUSEの場合、以下に示すような仮想ホスト向けの設定ファイルを作成する。
- Apache2
- /etc/apache2/vhosts.d/
- NginX
- /etc/nginx/vhosts.d/
ここでは、以下に示すような仮想ホストを設定する。
- 仮想ホスト名
- laravel01
- ドキュメントルート
- ~/htdocs/laravel01/public/
※注意
Laravelのプロジェクトディレクトリにあるpublicディレクトリがドキュメントルートであるため、このディレクトリをアクセスするように設定する。
Laravelでは、全てのリクエストをindex.phpにルーティングする。
NginXでLaravelを使用する場合、location /
ディレクティブにtry_files
ディレクティブが含まれている必要がある。
これにより、Laravelのルーティングが正しく機能する。
- リクエストは、まず、rootディレクティブに指定されたディレクトリの同名ファイルを探す。
- 見つからない場合は、index.phpにフォールバックして、Laravelのルーティングが処理する。
# NginXの場合 sudo vi /etc/nginx/vhosts.d/vhost-laravel01.conf
# /etc/nginx/vhosts.d/vhost-laravel01.confファイル
# 仮想ホスト laravel01の設定
server {
listen 80;
server_name laravel01;
access_log log/laravel01.access.log main;
error_page 404 /404.html;
location = /404.html {
root /home/<ユーザ名>/htdocs/laravel01/public;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /home/<ユーザ名>/htdocs/laravel01/public;
}
location / {
root /home/<ユーザ名>/htdocs/laravel01/public;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
}
# このセクションは、NginxからPHP-FPMの通信はUnixドメインソケット通信でlistenしているFastCGIサーバにPHPスクリプトを渡すために使用される
location ~ \.php$
{
root /home/<ユーザ名>/htdocs/laravel01/public;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
#proxy_pass http://127.0.0.1;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
# mp3ファイルを設定する場合
location /mp3 {
# sendfile関数の使用の有効化 / 無効化
sendfile on;
# 1回のsendfile関数で転送できるデータ量を制限する (大きなサイズのファイルを転送する場合、接続が長時間ブロックされる可能性があるため)
# この制限が無い場合、1つの高速な接続がワーカープロセスを停止させる可能性がある
sendfile_max_chunk 1m; # Limits chunks to 1[MB]
}
}
# Apache2の場合 sudo vi /etc/apache2/vhosts.d/vhost-laravel01.conf
# /etc/apache2/vhosts.d/vhost-laravel01.confファイル
# VirtualHost template
# Note: to use the template, rename it to /etc/apache2/vhost.d/yourvhost.conf.
# Files must have the .conf suffix to be loaded.
#
# See /usr/share/doc/packages/apache2/README.QUICKSTART for further hints
# about virtual hosts.
#
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost *:80>
ServerAdmin webmaster@laravel01
ServerName laravel01
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
DocumentRoot /home/<ユーザ名>/htdocs/laravel01/public
# if not specified, the global error log is used
ErrorLog /home/<ユーザ名>/htdocs/log/laravel01-error_log
CustomLog /home/<ユーザ名>/htdocs/log/laravel01-access_log combined
# don't loose time with IP address lookups
HostnameLookups Off
# needed for named virtual hosts
UseCanonicalName Off
# configures the footer on server-generated documents
ServerSignature On
# Optionally, include *.conf files from /etc/apache2/conf.d/
#
# For example, to allow execution of PHP scripts:
#
# Include /etc/apache2/conf.d/php5.conf
#
# or, to include all configuration snippets added by packages:
# Include /etc/apache2/conf.d/*.conf
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/home/<ユーザ名>/htdocs/cgi-bin/"
# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have one, and where ScriptAlias points to.
#
<Directory "/home/<ユーザ名>/htdocs/cgi-bin">
AllowOverride None
Options +ExecCGI -Includes
AddHandler cgi-script .cgi .pl .py .sh
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received.
#
# To disable it, simply remove userdir from the list of modules in APACHE_MODULES
# in /etc/sysconfig/apache2.
#
<IfModule mod_userdir.c>
# Note that the name of the user directory ("public_html") cannot simply be
# changed here, since it is a compile time setting. The apache package
# would have to be rebuilt. You could work around by deleting
# /usr/sbin/suexec, but then all scripts from the directories would be
# executed with the UID of the webserver.
UserDir public_html
# The actual configuration of the directory is in
# /etc/apache2/mod_userdir.conf.
Include /etc/apache2/mod_userdir.conf
# You can, however, change the ~ if you find it awkward, by mapping e.g.
# http://www.example.com/users/karl-heinz/ --> /home/karl-heinz/public_html/
#AliasMatch ^/users/([a-zA-Z0-9-_.]*)/?(.*) /home/$1/public_html/$2
</IfModule>
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/home/<ユーザ名>/htdocs/laravel01/public">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
</VirtualHost>
次に、サーバ側のPCの/etc/hostsファイルにおいて、以下の設定を追記する。
sudo vi /etc/hosts
# サーバ側の/etc/hostsファイル 127.0.0.1 laravel01
次に、外部のクライアントPCの/etc/hostsファイルにおいて、以下の設定を追記する。
sudo vi /etc/hosts
# 外部のクライアントPC側の/etc/hostsファイル <サーバのIPアドレス> laravel01
最後に、Laravelのプロジェクトディレクトリにあるstorageディレクトリにおいて、グループ名またはパーミッションを変更する。
※注意
特に、パッケージ管理システムからPHPおよびWebサーバをインストールした場合、Laravelのプロジェクトディレクトリ下のファイルおよびディレクトリにおいて、
ユーザ名およびグループ名をNginX / Apache2のものに変更が必要な場合がある。
SUSEの場合、NginX / Apache2のユーザ名およびグループ名は、それぞれwwwrun
、www
である。
変更方法は、以下に示す2種類ある。
- 方法 1 (推奨)
- まず、ユーザを
www
グループに追加する。 sudo usermod -aG www "$USER"
- 次に、Laravelのプロジェクトディレクトリにあるstorageディレクトリのグループ名を変更する。
cd <Laravelのプロジェクト>
sudo chown -R "$USER":www storage bootstrap/cache
- ユーザとWebサーバの両方に対して、パーミッションを変更する。
- この設定は、不要の可能性がある。(要調査)
find <Laravelのプロジェクトディレクトリ> -type f -exec chmod 664 {} \;
find <Laravelのプロジェクトディレクトリ> -type d -exec chmod 775 {} \;
- Laravelのプロジェクトディレクトリにあるstorageディレクトリのパーミッションを変更する。
sudo chmod -R ug+rwx storage bootstrap/cache
- まず、ユーザを
- 方法 2
- まず、ユーザを
www
グループに追加する。 sudo usermod -aG www "$USER"
- 次に、Laravelのプロジェクトディレクトリにあるstorageディレクトリのグループ名を変更する。
sudo chown -R "$USER":www <Laravelのプロジェクトディレクトリ>
- LaravelのプロジェクトディレクトリにあるLaravelのプロジェクトディレクトリのパーミッションを変更する。
sudo chmod -R 775 <Laravelのプロジェクトディレクトリ>
- まず、ユーザを
動作確認
Webブラウザから、設定したルートドキュメントにアクセスする。
Laravelが正常に動作している場合、ページの中央にLaravelのロゴが表示されるデモページが表示される。
Webサーバを構築していない場合
Webサーバを構築していない場合、PHPの組み込み開発サーバを使用することができる。
--host
オプションで指定できるIPアドレスは、127.0.0.1〜127.255.255.254までとなる。
この範囲のIPアドレスは、ローカルループバックアドレスと呼ばれており、ホスト自身で起動しているサービスにアクセスする際に利用することができる。
また、--host
オプションにおいて、0.0.0.0
を指定する場合、他のデバイスからLaravelアプリケーションにアクセスすることができる。
これは、例えば、複数人で開発している時に他のメンバーにアプリケーションの作成状況を確認してもらう場合等に利用する。
php artisan serve --host <IPアドレス 未指定の場合は、127.0.0.1> # オプション --port <ポート番号 未指定の場合は、8000> # オプション
仮想ホストを構築していない場合
Webブラウザから、以下のURLを入力する。
http://localhost:8000
仮想ホストを構築している場合
Webブラウザから、以下のURLを入力する。
http://仮想ホスト名
デモページが表示されない場合、以下の点を確認する。
- publicディレクトリにある.htaccessファイルの
Options -MultiViews
を、Options -MultiViews +FollowSymLinks
に変更してみる。 - 仮想ホストの設定で、ドキュメントルートがLaravelのプロジェクトのpublicディレクトリかどうか確認する。
- 仮想ホストの設定で、publicディレクトリへの
Directory
ディレクティブで、-MultiViews
を許可しているかどうか確認する。
(学習目的であれば、AllowOverride all
を指定すると、動作させやすい) - <Laravelのプロジェクトディレクトリ>/storageディレクトリのパーミッションが正しく設定されているかどうか確認する。
- MCrypt PHP拡張モジュールは動作可能かどうか確認する。
エラー関連
swiftmailer/swiftmailerライブラリ
以下に示すような警告が出力される場合がある。
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
この時、swiftmailer/swiftmailerライブラリを削除して、symfony/mailerライブラリをインストールする。
※注意
Laravel 8では、swiftmailer/swiftmailerライブラリを削除することができないことに注意する。
composer remove --dev swiftmailer/swiftmailer composer require --dev symfony/mailer
シーディング実行して、ライブラリが壊れてないかどうかを確認する。
php artisan db:seed
fzaninotto/fakerライブラリ
以下に示すような警告が出力される場合がある。
Package fzaninotto/faker is abandoned, you should avoid using it. No replacement was suggested
fzaninotto/fakerライブラリはリポジトリが変更されており、現在は、fakerphp/fakerである。
この時、fzaninotto/fakerライブラリを削除して、fakerphp/fakerライブラリをインストールする。
composer remove --dev fzaninotto/faker composer require --dev fakerphp/faker
シーディング実行して、ライブラリが壊れてないかどうかを確認する。
php artisan db:seed
phpunit/phpunitライブラリ
以下に示すような警告が出力される場合がある。
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
この時、phpunit/phpunitライブラリをアップデートする。
composer remove --dev phpunit/phpunit composer require --dev phpunit/phpunit
もし、アップデートエラーが出力される場合は、依存パッケージも含めてアップデートする。
composer require --dev --with-all-dependencies phpunit/phpunit ./vendor/bin/phpunit --version
ライブラリが壊れてないかどうかを確認する。
php artisan test