Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

軽量PHPフレームワークSlimは何が「軽量」なのか?~特徴と環境構築

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/11/05 14:00

 本連載では軽量PHPフレームワークであるSlimを紹介していきます。フレームワークと言えば、重厚長大なもの、いわゆるフルスタックフレームワークが多い中で、あえて軽量フレームワークを取り上げます。軽量ゆえのメリットを味わっていただこうと思います。その第1回である今回は、フレームワークとは何か、Slimとは何か、何がどう軽量なのかといった概要解説とSlimを動かすための環境構築を紹介します。

目次

フレームワークとSlim

 この連載で紹介していくSlimは軽量フレームワークと言われています。Slimの公式サイトでは「a micro framework for PHP」と表現されています。では、何がどう「軽量」なのでしょうか。そもそも、フレームワークとは何なのでしょうか。そこから話を始めたいと思います。

フレームワークとは

 フレームワークは、和訳すると「枠組み」や「骨組み」となります。非常に幅広い意味を持ち、「ビジネスフレームワーク」のように経営戦略や業務改善などの場面でも使われます。

 プログラミングでは、差分開発の土台となるもの、と言えるかもしれません。PHPでもJavaでも、フレームワークを使わずにシステム開発行う場合、PHPの実行ファイル(Javaならばサーブレットクラス)に記述する内容は一連の流れに沿ったものになります。パターン化されていると言ってもいいでしょう。そういった処理パターンの中で、例えば、リクエストパラメータを取得したり、それらにバリデーション処理を加えたりします。また、最後にはHTMLを表示させる(JavaならばJSPに処理を移管する)といった処理も記述します。

 これらは定型的な処理であり、実際にコーディングしていくと、正直面倒くさいと思ったことがあると思います。これらの定型処理は、ほぼ似たような処理にも関わらず、全く同じコードにはなりません。たいていは以前に書いたものをコピー&ペーストして、書き換えることで省力化を図ります。とはいえ、それでも面倒くさいのは確かな上、書き換え忘れによるバグが発生するリスクもあります。

 こういったコーディングスタイルから脱去するために、パターン化された処理の流れと、そこに含まれる定型処理をあらかじめ組み込んだものを用意しておき、それに合う形で独自のコードを記述しはめ込んでいくことで、コーディング効率を上げるツールがフレームワークです(図1)。簡単に言うと、差分コーディングです。

図1:差分コーディングで済むフレームワーク
図1:差分コーディングで済むフレームワーク

 フレームワークは、独自に作ることもできます(独自に作ったフレームワークを通称「オレオレフレームワーク」と言います)。会社によっては社内独自のものを作っておき、それを実開発に使っている場合もあります。

 ただ通常は、そういったフレームワークの作成を専門に行っている企業や有志チームのものを使います。有志チームのものはオープンソースであることが多く、原則無償です。一方、企業のものは有償のものもあります。

 いずれの場合も、オレオレフレームワークにはない利点が多々あります。というのは、オレオレフレームワークの場合は、定型処理をまとめるだけにとどまることが多い一方、オープンソースや有償のフレームワークは、フレームワーク作成に長けた技術者が作っているので、通常のコーディングでは難しい内容のものを簡単に利用できるように工夫していたり、セキュリティにも配慮した構造になっていたりします。

 なので、全ての処理を独自にコーディングするよりは、フレームワークを利用した方が効率的で安全なシステム開発が行えることの方が多いです。

フレームワークはライブラリとは違う

 フレームワークと似て非なるものとしてライブラリがあります。ライブラリもさまざまな機能をまとめて利用できるようになっていますが、これらは差分コーディングとして利用できる形態にはなっていません。あくまで一連の処理の流れはプログラマ側で制御し、その途中途中でライブラリに含まれる便利な関数やクラスを利用します(図2)。

図2:ライブラリの利用イメージ
図2:ライブラリの利用イメージ

 一方、フレームワークは、この処理の流れはプログラマ側では制御しません。フレームワーク側で流れが決まっており、フレームワークが制御します。プログラマはフレームワークの制御に合う形でコーディングを行います。自由度は低くなりますが、コーディングそのものは差分で済むように作られています。

フルスタックフレームワークと軽量フレームワーク

 本連載で扱っていくSlimは、PHP用オープンソースのフレームワークの1つです。PHP用のフレームワークとしては、老舗であるSymfonyCakePHP、最近人気のLaravelなどがあります。これらのフレームワークは、先述のパターン化された処理を差分開発するためのツールだけではなく、データベースからデータを取得する処理を自動化できたり、ログインなどの認証を自動化したりといった、PHPのWebシステムを作成するために必要なほぼ全ての機能が含まれています。このようなフレームワークのことを、「フルスタックフレームワーク」と呼びます。

 これらのフルスタックフレームワークは、確かに機能が豊富であり、作成するシステムによっては大幅な時間短縮になります。その一方で、ほぼ全てのコーディングがフレームワークの約束ごとに従ったものとなるので、その約束ごとをあらかじめ学習しておく必要があります。また、その約束ごとから外れたコーディングが必要になった途端、コーディングの難易度が極端に上がることも多々あります。これは、フレームワークそのものがブラックボックス化して、内部で何が行われているかわからない状態で差分コーディングを行っているのが原因です。

[Note]Laravelの連載開始

 少し宣伝になりますが、Laravelについては、このCodeZineで来月より連載を行います。そちらも合わせて読んでいただければ幸いです。

 このフルスタックフレームワークの対極にあるのが、「軽量フレームワーク」と呼ばれるもので、Slimはその1つです。フレームワークが活躍する部分を限定し、最も面倒くさいところだけを担うようにしています。そのため、フルスタックフレームワークを使う場合に比べてコーディングする量は増えます。一方で、フレームワークがブラックボックス化する部分が少なく、フレームワークに縛られることも少ないため、自由度の高いシステム作成が可能となります。

Slimとは

 では、軽量フレームワークであるSlimの特徴とは何でしょうか。これは、SlimのサイトのドキュメントのTOPページに以下のように記述されています。

 At its core, Slim is a dispatcher that receives an HTTP request, invokes an appropriate callback routine, and returns an HTTP response. That’s it.

 ここに書かれている通り、Slimは、リクエストが送信されるとそれに応じた関数を実行し、レスポンスを返すことを主な目的としたフレームワークです。こういった、Webシステムの基本原理となる、リクエストとレスポンスの制御処理を「HTTPルーティング」処理と言います。つまりSlimは、「HTTPルーティングに特化したフレームワーク」と言えます。

 もちろん、HTTPルーティングだけではなく、他に、実際の処理の前後にフィルタリングの機能を提供する「ミドルウェア」機能や、「エラー処理」機能、処理中に依存するインスタンスを実行時に外部から与えてもらえる「DI(Dependency Injection: 依存性注入)」機能も提供しています。

この連載では

 さて、そのSlimを紹介するこの連載ではまず、Slimのコア機能であるHTTPルーティングを扱っていきます。SlimでHTTPルーティングを実装する方法を一通り紹介した後に、ミドルウェア、エラー処理、DIのそれぞれを紹介していきます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5