SHOEISHA iD

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

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

PHPパッケージ管理ツール「Composer」入門

Composerを使ってPHPのプロジェクトを管理する

PHPパッケージ管理ツール「Composer」入門 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Autoloadを設定する

 Composerで管理する上でAutoloadの機能をどのように利用するかは非常に重要です。Composerを使って管理されているライブラリは、リスト8のような使い方になり、個別のクラス、関数などを使うためにrequireは行いません。

 この機能はPHPでのAutoloadという機能を使って実現されています。

リスト8 Autoloadを利用した必要ライブラリの読込方法
<?php
require_once("vendors/autoload.php");

 Composerを利用したプロジェクトの場合には、Composerが提供するAutoload機能を使って必要なクラスファイルなどを読みこむようにします。その記述ルールには大きく分けて4つあり、リスト9のように指定します。Autoload機能を使う際のプログラムの配置方法によりルールは異なります。ただし、通常は複数のルールでプログラムを記述することはありません。

リスト9 autoloadの指定方法例
{
  "autoload" : {
    "files" : [
        "src/files/functions.php"
    ],
    "classmap" : [
        "src/classmap","src2/classmap"
    ],
    "psr-0" : {
        "Foo\\" : "src/psr0/"
    },
    "psr-4" : {
        "Foo\\" : "src/psr4/main"
    }
  }
}

 新規に作成する場合には、「psr-4」でのルールに沿ったコーディングを推奨します。ただし、既存のプログラムなども考慮した記述ができるようになっています。

files指定

 この指定は、もっとも理解が簡単な記述方法です。ただし、正確にはAutoloadの機能を使ってはいません。ここで指定されたファイルは事前にincludeされてしまいます。従って、必要なくても常に読みこまれるファイルを指定しているのと同じ意味になります。

リスト10 filesを利用した指定例
"files" : [
  "src/files/functions1.php",
  "src/files/functions2.php"
]

classmap指定

 クラス名とファイル名のマップで対応するクラスと、それに必要な読みこむファイルを管理する方法です。実際には、クラスファイルが格納されたフォルダを指定すればComposerが自動的にそのマップを作成します。

 ただし、拡張子が「.php」もしくは「.inc」である必要があります。後述するpsr-0やpsr-4といったコーディング規約(特にフォルダとファイル名に関連する規約)に沿っていなくても構いません。作成されたマップはcomposer/autoload_classmap.phpというファイルに記述されます。マップのキーはクラス名だけ作成されますので、非常に大きなライブラリの場合には大きなマップができあがってしまいます。

リスト11 classmapを利用した指定例
"classmap" : [
  "src/classmap","src2/classmap"
]

psr-0とpsr-4指定

 psr-0とpsr-4とは、PHP-FIGという団体で作成しているPHPのコーディング規約です。コーディング規約にはpsr-0とpsr-4以外にもpsr-1からpsr-3もありますが、Autoloadに関する規約がpsr-0とpsr-4となっているためにComposerではそれらの2つの指定があります。

 psrでは、PHP5.3以上で導入された名前空間つきのクラス構造になっている前提があります(正確には、PHP5.3以前の場合には、PEARなどのようなアンダーバーを利用した擬似的な名前空間もありますが、PHP5.3以上を対象にするためにその説明は省略します)。例えば、リスト12のような\Foo\Hoge\Helloクラスを作成する例で説明します。この場合、psr-0とpsr-4共にHello.phpという名前でファイルを作成する必要があります。

リスト12 名前空間付きのクラスファイル(Hello.php)
<?php
namespace \Foo\Hoge
class Hello{
}

 しかしながら、図3のように、これら2つの方式ではどのようなフォルダ構成で配置できるかが異なります。

図3 psr-0,psr-4におけるフォルダ構造
図3 psr-0,psr-4におけるフォルダ構造

 このときにリスト13のように指定ができます。

リスト13 psr-0とpsr-4での指定の方法
"autoload" : {
  "psr-0" : {
    "Foo\\" : "src/psr0/"
  },
  "psr-4" : {
    "Foo\\" : "src/psr4/main"
  }
}

 つまり、psr-0ではキー値で指定した名前空間(Foo)がsrc/psr0の配下にあるという意味になり、psr-4ではキー値で指定した名前空間(Foo)がsrc/psr4/mainというフォルダであるという意味になります。

 psr-4では、実際の名前空間とフォルダ構造を合わせないことも合わせることもできるので、この方式に合わせる方が作りやすい構造が可能です。従って、自分のプログラムを配置する場合には、あらかじめpsr-4に従ってプログラムを配置できるように設計をしておきましょう。

最後に

 今回は、自作ライブラリを作る想定でのcomposer.jsonの設定方法を説明しました。実際に制作者側の立場で設定を見るとより理解が深まることと思います。

 また、ComposerのAutoload機能はPHP自体の機能や、フレームワークの理解のためにも必要になってくる機能です。次回は実際に第三者へライブラリ提供を想定したプロジェクトの公開方法を紹介します。

参考資料

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
PHPパッケージ管理ツール「Composer」入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7887 2014/07/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング