会計 PHP用クライアントコード(SDK)の生成方法

この手順の目的

freee会計のPublicAPIを用いて、PHP用のクライアントコード(SDK)を生成することができます。
この手順ではクライアントコードの生成〜その利用方法までを説明します。

手順の実行環境

本手順の実行には Docker Engine, Docker Compose がインストールされた環境が必要です。
インストールはガイダンスページ (https://docs.docker.jp/compose/install/index.html) を参考に行って下さい。

手順

1. クライアントコードを準備する

1.1. コードを生成する

freee APIのOpenAPIスキーマを元にクライアント処理を実装したPHPライブラリを生成します。
任意のディレクトリに移動し、以下コマンドを入力します。

docker run --rm \
    -u "$(id -u $USER):$(id -g $USER)" \
    -v "${PWD}:/local" \
    openapitools/openapi-generator-cli:v5.4.0 generate \
    -i https://raw.githubusercontent.com/freee/freee-api-schema/master/v2020_06_15/open-api-3/api-schema.json \
    -g php \
    -o /local/

1.2. HeaderSelector.phpを編集する (任意*)

* 2022年12月現在、freee APIは1バージョンのみ提供しているため、バージョン指定の処理を追加しなくても問題ありません。

生成コード内に、freee APIのリクエスト時にAPIバージョンを指定するための処理を追加します。lib/HeaderSelector.phpを編集し、以下のようにコードを追加します。

selectHeaders, selectHeadersForMultipartメソッド内の以下の箇所

         unset($headers['Content-Type']);
+        $headers = $this->appendFreeApiVersionHeader($headers);
         return $headers;
     }

ファイル末尾

         unset($headers['Content-Type']);
+        $headers = $this->appendFreeApiVersionHeader($headers);
         return $headers;
     }

2. クライアントコードの動作確認をする

以降は生成したクライアントコードが利用できるか確認する方法を説明します。

Dockerを用いて動作確認用の実行環境を起動し、その環境内で生成したクライアントコードを利用できることを確認します。

2.1. アプリケーションを用意しアクセストークンを取得する

https://developer.freee.co.jp/startguide/tutorials/ を参考にアプリケーションを作成しアクセストークンを取得します。
取得したアクセストークンは動作確認の際に使用するので記録しておきます。

2.2. 動作確認用の実行環境を起動する

2.2.1. Docker設定ファイルの準備

生成コードのトップディレクトリにファイル(Dockerfile, docker-compose.yaml)を以下の内容で配置します。

Dockerfile

FROM php:7.3-cli

RUN apt-get update; \
    curl -sL https://deb.nodesource.com/setup_12.x | bash -; \
    apt-get install -y --no-install-recommends \
        git \
        libzip-dev \
        nodejs \
        unzip \
        zlib1g-dev \
    ; \
    rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install zip

RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini; \
    sed -i -e "s/^memory_limit.*$/memory_limit = 2G/g" $PHP_INI_DIR/php.ini

WORKDIR /tmp

RUN curl https://raw.githubusercontent.com/composer/getcomposer.org/76a7060ccb93902cd7576b67264ad91c8a2700e2/web/installer -o - -s | php -- --quiet; \
    mv composer.phar /usr/local/bin/composer

WORKDIR /usr/src/app

ENV PATH /root/.composer/vendor/bin:$PATH

docker-compose.yaml

version: "3.7"
services:
  console:
    build:
      context: .
      dockerfile: Dockerfile
    image: freee-accounting-console
    volumes:
      - "./:/usr/src/app"
    command: /bin/sh -c "while sleep 1000; do :; done"
2.2.2. Dockerコンテナを起動し接続する

Dockerのイメージを作成し、コンテナを起動します。

docker-compose build
docker-compose up -d

コンテナに接続しシェルを実行します。

docker exec -it xxx-console-1 /bin/bash

xxx-console-1はdocker-compose up -dで起動したコンテナ名

2.2.3. 以降は接続したコンテナ内で操作する

PHPライブラリをインストールします。

composer install

2.3. freee APIをリクエストして動作確認する

Get Companies API及びGet Partners APIの実行例です。

PHPインタラクティブシェルを起動します。

php -a

起動したインタラクティブシェルで以下が実行できれば、クライアントコードの動作確認完了です。

※下記コマンドの一行目、r+equireはrequireと書き換えて実行してください。

php > r+equire_once(__DIR__ . '/vendor/autoload.php');
php > $token = '{アクセストークン}';
php > $config = OpenAPI\Client\Configuration::getDefaultConfiguration()->setAccessToken($token);
php > $companiesApiInstance = new OpenAPI\Client\Api\CompaniesApi(null, $config);
php > echo $companiesApiInstance->getCompanies();
php > $cid = {↑で取得できた事業所ID};
php > $partnersApiInstance = new OpenAPI\Client\Api\PartnersApi(null, $config);
php > echo $partnersApiInstance->getPartners($cid);