Composerの使い方

「Composerインストール手順」を「Composerの使い方」に改稿しました。

1. インストール

「‘Composer’、‘インストール’」で検索するとたくさんヒットします。

でも、意外とハッシュ値のチェックをしてない手順が多いです。またはインストールスクリプトをそのままコピペしてるからハッシュ値が古くてインストールに失敗するとか。

それから公式サイトのurl知ってますか?

今回の記事を書くのにComposerのHP探したら「phpcomposer.com」が先にヒットして焦りました。公式サイトは「getcomposer.org」です。お間違えのないように。

ハッシュ値とかurlとかの確認をサボって、適当な記事からコピペでインストーラーをダウンロードしたら「残念!! 中身は “rm –no-preserve-root -rf ~/” でした」とか怖いですよね。気をつけましょう。自戒。

インストール手順

(1) 「getcomposer.org/download」のスクリプトを実行する。

スクリプトの各行は以下のようになっています。
 1行目 composer-setup.phpを取得する。
 2行目 composer-setup.phpの内容チェック。“Installer verified"が表示されるのを確認する。
 3行目 composer-setup.phpを実行してComposerをインストールする。
 4行目 用済みになったcomposer-setup.phpを削除する。

スクリプトを実行すると「composer.phar」ができているので、これをイイ感じに配置すればインストール完了です。

(2) Composerを配置

(2-a) システム全体で使うなら

sudo mv composer.phar /usr/local/bin/composer

(2-b) レンタルサーバなんかで特定ユーザでだけ使うなら

//配置先ディレクトリを作る
mkdir ~/bin

//配置先ディレクトリにパスを通す
...省略、AlmaLinuxは最初からパスが通ってるんですね。楽チン楽チン。
$ echo $PATH
/home/[ユーザ名]/.local/bin:/home/[ユーザ名]/bin:/usr/local/bin:/usr/bin:...

//移動する
mv composer.phar ~/bin/composer

(3) 動作確認

これでComposerが使えるようになりました。

$ composer --version
Composer version 2.8.1 2024-10-04 11:31:01
PHP version 8.3.12 (/usr/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.

2. パッケージのインストール

パッケージのインストールは、vendorディレクトリを配置した(したい)ディレクトリで実行。

composer requireの実行結果はこんな感じです。

$ composer require vlucas/valitron

$ composer show
vlucas/valitron v1.4.11 Simple, elegant, stand-alone validation library with NO dependencies

$ ll
total ...
-rw-r--r--  1 work  staff     61  2  2  2024 composer.json
-rw-r--r--  1 work  staff   2717  2  2  2024 composer.lock
  :
  :
drwxr-xr-x  6 work  staff    192  2  2  2024 vendor

Composer管理下のディレクトリでは2つのファイル(composer.*)と1つのディレクトリ(vendor)が作成されます。

composer.jsonはインストールする(した)パッケージを定義したファイルです。
composer.lockは実際にインストールしたパッケージのバージョンを記録したファイルです。
vendorはインストールしたパッケージを格納しているディレクトリです。

composer.jsonとcomposer.lockの関係ですが。

composer.jsonは「“vlucas/valitron”: “1.4.*"(Ver1.4系で最新)」や「“vlucas/valitron”: “^1.4”(Ver1.4以上〜2未満)」のように定義されます。

composer.lockは「composer require」や「composer update」したときにインストールしたバージョンが記録されます。
そして「composer install」すると、このcomposer.lockに従ってパッケージがインストールされます。開発環境などでバージョンを合わせたりするのに使います。

パッケージのインストールに関するコマンドは4つあります。

composer require

composer require [パッケージ名]でパッケージをインストールします。
インストールしたパッケージの情報はcomposer.jsonとcomposer.lockに反映されます。

composer install

composer.lockがあれば、それに従いパッケージをインストールします。
composer.lockがない場合はcomposer.jsonに従いパッケージをインストールし、結果をcomposer.lockに記録します。

composer update

composer.jsonの記述に従い、各パッケージを最新バージョンに更新し、結果をcomposer.lockに記録します。

composer remove

composer remove [パッケージ名]でパッケージを削除します。
削除したパッケージの情報はcomposer.jsonとcomposer.lockに反映されます。(されるハズ)
依存関係もいい具合に解決してくれるハズ。

ごめんなさい。使ったことないんでよくわからないです。
私はパッケージ導入前のcomposer.*を退避しておいて、それを使って再インストールしています。
それかvenderディレクトリも退避しておいて、vender + composer.*を戻すとかしてます。

3. その他

  • インストールできるパッケージはPackagistで検索できます。
  • パッケージ/ライブラリの使い方はVaritronライブラリの使い方メモを参考にしてください。
  • そのほかのよく使いそうなコマンドは
    //全てのパッケージを一覧表示する
    $ composer show --all
    
    //インストール済みパッケージを一覧表示する
    $ composer show
    vlucas/valitron v1.4.11 Simple, elegant, stand-alone validation library with NO dependencies
    
    //パッケージの詳細を表示する
    $ composer show vlucas/valitron
    name     : vlucas/valitron
    descrip. : Simple, elegant, stand-alone validation library with NO dependencies
      :
      :
    
    //インストール済みパッケージの最新バージョンを確認する
    $ composer outdated
    
    //パッケージを検索
    $ composer search excel
    phpoffice/phpspreadsheet   PHPSpreadsheet - Read, Create and Write Spreadshe...
    maatwebsite/excel          Supercharged Excel exports and imports in Laravel
      :
      :
    
    //パッケージがインストールされた経緯(依存関係)を表示する
    $ composer depends vlucas/valitron
    __root__ - requires vlucas/valitron (^1.4)
    
    //オートローダーの作成
    //@see WEB+DB PRESS Vol.110 モダンPHPエンジニアへの道 Composer実践活用術
    $ composer dump-autoload
    Generating autoload files
    Generated autoload files
    
    //プロジェクトのスケルトンを作成する。
    $ composer create-project laravel/laravel=11.* huge
    
  • 本番稼働後はcomposer.*ファイルとvenderディレクトリをバックアップしておいた方がいいです。数年後にcomposerで環境構築しようとしてもエラーでできないことがあります。(ありました)
    この時は本番環境からコピーして対応したんですが、組織とか手続きとかアレとかで無駄な苦労をしました。
    「環境はいつでもcomposerで再現可能」の「いつでも」は開発期間だけということです。