composer再入門(PHPパッケージ管理システム)

composer -v

普段、PHPの開発でcomposerを使いまくるので改めて再入門を書きました。

対象読者

  • 既にcomposerを使ったシステムの開発の経験がある
  • ターミナル(黒い画面)さわれる
  • composerのインストールとcomposer install , composer update なら知ってる
  • composer.jsonの中身も見たことある
  • composerの便利さは実感している
  • これからcomposerを使ったプロジェクトを新規に始めるけど、やり方が分からない

composerを全く知らない方は、まずこちらの記事を読んで使ってみてください。

本記事は脱初心者向けの記事になります。

composerコマンドのおさらい

脱初心者したときによく使うコマンドを見ていきましょう。

  • composer install
    • 説明不要。composer.lockに書かれたパッケージをインストール。
  • composer update
    • composer.jsonをチェックしてcomposer.lockを更新。さらにパッケージをインストール。
  • composer require
    • composer.jsonに新しいパッケージを追加してcomposer.lockを更新、パッケージをインストール。
  • composer init
    • composerを使ったプロジェクトを始める時に最初に叩くコマンド。対話形式でcomposer.jsonを作成する。
  • composer remove
    • composer.jsonからパッケージを削除して、composer.lockを(以下ry
    • vendorディレクトリ内のソースコードも削除してくれる。
  • composer search
    • Packagist上のパッケージを検索。パッケージ名をど忘れした時に便利。
  • composer validate
    • composer.jsoncomposer.lockを検証して、書き方が違ったら教えてくれる。

他にも使えるコマンドはたくさんありますが、この7つを覚えておけば困ることはありません。もっと知りたい人はターミナルにcomposerと打ち込んで叩いて確認してください。

じゃあ脱初心者の人があんまり使ったことが無いであろう、composer require, composer init, composer searchの3つの使い方を紹介します。(なぜ使わないかというと、composer.jsonのメンテナンスをした経験が無いからです。逆に経験がある方は使い方を知ってます。)

紹介する順番は、require –> search –> initの順番で行きます。

composer requireコマンド

composerでインストールできるパッケージは、基本的にPackagistに公開されいるもののみです。(設定をすれば、Github上のパッケージもインストールできますが、そのうち書きます。)

packagistでswiftmailerを検索

例えば今開発しているプロジェクトに新しくswiftmailerをインストールする場合にcomposer requireコマンドを使います。

composer require swiftmailer/swiftmailer

パッケージ名は必ず「<ベンダー名>/<パッケージ名>」という構成になっています。なので、composer require swiftmailerではインストールできません。正しいパッケージ名を知るにはPackagist上で確認するか、ググれば確認できます。

実際に先程のコマンドを実行すると、

  1. Packagist上のパッケージを検索
  2. composer.jsonにパッケージ名と最新の安定バージョンを追記
  3. パッケージの依存関係を解消してcomposer.lockの更新
  4. 必要なパッケージをPackagistからダウンロード

ということが行われます。

composer.jsonをエディタで編集しても同じことが出来ますが、その場合は編集した後にcomposer updateを実行しないとインストールできませんし、記述ミスがあってもupdate実行時にならないと気づきません。

composer requireコマンドならすぐにインストールされるので、記述ミスが発生しません。

composer require --dev <パッケージ名>コマンドも併せて紹介します。

phpunitやcodeceptionなど、開発環境でしか使わないパッケージをインストールする時に--devオプションを付けます。composer install --no-devを実行すると、開発環境でしか使わないパッケージをインストールしなくなります。よく分からないうちは使わない方が良いです。

composer searchコマンド

さて、パッケージを追加する方法は分かりましたが、何のパッケージをインストールすれば良いのか分からないときに使うのがcomposer searchコマンドです。あとは、パッケージ名をど忘れした時にも使います。(実は後者の方が多いと思う)

正しいパッケージ名を知るにはPackagistで検索すれば良いのですが、ターミナル上でも検索できます。ブラウザを開くのが好きか、ターミナルを開くのが好きかの違いだけです。

Fakerを使いたいんだけど、ベンダー名をど忘れした、今ターミナル開いてるからここで検索したい、というときはcomposer search fakerを実行します。

名前がわかったのでcomposer require fzaninotto/fakerを実行します。

composer initコマンド

まだcomposer.jsonが無い状態から、新しくプロジェクトを始める時に使うコマンドです。

  1. パッケージ名(<ベンダー名>/<パッケージ名>)
  2. ディスクリプション
  3. 著作者と連絡先メールアドレス
  4. 最低限のスタビリティ
  5. パッケージタイプ
  6. ライセンス
  7. 依存パッケージを追加
  8. 開発環境での依存パッケージを追加
  9. composer.jsonのプレビュー

という最低限最初にやらなくてはならないことを全部対話形式で設定し、最後にcomposer.jsonを作成します。composer.jsonをエディタで書いて作成しても良いのですが、記述ミスなどを考えるとコマンドでやってしまう方が楽です。

以下は、実行例です。参考にしてください。

ぶっちゃけcomposer initを使わずに、まっさらな状態からいきなりcomposer requireすればcomposer.jsonを作成できますし、それでちゃんと動きます。オープンソースとして公開できるレベルのプログラムを作る時に役立つコマンドです。

composer.jsonとcomposer.lockファイル

この2つのファイルについて何度も触れたので既に分かっているかもしれませんが、改めて解説します。

composer.jsonはcomposerの設定ファイルです。パッケージを追加したり削除するときは.jsonの方を編集します。(実際にはコマンドを使って編集しますが)

実際に何のパッケージを追加するのかを書いたのがcomposer.lockファイルです。composerは.lockファイルの中身を見て実際にインストールするパッケージを把握します。

composer.lockはrequire,updateした時に自動的に更新されるファイルなので、絶対にエディタを使って更新しないでください。おかしくなったときは慌てずにcomposer updateを実行してください。

「実際に」ってどういうこと?

例えばPHPUnitを使う場合を例に説明します。composer require phpunit/phpunitを実行してvendorディレクトリを見ると、、、

あれ?インストールした記憶のないdoctrine, myclabs, phpdocumentor, phpspec, sebastian, symfony, webmozartのベンダー名のディレクトリができてるぞ?※binとcomposerは特別なフォルダなので無視

実はPHPUnitが依存しているパッケージをcomposerがかき集めて自動的にインストールしています。Packagist上のPHPUnitの説明ページを見てみましょう。

PHPUnitの依存しているパッケージ

phpunit/phpunit-mock-objectsのリンク先を見に行くと、また依存しているパッケージが確認できます。

なので、PHPUnitをインストールすると、依存している実際に必要なパッケージを全てインストールします。composer.lockには実際にインストールしなくてはならないパッケージの情報が、漏れ無くダブり無く書かれているというわけです。

まとめ

Packagistには先人が作ってきてくれた素晴らしいPHPのライブラリがたくさんあります。上手く活用することでプログラミングする量を何分の1、何十分の1にも減らすことが出来ます。

その恩恵を受けるために今一度composerについて勉強し直してみましょう。

ComposerComposer

 

(PR)

この記事は役に立ちましたか?

⭐をクリックして評価してね!

Average 5 / 5. 投票数: 1

おめでとう!あなたがこの記事の最初の評価者です

役に立たなくて申し訳ありません…!

この記事の改善点を教えていただけますか?

SNSでもご購読できます。