「インストール - Composer」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
121行目: 121行目:
**: ディレクトリ構造は、名前空間の構造と一致する必要がある。
**: ディレクトリ構造は、名前空間の構造と一致する必要がある。
**: 大文字小文字を厳密に区別される。
**: 大文字小文字を厳密に区別される。
*: <br>
**: <br>
* "<任意の名前空間名>\\"
** "<任意の名前空間名>\\"
*: プロジェクトのルート名前空間を指定する。
**: プロジェクトのルート名前空間を指定する。
*: バックスラッシュを2つ記述するのは、JSONのエスケープルール上の要件である。
**: バックスラッシュを2つ記述するのは、JSONのエスケープルール上の要件である。
*: 実際のPHPコードでは、<u><任意の名前空間名\  例: YourNamespace\></u>として解釈される。
**: 実際のPHPコードでは、<u><任意の名前空間名\  例: YourNamespace\></u>として解釈される。
*: <br>
**: <br>
*: 名前空間は一般的に企業名やプロジェクト名が使用される。
**: 名前空間は一般的に企業名やプロジェクト名が使用される。
*: <br>
*: <br>
* "src/"
* "src/"
147行目: 147行目:
  composer dump-autoload -o
  composer dump-autoload -o
<br>
<br>
==== autoload.phpの使用例 ====
==== autoload.phpの使用例 ====
  # プロジェクト構造例
  # プロジェクト構造例

2024年11月6日 (水) 16:43時点における版

概要

Composerの使用は現代のPHP開発では標準的な方法となっており、効率的な開発とコードの保守性向上に大きく貢献する。


Composerのインストール

以下に、Composerの公式Webサイトを示す。
https://getcomposer.org/download

Composerのインストーラをダウンロードする。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"


インストーラのSHA-384を確認する。

php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') \
{ echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"


Composerをインストールする。
composer.pharファイルが生成される。

php composer-setup.php --install-dir=<Composerのインストールディレクトリ>


composer.pharファイルのシンボリックリンクを作成する。

ln -s composer.phar composer


.profileファイル等に、Composerのインストールディレクトリを環境変数PATHに追加する。

vi ~/.profile


~/.profileファイル

export PATH="/<Composerのインストールディレクトリ>:$PATH"


また、Composerをアンインストールする場合は、以下のコマンドを実行する。

php -r "unlink('composer-setup.php');"



composer.jsonの作成

プロジェクトのトップディレクトリ等にcomposer.jsonを作成する。

以下の例は、php-imap/php-imapライブラリに依存するプロジェクトである。

 {
    "require": {
       "php-imap/php-imap": "^3.0"
    }
 }


※注意
vendorディレクトリは、Git等のバージョン管理システムから除外するのが一般的である。
composer.jsonとcomposer.lockは必ずバージョン管理に含める必要がある。


依存パッケージのインストール

composer.jsonが存在するディレクトリ (プロジェクトのトップディレクトリ等) に移動して、依存パッケージをインストールする。

# 開発環境
composer install

# 本番環境
composer install --no-dev



オートローディング

autoload.php

autoload.phpは、クラスの自動読み込み (オートローディング) を設定するファイルである。
これは、必要なクラスファイルを自動的にrequire / includeするものである。

これにより、手動でrequire文やinclude文を記述する必要がない。

オートローディングのメリット

  • 可読性が上がる。 (require文が減る)
  • 名前空間の管理が容易になる。
  • 依存関係の管理が自動化される。
  • バージョン管理が容易になる。


オートローディングの仕組み

 // 従来の方法 (手動で読み込む)
 require_once 'PhpImap/Mailbox.php';
 require_once 'PhpImap/Exceptions/ConnectionException.php';
 require_once 'PhpImap/Exceptions/InvalidParameterException.php';
 
 // Composerを使用した方法 (自動で読み込まれる)
 require 'vendor/autoload.php';
 use PhpImap\Mailbox;
 use PhpImap\Exceptions\ConnectionException;


autoload.phpの生成

  • composer.jsonの設定例
 {
    "autoload": {
       "psr-4": {
          "<任意の名前空間名 1>\\": "src/",
          "<任意の名前空間名 2>\\": "lib/",
          "App\\": "app/",
          "Database\\Factories\\": "database/factories/",
          "Database\\Seeders\\": "database/seeders/",
          "Tests\\": "tests/"
       },
       "files": [
          "src/helpers.php"
       ],
       "classmap": [
          "legacy/classes"
       ]
    }
 }


  • autoloadセクション
    Composerのオートローディング設定を定義する部分である。
    クラスの自動読み込みルールを指定する。

  • psr-4
    PHP-FIGが定めたPSR-4オートローディング規約に従うことを示す。
    モダンなPHPの標準的な命名規則とファイル構造を定義する。
    名前空間とディレクトリ構造を1:1で対応させる方式。

    • PSR-4の命名規則
      ファイル名はクラス名と完全に一致する必要がある。
      ディレクトリ構造は、名前空間の構造と一致する必要がある。
      大文字小文字を厳密に区別される。

    • "<任意の名前空間名>\\"
      プロジェクトのルート名前空間を指定する。
      バックスラッシュを2つ記述するのは、JSONのエスケープルール上の要件である。
      実際のPHPコードでは、<任意の名前空間名\ 例: YourNamespace\>として解釈される。

      名前空間は一般的に企業名やプロジェクト名が使用される。

  • "src/"
    指定した名前空間に対応するディレクトリパスを記述する。
    これは、プロジェクトのルートディレクトリからの相対パスである。

  • files
    常に読み込むファイルを指定する。

  • classmap
    PSR-4に従わない古いコードのための設定する。


オートローダーを生成および更新する。
また、composer.jsonを変更した場合は、必ず、composer dump-autoloadコマンドの実行が必要となる。

# 開発環境
composer dump-autoload

# 本番環境では最適化のため composer dump-autoload -o を使用する
composer dump-autoload -o


autoload.phpの使用例

# プロジェクト構造例
my-project/
├── composer.json
├── src/
│   ├── Controller/
│   │   └── UserController.php
│   ├── Model/
│   │   └── User.php
│   └── Service/
│       └── UserService.php
└── vendor/


 // src/Controller/UserController.php
 
 namespace YourNamespace\Controller;
 
 class UserController
 {
    // クラスの実装
 }


 // src/Model/User.php
 
 namespace YourNamespace\Model;
 
 class User
 {
    // クラスの実装
 }


 // src/Service/UserService.php
 
 namespace YourNamespace\Service;
 
 class UserService
 {
    // クラスの実装
 }


 // 使用例
 use YourNamespace\Controller\UserController;
 use YourNamespace\Model\User;
 use YourNamespace\Service\UserService;
 
 $controller = new UserController();
 $user       = new User();
 $service    = new UserService();