PHPマイクロフレームワーク Slim Webアプリケーション開発
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 エラー表示切り替えコードの変更 おわりに 索引 著者/監修者プロフィール