Composerとは、PHPのライブラリを容易にインストールしてくれるツールで、ライブラリの依存関係も自動的に判断して必要なライブラリも自動的にインストールしてくれる便利なツールです。
PHPでWebアプリを実装する場合、JWTトークンの検証や決済プロバイダのSDKなど、さまざまなライブラリがあります。ここでは、それらをインストールして使えるようにする方法を紹介します。
Composerのインストール
では早速Composerのインストールですが、Composerの公式サイトにダウンロード・インストール方法が記載されているので、そのまま行うだけです。ですが、英語で書かれているので、日本語にしながら転載します。(Macならbrew install composerでもインストール可能です)
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
この4行を1行ずつ実行するだけです。PHPがインストールされていてコマンドで実行できる必要があります。
実行した場所に、composer.phar という実行ファイルができていると思います。これが管理ツールのコマンドとなります。試しに実行してみましょう。
./composer.phar
Composerのテキストロゴ、バージョン、オプションの説明が表示されたらOKです。
このコマンドをどこでも利用できるように /usr/local/bin などにコピーしましょう。名前もpharを取ってcomposerにしましょう。
sudo mv composer.phar /usr/local/bin/composer
これでどこでもcomposerが使えるようになりました。
ライブラリのインストール
次にcomposerを使って、PHPのライブラリをインストールする方法です。実行した場所にvendorというフォルダができて、この下にライブラリが保存されます。PHPファイルから読み込みやすいように、PHPファイルを置く場所で実行すると良いです。
たとえば、認証等で使うJWTトークンを検証するためのライブラリをインストールする場合は、
composer require firebase/php-jwt
composer require codercat/jwk-to-pem
を1行ずつ実行します。vendor/firebaseやvender/codercatというフォルダができてここにインストールされています。
もうひとつ、クレジットカード決済を行う決済プロバイダ StripeのSDKをインストールする場合は、
composer require stripe/stripe-php
を実行します。verdor/stripeというフォルダにインストールされます。
vendor/autoload.phpというファイルがありますが、プログラムからはこれを読み込むだけでライブラリを使えるようになります。
ライブラリの使用
では、PHPプログラムからライブラリをどう使うかですが、これも簡単で冒頭に2~3行書くだけです。
例えば、php-jwtを使う場合は、
<?php
require __DIR__ . '/vendor/autoload.php';
use Firebase\JWT\JWT;
use CoderCat\JWKToPEM\JWKConverter;
と書きます。requireでライブラリのある場所を指定し、useでJWTのライブラリを使うことを宣言しています。この後、JWT::encode() や JWT::decode() などのように関数を利用できます。
もうひとつ、StripeのSDKを利用する場合は、
<?php
require __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey($secret_key);
のようにuseを使わずにライブラリを使うことも可能です。useは名前空間に別名をつけるだけですので、フルパスで指定すれば直接使えます。この例では、StripeのAPIキーを設定しています。($secret_keyはシークレットキーです)
(おすすめのライブラリ).envファイルを使いましょう
シークレット情報や環境設定情報などを別のファイルに分けておきたい場合に便利なのが .envファイルです。こちらもcomposerでライブラリをインストールすれば使えます。
composer require vlucas/phpdotenv
これで、vender/vlucasにphpdotenvがインストールされて使えるようになります。使い方は上記と同様に、
<?php
require __DIR__ . '/vendor/autoload.php';
Dotenv\Dotenv::createImmutable(__DIR__)->load();
で利用できて、同フォルダの.envファイルを読み込めます。.envの書き方は、
SECRET_KEY="secret"
PUBLIC_KEY="public"
のような書き方で、PHPファイルの中で$_ENVの連想配列として参照できます。
<?php
require __DIR__ . '/vendor/autoload.php';
Dotenv\Dotenv::createImmutable(__DIR__)->load();
$secret_key = $_ENV['SECRET_KEY']
$public_key = $_ENV['PUBLIC_KEY']
気をつけたいのは、.envファイルにはAPIキーやパスワードを書いたりするため、公開してはいけません。公開github等にpushしてしまわないように、.gitignoreで除外する等しましょう。
また、Webサーバにデプロイした場合にも、.envを直接参照できてしまうと情報がダダ漏れになってしまいますので、.envファイルはWebサーバからアクセスできないところに置く方が賢明です。
.envを別の場所に置いた場合は、上記の __DIR__ 部分を書き換えて、.envを置いたフォルダパスを書けば読み込めます。