Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ

namizatork
January 22, 2020

 Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ

2019.1.22 大阪Laravel勉強会主催

namizatork

January 22, 2020
Tweet

More Decks by namizatork

Other Decks in Programming

Transcript

  1. ⼤阪Laravel勉強会
    # ⼤阪Laravel勉強会 でツイート
    登壇(15min)
    Laravelワカンネ(゚⊿゚)から「完全に理解した()」までス
    テップアップ
    LaravelとSymfony
    Laravel5 と Laravel6 の違い -認証編-
    LT(5min)
    LaravelでSNSログインを実装
    LaravelのコアコードからMiddlewareとControllerの実
    ⾏⼿順を理解する
    MySQLと⽂字コードの話
    故Laravel4でやっていく時のTips
    Amazon LightsailにLaravel環境作ってみた

    View Slide

  2. Laravelワカンネ(゚⊿゚)から
    「完全に理解した()」までステップアップ
    Namizato

    View Slide

  3. エンジニアの「完全に理解した()」
    ⾃信
    理解度
    完全に理解した
    なんも分からん
    チョットワカル

    View Slide

  4. 以上。
    前ページ踏まえた上でご視聴ください。

    View Slide

  5. ⾃⼰紹介
    Laravelのライフサイクル
    Laravelでよく⽬にするやつ

    View Slide

  6. Namizato
    @namizatop
    Work : サーバーサイド
    Like : ⽝ バスケ
    Age : 25
    Laravelコミュニティ参加⾃由です

    View Slide

  7. Laravelのライフサイクル

    View Slide

  8. Laravelをwebに公開する時、
    publicフォルダのみを公開
    フォルダとします。
    そこに存在するCSS・JS等
    以外のファイルへのアクセ
    スは全てindex.phpを通して、
    実⾏されます。
    公開フォルダ

    View Slide

  9. HTTPカーネル
    http://laravel
    1
    エントリポイント
    ルーティング
    ミドルウェア
    コントローラー
    2
    3
    4
    5
    6
    7
    実⾏フロー

    View Slide

  10. オートロードファイルの読み込み
    フレームワークの起動
    アプリケーション実⾏
    HTTPレスポンス送信
    終了処理
    エントリポイント

    View Slide

  11. 通常のPHPでは別のPHP
    ファイルを参照する際、
    require⽂を読み込む必要が
    ありますが、Laravelでは
    ファイルの上部でuse宣⾔す
    ると⾃動でそれらのファイ
    ル郡を⾃動で読み込んで使
    ⽤できます。
    オートロード

    View Slide

  12. Laravelの根幹とも⾔えるApplicationイ
    ンスタンスを⽣成します。
    このApplicationインスタンスでは
    Laravelの様々な機能を提供する部品を
    管理しており、Laravelではサービスコ
    ンテナと呼んでいます。
    ここではHTTPカーネル/Consoleカー
    ネル/エラーハンドラーをsingletonでバ
    インドしてindex.php(エンドポイント)
    に返します。
    ※サービスコンテナは別ページで説明します。
    アプリケーション実⾏

    View Slide

  13. 前ページでsingletonを利⽤してバイン
    ドしたHTTPカーネルの⼀例です。
    HTTPカーネルではリクエストの実⾏前
    に処理される機能(CSRFや認証など)
    を配列($middleware)で定義します。
    ここで定義した処理はRequestインスタ
    ンスに対して必ず実⾏されます。
    また、任意で処理を追加、削除が可能
    です。
    ※定義した処理はミドルウェアで実⾏されます。
    HTTPカーネル

    View Slide

  14. 特定のURL
    (http://laravel/○○○)に対して
    どの処理を呼び出して実⾏するのか
    を管理するのがルーティングです。
    図①では/homeにアクセスされた時
    に図②の`HomeController`クラスの
    `index`メソッドを呼び出しています。
    ルーティング http://laravel/home
    1
    2

    View Slide

  15. ミドルウェアとはRequestに対して(つまり
    Laravelアプリケーション全体)フィルタリン
    グをする機能の事です。
    例えば右の図の様にログイン機能を追加しよう
    と思った時にそれぞれのコントローラーで認証
    ロジックを書くのは⼤変です。
    その処理をコントローラーとは別に実⾏する仕
    組みを⽤意したものになります。
    右の図の様にミドルウェア->コントローラー
    を通った後に再度ミドルウェアに戻っている様
    にコントローラーの前後どちらでも設定が可能
    です。
    ※認証ロジックだけでなくCSRFトークンのチェックなど
    様々な処理が初期設定で存在します。
    ミドルウェア
    ミドルウェア
    コントローラー
    5
    6
    ~~~~~~省略~~~~~~
    ログイン
    ここで認証ロジック
    など
    ʻʻ実⾏フローから引⽤ʼʼ

    View Slide

  16. LaravelはMVCフレームワークです。
    ControllerはModelとViewの制御を
    ⾏う中⼼となる部分です。
    右の図の様にLaravelのControllerは
    通常、Controllerクラスを継承してい
    ます。
    継承せずともControllerとして機能し
    ますが、前ページで説明した、ミド
    ルウェアへのアクセスが出来なくな
    ります。
    コントローラー

    View Slide

  17. Laravelでよく⽬にするやつ

    View Slide

  18. DIとはオブジェクト同⼠の
    依存をなくして疎結合にし
    ようという考え⽅です。
    右の図では`User`クラスは
    `Phone`クラスに依存して
    います。
    このままでは`User`クラス
    の単体テストができません。
    DI(依存性の注⼊)
    Phoneクラスに依存している

    View Slide

  19. 右の図ではresolve()という関数にク
    ラス名を渡しています。
    この記述をする事で、外部でインス
    タンス⽣成を⾏い、疎結合にしたと
    いう事になります。
    これにより`Phone`クラスのモック
    を与えた`User`クラスの単体テスト
    が可能になりました。
    では外部からインスタンスを⽣成す
    るとはどういう事か次ページで追っ
    てみます。
    DI(依存性の注⼊)
    Phoneクラスに依存していない

    View Slide

  20. サービスコンテナとはアプリケーショ
    ン全体のインスタンスを管理する機能
    の事です。
    前ページで紹介したresolve()はグロー
    バル関数として使⽤でき、クラス名を
    渡すと該当のクラスのインスタンスを
    リターンする事ができます。
    resolve()は説明するためにあえて使い
    ましたが、メソッドに直接クラス名を
    渡すと⾃動で同様にインスタンスを外
    部から注⼊する事ができるメソッドイ
    ンジェクションがよく使われます。
    サービスコンテナ
    サービスコンテナ
    インスタンス⽣成し
    てくだぱい
    あいよ
    (インスタンスを渡す)

    View Slide

  21. ご静聴ありがとうございました。
    Namizato

    View Slide