🏰

【Hello World③】Laravel @ PHP

2024/04/03に公開

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