のんラボ

composerでLaravelにパッケージを追加する

2019/07/15 2019/09/10 composerでLaravelにパッケージを追加する

composerでLaravelにパッケージを追加する

こんにちは。Nonです。
今回は前に投稿した記事、

でTelescopeを導入したときに少しハマった内容をシェアしたいと思います。

初めに

composerでパッケージをインストールするときに一番始めに知ることといえば、

composer require アカウント名/パッケージ名 --dev

ですね。
上記コマンドを叩くと、

"require-dev": {
    "hoge": "hoge"
}

上記のようにcomposer.jsonの"require-dev"にパッケージが追加された状態になります。
もちろんcomposer.jsonを直接編集する場合もあるでしょう、
要はcomposer.json

"require": {
    "foo": "foo"
},
"require-dev": {
    "hoge": "hoge"
}

となっていることが重要です。
またこのとき、
"require"が必須パッケージ。"require-dev"が開発環境用のパッケージとなっていることにも注目です。
当初僕は、"require""require-dev"別の区切りを持つもの勘違いしておりました。

正しくは"require-dev""require"を包含するイメージですね。初めて触る人でこのような勘違いは割とあるのでは無いでしょうか。

インストール

"require-dev"が開発環境用のパッケージ郡なので、開発環境のみ必要で、本番環境にはいりません。"require"はプログラムを動作させるのに必須のパッケージ郡です。これは必須のパッケージ群なので本番環境と開発環境両方に必要ですね。

ここで開発環境に"require-dev"を含む"require"をインストールする方法と、本番環境に"require"のみをインストールするコマンドがあります。

開発環境

開発環境のときはこのコマンドを実行します。

composer install --dev

composer.json

"require": {
    "foo": "foo"
},
"require-dev": {
    "hoge": "hoge"
}

上記のようにcomposer.jsonに登録されているものがインストールされます。

本番環境

本番環境のときはこのコマンドを実行します。

composer install --no-dev

composer.json

"require": {
    "foo": "foo"
}

上記のようにcomposer.jsonに登録されているものがインストールされます。

アップデート

composer update 

installと同じ様に--no-dev と--devが存在します。

composer.jsonを更新したときに実行するコマンドです。

ユースケース

開発環境に初めてインストールする時

composer install

composer.lockにかかれている内容がインストールされます。

開発環境に新しいパッケージを追加する時

composer require アカウント名/パッケージ名

composer.jsonに新しくパッケージが追加され、composer.lockが更新されます。

開発環境のパッケージを最新版にしたい時

composer update

パッケージの依存関係を解決し、composer.jsoncomposer.lockを更新します。

本番環境に反映する時

composer install

composer.lockにかかれている内容がインストールされます。

また、基本的に

composer update

は本番環境では実行しない方が良いでしょう。
開発環境で実行し、問題が無いことをテストをしてから本番環境にアップロードし、

composer install

しましょう。つまり本番環境は

composer install

のみを実行するのが無難です。

最後に

今回はcomposerについて纏めてみました。

どちらかといえばハマった自分への備忘録として書いたので、皆さんはすでに知っていることばかりだったかも知れません。

Telescopeを導入するときに、本番環境でcomposer updateをしてしまったせいで、大変な目に合いました。

Telescopeをレンタルサーバーに導入しようとすると、PHPモジュールが足りないせいでエラーが発生し、サーバーエラーで環境がぶっ壊れます。

うーんこれは、一応今度記事にするかも知れません。
(レンタルサーバーでアプリ開発している人はいないだろうから、しないかも知れませんが、、、)

その時はよしなに。

.