Composer の autoload を使う(ローカルライブラリ)

製品パッケージの dist から vendor を丸ごと除外してしまったりすると autoload.php をはじめ実際に使うファイルが含まれないので厳重注意。

メリット

require書いたり依存関係の読み込み順での動作不良の心配がない

設定方法

Packagist への登録は行わずにローカルのオレオレ使用のみの場合

ライブラリの作成

プロジェクト内にディレクトリを作成し、その中にファイルを纏める。

1. 親ディレクトリの作成

作成するライブラリのディレクトリ名をnamespace名にする(必須ではないがその方が混乱しない)

2. 子ディレクトリの作成

Packagist に登録する場合は src ディレクトリの中に入れるのが一般的のようなので、ライブラリのディレクトリ名/src/ の中にファイルを作成する。

3. ファイルの作成

ライブラリ内のファイルには必ず最初に namespace を記述する

ファイル名はclass名と同じにする

<?php
/**
 * My Test Lib
 *
 */

namespace mylib;

class Sample {
	public static function test() {
		echo '<br />__|\○_ヒャッ ε=\_○ノ ホーウ!!' . '<br />' . "\n";
	}
}

composer.json の設定

以下のように autoload を追加する。

    "require": {},
    "autoload": {
        "psr-4": {
            "mylib\\": "mylib/src/"
        }
    },

"mylib\\": "mylib/src/"

の部分。

左側が namespace 名で右側が ライブラリのディレクトリ

階層がある場合

mylib/src/aich/Nagoya.php

の場合、namespaceは mylib\aich

autoloadが上手く動作しない時は...

vendorディレクトリ消してインストールしなおし

上手く動かなかったら

composer install

でインストールしなおしてみる

クラス名とファイル名は全く同じにするのが無難

ファイル名が小文字&class名はキャメルケースでも動作はするが...小文字大文字も同じの方が安全と思われる。
※動作しない場合はvendorディレクトリ消してinstallしなおしてみる。

composer update

namespace名やディレクトリなど、composer.json を変更した場合は

composer update

を必ず行う。そうすると

vendor/composer/autoload_psr4.php

が更新される

実際の使用

先に autoload.php を読み込んだ上で使うライブラリの namespace とクラス名を use で記述する

それ以降で普通に使える。

require_once dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload.php';

use mylib\Sample;

$sample = new Sample();

$sample->test

投稿者プロフィール

kurudrive
名古屋のウェブ制作会社数社に10年程度務めた後、株式会社ベクトル設立。
企画・運営・コンサルティング〜WordPressを中心としたシステム開発まで幅広く携わる。
[ 著書 ]
・いちばんやさしいWordPressの教本(共著)
・現場でかならず使われているWordPressデザインのメソッド(共著)
[ 最近のWordPressコミュニティでの活動 ]
2018 WordCampOsaka セッションスピーカー
2017 WordCampKyoto セッションスピーカー
2016 WordCampTokyo LT
2016 WordCampKansai ハンズオン世話役
2015 WordCampTokyo セッションスピーカー
2015 WordCampKansai セッションスピーカー
2014 WordFesNagoya 実行委員 & セッションスピーカー
2013 WordCampTokyo セッションスピーカー(パネラー)
2013 WordFesNagoya 実行委員 & セッションスピーカー
2013 WordCrabFukui セッションスピーカー

Follow me!

シンプルでカスタマイズしやすいWordPressテーマ

Lightningは twitter Bootstrap ベースのシンプルでカスタマイズしやすいWordPressテーマです。
プラグイン VK All in One Expansion Unit とセットで使う事でビジネスサイトにもブログにも活用できます。