Laravel Meetup Tokyo Vol.12 参加した

LaravelPHPPoEAAデザインパターン

メモ


LaravelTokyo

Eloquentに別れを告げるタイミングについて考えた / 吉田あひる

  • ORM x Active Record x Domain Model

    • 【補】Domain Modelではなくないか

      • Domain LayerのことをDomain Modelって言ってるのかな
  • Eloquentの功罪
    • 高機能
  • クエリ最適化

    • slow query吐かれる
    • クリティカルなところだけSQL書けばいい
    • 別れるほどではない
  • Repository Pattern(DDD)と相性悪い

    • Repositoryの外でSQLを書けてしまう

      • インスタンスのwhere系メソッドとか呼べちゃう
    • 別れるのほどではない

      • レビューしろ
  • fatになりやすい

    • DBとのやりとり
    • relation
    • ドメインロジック
    • バリデーション

      • mutatorでバリデーション(boiler plate)
    • プレゼンテーションロジック

      • derivationでHTMLを返したり(boiler plate)
    • 別れるほどではない

      • 責務分けてクラス設計しろ
  • モデルとテーブルが一対一対応しないと破綻する

    • そもそものパターンの前提としてそう
  • テーブルから独立したドメインオブジェクトが欲しくなる

    • 【補】Domain Model + Data Mapper使え

Laravel Novaの適切な使い方を考えてみる / suthio

  • 管理画面作るやつ

    • 自社向け、特定のユーザが使うやつとか
  • Laravel Novaはいいぞ
  • Laravel Novaって何

    • 有料

      • やすい
    • 公式
    • 5分くらいでダッシュボードできる
  • ここが素敵

    • ドキュメント充実

      • 公式が有能
    • modernな見た目
    • ソースコード読みやすい
  • よくある管理画面パッケージ

    • 初期の速度は速い
    • カスタマイズつらい

      • bad hack
      • パッケージの意味とは
  • 開発者用の管理画面として有用

    • ちょっと便利なPHPMyAdmin
    • サービス立ち上げ期に使うやつとか
  • 長所

    • それ用のパッケージがある
  • 短所

    • Laravel 5.8^ only
    • 非OSS
  • みんな使って!

    • 情報増えてうれしい

Laravel+Slack通知で実践したリアルタイムエラー共有開発 / くまモンエンジニア

  • エンジニアがjoinしてきて、初のチームプレー
  • チームっぽい事したい
  • エラー共有してみんなで解決する仕組み

    • エラーに関する知見の共有
    • 質問が苦手な新人の育成
  • 5.7.14からslack-notification-channelが外部パッケージになった
  • Slack APIとかをガシガシ使いたいのでGuzzleで自前開発した
  • 当事者意識

    • 他人のエラーは俺のもの
    • 俺のエラーも俺のもの
  • チーム全員が同じ分のエラーを共有できる

エラー時にログに出力する情報と画面に表示する情報を分ける / おかしょい

  • エラー: アプリケーションでハンドリングされなかった例外
  • ユーザ向けメッセージと開発用メッセージは異なる
  • app\Exception\Handler.phpをいい感じに実装する
<?php

    /**
     * Prepare a response for the given exception.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception $e
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected function prepareResponse($request, Exception $e)
    {
        if (! $this->isHttpException($e) && config('app.debug')) {
            return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e);
        }

        if (! $this->isHttpException($e)) {
            $e = new HttpException(500, $e->getMessage());
        }

        return $this->toIlluminateResponse(
            $this->renderHttpException($e), $e
        );
    }
  • これ使え
        if (! $this->isHttpException($e)) {
            $e = new HttpException(500, $e->getMessage());
        }
  • ユーザ定義例外にtoHttpException(): HttpExceptionメソッドとか生やす
  • appのHandlerの中でtoHttpException()呼ぶ
  • getMessage()でユーザ向け文言書く

LaravelでAuth0を使ってECサイトを実装してみた

  • composer require auth0/login
  • 認証のdriverをauth0に