RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

PHPerのための「Laravel 入門を語り合う」【PHP TechCafe イベントレポート】

f:id:tech-rakus:20220310103712p:plain

弊社で毎月開催し、PHPエンジニアの間で好評いただいているPHP TechCafe。
2021年10月のイベントでは社外でご活躍されているPHPエンジニアにもご参加いただいて「Laravel 入門を語り合う」のテーマで開催しました。

rakus.connpass.com

Laravel導入手段

前半のテーマでは、Laravelの開発環境構築手段についてDocker、ローカルマシン、仮想環境と系統ごとに気になるものを掘り下げながらのディスカッションが行われました。Laravel Sailが便利過ぎて秒で環境構築ができるのでLaravelの学習がスグに始められるというのが話題の中心になりました。

スグに始められるLaravel

ここ一年で勢力図が大きく変わった

約一年前のPHP TechCafeで、当時リリースされたばかりの Laravel Sail について話した事を振り返りながら、この一年でLaravel Sailが公式のDocker環境にまで急成長したことが話題になりました。
これには docker-laravel を作られた @ucan_lab さんご自身もLaravel Sailの勢いの凄さについてコメントされていました。

Laravel Sailについては他にも

  • Dockerの知識がなくても使える
  • curlでURLパラメータに指定したサービスのコンテナだけが実装されるのが凄い所
  • 各種DBやRedis、Memcachedなどの様々なミドルウェアをあわせて利用できる
  • インターンの学生にも人気がある

などの賞賛する声が多く挙がっていました。

環境構築が選べるLaravel

環境構築は語りたいことが多い

環境構築のテーマはPHP TechCafeの語り合うメンバーでも語りたいことが多く、紹介を兼ねて次のような話題で盛り上がりました。

Docker系 Laradock

  • 全てが詰まったLaravel Docker環境。
  • 黎明期はみんなこれを使っていた。

Docker系 docker-laravel

  • 日本語で解説されているので解りやすかった。
  • Laravel Sailが主流になるまではお世話になった方も多い筈。

ローカルマシン系 Valet

  • Mac限定だがとにかく軽量で早い。

仮想環境系 Homestead

  • 以前はこれがスタンダードな環境構築だった(古いバージョンだと公式に書いてあった)。

お隣さんが気になるLaravel

「(案件の本番環境で使うかは別として)勉強する時にどれくらいの人がLaravel Sailを使っているんだろう?」という疑問を切っ掛けに、他の皆さんが環境構築をどうされているかが気になる展開になりました。

Local環境で完結させたい派?Local環境を汚したくない派?

  • Local環境で完結させたい派「サービスの規模によるがDockerを立ち上げなくて済む」
  • Local環境を汚したくない派「何でもいいからDockerに入れて困ったら消してしまえってしてますね。」

などの双方の意見が出される中

「5名程度の開発でテストサイトの場合だったら何を使うか?」

とのチャットで寄せられた質問に対して意見を出し合いその場で答える場面もありました。

  • クライアントやデザイナーとの情報共有レベルなら何でも良さそう
  • Laravel Sailで共通の環境を立ち上げて気軽に使えば良さそう
  • プロダクト開発の中でのテストの目的ならインフラ担当者やマネジメントレベルの議論も必要だろう

などの意見が出ていました。

Laravel開発手段

サクっと作れるLaravel

ここからは後半のテーマとしてデータの追加・変更・削除が行えるToDoアプリ作成を例に、Laravelで開発を進める手順の解説が行われました。
「Laravelの公式リファレンスは情報量も多く便利だが何から進めて行けば良いのかが掴み辛い」という意見もあり、今回のテーマが参考になりそうな内容でした。

ルーティングについて

ViewであるBladeファイルを新たに用意しweb.phpにそのルーティングを追加して画面に表示させる実演が行われ、URLパラメータを取得したり、Viewへパラメータを渡す方法なども合わせて紹介されていました。

web.php実装例

<?php

Route::get('/hello', function () {
    return view('hello');
});

Bladeファイル実装例

<h1>PHPerのための「Laravel 入門を語り合う」PHP TechCafe</h1>

<div>
    <p>Hello World!</p>
</div>

web.phpへの追加とBladeファイルの作成のみで画面が作れる事から

  • やっぱりサクっと作れるのが良い。
  • がっつり書き込まなくてもある程度期待通りの動きをしてくれるのは作っていて楽しい。

などの意見が出ていました。

Controller作成

Controllerの作成方法としてLaravel Sailでartisanコマンドを使っての方法が紹介されました。

./vendor/bin/sail artisan make:controller HelloController

ここでは注意点として、
rootユーザでphp artisanコマンドを使ってしまうと作成されたControllerファイルの所有者もrootユーザになり、WEBサーバからのアクセスもroot権限でないと出来なくなってしまうので、Laravel Sailの使用がお勧め
と説明されました。
「(それは)あるあるだね」などの共感コメントも多く寄せられていました。

関連してResource Controllerについても終盤におまけとして紹介されていました。
Controller作成のartisanコマンドにresourceオプションを付けるとデータの取得、追加、更新、削除を行うメソッドが自動的に追加される機能の事で、今回のToDoアプリに必要なメソッドも一通りまかなってくれる内容との説明がありました。

Controllers - Laravel - The PHP Framework For Web Artisans

ControllerからViewにパラメータを渡す

Controllerファイル実装例

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        return view('hello', ['name' => 'Rakus']);
    }
}

ルーティングの項ではリクエストされた際に直接Viewを表示する解説でしたが、ここではControllerを呼び出しその処理結果をViewに渡す開発に即した作成方法を解説しました。
Controllerクラスのメソッドでリクエスト情報を受け取る方法や、「機能毎にControllerを割ってファイルを分割する方が管理もしやすく複数人での開発もやりやすい」といった実例紹介もありました。

「RoutingにControllerの処理を書くとどうなるか」

との質問がコメントで寄せられましたが、これに対してrootキャッシュが通らなくなるという回答がありました。
「通常はアクセスが来た時にはPHPコンパイルが走って二回目以降は処理が早くなりますが、それが出来なくなる」と解説されました。

Migrationについて

Webアプリに不可欠なデータベースの管理についてMigrationでテーブル作成する解説が行われました。
Laravelのデータベースクエリビルダが用意されているので使用頻度が低めでCreate Table文に馴染みがなくても「これ一つ書いたら作られるんですよね?」となるのが便利な一方で、「SQLの書き方を忘れるっていうのはありそうだ」などの意見も出ていました。
複雑な結合をさせたい場合、「Modelの使い方をマスターしていない場合でも、LaravelにはDBクラスもあってSQLを直接自分で書くことも可能」との補足説明もありました。

Migrationファイル実装例

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTodoTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('todo', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('todo');
    }
}

Migrate実行時の処理であるup関数で作成するテーブルのTimestamp型カラムについての解説では次のような意見が出ていました。

  • レコードの作成時や更新時に自動的に日時がセットされるので便利
  • 知らないうちに全部やっているっていうのがLaravelっぽい

「テスト用の環境にSQLiteを使っているが、Migrationのコードに手を加えないとSQLが上手く動かない場合があるのですが、どうしていますか?」

とのチャットの質問では参加者の方々に採用しているデータベースについて決を採る場面もありました。
結果はSQLiteを使っていない派が多数を占めていました。

  • Dockerでそのまま入っちゃうからあんまり気にせずPostgreSQLとかでやっちゃいますね…
  • 本番環境でも実行しているMigrationなのであればテスト用環境のデータベースはMySQLなどを使い、Migrationファイルをいじらずに済ませるのが無難なのでは?

などの意見が挙がっていました。

Migration実行のartisanコマンド

./vendor/bin/sail artisan migrate

テーブルを作り直す場合にロールバックせずともテーブル削除とMigrate実行をセットで行ってくれる便利なmigrate:freshコマンドや、関連して初期データを投入してくれるseederの紹介も行われていました。

Modelについて

./vendor/bin/sail artisan make:model Todo

内容が盛り沢山で最後は駆け足になりながらも、実際に画面を動かしModelクラスを経由してDBのデータ取得・登録・編集・削除が容易に行える様子を実演して締めくくりました。

今回のTeckCafeで解説した内容はHackMDにまとめられていますので合わせてご覧ください。 hackmd.io

おわりに

PHP TechCafe』では今後もPHPに関する様々なテーマのイベントを企画していきます。
是非、皆さまのご参加をお待ちしております!

connpass.com

◆ PHPTechCafeの過去公開したイベントレポートも合わせてご確認ください!
PHPerの今とその先について in 2021 【PHP TechCafe イベントレポート】
PHP8.1 の新機能について語り合う・前編【PHP TechCafe イベントレポート】
PHP8.1 の新機能について語り合う・後編【PHP TechCafe イベントレポート】
PHPUnit の始め方について語りあう 【PHP TechCafe イベントレポート】


  • エンジニア中途採用サイト
    ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
    ご興味ありましたら是非ご確認をお願いします。
    20210916153018
    https://career-recruit.rakus.co.jp/career_engineer/

  • カジュアル面談お申込みフォーム
    どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
    以下フォームよりお申込みください。
    rakus.hubspotpagebuilder.com

  • イベント情報
    会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
    rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.