SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

軽量PHPフレームワークSlimを習得しよう

はじめてのSlimアプリで「Hello World」を表示させよう~動作原理を理解する

軽量PHPフレームワークSlimを習得しよう 第2回

Slimの動作原理

 無事「Hello World!」が表示されたところで、リスト2の内容を解説しながら、Slimの動作原理を紹介していきます。

autoload.phpの読み込み

 PHPによるシステム開発の場合、今ではクラスを利用しないことの方がまれです。ましてやフレームワークを利用するならなおさらです。Slimを利用する場合も同様に、さまざまなクラスを使います。これらのクラスは、通常は名前空間が付与されており、ファイルの上部でuse宣言を記述します。さらに、それらのクラスが記述されたファイル類を自動で読み込むための「オートロード」を利用します※。

※PHPの名前空間とオートロードに関しては、拙記事「PHPの名前空間とクラス名のエイリアス、オートロード 」を参照してください

 実は、Composerを利用した場合、このオートロードのためのファイルautoload.phpがvendorフォルダ直下に自動生成されるようになっています。そのため、まずはこのautoload.phpをrequire_onceします。それがリスト2の(1)にあたる以下のコードです。

require_once("../vendor/autoload.php");  // (1)

Slimによる実行はAppクラスのrun()メソッド

 Slimによるアプリ実行の大原則は、以下の2ステップです。

  1. SlimのAppクラスをnewする。
  2. Appクラスのrun()メソッドを実行する。

 1.に対応するのがリスト2の(2)にあたる以下のコードです。

$app = new App();  // (2)

 Appクラスというのは、完全修飾名では
\Slim\App
であり、Slimを使ったアプリにおいて一番中心となるクラスです。すべての処理がこのAppクラスを通して行われます。このクラスを、事前にAppという別名でuse宣言しておき、(2)でnewし、$appという変数に格納しています。

 2.に対応するのが、リスト2の(6)にあたる以下のコードです。

$app->run();  // (6)

 Appをnewした変数$appに対してメソッドrun()を実行することで、Slimが処理を行い、レスポンスが返されます。

Slimのルーティング登録方法

 Slimを使ったアプリでは、.htaccessの設定によって、どのURLもindex.phpが実行される仕組みとなっています。では、URLの違いにより処理を変える仕組みはどのようになっているのでしょうか。

 Slimでは、Appクラスをnewし、run()メソッドを実行する間、リスト2で言えば、(2)と(6)の間に、URLに対応して実行する関数を登録する処理を記述する約束となっています。これがルーティングの登録です。これは、以下の構文です。

[構文]ルーティング登録
$app->get(ルーティングパターン, 対応するコールバック関数);

 リスト2ではルーティングパターンとして
/hello
を登録します。そのコードが(3)にあたる以下のコードです。

$app->get("/hello",  // (3)
	:
);

 このパターンは、このindex.phpが実行されるポイントからの相対パスで記述します。index.phpが実行されるURLは

  • http://localhost/firstslim/src/public/

 です。これに上記ルーティングパターンを付与したURLである

  • http://localhost/firstslim/src/public/hello

 へのアクセスがあった場合、続くコールバック関数が実行される仕組みです。リスト2では(4)にあたる以下のコードがコールバック関数にあたります。

function(Request $request, Response $response, array $args): void  // (4)
{
	:
}

 ここでは無名関数として記述しています。コールバック関数のシグネチャは、以下の通りです。

[構文]ルーティングコールバック関数
function(Request $request, Response $response, array $args): void
または
function(Request $request, Response $response, array $args): Response

 シグネチャとして2種類ありますが、引数は共通して表1の3個です。

表1:ルーティング登録のコールバック関数の引数
  引数名 引数の型   内容   
第1 $request Psr\Http\Message\ServerRequestInterface 現在のHTTPリクエストに関する情報を含んだオブジェクト。
第2 $response Psr\Http\Message\ResponseInterface 現在のHTTPレスポンスに関する情報を含んだオブジェクト。
第3 $args array ルーティングにおいてプレースホルダ(次回以降解説)を使用する場合、その情報が含まれた配列。

 シグネチャの違いは、戻り値の違いです。戻り値は原則不要ですが、\Psr\Http\Message\ResponseInterfaceを戻り値としてもかまいません。リスト2では戻り値の不要なパターンを紹介していますが、連載中には戻り値が必要なパターンも紹介していきます。

 リスト2のコールバック関数内の処理は(5)にあたる以下のコードです。

print("<h1>Hello World!</h1>");  // (5)

 URL http://localhost/firstslim/src/public/hello にアクセスがあった場合に実際に実行される処理がこの(5)の1行であり、これがブラウザに「Hello World!」と表示させている本体です。

Slimの動作原理のまとめ

 ここまでの説明、つまり、Slimの動作原理を図としてまとめると図4になります。

図4:Slimの動作原理
図4:Slimの動作原理

 Appクラスをnewした$appに対して、get()メソッドを使って、ルーティングパターンとそれに対応するコールバック関数を登録します。その上で、あるURLでアクセスがあった場合、run()メソッド実行時に該当するURLに対応するコールバック関数が実行される仕組みなのです。

 ですので、run()メソッド実行までに、必要なルーティングパターンはすべて登録しておく必要があります。もし登録のないURLでアクセスがあった場合、Slimは404エラーとして、図5のような画面を表示します。

図5:登録のないURLでアクセスした場合の画面
図5:登録のないURLでアクセスした場合の画面

 これは、試しにURL http://localhost/firstslim/src/public/goodevening でアクセスした場合の画面です。このような画面が表示された場合は、get()メソッドを使ってルーティング登録を行っている箇所を見直してください。

まとめ

 今回は、実際にSlimを動作させるためのプロジェクトの作成と、初めてのSlimアプリとして「Hello World!」の表示を行いました。さらに、そのサンプルを使ってSlimの動作原理、特にルーティング登録を紹介しました。

 次回は、このルーティング登録のバリエーションを増やしていきます。ルーティング登録はget()メソッド以外にもさまざまな方法があります。それらを紹介していきます。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
軽量PHPフレームワークSlimを習得しよう連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11330 2019/01/28 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー