Closed9

Laracon EU 2025 まとめ DAY1

MaruMaru

Pipeline Power-Up: Turning Complex Logic into Simple Steps - Bobby Bouwmann

02/03(月) 17:30 ~ (日本時間)

Pipeline Pattern はデザインパターンの一つ
複雑な操作を簡単にする。

  • Maintenability
  • Readability
  • Flexibility

をもたらす

Basics

パイプラインにはクロージャやクラスを渡せる。

順番に渡せるので理解しやすい。

Use Cases

Laravelはソースコード内部でPipelineパターンを使っている

Value Object

Collecting data


Handling model updates

Collections


Query builder


Reuse a pipe


DoubleBookingProtectionを2回実行している。

Enums



Enumのcaseごとにパイプラインをまとめている

Pileline and Saga pattern




MaruMaru

Have you met Ada? Word Embeddings with Laravel - Diana Scharf

02/03(月) 18:00 ~ (日本時間)
Word Embedding について単純化して話す。

Word Embeddingとは何か?

=> ベクトルベースの単語表現のこと
ベクトルとは、n次元空間における大きさと方向を持つ量のこと

単語をベクトル化することでコンピュータで類似度を計算できるようになる。

単語を比較してみる

PHPの文字列比較関数で比較する

similar_text()では意味をなさない

Pythonを使って試してみる


猫と犬はかなり類似は高い

猫と車の類似度は低い


king - man + woman = queenの演算ができる

利用可能なWord Embedding API

トークンベースで課金される。
トークンとは、文字列の並びを数値形式に変換したもの。

トークン数は以下のように事前にカウントできる。

Laravelの長いドキュメントを使ったとしても安い。

ベクトルをPostgreSQLで扱う


phpのベクトル演算は遅いので推奨しない。

ada -laravelパッケージ

Laravelで扱いやすいように、ada-laravelパッケージを作って公開した。
https://github.com/5am-code/ada-laravel

このパッケージを使うことでLaravelでSemantic Searchを実装できるはず。
実装の流れは以下。

MaruMaru

Help out frustrated Bob - Bert De Swaef

02/03(月) 19:00 ~ (日本時間)

Bobは忙しいマネージャーでWebアプリケーションの修正が必要で困っているという設定
Bobを助けよう。
※ Livewireアプリケーション

1. 遷移先ページ表示の低速化・チラつき

=> Livewireのprefetchを使う
wire:navigate.hoverを付与

ホバー時に遷移先のページが事前ロードされる

2. OR検索項目の追加

=> $query->whereAny()やorWhereRelation()を使う

※ whereAnyはLaravel11の特定バージョンから使える

3. ページ表示情報の自動更新 - Polling

=> Livewireのpollingを使う
wire:poll.10sを付与して10秒ごとに再取得

動くが、ユーザー数が増えるとサーバーの負荷が高くなってしまう。
=> Web Socketを使う

4. ページ表示情報の自動更新 - Web Socket

=> Laravel Reverbを使う

  • php artisan intall:broadcastingを実行

  • Eventを作成(shouldBroadcastNowを実装)

  • broadcastOn()メソッドでチャンネル名を指定

  • モデル保存時にEventを送出

  • LivewireコンポーネントでOnAttributeをつけてリッスンする

  • Reverbサーバーを起動

まとめ

素晴らしい機能がいっぱいあるので、使おう。

MaruMaru

From Zero to Static Analysis Hero - Ryan Chandler

02/03(月) 19:30 ~ (日本時間)
静的解析はPhpStanなどのツールのみを指すものではない

静的解析についてMild, Medium, Hotにレベル分けする


Mild, Mediumは心地いいがHotは辛くなりがち

静的解析は以下の実行時エラーが起こりうるコードを実行前に検出できる。

IDEでもできるのでは?
=> Configの設定差異など統一するのは難しい

Testコードで十分では?
=> テストは正しい証明になりがち。カバレッジは100%か?

一方PHPStanでは、、以下のメリットがある

IDEとは違ってCIにも組み込める

以下のようなルールをカスタマイズで組み込み可能

PHPStanの仕組み

カスタムルールを書く

  • \PhpStan\Rules\Ruleインターフェースを実装したクラスを作成する
  • getNodeType, processNodeメソッドを記述する
  • phpstan.neonのrulesに作成したカスタムルールクラスを設定する

LarastanにはEloquentなどのLaravel独特のカスタムルールが組み込まれているのでチェックするといい
詳しいPhpStanの仕様については公式サイトが詳しい

MaruMaru

No more slow requests - Marcel Pociot

02/03(月) 22:20 ~ (日本時間)

Laravelアプリケーションが遅い理由

いろんな人に聞いたところ以下の四つだった

  • Database
  • Http Requests(外部リクエスト)
  • Queued Jobs(キューに入れていない)
  • PHP itself(PHPの使い方)

どの人もLaravelのせいで遅いとは言わなかった

高速化のコツを話していく

基礎

php artisan optimizeを実行する
config, event, route, viewがキャッシュされる。
Forgeのデフォルトデプロイスクリプトは実行しないので注意

ServiceProviderでもoptimizeできる。

Queueを使う

例えばメール送信処理
ShouldQueueインターフェースを実装すれば、常にキューに入る。

通知も同様にキューに入れるべき

Opcache

Opcacheを有効にすることでPHPコードのパース処理やコンパイル処理にかかる時間を削減できる。

Opcacheを有効化するだけで300ms => 90msに改善したサイトもあった。
Forgeではボタンで有効化できる
もしくはphp.iniでopcache.eneble=1とする

Demo

N+1クエリ


解決策

  • withでEagerロードする
  • モデルのwithプロパティにリレーションを定義する(非推奨)
  • Model::preventLazyLoading()で予防する

高いメモリ使用量


レコード数が多い時はpluckで必要な情報のみ取得するようにする

プロファイラー拡張を使ってプロファイル

xdebugではなくspxを好んでいる(低速化しないから)
Laravel Herdではspxの統合を簡単にしている。
プロファイル画面の例

プロファイル結果を目で見るのは大変なのでChatGPTなどに与えるといいかもしれない。
コマンドでのプロファイルも可能

laravel reverbなどの常に動き続けるものの監視も可能

本番環境の監視についてはLaravel NightWatch に期待している。

MaruMaru

Don't solve non-problems… - John Drexler

プロダクトマネジメントについて話す。

開発者はプロダクトマネージャーのように考えるべき。
プロダクトを作っている時、あなたはすでにプロダクトマネジメントをしている。

ロードマップ

PMの仕事の一つはロードマップを作ること。

実際のロードマップ(計画していない場合でも)

スコープ

何を優先すべきか判断している

実際のスコープ(うまく分けていなくても結果的には取捨選択している)

プロダクトマネジメントをナイフ(ツール)として持っておこう

これはLaravel, tailwindCSS, Livewireと同様に武器になるはず。


順序づけられた意味のある問題を効率的に解決しよう。

Problem(問題)



チワワにはなってはいけない。トリュフを探す豚になろう。

問題を怖がらず探し出す人になろう。
そのためには人々と話す必要がある

問題は機能要望ではない。

例:顧客からレポートページを作って欲しいと言われた時

問題を把握する前にやろうとするとTODOが膨らむ。
まず、顧客が解決したいことを確認しよう。なぜ必要なのかを理解するのが重要。

問題の本質を理解することでかなり簡潔なチケットになった。

meaningful(意味のある)

私たちの時間単価は高い。
問題ではないことを解こうとしないようにしよう。
解くべきではない問題

仮説的な問題

考えても仕方ない

些細な問題

解決しても得るものが少ない。

重力の問題

解決できない問題

スタンフォード大学のデザイン思考という本で詳しくされている。

トレードオフの問題

両立するのは無理な問題

Ordered list(順序づけられた)

7142の優先度が中のTODOを見たことがある。

やる順番をつけなくても結局順番はつけてやっていることに気づこう。
目指す状態は

  • 順番が存在すること
  • 全員が順番を知っていること
  • 順番付の基準が明確なこと

Efficiently solve(効率的に解決する)

  • 解決したら次に動こう。解決したものに時間をかけない
  • リストに従おう。
  • スコープを小さくしよう
MaruMaru

Fun with PHP functions - Zuzana Kunckova

02/03(月) 23:50 ~ (日本時間)

levenshtein()
二つの単語間の距離を測る関数(何文字変更したらその単語になるか)

soundex()

ドキュメントがおもろい(理由もなくfalseを返す)

metaphone

similar_text()
文字の類似度を判定する

--

str_rot13()
date_sun_info()
日の出、日没などの情報を返す。

easter_date()
checkdate()

unixtojd()
ジュリアン歴の日付表示

timezone_identifiers_list()
タイムゾーンの一覧を表示
418個ある

chop
rtrim()のエイリアス

MaruMaru

A field guide to writing PHP extensions - Michi Hoffmann

02/04(火) 00:20 ~ (日本時間)
PHP がどのように動いているのか知りたかった。
Conference Driven Development(カンファレンス駆動開発)の力を借りて解析を始めた。

PHP拡張とは何か


zend拡張はより仮想マシンの内部に入っている。

CはPHPより早い ext-JSON

PECLでインストールできる。
より新しい手法だとPIE

C コンパイラーを使って自分でビルドする

MaruMaru

Laravel Update - Taylor Otwell

02/04(火) 00:55 ~ (日本時間)

Laravelのこれまでとこれから

Laravelは毎日300000 composer installされている。去年のLaracon EUから30%増加している。
Laravelが人気を博している理由はProductivity

これまでのLaravelはlaravel1.0のような感じがしていて。
これからLaravelの新しい時代(New Era)が始まる。
全ての開発者にとってLaravelをデフォルトの選択にしたい

2024年後半の振り返り

php.new
PHP環境をMac, Windows, Linuxで(1分以内に)簡単に構築できるようになった

Inertia 2.0
遅延プロップス、プリフェッチなどの機能が加わりさらに開発が容易に。
Inertiaは元々Laravelとは関係なく始まったOSSだったが先週正式にLaravelが管理することになった

flux
Livewire用UIライブラリ

VS Code 拡張
最も人気な無料エディターであるVS CodeでよりLaravelが開発しやすくなった。
今はベータだが、2月末に安定版になる。

今取り組んでいるもの

laravel.com
laravel.comウェブサイトのデザインの刷新。

laravel 12.0
破壊的変更は含まない予定。
今までのメジャーリリースに比べてマイナーアップデートに近い
composer updateするだけ。
2月末にリリース予定。

Laravel NightWatch
Laravel公式監視サービス

新しいスターターキット
Laravel Breeze, Laravel Jetstreamに代わる新しいスターターキットを作っている。
これらは統合され1つのスターターキットになる(初心者が選択に迷う必要はない)
スタックはReact/Vue/Livewire
Shadcn, Livewire fluxなどのモダンなライブラリと統合されている
2月末にリリース予定。

Laravel Cloud
下で詳しく説明

Larvel, PHP, Web開発においてゲームチェンジャーになると確信している。

新しいスターターキット

Demo: React starter kit

React/Inertia 2.0/TypeScript/Shadcnで構成されている


複数のレイアウトを用意しており、切り替え可能。(BreezeやJetstreamではレイアウトは固定だった)
全てはアプリケーションソースに含まれており、自分で変更も可能。

Dashboard


レイアウトの変更

app-sidebar-layout

app-header-layoutに変えると

サイドバースタイルからヘッダースタイルになる

レイアウトはアプリケーションに取り込まれているので、sidebar自体のスタイルも自分好みに容易に可能

Vue, Livewire

vueもshadcnを使っているので使い勝手やデザインは同じ。
LivewireはFluxを使っている。
Fluxのボタンなどの基本的なコンポーネントは2月末に無料公開されることになった。それを使っている。
Flux Proはchartなどの高機能なコンポーネントを提供するという棲み分けがされる予定。

Laravel Cloud

PHP全般で今まで存在したことのないデプロイサービスの提供を目指している。
Laravel Forgeは引き続き開発を続ける。(夏に新機能の発表も予定している)
なぜなら開発者はセルフホスティングとフルマネージの二つのデプロイの選択肢を持つべきだと思っているから

Dashboard

Organaizationに複数プロジェクトを紐づける仕組み

プロジェクト詳細画面でデプロイ履歴などを確認可能

コマンドパレット機能があり、プロジェクトの移動も用意

Applicationの作成

GitHubなどのソースコントロールプロバイダのリポジトリを選択する。
現状リージョンは以下の4つ(ローンチまでに追加予定)

  • US East (Ohio)
  • EC Central (Frankfurt)
  • EU West (London)
  • Asia Pacific(Singapore)

作成後、アプリケーションの構成を確認・変更可能

デプロイボタンを押すとデプロイ完了
内部的にはAWSにデプロイされている

デプロイ完了すると laravel.cloudドメインが付与されてアクセス可能になる

Databaseの追加

リージョンや休止状態に入るまでの秒数、オートスケール範囲を設定可能

Cacheの追加

Redis互換のCacheインスタンスが使用可能

環境変数

これらの外部サービスへの環境変数(.env)の設定はLaravel Cloudで自動的に行われる。

DB GUIクライアントとの統合

DeeplinkをクリックすることでTablePlusなどのDBクライアントに自動的に接続情報が設定され接続できる。

Storageの追加

S3 互換のオブジェクトストレージ(CloudFlareのもの)

disk nameの設定モーダルが表示される(Storage::disk()で設定する名前)

Setting

環境変数の上書きも可能

Commands

コマンドの実行も可能

Log

Application log

Access log

アプリケーションの設定

インスタントサイズ・オートスケール設定(範囲を指定可能)・Hybernationの設定・スケジューラー・Octaneの設定が可能

Queue Worker

Webサーバーで起動する場合

アプリケーション設定画面で設定可能

専用のワーカーサーバーを起動する場合

Webサーバーとは別にワーカークラスターを構築可能

  • Add worker clusterを押下して設定を行う

Metrics

レスポンスの状況, CPU, Memoryなどを閲覧できる

コンパクトビュー/ディティールビューの切り替え

アプリケーションの概要を掴みやすいコンパクトビューにも変更可能

ディテールビューでは詳細な情報を閲覧可能

複数ブランチでのデプロイ

アプリケーションに対して複数環境を設定可能

ブランチと環境名を設定

新環境で設定をするが、別環境で使用しているDB,Cache,Storageを使うことも可能

デプロイすると新しいドメイン名が付与される

カスタムドメイン

Add Domainから独自ドメインを設定可能

ドメイン名を入力

サブドメインやリダイレクト設定を行える

DNSサーバーに設定すべきAレコードが表示される

リリース日

2月24日に以下をリリースする

  • laravel.com
  • laravel cloud
  • starter kits
  • Laravel 12

費用

Sandboxプラン

月額固定料金は無しで使用したリソースにのみ料金が発生する。
ハイバネーション(休止状態)の時は料金がかからない。

以下日本円換算(1$あたり155円で計算)

1アカウントあたりのユーザー数: 3名
Flex Compote(Laravelアプリケーションサーバー): 1.04円 / 1時間, 約776円/月
Serverless Postgres(DBサーバー): 6.21円 / 1時間
: 232.85円 / 1GB
Cache : 1.47円 / 1時間, 約1086円/月
ObjectStorage : 3.10円 / 1GB

Production プラン

月額20ドル(さらに使用量に応じた割引あり)

  • カスタムドメイン
  • オートスケーリング
  • 大規模なレプリカサイズ
  • ログ保持期間の拡張
  • 追加の組織ユーザー

Business and Enterpriseプラン

価格については営業担当に要問い合わせ

  • 無制限のオートスケーリング
  • 専用コンピュート
  • 高度なネットワーク機能
  • 複数製品間の割引
  • SOC 2(セキュリティ基準への準拠)
  • サポートSLA(サービス品質保証)

まとめ


We must ship
なんでもいいからみんな作って欲しい
2025年はPHP, Laravelにとって歴史的な年になるはず。

Laravelコミュニティのみんなを信じている。

このスクラップは2025/02/07にクローズされました