make is.dev make it simple. development.
2024年4月17日

PHP composer init(検証実行用)

PHPの既存パッケージを試したいので、composerと対話しながらcomposer.jsonを作ってみる。

新たにパッケージを作る事を目的としたものではなく、公開されているパッケージを試験的に入れて試すための検証実行用としての設定内容。

たまにしかやらないから毎回忘れて情報探したり、あまり考えず入力をスキップしがちなので整理しておく。

使用環境

・ Amazon Linux2
・ PHP 8.2.9
・ Composer version 2.6.5

事前準備

ファイルを置くフォルダを作ってカレントディレクトリを移しておく。

mkdir sample
cd sample/

作っていく

コマンド実行

composer init を実行する。
実行すると設定内容など順番に聞かれるので答えていく。

composer init

順番に答えていく

Package name (<vendor>/<name>) [xxxxx/sample]:

これから作るパッケージの名前を入力する。
そのままEnterすれば、デフォルト内容(上記例では[xxxxx/sample])で作られる。

Description []:

パッケージの説明を入力する。
特段記載の必要がなければそのままEnterで省略。

Author [n to skip]:

作者名を入力する。
こちらも特段記載の必要がなければ n + Enterで省略。
(Enterのみだと入力するまで繰り返し聞かれる)

Minimum Stability []:

依存関係の情報を入力する。
こちらも特段記載の必要がなければ、そのままEnterで省略。

Package Type (e.g. library, project, metapackage, composer-plugin) []:

パッケージのタイプを入力する。
こちらも特段記載の必要がなければ、そのままEnterで省略。

License []:

ライセンス内容を入力。
こちらも特段記載の必要がなければ、そのままEnterで省略。

Would you like to define your dependencies (require) interactively [yes]?

この流れで組み込むパッケージを指定するかどうか。
指定する場合は、そのままEnter(デフォルトがyes)。
指定しない場合はno + Enter(nでもOK)。

yesを指定の場合は以下に続く。

Search for a package:

探すパッケージの検索ワードを聞かれるので入力する。
ここで、何それ?と何も入力せずにEnterすると、終了して次の工程に進むので注意。

ここでは例として「phpoffice」と入力してEnterする。
すると、以下のように検索して見つかったものをリスト表示してくれる。
(何も見つからなかった場合は、何事もなかったかのように再度検索ワードを聞かれる)

Found 15 packages matching phpoffice

   [0] phpoffice/phpspreadsheet
   [1] phpoffice/phpword
   [2] phpoffice/phpexcel Abandoned. Use phpoffice/phpspreadsheet instead.
   [3] phpoffice/phppresentation
   [4] phpoffice/common
   [5] vgrem/php-spo
   [6] phpoffice/math
   [7] phpoffice/phppowerpoint Abandoned. Use phpoffice/phppresentation instead.
   [8] yectep/phpspreadsheet-bundle
   [9] phpoffice/phpproject
  [10] rector/rector-phpoffice Abandoned. No replacement was suggested.
  [11] onurb/excel-bundle
  [12] markocupic/phpoffice-bundle
  [13] shareforce/phpword
  [14] jambagecom/base-excel

Enter package # to add, or the complete package name if it is not listed:

リストが表示されたら、番号 + Enterで組み込むものを指定する。
目的のパッケージがリストになければ、何も入力せずEnterを押すと再度検索ワードの入力に戻れる。

なお、ここでは番号ではなくパッケージ名で入力することも出来る。
その場合はリストにないパッケージも指定出来る…が、存在しないものを指定すると作成が中断されるので、ここまでの入力が水の泡に。

ここでは例として、0を入力してEnter。進めてみる。

Enter the version constraint to require (or leave blank to use the latest version):

組み込むバージョンを聞かれるので入力してEnter。
入力せずEnterすれば最新版になるので、意図的に指定する必要がなければそのままEnterで良い。

ここで依存関係の確認が入り、必要物が足りないと作成が中断されたりする。
実際、上記例ではext-gdが足りないと言われて中断。
最初からやり直しになった。

といった形で、パッケージの組み込み周りは中断からのやり直しが発生しやすかったりする。
私見としては、パッケージの追加は後からやった方が安全に思う。

気を取り直して、php-gd(ext-gdが含まれる)をインストールしてリトライ。
上手く行った。

組み込めると、再度次の検索ワードを聞かれるので、繰り返し。
必要なものを組み込み終わったら、検索ワードを入力せずにEnterで次の工程へ。

Would you like to define your dev dependencies (require-dev) interactively [yes]?

開発するパッケージの、他パッケージとの依存関係をこの流れで指定するか聞かれる。
指定するなら、そのままEnter(デフォルトがyes)。
指定しない場合はno + Enter(nでもOK)。

この例は検証実行用途なので、no + Enterで省略する。

Add PSR-4 autoload mapping? Maps namespace "xxxxx\Sample" to the entered relative path. [src/, n to skip]:

autoloadでPSR-4に基づいたnamespace指定を使うかどうか聞かれる。
意図的に変える必要がなければ、そのままEnterでOK。

Do you confirm generation [yes]?

ここまでの内容でcomposer.jsonを作成して良いかの確認。
そのままEnterでOK。(デフォルトがyes)
noを指定すると作成が中断されてやり直しになるので注意。

Would you like to install dependencies now [yes]?

このままインストールするかを聞かれる。
そのままEnterで良い(デフォルトがyes)。

ただ、ここまでで必要なパッケージの組み込みが終わってないなら、後で組み込んでからインストールしても良い。
ここでインストールしないならno + Enter(nでもOK)。

エラーなくコマンドに復帰したら終了。
フォルダ内にcomposer.jsonが作成されていることを確認。
(インストールまでしている場合は、composer.lock、vendorフォルダ等も作られている)