0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Composerを使ってインストールするとは?

0
Posted at

Composerって?

  • Composerは 「PHP用のライブラリ(部品)管理ツール」
  • 必要な部品(ライブラリ)と、それが動くために必要な細かい部品(依存関係)をすべて自動で集めてきてくれる

Composer の仕組み

ファイル名 役割
composer.json 注文書。「このライブラリのこのバージョンが欲しい」というリスト。人間が編集する。
composer.lock 確定リスト。実際にインストールされた正確なバージョンが記録される。チーム全員が同じ環境を作るために必須。
vendor/ (フォルダ) 倉庫。 ダウンロードされた実際のライブラリ本体。PHPファイル群

Composer の便利な機能 オートロード (Autoload)

他のファイルを使うには require や include をそれぞれ書く必要がある。
でも、Composer を使えば以下の1行を書くだけで、vendor/ 内のすべてのライブラリが自由に使える。

php
require 'vendor/autoload.php';

私的にびっくり
Composerのオートローダーと自作のオートローダーは共存できる
Composerには「自作クラスも一緒に管理する機能」がある
自分で spl_autoload_register を書かなくて済む

例えば、以下のような自作のオートローダを作っていた場合

クラスの自動読み込み(オートローダー)
// クラスが必要になった時に実行する「待ち伏せ」関数を登録する
spl_autoload_register(function($class) {
    // $class には、使おうとしたクラス名(例: "Myclass")が自動で入る
    // その名前を使って「ファイルへの道筋」を作る
    $classFilePath = __DIR__ . '/' . $class . '.php';

    // もし、実際にその場所にファイルが存在したら...
    if (file_exists($classFilePath)) {
        // そのファイルを読み込む!
        require $classFilePath;
    }
});

Composerに自作クラスの管理を任せる方法は、「PSR-4」と呼ばれる世界標準のルールを使うそうです。
これを行うと、自作の spl_autoload_register のコードを削除して、require_once 'vendor/autoload.php';
の一行だけで全てが完結するようになる。

方法!

composer.json を書き加える
{
    "autoload": {
        "psr-4": {
            "": "src/"
        }
    }
}

意味: 「クラスを探すときは、src フォルダの中を自動的に見てね」という命令

設定を反映させる
$ composer dump-autoload <ー実行 以下が出れば成功
Generating autoload files
Generated autoload files

注意
ルール1: ファイル名とクラス名を一致させる(例:class User なら User.php)
ルール2: 新しいファイルを追加した後は、念のためもう一度 composer dump-autoload を打つ

新しいクラス(例:User.php や Database.php)を該当フォルダ(例:src フォルダ)に追加する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?