📖

phar-composerで依存関係込みのphar作成

2024/08/21に公開

phar-composerで依存関係込みのphar作成

はじめに

PHP で作成したコマンドラインツールやスクリプトを、依存関係込みで簡単に配布・実行したいと思ったことはありませんか?本記事では、Docker 環境と phar-composer を使用して、依存関係を含む実行可能な phar ファイルを作成する方法を紹介します。

プロジェクト構成

.
├── Dockerfile
├── composer.json
├── docker-compose.yml
├── src
│   └── index.php
└── vendor

環境構築

Dockerfile の作成

PHP 8.2 の環境を Docker で構築します。phar-composer もここでインストールします。

FROM php:8.2-cli

RUN apt-get update && apt-get install -y \
    git \
    unzip \
    && rm -rf /var/lib/apt/lists/*

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN git clone https://github.com/clue/phar-composer.git /usr/local/phar-composer \
    && cd /usr/local/phar-composer \
    && composer install \
    && ln -s /usr/local/phar-composer/bin/phar-composer /usr/local/bin/phar-composer

WORKDIR /app

RUN echo "phar.readonly = Off" >> /usr/local/etc/php/conf.d/phar.ini

docker-compose.yml の作成

Docker 環境を簡単に管理するための docker-compose ファイルを作成します。

version: '3'
services:
  php:
    build: .
    volumes:
      - .:/app
    working_dir: /app
    command: tail -f /dev/null

プロジェクトの設定

composer.json の設定

プロジェクトの依存関係と設定を管理する composer.json ファイルを作成します。

{
    "name": "sample-phar-composer",
    "description": "phar-composer sample",
    "authors": [
        {
            "name": "Your Name"
        }
    ],
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "require": {
        "php": "^8.2",
        "guzzlehttp/guzzle": "^7.0"
    },
    "bin": ["src/index.php"]
}

サンプルスクリプトの作成

Guzzle を使用した簡単な HTTP クライアントを実装します。
[src/index.php の内容]

<?php

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

use GuzzleHttp\Client;

$client = new Client();

// Send an asynchronous request.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});

$promise->wait();

phar ファイルの作成と実行

phar-composer を使用して、プロジェクトを phar ファイルにビルドし、実行する手順を説明します。

  1. Docker環境を起動:

    docker-compose up -d
    
  2. PHPコンテナに入る:

    docker-compose exec php bash
    
  3. phar-composerを使用してpharファイルを作成:

    phar-composer build .
    
  4. 作成されたpharファイルを実行:

    php sample-phar-composer.phar
    

まとめ

このプロジェクトでは、Docker環境を使用してPHP 8.2とphar-composerを設定し、Guzzleを使用した簡単なHTTPリクエストスクリプトをpharファイルにビルドしました。

主なポイント:

  • PHP 8.2を使用
  • phar-composerをGitHubから直接インストール
  • Guzzleライブラリを使用したHTTPリクエスト
  • Docker環境でのビルドと実行

おわりに

PHP アプリケーションの配布と実行を簡素化する phar ファイルの作成方法を学びました。この方法を活用することで、複雑な依存関係を持つ PHP プロジェクトでも、単一の実行可能ファイルとして配布できるようになります。

Discussion