🏰
【Hello World③】Laravel @ PHP
Rubyの次は、「昔のWebアプリ開発で使われていた言語」というイメージだったが、2010年代の「Laravel」の登場で復活した感のあるPHP言語でHello Worldアプリを作ります。フレームワークは「Laravel」を使います。
LaravelでPHPのWebアプリを作ります
①フォルダ・ファイルを作成
以下の構成でフォルダとファイルを作ります。
フォルダ構成
laravel
├─compose.yaml # コンテナ作成時の指示を記載したファイル
├─Dockerfile # イメージ作成時の指示を記載したファイル
├─default.conf # nginxの設定ファイル
└─php.ini # PHPの設定ファイル
PowerShellで以下のコマンドを実行し、フォルダと空のファイルを作って、VSCodeで開きます。
※以降のコマンドは「laravel」フォルダで実行します。
PowerShell
mkdir laravel; `
cd laravel; `
New-Item Dockerfile; `
New-Item compose.yaml; `
New-Item default.conf; `
New-Item php.ini; `
code Dockerfile; `
code compose.yaml; `
code default.conf; `
code php.ini
「compose.yaml」、「Dockerfile」、「default.conf」、「php.ini」には以下の内容を記述します。
compose.yaml
services:
web:
container_name: nginx
image : nginx:1.25.3
depends_on :
- app
ports :
- 8000:8000
volumes :
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./web:/src
app:
container_name: laravel
build : .
image : laravel
working_dir : /src
depends_on :
- db
volumes :
- ./app:/src
- ./php.ini:/usr/local/etc/php/php.ini
db:
container_name: mysql
image : mysql:8.2.0
environment :
- MYSQL_ROOT_PASSWORD=password
ports :
- 3306:3306
volumes :
- ./db:/var/lib/mysql
Dockerfile
FROM php:8.2-fpm
ENV NODE_VERSION=16.16.0
RUN apt-get update \
&& apt-get install -y git zip unzip vim libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev libfontconfig1 libxrender1 \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd bcmath pdo_mysql mysqli exif \
&& cd /usr/bin \
&& curl -s http://getcomposer.org/installer | php \
&& ln -s /usr/bin/composer.phar /usr/bin/composer \
&& curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash \
&& . /root/.nvm/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm use v${NODE_VERSION} \
&& nvm alias default v${NODE_VERSION}
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
default.conf
server {
listen 8000;
server_name _;
client_max_body_size 1G;
root /src/public;
index index.php;
access_log /src/access.log;
error_log /src/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
php.ini
upload_max_filesize=256M
post_max_size=256M
②Laravelのプロジェクトを作成
以下のコマンドを実行して、Laravelのプロジェクトを作成します。
※「web」、「app」、「db」フォルダが作成されます。
PowerShell
docker compose run -it --rm app `
sh -c "cd /src && `
composer config --global process-timeout 600 && `
composer create-project 'laravel/laravel=10.*' /src --prefer-dist && `
composer install && `
npm install && `
chmod -R 755 /src/storage && `
chmod -R 755 /src/storage/logs && `
chmod -R 755 /src/storage/framework && `
chown -R www-data:www-data /src/storage"
③コンテナを起動
以下のコマンドを実行して、コンテナを起動します。
PowerShell
docker compose up -d
④Laravelのデフォルトページを確認
Webブラウザでhttp://localhost:8000に接続して、Laravelのデフォルトのページが表示されることを確認します。
⑤コントローラ作成
以下のコマンドを実行して、helloコントローラを作成します。
PowerShell
docker compose exec app bash -c 'php artisan make:controller HelloController'
helloコントローラを、以下の内容に変更します。
laravel/app/app/Http/HelloController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
public function hello(){
$displayString = 'Hello World Laravel on Docker';
return view('hello', compact('displayString'));
}
}
⑥View作成
以下の内容のViewを作成します。
laravel/app/resources/views/hello.blade.php
<!doctype html>
<html>
<body>
<h3>{{$displayString}}</h3>
</body>
</html>
⑦route追記
以下の内容をroutesのweb.phpの末尾に追加します。
laravel/app/routes/web.php
Route::get('/hello', 'App\Http\Controllers\HelloController@hello');
⑧Hello World確認
Webブラウザでhttp://localhost:8000/helloに接続して、Hello Worldが表示されれば完成です。
Discussion