Laravel JP Conference 2020 トーク一覧
個人開発でLaravel上でクリーンなアーキテクチャ、TDD、CI/CDを実践する環境を構築した話

tl:dr
このセッションでは、Laravelの上で、新原さんの独立したコアレイヤパターン、テスト駆動開発、 LarastanやPHP Insightsといった静的解析ツール、Circle CIを取り入れて、個人開発でも継続的かつ安定的にソフトウェアを進化させるための取り組みをしているという話をします。
概要
個人開発のウェブサイトでも企業のプロダクトと同じように、ユーザーの満足度を向上させるために日々進化させていかなければなりません。
しかし、個人開発では、平日の朝や晩、土日の予定のない日という限られた時間しか使えません(お金も出ません)。
このため、開発スピードを落とさないことは重要です。
開発スピードが早ければ早いほど、次の施策を考えたり、自分の余暇の時間を増やすことができるためです。
では、節約できる時間は何でしょうか。それは、新機能を開発する時間だけではなく、既存のコードを変更する時間、バグを修正する時間、毎回デプロイをする時間です。
継続的にソフトウェアを進化させるための種々のプラクティスを取り入れたら、開発における無駄な時間を減らし、新しいコードを怖がらずに追加できるようになったので、そのプラクティスを紹介します。
AWS Fargate に乗せたPHPと Amazon API Gatewayを組み合わせて使う

「AWS Fargate の上で PHP (Laravel/Lumen) でAPIを提供する」
「Amazon API Gateway 経由で Lambda Function を Web APIとして提供する」
巷ではよくあるパターンですよね。
ではみなさん、これらを組み合わせて使ったことがあるでしょうか?
実際に使ってみると、たくさんのメリットがあったのでご紹介します。
※ Lambdaの話は出てきません
Laravel.tamachi
PHPやLaraveを業務で使っていたり、趣味で学んでいる方を対象としたIRT(Interactive Round Table)を行います。
IRTではLaravel用のテーブルと、PHP用のテーブルにそれぞれ分かれて、各技術トピックについて相談や議論を行う事を目的としてます。
各テーブルでの司会役は「Laravel.shibuya」と「Laravel.tenjin」の運営メンバーの方に担当して頂きます。
担当は以下の通りです
Laravel IRT: endu さん
PHPとJavaScriptを書いています。
SNS:https://twitter.com/Fendo181
PHP IRT: kunit さん
GMOペパボ ホスティング事業部 / 単なる旅行好き
SNS:https://twitter.com/kunit
タイムテーブルについて
IR20分、休憩5分を3セット行います。
10:30~10:50 IRT 1回目
10:55~11:15 IRT 2回目
11:20~11:50 IRT 3回目
※途中開始時間が前後するかもしれませんがご了承下さい。
なお、IRT中での入退室は自由になっております。
気軽にご参加下さい。
テーマについて
事前に募集もしますが、当日テーブルに来てその場で相談して頂いても問題ございません。
注意について
カンファレンス期間中も当然ですが、IRT中も他の参加者へのご迷惑となる行為はしないようお願いいたします。
速習Composer

現在のLaravelは近年の多くのPHPフレームワークと同様にComposerを基盤として構成されており、Packagistに登録された多数のPHPライブラリと簡単に相互運用できるようになっています。
この発表ではComposerの基本機能およびLaravelとComposerの関係、そしてComposerの設定方法などをまとめて解説します。
バージョンアップで心が折れた話

注)この話はフィクションです。きっと。
■対象
・今最新を使っている人(メインターゲットです)
・これからやる人
・もうやって、あるある話を聞いて涙したい人
皆さん、バージョンアップしてますか?
PHPや、Laravel、古くなってきたからバージョンアップしよう。
よくある話ですね。
でも、何も考えずにプログラムを書くと、あとで痛い目を見ます。
これは、本当にあったかはわからない、バージョンアップで悲しみを背負った人の話。
■内容
・vendor配下をいじった報い
・コードをコピペで拡張した悲しみ
・Laravelを見捨ててPHP上げたらLaravelがお亡くなりに
・テストコードなんてなかった
・このライブラリはもう居ない
・消えた機能
・見つからない変更点
・再度襲いかかるコピペの悲しみ
Laravelベースのオープンソースソリューションを開発しました

Laravel5.6をベースとした、オープンソースのWebデータベース「Exment」を開発しました。
本セッションでは、Laravelのメリット、LaravelをベースとしたOSSを開発する場合のメリット、注意点などをご紹介します。
また、Exmentの製品のご紹介を行います。
Laravel Vaporを再現!自ら作るServerless Laravel

Serverless PHP は作れる
Serverless Laravel といえば Laravel Vaporを思い浮かべる人が多いのでは無いでしょうか
Laravel Vaporが作れる様にAWSのArchitectureを正しく理解していればServerless PHPは作れます
今回はLaravel Vaporが担っている基本要素を自ら構築してみようと思います
本セッションを通してServerless Architectureの知見が広まる事を本セッションを目的とします
■聴講者ターゲット
- Serverless に興味のあるLaraveler
- Serverless に興味のあるPHPer
- AWSに興味のある方
■お話する内容
- Laravel Vaporの基本機能再現
- Queues
- Storage
- Networks
- Databases
- Caches
■お話しない内容
- Laravelerが唸るようなテクニック
※話者はCakePHPerです
初心者向けLaravelワークショップ
(以下の内容はあくまで予定している内容です。当日の進行状況によっては内容が変更になる可能性があります。)
このワークショップでは、Laravelのソースコードリーディングやモブプログラミング(※1)を通じてLaravelのライフサイクルやLaravelの様々な機能、テストコードの書き方などを学びます。
ワークショップの想定対象者
- いわゆる初学者の方
- PHPのコードをある程度読める方
- Laravelを使った初歩的な開発をおおまかに理解している方(チュートリアルレベルのCRUDアプリケーションで可)
予定しているコンテンツ
ソースコードを読みながら学ぶLaravelのライフサイクル(1h)
Laravelのライフサイクルについてソースコードをベースに解説していきます。
ライフサイクルについて詳しくなると、Laravel本体のある程度詳細な知識が身につきます。
これによって、エラーの原因の切り分けが早くなったり、Laravelの機能をカスタマイズするための学習がしやすくなるなどの効果が見込めます。
Laravelの様々な機能を学びながら実装(1h)
あらかじめこちらで用意しているアプリケーションに機能を追加実装する過程で、様々なLaravelの機能を活用していきます。
Laravelを使って開発するのであれば絶対に知っておきたい便利な機能を学んでいきます。
モブプログラミング(1h)
大きなディスプレイに開発画面を写し、みんなでわいわい実装していきます。
特にシナリオは用意していないので、新たに機能を実装するもよし、既存の機能をより良いコードにリファクタリングするもよし、その場のノリで楽しみましょう。
モブプログラミングを通してエラーの潰し方やデバッグ方法などが学べる予定です。また、自分以外の人がプログラミングをする最中に考えていることを知れる貴重な機会になると思います。
※1
モブプログラミングとは、みんなで1つの画面を共有しながらわいわいプログラミングすることです。
交代で一人ずつドライバーとなりドライバーの人が実際にプログラミングを担当します。
周りの人はドライバーの人にアドバイスをしながらみんなで協力をして実装を進めていきます。
SPAだけではない。LaravelとVue.jsでMPAを作るイロハ。

LaravelとVue.jsはセットで使われることが多いと思いますが、MPAに関連する内容というものは中々目にしないように感じます。
このセッションでは、私が実際の業務を通して、
LaravelとVue.jsを使用してMPAを作って感じた課題、それをどう解決していったのかをお話します。
このセッションを聞くと、LaravelとVue.jsでMPAを作るときに、Vue.jsのコードを書く上で快適で柔軟な対応を取る1つの指針になるでしょう。
また、私自身がまだ見えていない課題の領域へ、一歩踏み出す足掛かりになるかもしれません。
※このセッションは、Laravelの資源を利用する形でVue.jsでのフロントエンドの開発を快適にするため、Vue.jsの要素が強めです。
データベースエンジニアから見たEloquentパフォーマンスチューニング

RDBはアプリケーションの心臓部です。たった1つのSQLがサービス全体に深刻な負荷を与えることも珍しくありません。
SQLを意識せずコードが書けるのはEloquentの大きなメリットですが、実際のSQLを書けない分だけトラブルシューティングは難しくなります。
意図せぬ負荷は避けたいが、普段はSQLを意識せずコードを書きたい。
この両立は可能でしょうか?データベースエンジニアの立場からお話しします。SQLの知識の有無は問わない内容です。
PHPで作るプッシュ通知配信システム

プッシュ通知の配信は、ReproやOneSignalといったサービスを利用する事が一般的です。
しかし、リミアではサーバ側の入稿及び配信システムを内製化しました。
内製化した理由、プッシュ通知の仕組み、開発したシステム、それを使った業務改善事例について説明します。
このセッションを聞く事で、プッシュ通知の仕組みや改善事例について把握できるだけでなく、静的型付言語が使われている場所にPHPを導入する参考事例を知る事ができます。
LaravelとAWSでProgressiveなアプリケーション開発

LaravelをハブにしてAWSの様々なサービスを利用してサービスを段階的に成長させていくことについて話します。
Laravelで学ぶ、セッションの基本と応用

ステートレスなHTTPをステートフルに変えてくれる仕組みがセッションです。ユーザのログイン、リダイレクト後のエラーメッセージの表示、CSRF対策等、現代のウェブアプリケーションで多用されているセッションですが、セッションがどのように動いているかと聞かれた時に正しく答えられますか?
初心者に近いPHPerがセッションを多用すると、中堅クラスのエンジニアから「セッションは危ないから多用しないように」とアドバイスされることも多いと思いますが、それは何故でしょうか?
本トークでは、ウェブアプリケーションにおけるセッションについて、その正体を分かりやすく解説します。また、セッションの正体を知ることで、ウェブアプリケーションのアーキテクチャーに対してセッションが及ぼす影響についても解説します。セッションにまつわるアレコレを解説することで、初心者とベテランエンジニアの間に存在する知識と経験の差を少しでも埋めることが狙いです。
このトークでお話すること
- セッションの仕組み
- Laravelにおいて無意識に利用されているセッションの例
- Laravelが独自のセッション管理を行う理由
- セッションが本番アプリのアーキテクチャに与える影響
やんちゃなEloquent Modelの育て方

フルスタックWebフレームワークLaravelの最大の特徴はEloquent。
Eloquentを制するものがLaravelを制するといっても過言ではありません。
Laravel利用者同士であれば、Eloquent Modelをどう使うか、太りがちなロジックをどう整理するかなどなど、Eloquentの話だけで一日中語り尽くせることでしょう。
最近のカンファレンスのLaravel系のトークでは、Laravel利用者が成熟してきたせいか、アーキテクチャや設計論が目立ち始め、Eloquent Model自体への評価は下降気味だと感じています。
曰く、Eloquentはやんちゃが過ぎるのでリポジトリに閉じ込めるべきである、ORMの"Model"クラスとは別のPOPOのクラスをドメインモデルとして使うべきである云々。
本トークでお伝えしたいのは、我々が普段書いているEloquent Modelのコードと、カンファレンスで話される理想的な設計の話は地続きであり、決して雲の上の出来事ではないということ。コードの良し悪しはとあるアーキテクチャやパターンを取り入れるかどうかのゼロイチで決まるものではなく、その間にある無数のトレードオフに目を向けることが大事だということ。
目の前にある泥臭いLaravelアプリケーションのコードと付き合いながら、設計について考えていきましょう。
● お話しすること
- ActiveRecordとDataMapper
- ドメインモデルと永続化モデル
- リポジトリパターン
- ドメインモデルとしてのEloquent Model
- Eloquent Modelを分割統治するためのパターン集
● お話ししないこと
- クリーンアーキテクチャ
- ドメイン駆動設計
P.S. Laravel中〜上級者の皆様へ
リポジトリパターンやクリーンアーキテクチャは本当に必要ですか?
それらが利用される本当の目的を理解して利用していますか?
POPOが正義でしょうか?
Eloquentは力をセーブさせざるを得ない悪い子でしょうか?
本トークを通じて、Laravelを使い始めた頃に感じていたEloquentの万能感を、ぜひ思い出していただければと思います。
誰のためのソースコード?

理解しやすいソースコードとはどういったものでしょう?
ソースコードのメンテナンス性が重要であることは多くのプログラマに認知されており、いわゆる可読性が高いコードを書くためのプラクティスはリーダブルコードや Effective XXX と言った文献で語られています。
一方、コードの可読性を語る上で重要な要素として、それを読む「人」があります。人が読み、人が理解することでコードはメンテナンスされていきます。
本セッションでは、人がコードを理解するいうことに焦点を当てて、理解しやすいコードについて考えてみます。
Laravelの黒魔術

普段なにげなく使用しているフレームワークの中身、どのくらい知っていますか?
本セッションではLaravel Frameworkの中でも特徴的な実装をわかりやすく解説します。
ServiceCotainerやFacade(Real TIme Facade)、ミドルウェア、Eloquent…フレームワークの実装はなかなかに興味深いものだということ、フレームワークの実装を知ることでトラブルを未然に回避できるということ、PHPという言語の面白さを伝えることができればと思います。
ChatOpsで立ち上がる、シームレスなプレビュー環境

開発チームも大きくなり、関係メンバーが増えてきたため、柔軟にプレビュー環境を立ち上げるツールの紹介をします。
同時並行でPRが立ち上がるため、GitHubのコメントドリブンでPRごとにプレビュー環境が立ち上がるものとなっています。
ROXXでは事業部が2つあるのですが、それぞれの開発環境に最適化したプレビュー環境の作り方を紹介します。
- k8s + モノレポ構成
- ECS + AWS CDK + マルチレポ構成
15分でわかる Eloquent の内部構造

Laravel を使う上で、Eloquent にお世話になっている人は多いのではないでしょうか。
ドキュメントを読んでみると、モデル定義、ソフトデリート、クエリスコープ、イベントオブサーバーなど便利な機能がいくつも提供されています。
そんな Eloqunet が内部ではどのような作りになっているのか、実際のソースコードを見ながら解説します。
更なる Laravel の理解や OSS コントリビュートなど "単なる Laravel 使用者のその先" へ進む一歩として、本セッションが少しでもお役に立てればと存じています。当セッションでは Laravel/framework 6.x を用いて解説する予定です。