開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. composer.pharのpharって何?調べてみました!
no-image

composer.pharのpharって何?調べてみました!

2020年10月現在、Composer2.0が世間を賑わせています。
PHP開発者としてComposerさんにはお世話にならない日がない毎日ですが、composer.pharのpharって何?とふと気になったのでこの機会に調べてみました!

Pharとは

公式ドキュメントを読みます。

Phar アーカイブは Java の JAR アーカイブと似た概念のものですが、 PHP アプリケーションで使用する際に必要な機能をより柔軟に使用できるよう改良しています。 Phar アーカイブを使用すると、PHP アプリケーションやライブラリを ひとつのファイルにまとめて配布できるようになります。 Phar アーカイブ形式のアプリケーションは、その他の PHP アプリケーションとまったく同様に扱えます。

なるほど。JARもあまりピンときてないですが、要するにTarやZipのように複数のファイルを1つのファイルにまとめられるもののようです。
複数のPHPファイルを1つの実行可能なPHPファイルとして固められる認識をしました。
(もし間違っていたりもっと適切な説明があればマサカリをお願いしたいです。)

使い方を調べる

さっそく作成してみたいと思うので、さらに公式ドキュメントを読みます。

そのうちにきちんと書きます。今のところは、とりあえず Phar アーカイブの使用法 を読んでおいてください。

はい。今のところはとりあえずPhar アーカイブの使用法を読んでみたのですが、Pharについて初めて調べてみた人間を対象に書かれている感じがしない内容だったので、一旦逃げの姿勢で簡易的に触れ合えそうなライブラリを探します。

phar-composerというものがあるようなので、これを使ってみます。
Composer管理されているプロジェクトからpharを作成できるライブラリのようです。

導入

適当なプロジェクトを作ってインストールします。

composer require --dev clue/phar-composer

composer.json

{
    "name": "docker-composer/docker-composer",
    "require": {},
    "autoload": {
        "psr-4": {
            "DockerComposer\\": "src"
        }
    },
    "require-dev": {
        "clue/phar-composer": "^1.1"
    },
    "bin": [
        "bin/main.php"
    ]
}

作成

複数のファイルを書かなければpharる意味がないので無理やり複数のファイルを書きます。

src/DockerComposer.php

<?php

declare(strict_types=1);

namespace DockerComposer;

class DockerComposer
{
    /**
     * @return string
     */
    public function message(): string
    {
        return 'Did you mean docker-compose ?';
    }
}

bin/main.php

<?php

declare(strict_types=1);

require_once __DIR__ . '/../vendor/autoload.php';

$dockerComposer = new \DockerComposer\DockerComposer();
echo $dockerComposer->message() . "\n";

はい。くだらないですが一応できました。

php ./bin/main.php

で実行して念の為動くことを確かめておき、phar-composerでビルド します。

./vendor/bin/phar-composer build ./

 OK - Creating docker-composer.phar (2630 KiB) completed after 0.6s

出来たようです。念願のpharが作れました。(ファイルでかくない?)
特に意味はないですが実行権限を与えてPATHの通った場所に配置します。

mv docker-composer.phar /usr/local/bin/docker-composer

実行!

~ # docker-composer 
Did you mean docker-compose ?

やりましたね!よくあるtypoを指摘してくれるようになりました。
当然PHPが入ってない環境では動きませんが、Composerプロジェクトから1つの実行ファイルを作成できるのは使い方によっては便利かもしれませんね。
シェルスクリプト代わりにPHPで書きたくなった場面などでの助けになるような気がするので、機会があればまた使ってみたいと思います。

本日は以上です。

  • posted by takagi
  • PHP
TOPに戻る