PHPマイクロフレームワーク「Slim」を使ったWebアプリケーション開発のすべてを一冊で学べる!
Slim(スリム)はPHPのフレームワークのひとつです。
PHPのフレームワークではLaravel(ララベル)が人気ですが、機能豊富で重厚なLaravelと比べると、Slimが提供する機能はとてもシンプルです。
本書では、Webアプリケーション開発に興味を持つ人たちを対象に、「そもそもフレームワークとは何なのか」という基本的な話題から、「本運用環境」で稼働させるまでを、各種開発ツールを活用しながら、ステップ・バイ・ステップでていねいに解説していきます。
本書は、導入編、基本編、実践準備編、実践編という4つの編から構成されています。
導入編では、XAMPPとComposerを導入して学習環境を構築し、Slimアプリケーションの動作原理を学びます。
基本編では、一つのサンプルアプリの作成を通して、MVCアーキテクチャに従ったSlimアプリケーションの開発手順を学びます。ルーティング、テンプレートエンジンTwig、外部コンテナPHP-DI、コントローラクラス、ミドルウェアなど、Slimアプリケーションの開発に欠かせない基本事項を学んでゆきます。
実践準備編では、いったんいったんSlimの解説から離れ、本運用を意識した開発環境の構築を学びます。GitHubを利用したソースコードの管理、VagrantとVirtualBoxを使った仮想環境の構築、本書で本運用環境とするHerokuなどについて学んでゆきます。
実践編では、実戦準備編で用意した開発環境上に実際にSlimを利用したMVCアプリケーションを作成し、Heroku上で稼働させる手順を学びます。データベース処理、MVCアーキテクチャの導入、エラーや例外を適切に処理するためのエラーハンドラの活用方法、本運用環境であるHerokuへのデプロイ手順を学んでゆきます。
読者特典として、PHPUnitを使った単体テストの導入方法を扱ったボーナスコンテンツをPDFで提供します。
PHPマイクロフレームワーク「Slim」を使ったWebアプリケーション開発のすべてを一冊で学べる!本番環境を想定した環境構築やデプロイ、運用まで学習できる!
はじめに
本書の使い方
導入編
第1章 PHPフレームワークSlimとは
1-1 フレームワークとは
1-1-1 フレームワークとは何か
1-1-2 フレームワークとライブラリの違い
1-1-3 フレームワークを使うメリットとデメリット
1-2 サーバサイドWeb開発フレームワークの歴史
1-2-1 最初はJava用のフレームワークから
1-2-2 パラダイムシフトはRubyから
1-2-3 PHP用フレームワークの歴史
1-3 軽量フレームワークSlimの特徴
1-3-1 フルスタックフレームワークの特性
1-3-2 軽量フレームワークである
1-3-3 Slimの特徴
1-4 MVCアーキテクチャにおけるSlimのメリット
1-4-1 MVCアーキテクチャとは
1-4-2 MVCアーキテクチャを実現する4種の神器
1-4-3 SlimとMVCとの関係
1-5 本書の役割
1-5-1 本書が目指すところ
1-5-2 本書を学習する上での前提知識
1-5-3 本書の構成
第2章 Slim動作環境の構築
2-1 XAMPPのインストール
2-1-1 XAMPPとは
2-1-2 XAMPPのインストール
2-1-3 Apacheの起動と確認
2-1-4 XAMPPでのドキュメントルート
2-2 Composerのインストール
2-2-1 Composerとは
2-2-2 WindowsへのComposerのインストール
2-2-3 macOSへのComposerのインストール
2-3 ダウンロードサンプルの扱い
2-3-1 Samples.zipについて
2-3-2 スケルトンプロジェクトについて
2-3-3 完成形ソースコード(3章から8章)について
2-3-4 その他の完成形ソースコード(9章以降)について
2-3-5 特典PDF(テスティング)について
第3章 はじめてのSlimアプリと動作原理
3-1 はじめてのSlimプロジェクトを作成する
3-1-1 Slimプロジェクトの作成手順
3-1-2 はじめてのSlimアプリケーションの動作確認
3-2 Slimプロジェクトの作成方法
3-2-1 Slimのフォルダ構成
3-2-2 ComposerコマンドとSlimパッケージの配置
3-2-3 .htaccessの記述と役割
3-2-4 Slimのindex.php
3-2-5 クラスファイルを自動で読み込むautoload.php
3-3 Slimの動作原理
3-3-1 Slimの動作に必要なルーティング登録
3-3-2 ルーティングコールバック関数
3-3-3 Slimの動作とルーティング登録の関係
3-4 Composerの動作と使い方
3-4-1 composer.jsonの記述とセマンティックバージョンニング
3-4-2 既存のcomposer.jsonを利用する
3-4-3 Composerのその他のコマンド
基本編
第4章 Slimのルーティング登録
4-1 リクエストの種類に合わせたルーティング登録
4-1-1 リクエストメソッドごとのルーティング登録
4-1-2 サンプルプロジェクトの作成
4-1-3 POST処理のルーティング登録
4-1-4 各種HTTPメソッドでアクセス可能なPostman
4-2 ServerRequestInterfaceとResponseInterface
4-2-1 リクエストパラメータの取得
4-2-2 引数$requestの正体
4-2-3 引数$responseの正体
4-2-4 PSR-7の実装
4-2-5 コールバック関数中のprint()の正体
4-3 複数のHTTPメソッドに対応できるルーティング登録
4-3-1 すべてのメソッドに対応したany()
4-3-2 アクセスするHTTPメソッドを選べるmap()
4-4 ルーティング登録を便利にする仕組み三種盛り
4-4-1 ルーティングパターンにベースパスを設定する
4-4-2 ルーティングパターンに階層構造を持たせる
4-4-3 ルーティングに名前をつける
4-5 ルーティングの外部ファイル化
4-5-1 index.phpの肥大化を避けるために
4-5-2 ルーティングファイルの分割
4-6 ルーティングプレースホルダ
4-6-1 ルーティングプレースホルダの設定
4-6-2 プレースホルダは複数記述できる
4-6-3 オプションプレースホルダ
4-7 リダイレクト
4-7-1 ルーティング登録としてのリダイレクト
4-7-2 コールバック関数内でリダイレクト
第5章 Slimにおけるビュー
5-1 Slimにおけるビューの扱いとJSONデータ送信
5-1-1 Slimにおけるビューはレスポンスオブジェクト
5-1-2 サンプルプロジェクトの作成
5-1-3 SlimでJSONデータを送信する方法
5-2 テンプレートエンジンTwigとの連携
5-2-1 HTMLコードを分離できるテンプレートエンジン
5-2-2 PHPでのテンプレートエンジン
5-2-3 Slimで利用するテンプレートエンジン
5-2-4 SlimでのTwigを利用して画面を表示させる
5-2-5 SlimでのTwig利用の基本手順
5-2-6 Twigの環境設定
5-3 テンプレート変数
5-3-1 テンプレート変数の基本は波括弧2個
5-3-2 テンプレート変数のドットアクセス
5-3-3 テンプレート変数アクセスのルール
5-3-4 コメント
5-4 フィルタ
5-4-1 フィルタはパイプを記述
5-4-2 Twigのフィルタ一覧
5-4-3 複数のフィルタを併用する
5-5 条件分岐
5-5-1 条件分岐を使う
5-5-2 条件中のissetやemptyは不要
5-5-3 論理演算子は英単語
5-6 ループ
5-6-1 配列のループ
5-6-2 連想配列のループ
5-6-3 カウンタ変数を使ったループ
5-6-4 ループのelseブロック
5-6-5 ループ変数
5-7 その他の便利なTwig構文三種盛り
5-7-1 テンプレート内変数を作成するset
5-7-2 テンプレートの共通部分を別ファイルにできるinclude
5-7-3 変数の内容を表示するdump
第6章 コンテナとDI
6-1 コンテナとその使い方の基本
6-1-1 コンテナとは
6-1-2 サンプルプロジェクトの作成
6-1-3 コンテナの利用に必要なパッケージ
6-1-4 Slimでコンテナを利用する方法
6-1-5 コンテナへの登録方法
6-1-6 コンテナからインスタンスを取得する方法
6-2 Slimとコンテナの関係
6-2-1 get()メソッドの正体
6-2-2 Slimが連携するコンテナはPSR-11
6-3 コンテナを経由した引数
6-3-1 インスタンス生成処理関数に引数を設定する
6-3-2 コンテナ経由で引数を渡すメソッドcall()
6-3-3 call()の第2引数は必ず配列
6-4 Slimでログを扱う方法
6-4-1 SlimではMonologを利用する
6-4-2 Monologの準備3ステップ
6-4-3 ログに書き出す際はログレベルを意識する
6-4-4 Monologの標準ログフォーマット
6-5 コンテナの本当の役割
6-5-1 クラスを直接newすることの問題点
6-5-2 コンテナと依存性注入
第7章 コントローラクラス
7-1 コールバック関数の問題点とコントローラクラス
7-1-1 コールバック関数は肥大化する
7-1-2 サンプルプロジェクトの作成
7-1-3 コントローラクラスの作り方
7-1-4 コントローラクラスのルーティング登録
7-1-5 オートロードの設定
7-1-6 コントローラクラスには複数のメソッドを記述できる
7-2 コントローラクラスとコンテナの連携
7-2-1 コントローラクラス内の$thisはコンテナではない
7-2-2 コンストラクタの引数としてコンテナを受け取る
7-2-3 コントローラクラスでのコンテナの扱い
第8章 ミドルウェア
8-1 ミドルウェアとその作り方
8-1-1 ミドルウェアとは
8-1-2 サンプルプロジェクトの作成
8-1-3 ミドルウェアの作り方
8-1-4 ミドルウェアの利用方法
8-2 ミドルウェア処理の位置
8-2-1 リクエスト処理の前に挿入する場合
8-2-2 処理の挿入位置はhandle()メソッドの記述位置
8-2-3 handle()メソッドの正体
8-2-4 リクエスト処理前後の両方に処理を挿入
8-2-5 ミドルウェアのチェイン
8-3 ミドルウェアにデータを渡す方法
8-3-1 ミドルウェアでコンテナを利用するには
8-3-2 ミドルウェアにコンテナを渡すには
8-3-3 コンテナ以外のデータも渡せるコンストラクタ
8-4 ミドルウェア設定のバリエーション
8-4-1 ルーティンググループにミドルウェアを設定
8-4-2 アプリケーション全体にミドルウェアを設定
実践準備編
第9章 GitHubの利用
9-1 バージョン管理とGit
9-1-1 バージョン管理システムとは
9-1-2 集中型バージョン管理システム
9-1-3 分散型バージョン管理システム
9-1-4 Gitとは
9-2 GitHub
9-2-1 GitホスティングサービスとGitHub
9-2-2 GitHubのアカウント作成
9-2-3 GitHubのリポジトリ作成
9-2-4 GitHubデスクトップの導入
9-2-5 GitHubデスクトップでリポジトリをクローンする
9-3 GitHubを使った基本の開発手順
9-3-1 リポジトリにSlimプロジェクトを作成する
9-3-2 管理対象から除外するファイルを設定する.gitignore
9-3-3 GitHubデスクトップでコミットとプッシュ
9-3-4 GitHubを利用した基本の作業ルーティン
9-4 ブランチとプルリクエスト
9-4-1 ブランチとは
9-4-2 ブランチを作ってみる
9-4-3 ブランチにファイルを追加する
9-4-4 ブランチのファイルを編集する
9-4-5 マージを簡単に行うプルリクエスト
9-4-6 3種のマージ方法
9-4-7 ブランチを削除する
9-4-8 GitHub利用のワークフロー
第10章 仮想環境の利用
10-1 仮想環境
10-1-1 XAMPPの問題点
10-1-2 仮想環境とは
10-1-3 2種の仮想環境
10-1-4 仮想環境のメリット
10-1-5 Webシステム開発で威力を発揮するホスト型仮想環境
10-1-6 ホスト型仮想化アプリケーション
10-1-7 本章で構築する環境
10-2 VirtualBox
10-2-1 VirtualBoxのインストール
10-2-2 VirtualBoxでのVM作成
10-3 Vagrant
10-3-1 Vagrantとは
10-3-2 Vagrantのインストール
10-3-3 Vagrantfileを作成する
10-3-4 Vagrantfileを記述する
10-3-5 VagrantでVMを起動する
10-3-6 VagrantでのVMの停止と破棄
10-4 仮想環境内の構築と設定
10-4-1 仮想環境にログインする
10-4-2 管理者権限ユーザに切り替える
10-4-3 CentOSのパッケージを管理するyumコマンド
10-4-4 Apacheのインストール
10-4-5 Apacheの起動
10-4-6 Apacheのサービス登録
10-4-7 PHPのインストール
10-5 Apacheの設定変更
10-5-1 SocymFirstGitSlimをSocymSlimVBoxに配置
10-5-2 Apacheの設定ファイルの変更
10-5-3 SSH接続先のテキストファイルを編集するvi
10-5-4 ドキュメントルートを変更する
10-5-5 .htaccessを有効にする
10-5-6 Apache設定ファイルの確認と再起動
10-6 SocymFirstGitSlimをSocymSlimVBoxで実行する
10-6-1 GitHubで現在の状態を記録するリリース機能
10-6-2 SocymFirstGitSlimのソースコードを変更する
10-6-3 仮想環境で実行されたSlimアプリの確認
第11章 Herokuの利用
11-1 Webアプリケーションの実行環境とHeroku
11-1-1 共有レンタルサーバ
11-1-2 サーバを1台用意する
11-1-3 クラウド
11-1-4 本運用環境を自動構築してくれるHeroku
11-2 Heroku環境の用意
11-2-1 Herokuアカウントの作成
11-2-2 Herokuアプリの作成
11-2-3 Dynoの種類
11-2-4 Herokuの実行環境は自動判定
11-3 GitHub連携とデプロイ
11-3-1 HerokuとGitHubアカウントを連携させる
11-3-2 HerokuアプリとGitHubリポジトリを連携させる
11-3-3 GitHubからデプロイ
11-3-4 Herokuアプリの動作確認とURL
11-3-5 Dynoの内容の確認
11-4 Herokuでのドキュメントルートの変更
11-4-1 Herokuでのエラー確認
11-4-2 socymfirstslimアプリが動作しない原因
11-4-3 Dynoのドキュメントルート変更
実践編
第12章 データベース連携
12-1 仮想環境へのPostgreSQLのインストール
12-1-1 Herokuの標準データベースはPostgreSQL
12-1-2 PostgreSQLのインストール
12-1-3 データベースの初期化と設定
12-1-4 ユーザとデータベースの作成
12-1-5 PostgreSQLへの接続
12-1-6 テーブルの作成
12-1-7 PHPライブラリのインストール
12-2 データベースへの接続と切断と例外処理
12-2-1 実践編用プロジェクトリポジトリの作成とクローン
12-2-2 SocymSlimMVCプロジェクトの作成
12-2-3 会員情報入力画面の作成
12-2-4 Slimアプリでデータベースにアクセスするコード
12-2-5 Slimでのデータベースアクセスの特徴
12-2-6 PDOによるデータベースへの接続
12-2-7 PDO接続のオプション
12-2-8 データベース接続の切断
12-3 データベース処理の基本
12-3-1 PDOによるデータベース処理手順
12-3-2 連番主キーの取得
12-3-3 PDOインスタンスをコンテナから取得
12-4 データ取得処理
12-4-1 データ取得処理コードの記述
12-4-2 PDOによるデータ取得処理手順
12-4-3 結果表が1行の場合
12-4-4 全データ取得メソッド
12-4-5 結果の連想配列から無駄を排除するフェッチモード
第13章 MVCアーキテクチャの導入
13-1 エンティティモデル
13-1-1 エンティティとは
13-1-2 エンティティクラスの作り方
13-1-3 コントローラクラスでのエンティティの使い方
13-1-4 テンプレートでのエンティティの使い方
13-1-5 テンプレートでの非正常系への対応
13-1-6 エンティティを使った詳細表示の動作確認
13-1-7 エンティティモデルのメリット
13-1-8 エンティティと連想配列の組み合わせ
13-1-9 エンティティ+連想配列を使ったリスト画面の作り方
13-1-10 表示リストがない場合への対応
13-2 DAOモデルとMVCアーキテクチャ
13-2-1 コントローラクラスに散在していくSQLとDAOモデル
13-2-2 DAOクラスの作り方
13-2-3 DAOクラスをコントローラから利用する
13-2-4 MVCアーキテクチャの完成とMVCモデルとは
13-2-5 トランザクションと例外処理の扱い
13-2-6 残りのメソッドをDAOと連携させる
13-3 リダイレクト遷移
13-3-1 登録完了時のURL
13-3-2 データベース更新処理後はリダイレクト
第14章 エラーハンドラ
14-1 エラー画面
14-1-1 showMemberDetailの遷移の種類
14-1-2 エラー画面表示ロジックの実装
14-2 Slimでのエラーの扱いとエラーミドルウェア
14-2-1 Slimでのエラーの扱い
14-2-2 Slimのエラーハンドラはミドルウェア
14-2-3 Slimではルーティングもミドルウェア
14-2-4 addErrorMiddleware()の3個の引数
14-3 エラー画面のカスタマイズ
14-3-1 エラー画面をカスタマイズできるエラーレンダラクラス
14-3-2 デフォルトレンダラクラスとのコンボ
14-3-3 例外の種類に応じて表示画面を分岐
14-3-4 手動で例外を発生させる
14-3-5 例外の投げ直しと$logErrorDetails
14-3-6 $isRedirectフラグの真の働き
14-3-7 エラーレンダラに独自例外を組み込む
14-3-8 その他のメソッドのエラー画面表示を集約する
第15章 Herokuでの実稼働
15-1 Herokuでデータベースの利用
15-1-1 HerokuのDyno作成とGitHub連携
15-1-2 Heroku Postgresの導入
15-2 Config VarsとHeroku Postgresへの接続コード
15-2-1 HerokuのConfig Vars
15-2-2 仮想環境へのConfig Varsの追加
15-2-3 $displayErrorDetailsの値もConfig Varsとする
15-2-4 SocymSlimMVCプロジェクトのDB接続情報の変更
15-2-5 エラー表示切り替えコードの変更
おわりに
索引
著者/監修者プロフィール