Home > 【技術メモ】Laravel JP Conference 2019 参戦メモ

【技術メモ】Laravel JP Conference 2019 参戦メモ

【技術メモ】Laravel JP Conference 2019 参戦メモ

Sat Mar 09 2019

最初で最後のララコン

Laravel JP Conference 2019に参戦しました!の編集後記のようなものを書きました。今回懇親会も参加予定でしたが、今年年明け以降動き続けた疲れ (?) もあり、撤収させていただきました.. 🙏 最初で最後のLaravel JP Conferenceのようですが、次回こそは来年懇親会LTで話してみたさもありですので、その際はよろしくお願いします。mm

https://webneko.info/posts/slide-in-laravel-jp-conference-2019

フレームワークとの付き合い方

そもそも、フレームワークを使う理由は楽をするため。
1. 理解しやすく、変更しやすい
2. 使える便利なものは使う
3. テストを書く
4. 自動化

アプリケーションが主、フレームワークが従である

What: アプリケーション
- ドメイン、関心事、仕様、..

How: Whatをどの技術でどう実装するか
- HTTP、RDBMS、Mail、KVS、..

SimpleとEasyは違う

単純性は一旦失われてしまうと、担保されない
- Easyより、Simpleを選択すること

そこで不要なものを消す

  1. 隠蔽しない、PHPUnit用でXMLを生成した

  2. まとめない、どうしても(migration/seeds)という箇所だけ共通化した

    • 依存関係のせいで共通化しきれていなかった
    • サービス間の結合が多すぎると非常に都合が悪くなる
  3. 作り過ぎない

    • スクリプトを書かずREADME.mdを書いた

Webアプリケーションが今こそ知るべき、RDBMSのパフォーマンスチューニングの勘所 ~ 未踏の速度を目指して~

Laravelアプリケーションの実行速度を考える時、キャッシュが効かない、特定のページが重いなどの事象が発生することが多い。せめてSQLを実行するときくらいは最低限知っとこ!

以下避けること

1. INDEXを活用していない、設定したINDEXが効いていない
2. 不要で大きなデータを取得している
3. 複数回クエリを実行している

エグゼキュータ(実行計画)を早くすること

INDEXとJOINを適切に組み合わせ
- カーディナリティを理解すること
- INDEXが効かず貼り過ぎないことを解消すること

クエリを小さくできるならなるべく小さくする
- Eloquentで何をやっているか、ORMやクエリビルダが実行するクエリを知ること
- N+1 Queryを使っているとボトルネックだったりするので気をつけること

Laravelのデプロイ戦略。VPSからDocker、Kubernates、サーバレスまで

デプロイの自動化の基本は、永続データ以外いつでも廃棄できるようにすること。また、サイズに見合った形式を今一度考え直してみることも重要。今回セッションの参加者の多くはAWS派が多かったようですが、Dockerのマネージドサービスはスケール化が容易。ちなみに、AWS LambdaのPHP対応はちらっと耳にしたことがありましたが、ビルトインサーバで curl を当てるというもので使ってみるのも選択肢の一つかもしれません。

Laravelで学ぶWebアプリケーションの基本

全体を俯瞰してみると実はほとんどがアプリケーション開発者にとって、コントロールできない領域だったりすることも多い。遅さが何に起因しているのか..? なんとなく推測して決めつけることはせず、理論的に突き詰めることが重要。

レイテンシーの中身を見て、ボトルネックを確認する。

  • Webアプリ以外で遅い要因は存在しますか?
  • そもそもWebアプリの責任、Webアプリで解決できる内容ですか?

サーバネットワークの比率が大きい場合は遅さの原因が高い。

  • Webサーバでレスポンスタイムを計測、可能ならログ吐き出し。
  • ボトルネック、プロファイルを特定する。

抽象化って何

具体的な場面から抽象的な物事に落とし込む形式は分かりやすかったです。今回は、「数独アプリの正解チェック機能の開発」というシチュエーションで考えるものでした。抽象化によってもたらされる変化や対象は増えるが、特徴は減る。抽象化レベルが異なればコミュニケーションできません。

これらをプログラミングの世界に落とし込むと、

1. 名前と内容が一致している
2. 抽象化レベルが統一されている
3. さらに狭い範囲で物事を見る観点も必要だったりする

結局、依存関係の本質を見極めることが重要。最低限何をすれば責務が果たせるか、という観点(MUST)で考えることが重要。

コメントを残す