PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応
書籍情報
発売日 : 2021年06月01日
著者/編集 : 竹澤 有貴/栗生 和明/新原 雅司/大村 創太郎
出版社 : ソシム
発行形態 : 単行本
書籍説明
内容紹介
大規模化・複雑化するWebアプリ開発のための“設計技法”と“技術”をPHP&Laravelのエキスパート達がくわしく解説!MVC&ADR、テスト駆動開発、データベースとの連携、ユーザー認証、運用、etc.
目次
第一部 Laravelの基礎
Chapter 1 Laravelの概要
1-1 Laravelとは
1-1-1 Laravelの特徴
1-1-2 開発情報
1-2 環境構築
1-2-1 Laravel Sailを利用した環境構築
1-2-2 Homesteadを利用した環境構築
1-3 最初のアプリケーション
1-3-1 Laravelのディレクトリ構成
1-3-2 Welcomeページの処理
1-3-3 はじめてのページ
1-3-4 はじめてのテストコード
1-3-5 ユーザー登録の実装
1-3-6 ユーザー認証
1-3-7 イベント
Chapter 2 Laravelのアーキテクチャ
2-1 ライフサイクル
2-1-1 Laravelアプリケーション実行の流れ
2-1-2 エントリポイント
2-1-3 HTTPカーネル
2-1-4 ルータ
2-1-5 ミドルウェア
2-1-6 コントローラ
2-2 サービスコンテナ
2-2-1 サービスコンテナとは
2-2-2 バインドと解決
2-2-3 バインド
2-2-4 解決
2-2-5 DIとサービスコンテナ
2-2-6 ファサード
2-3 サービスプロバイダ
2-3-1 サービスプロバイダの基本的な動作
2-3-2 DeferrableProviderインターフェースの遅延実行
2-4 コントラクト
2-4-1 コントラクトの基本
2-4-2 コントラクトを利用した機能の差し替え
Chapter 3 アプリケーションアーキテクチャ
3-1 MVCとADR
3-1-1 MVC(Model View Controller)
3-1-2 ADR(Action Domain Responder)
3-2 アーキテクチャへの入口
3-2-1 フレームワークとアーキテクチャ設計
3-2-2 アーキテクチャ設計のポイント
3-2-3 レイヤードアーキテクチャ
3-2-4 レイヤードアーキテクチャの一歩先の世界
第二部 実践パターン
Chapter 4 HTTPリクエストとレスポンス
4-1 リクエストハンドリング
4-1-1 リクエストの取得
4-1-2 Requestファサード
4-1-3 Requestオブジェクト
4-1-4 フォームリクエスト
4-2 バリデーション
4-2-1 バリデーションルールの指定方法
4-2-2 バリデーションルール
4-2-3 バリデーションの利用
4-2-4 バリデーション失敗時の処理
4-2-5 ルールのカスタマイズ
4-3 レスポンス
4-3-1 さまざまなレスポンス
4-3-2 リソースクラスを組み合わせたREST APIレスポンスパターン
4-4 ミドルウェア
4-4-1 ミドルウェアの基本
4-4-2 デフォルトで用意されているミドルウェア
4-4-3 独自ミドルウェアの実装
Chapter 5 データベース
5-1 マイグレーション
5-1-1 マイグレーション処理の流れ
5-1-2 マイグレーションファイルの作成
5-1-3 定義の記述
5-1-4 マイグレーションの実行とロールバック
5-2 シーダー
5-2-1 シーダーの作成
5-2-2 シーダークラスを利用するための設定
5-2-3 シーディングの実行
5-2-4 Fakerの利用
5-2-5 Factoryを利用する例
5-3 Eloquent
5-3-1 クラスの作成
5-3-2 規約とプロパティ
5-3-3 データ検索・データ更新の基本
5-3-4 データ操作の応用
5-3-5 関連性を持つテーブル群の値をまとめて操作する(リレーション)
5-3-6 実行されるSQLの確認
5-4 クエリビルダ
5-4-1 クエリビルダの書式
5-4-2 クエリビルダの取得
5-4-3 処理対象や内容の特定
5-4-4 クエリの実行
5-4-5 トランザクションとテーブルロック
5-4-6 ベーシックなデータ操作
5-5 リポジトリパターン
5-5-1 リポジトリパターンの概要
5-5-2 リポジトリパターンの実装
5-5-3 リファクタリング
Chapter 6 認証と認可
6-1 セッションを利用した認証
6-1-1 認証を支えるクラスとその機能
6-1-2 認証処理を理解する
6-1-3 データベース・セッションによる認証処理
6-1-4 フォーム認証への適用
6-1-5 認証処理のカスタマイズ
6-1-6 パスワードリセット
6-2 トークン認証
6-2-1 api_tokenを保持するテーブルの作成
6-2-2 シーダーを用いたレコードの作成
6-2-3 独自認証プロバイダの作成
6-2-4 トークン認証の利用方法
6-3 JWT認証
6-3-1 tymon/jwt-authのインストール
6-3-2 tymon/jwt-authの利用準備
6-3-3 tymon/jwt-authの利用方法
6-3-4 トークンの発行
6-4 OAuthクライアントによる認証・認可
6-4-1 Socialite
6-4-2 GitHub OAuth認証
6-4-3 動作拡張
6-4-4 OAuthドライバの追加
6-5 認可処理
6-5-1 認可処理を理解する
6-5-2 認可処理
6-5-3 Bladeテンプレートによる認可処理
Chapter 7 イベントとキューによる処理の分離
7-1 イベント
7-1-1 イベントの基本
7-1-2 イベントの作成
7-1-3 イベントを利用した堅実なオブザーバーパターン
7-1-4 イベントのキャンセル
7-1-5 非同期イベントを利用する分離パターン
7-2 キュー
7-2-1 キューの基本
7-2-2 非同期実行ドライバの準備(Queueドライバ)
7-2-3 キューの仕様
7-2-4 キューによるPDFファイル出力パターン
7-2-5 Supervisorによる常駐プログラムパターン
7-2-6 手軽な分散処理パターン
7-3 イベントとキューによるCQRS
7-3-1 CQRS(コマンドクエリ責務分離)
7-3-2 アプリケーション仕様
7-3-3 アプリケーション実装の準備
7-3-4 口コミ登録機能の実装
7-3-5 口コミ投稿コントローラ実装
7-3-6 リスナークラスによるElasticsearch操作
7-3-7 Commandの実行・Queryの実装
Chapter 8 コンソールアプリケーション
8-1 Commandの基礎
8-1-1 クロージャによるCommandの作成
8-1-2 クラスによるCommandの作成
8-1-3 Commandへの入力
8-1-4 Commandからの出力
8-1-5 Commandの実行
8-2 Commandの実装
8-2-1 サンプル実装の仕様
8-2-2 Commandの生成
8-2-3 ユースケースクラスとサービスクラスの分離
8-2-4 ユースケースクラスの雛形作成
8-2-5 サービスクラスの実装
8-2-6 ユースケースクラスの実装
8-2-7 Commandクラスの仕上げ
8-3 バッチ処理の実装
8-3-1 バッチ処理の仕様
8-3-2 Commandクラスの実装
8-3-3 ユースケースクラスの実装
8-3-4 Commandクラスの仕上げ
8-3-5 バッチ処理のログ出力
8-3-6 スケジュールタスクによるバッチ処理実行
Chapter 9 テスト
9-1 ユニットテスト
9-1-1 テスト対象クラス
9-1-2 テストクラスの生成
9-1-3 テストメソッドの実装
9-1-4 データプロバイダの活用
9-1-5 例外のテスト
9-1-6 テストの前処理・後処理
9-1-7 テストの設定
9-2 データベーステスト
9-2-1 テスト対象のテーブルとクラス
9-2-2 データベーステストの基礎
9-2-3 Eloquentクラスのテスト
9-2-4 サービスクラスのテスト
9-2-5 モックによるテスト(サービスクラス)
9-3 WebAPIテスト
9-3-1 WebAPIテスト機能
9-3-2 テスト対象のAPI
9-3-3 APIテストの実装
9-3-4 WebAPIテストに便利な機能
Chapter 10 エラーハンドリングとログの活用
10-1 エラーハンドリング
10-1-1 エラー表示
10-1-2 エラーの種別
10-1-3 エラーハンドリングの基本
10-1-4 Fluentdの活用
10-1-5 例外の描画テンプレート変更
10-1-6 エラーハンドリングパターン
10-2 ログ活用パターン
10-2-1 ログの基本
10-2-2 ログ出力設定
10-2-3 Elasticsearchによるカスタムログドライバ実装
第三部 アプリケーション開発手法
Chapter 11 テスト駆動開発の実践
11-1 テスト駆動開発とは
11-1-1 コツはできるだけ小さく
11-1-2 サンプルアプリケーション仕様
11-1-3 データベース仕様
11-1-4 APIエンドポイント
11-2 APIエンドポイントの作成
11-2-1 アプリケーションの作成・事前準備
11-2-2 最初のテスト
11-2-3 テストメソッドに何をどのように書くか
11-2-4 最低限の実装
11-2-5 2つ目以降のテスト
11-2-6 1つのテストメソッドに検証は1つの原則
11-2-7 テストコードの確認
11-3 テストに備えるデータベース設定
11-3-1 データベース設定
11-3-2 マイグレーション・モデル・ファクトリ
11-3-3 初期データ投入用シーダーの準備
11-4 データベーステスト
11-4-1 テスト用トレイトの利用・初期データの投入
11-4-2 データベースが絡むテスト
11-4-3 仮実装で素早くテストを成功させる
11-4-4 最初のリファクタリング
11-4-5 返却値の内容を検証
11-4-6 成功が分かっているテストの追加
11-4-7 データ追加の検証
11-4-8 既存テストの修正
11-4-9 バリデーションテスト
11-5 リファクタリングユースケース
11-5-1 そろそろコントローラを使う
11-5-2 フレームワークの標準に寄せていくリファクタリング①
11-5-3 正確なテストが書けない時の対処法
11-5-4 フレームワークの標準に寄せていくリファクタリング②
11-5-5 サービスクラスへの分離
INDEX
謝辞
著者紹介
Chapter 1 Laravelの概要
1-1 Laravelとは
1-1-1 Laravelの特徴
1-1-2 開発情報
1-2 環境構築
1-2-1 Laravel Sailを利用した環境構築
1-2-2 Homesteadを利用した環境構築
1-3 最初のアプリケーション
1-3-1 Laravelのディレクトリ構成
1-3-2 Welcomeページの処理
1-3-3 はじめてのページ
1-3-4 はじめてのテストコード
1-3-5 ユーザー登録の実装
1-3-6 ユーザー認証
1-3-7 イベント
Chapter 2 Laravelのアーキテクチャ
2-1 ライフサイクル
2-1-1 Laravelアプリケーション実行の流れ
2-1-2 エントリポイント
2-1-3 HTTPカーネル
2-1-4 ルータ
2-1-5 ミドルウェア
2-1-6 コントローラ
2-2 サービスコンテナ
2-2-1 サービスコンテナとは
2-2-2 バインドと解決
2-2-3 バインド
2-2-4 解決
2-2-5 DIとサービスコンテナ
2-2-6 ファサード
2-3 サービスプロバイダ
2-3-1 サービスプロバイダの基本的な動作
2-3-2 DeferrableProviderインターフェースの遅延実行
2-4 コントラクト
2-4-1 コントラクトの基本
2-4-2 コントラクトを利用した機能の差し替え
Chapter 3 アプリケーションアーキテクチャ
3-1 MVCとADR
3-1-1 MVC(Model View Controller)
3-1-2 ADR(Action Domain Responder)
3-2 アーキテクチャへの入口
3-2-1 フレームワークとアーキテクチャ設計
3-2-2 アーキテクチャ設計のポイント
3-2-3 レイヤードアーキテクチャ
3-2-4 レイヤードアーキテクチャの一歩先の世界
第二部 実践パターン
Chapter 4 HTTPリクエストとレスポンス
4-1 リクエストハンドリング
4-1-1 リクエストの取得
4-1-2 Requestファサード
4-1-3 Requestオブジェクト
4-1-4 フォームリクエスト
4-2 バリデーション
4-2-1 バリデーションルールの指定方法
4-2-2 バリデーションルール
4-2-3 バリデーションの利用
4-2-4 バリデーション失敗時の処理
4-2-5 ルールのカスタマイズ
4-3 レスポンス
4-3-1 さまざまなレスポンス
4-3-2 リソースクラスを組み合わせたREST APIレスポンスパターン
4-4 ミドルウェア
4-4-1 ミドルウェアの基本
4-4-2 デフォルトで用意されているミドルウェア
4-4-3 独自ミドルウェアの実装
Chapter 5 データベース
5-1 マイグレーション
5-1-1 マイグレーション処理の流れ
5-1-2 マイグレーションファイルの作成
5-1-3 定義の記述
5-1-4 マイグレーションの実行とロールバック
5-2 シーダー
5-2-1 シーダーの作成
5-2-2 シーダークラスを利用するための設定
5-2-3 シーディングの実行
5-2-4 Fakerの利用
5-2-5 Factoryを利用する例
5-3 Eloquent
5-3-1 クラスの作成
5-3-2 規約とプロパティ
5-3-3 データ検索・データ更新の基本
5-3-4 データ操作の応用
5-3-5 関連性を持つテーブル群の値をまとめて操作する(リレーション)
5-3-6 実行されるSQLの確認
5-4 クエリビルダ
5-4-1 クエリビルダの書式
5-4-2 クエリビルダの取得
5-4-3 処理対象や内容の特定
5-4-4 クエリの実行
5-4-5 トランザクションとテーブルロック
5-4-6 ベーシックなデータ操作
5-5 リポジトリパターン
5-5-1 リポジトリパターンの概要
5-5-2 リポジトリパターンの実装
5-5-3 リファクタリング
Chapter 6 認証と認可
6-1 セッションを利用した認証
6-1-1 認証を支えるクラスとその機能
6-1-2 認証処理を理解する
6-1-3 データベース・セッションによる認証処理
6-1-4 フォーム認証への適用
6-1-5 認証処理のカスタマイズ
6-1-6 パスワードリセット
6-2 トークン認証
6-2-1 api_tokenを保持するテーブルの作成
6-2-2 シーダーを用いたレコードの作成
6-2-3 独自認証プロバイダの作成
6-2-4 トークン認証の利用方法
6-3 JWT認証
6-3-1 tymon/jwt-authのインストール
6-3-2 tymon/jwt-authの利用準備
6-3-3 tymon/jwt-authの利用方法
6-3-4 トークンの発行
6-4 OAuthクライアントによる認証・認可
6-4-1 Socialite
6-4-2 GitHub OAuth認証
6-4-3 動作拡張
6-4-4 OAuthドライバの追加
6-5 認可処理
6-5-1 認可処理を理解する
6-5-2 認可処理
6-5-3 Bladeテンプレートによる認可処理
Chapter 7 イベントとキューによる処理の分離
7-1 イベント
7-1-1 イベントの基本
7-1-2 イベントの作成
7-1-3 イベントを利用した堅実なオブザーバーパターン
7-1-4 イベントのキャンセル
7-1-5 非同期イベントを利用する分離パターン
7-2 キュー
7-2-1 キューの基本
7-2-2 非同期実行ドライバの準備(Queueドライバ)
7-2-3 キューの仕様
7-2-4 キューによるPDFファイル出力パターン
7-2-5 Supervisorによる常駐プログラムパターン
7-2-6 手軽な分散処理パターン
7-3 イベントとキューによるCQRS
7-3-1 CQRS(コマンドクエリ責務分離)
7-3-2 アプリケーション仕様
7-3-3 アプリケーション実装の準備
7-3-4 口コミ登録機能の実装
7-3-5 口コミ投稿コントローラ実装
7-3-6 リスナークラスによるElasticsearch操作
7-3-7 Commandの実行・Queryの実装
Chapter 8 コンソールアプリケーション
8-1 Commandの基礎
8-1-1 クロージャによるCommandの作成
8-1-2 クラスによるCommandの作成
8-1-3 Commandへの入力
8-1-4 Commandからの出力
8-1-5 Commandの実行
8-2 Commandの実装
8-2-1 サンプル実装の仕様
8-2-2 Commandの生成
8-2-3 ユースケースクラスとサービスクラスの分離
8-2-4 ユースケースクラスの雛形作成
8-2-5 サービスクラスの実装
8-2-6 ユースケースクラスの実装
8-2-7 Commandクラスの仕上げ
8-3 バッチ処理の実装
8-3-1 バッチ処理の仕様
8-3-2 Commandクラスの実装
8-3-3 ユースケースクラスの実装
8-3-4 Commandクラスの仕上げ
8-3-5 バッチ処理のログ出力
8-3-6 スケジュールタスクによるバッチ処理実行
Chapter 9 テスト
9-1 ユニットテスト
9-1-1 テスト対象クラス
9-1-2 テストクラスの生成
9-1-3 テストメソッドの実装
9-1-4 データプロバイダの活用
9-1-5 例外のテスト
9-1-6 テストの前処理・後処理
9-1-7 テストの設定
9-2 データベーステスト
9-2-1 テスト対象のテーブルとクラス
9-2-2 データベーステストの基礎
9-2-3 Eloquentクラスのテスト
9-2-4 サービスクラスのテスト
9-2-5 モックによるテスト(サービスクラス)
9-3 WebAPIテスト
9-3-1 WebAPIテスト機能
9-3-2 テスト対象のAPI
9-3-3 APIテストの実装
9-3-4 WebAPIテストに便利な機能
Chapter 10 エラーハンドリングとログの活用
10-1 エラーハンドリング
10-1-1 エラー表示
10-1-2 エラーの種別
10-1-3 エラーハンドリングの基本
10-1-4 Fluentdの活用
10-1-5 例外の描画テンプレート変更
10-1-6 エラーハンドリングパターン
10-2 ログ活用パターン
10-2-1 ログの基本
10-2-2 ログ出力設定
10-2-3 Elasticsearchによるカスタムログドライバ実装
第三部 アプリケーション開発手法
Chapter 11 テスト駆動開発の実践
11-1 テスト駆動開発とは
11-1-1 コツはできるだけ小さく
11-1-2 サンプルアプリケーション仕様
11-1-3 データベース仕様
11-1-4 APIエンドポイント
11-2 APIエンドポイントの作成
11-2-1 アプリケーションの作成・事前準備
11-2-2 最初のテスト
11-2-3 テストメソッドに何をどのように書くか
11-2-4 最低限の実装
11-2-5 2つ目以降のテスト
11-2-6 1つのテストメソッドに検証は1つの原則
11-2-7 テストコードの確認
11-3 テストに備えるデータベース設定
11-3-1 データベース設定
11-3-2 マイグレーション・モデル・ファクトリ
11-3-3 初期データ投入用シーダーの準備
11-4 データベーステスト
11-4-1 テスト用トレイトの利用・初期データの投入
11-4-2 データベースが絡むテスト
11-4-3 仮実装で素早くテストを成功させる
11-4-4 最初のリファクタリング
11-4-5 返却値の内容を検証
11-4-6 成功が分かっているテストの追加
11-4-7 データ追加の検証
11-4-8 既存テストの修正
11-4-9 バリデーションテスト
11-5 リファクタリングユースケース
11-5-1 そろそろコントローラを使う
11-5-2 フレームワークの標準に寄せていくリファクタリング①
11-5-3 正確なテストが書けない時の対処法
11-5-4 フレームワークの標準に寄せていくリファクタリング②
11-5-5 サービスクラスへの分離
INDEX
謝辞
著者紹介
著者情報
竹澤 有貴
スターフェスティバル株式会社所属。PHP、Go、Scalaをメインにデータ解析基盤、プラットフォーム開発およびエンジニアマネジメントなどを手がけている。国内PHPコミュニティやカンファレンスなどで講演を行っている。著書は『Laravelエキスパート養成読本』(技術評論社)、『Laravelリファレンス』(インプレス)、『PHPフレームワークLaravel Webアプリケーション開発 バージョン5.5LTS対応』(ソシム)など。ブログ:「ytake blog」(https://blog.ytake.jp.net/)。
竹澤, 有貴
栗生 和明
ディップ株式会社所属。テックリードとしてPHPやGoなどを利用したプロダクト開発および開発マネジメントを担当。エンジニア採用や組織開発にも携わっている。Laravel Meetup Tokyoスタッフ。『Laravelリファレンス』(インプレス)の査読を担当。著書は『PHPフレームワークLaravel Webアプリケーション開発 バージョン5.5LTS対応』(ソシム)。ブログ:「ヒビノログ」(https://blog.songs-inside.com/)。
栗生, 和明
新原 雅司
1×1株式会社代表取締役。PHPをメインにWebシステムの開発や技術サポートを主業務としている。技術イベントでの講演や「PHPの現場」というPodcastの運営を行っている。主な著書は『Laravelリファレンス』(インプレス)、『サーバ/インフラエンジニア養成読本DevOps編』『Laravelエキスパート養成読本』(いずれも共著/技術評論社)、『PHPフレームワークLaravel Webアプリケーション開発 バージョン5.5LTS対応』(ソシム)など。ブログ:「Shin x blog」(https://blog.shin1x1.com/)
新原, 雅司
大村 創太郎
大阪を拠点に、主に業務系のWebデータベースシステムの開発・運用に従事。著書は『PHPエンジニア養成読本』(技術評論社)、『Laravelリファレンス』(インプレス)、『PHPフレームワークLaravel Webアプリケーション開発 バージョン5.5LTS対応』(ソシム)。ブログ:「A Small, Good Thing」(http://blog.omoon.org/)。
大村, 創太郎