FuelPHPの2.x系って死んだの?

ふと、FuelPHP というフレームワークを思い出した。今のように Laravel の一強ではなかったときは FuelPHP もよく選択肢に挙がっていたような気がします。今でもメンテナンスされているのか気になったので GitHub を見ると、活発とは言えないがそれなりに開発はされているので 1.x 系 は大丈夫そう。ただ、2.x系 は完全に死んでいる。残念ですが 2.x系 が正式にリリースされる日は来ないかもしれません。とりあえず 1.x 系 は現役ということが分かったので一安心です。

FuelPHP 1.x系 github.com

FuelPHP 2.x系 github.com

CakePHPのDockerfileを作った話

はじめに

数年前に作った CakePHP の Dockerfile が動作しなくなっていたので修正してみました。

修正結果

最低限、必要なものは入っているはず。

#
#--------------------------------------------------------------------------
# Image Setup
#--------------------------------------------------------------------------
#

FROM php:7.3.3-apache

LABEL maintainer="shimomo <yuichi@shimomo.net>"

WORKDIR /var/www/cakephp

#
#--------------------------------------------------------------------------
# PHP Setup
#--------------------------------------------------------------------------
#

# Install the tools
RUN apt-get update
RUN apt-get install -y libicu-dev libpq-dev libzip-dev zlib1g-dev zip unzip

# Install the PHP intl extension
RUN docker-php-ext-install intl

# Install the PHP pcntl extension
RUN docker-php-ext-install pcntl

# Install the PHP zip extension
RUN docker-php-ext-install zip

# Install the PHP mbstring extension
RUN docker-php-ext-install mbstring

# Install the PHP pdo_mysql extension
RUN docker-php-ext-install pdo_mysql

# Install the PHP pdo_pgsql extension
RUN docker-php-ext-install pdo_pgsql

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

#
#--------------------------------------------------------------------------
# Apache Setup
#--------------------------------------------------------------------------
#

COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf
COPY ./001-default-ssl.conf /etc/apache2/sites-available/001-default-ssl.conf

RUN usermod -u 1000 www-data
RUN groupmod -g 1000 www-data

RUN apt-get install -y ssl-cert
RUN make-ssl-cert generate-default-snakeoil

RUN a2enmod ssl
RUN a2enmod rewrite

RUN a2ensite 001-default-ssl.conf

#
#--------------------------------------------------------------------------
# Port Setup
#--------------------------------------------------------------------------
#

EXPOSE 80
EXPOSE 443

ビルドしたイメージは こちら です。

hub.docker.com

動作検証

CakePHPテンプレート で動作検証してみます。

$ git clone git@github.com:cakephp/app.git cakephp
$ cd cakephp
$ docker run -d -p 80:80 -p 443:443 -v ${PWD}:/var/www/cakephp --name cakephp shimomo/cakephp
$ docker exec -it cakephp composer install

ここで http://127.0.0.1/ にアクセスしてみる。

Could not load configuration file: /var/www/cakephp/config/app.php

何やらファイルが読み込めないらしい。 調べた感じだと config/app.php は composer install で自動生成されるファイルらしい。 それが生成されていないのが原因なので、もう一度 composer install を実行してみる。

$ docker exec -it cakephp composer install

すると、以下のように無事 config/app.php が生成された。

Created `config/app.php` file
Created `/var/www/cakephp/tmp/cache/views` directory
Set Folder Permissions ? (Default to Y) [Y,n]? Y
Updated Security.salt value in config/app.php

再び http://127.0.0.1/ にアクセスしてみると CakePHP のデフォルトページが表示されましたとさ。 しかし、最初の composer install で config/app.php が生成されなかった理由は何だろうか? 気が向いたら調べてみよう。

github.com

おわりに

最近は Laravel を使うことが多いので、役に立つ日が来るかは分からない。

StripeのWebhookをテストする方法

はじめに

クレジットカード決済のデファクトスタンダードといっても過言ではない Stripe について軽く触れようと思います。 とりあえず、今回は Stripe の Webhook をテストする方法について紹介します。

トンネリングを使う方法

これが 公式ドキュメント で紹介されている方法です。 トンネリングサービスとしては ngrok が挙げられています。

stripe.com

ngrok の簡単な使い方としては、8080番ポートでアプリケーションが動作しているときに以下のコマンドを実行すると URL が発行されてローカルサーバを外部に公開できます。 発行された URL を Stripeダッシュボードから設定すれば Webhook をテストできるようになります。 非常に簡単ですね。

$ ngrok http 8080

なお、ngrok は無料プランだとサブドメインを固定できないため起動するたびにランダムなURLが発行されます。 そのため、頻繁に Stripeダッシュボードから URL を書き換える必要があるかもしれません。 さすがに面倒くさいので自動化するコマンドを作ってみました。 以下のコマンドを実行することで ngrok が発行した URL を Stripe の Webhook の URL に自動で反映させることができます。

$ narikiri --key sk_test_************************

ちなみに、sk_test_************************ の部分はテスト用のシークレットキーです。 ダッシュボードから取得してください。 また、制限付きのシークレットキーを使う場合は Webhook エンドポイントの読み書き権限が必要です。 インストール方法などは こちら を参照してください。

github.com

モックサーバを使う方法

Stripe の Webhook をシミュレートするローカルサーバに構築する方法です。 この方法を使う場合はできる限りメンテナンスされているものを使うと良いでしょう。 実際の使い方については こちら を参照してください。

github.com

ゲートウェイを使う方法

ngrok のようなトンネリングサービスを使う場合、開発者が1人であれば特に問題はありません。 しかし、開発者が複数人いる状況で Webhook をテストするときに、エンドポイントが頻繁に変わるのは使い勝手が非常に悪いです。 そんなときは こちら の記事のようにエンドポイントを1箇所にまとめる方法が望ましいと思います。

hacknote.jp

おわりに

Stripe の Webhook をテストする方法について紹介しました。 1人で開発する場合は ngrok のようなトンネリングで十分だと思います。 Webhook 処理を複数人で開発する場合はゲートウェイを使う方法が良いのかなと思います。

WerckerでLaravelのテストを実行する方法

はじめに

Wercker をご存知だろうか? 無料でプライベートリポジトリの CI が行える素晴らしいサービスである。 そんな Wercker で Laravel のテストを実行する方法を紹介します。

連携

Adding a New Application を参考にしながら GitHub, Bitbucket, GitLab のいずれかのアカウントと Wercker を連携させます。

設定

Laravel のプロジェクト内に wercker.yml を作成します。 そして、wercker.yml に以下のような設定を記述してプッシュすると Laravel のテストが実行されます。 なお、データベースを使う場合は追加の設定が必要となります。

box: shimomo/laravel
build:
  steps:
    - script:
        code: |-
          composer install
    - script:
        code: |-
          php -r "file_exists('.env') || copy('.env.example', '.env');"
          php artisan key:generate --ansi
    - script:
        code: |-
          vendor/bin/phpunit

おわりに

Wercker で Laravel のテストを実行する方法を紹介しました。 実際に Wercker と GitHub を連携させた環境は こちら です。

github.com