お昼食べてたけどこれ見て即いったら藤原さんいた!!ブースで喋れてお得〜😚 #phperkaigi https://t.co/uVfFgdftkq
— あすみ (@asumikam) 2025年3月23日
PHPerKaigi 2025 のさくらインターネットさんのブースで fujiwaraさんに「AppRunつかってみます!」とおはなしして、ちょうどデプロイしたいものができたので試しにいじってみました。
2025/05/06現在、β版として公開されているので無料で遊べます。やったね!
今回デプロイするもの
Claude CodeでVibe CodingしたSlim製のPHPアプリケーション「umeco-ikura」という おだわら市民交流センター UMECO の利用料金を計算するツールをデプロイしていきます。

UMECOは普段お世話になっている安い貸し会議室なのですが、時間帯・部屋によって料金が異なるため、たくさんの部屋をいろんな時間で借りるとなると計算がちょっと複雑になります。
自家製ツールを作りたいとおもいつつもスマホの計算機やスプレッドシートなどで苦しんで早2年、ようやく重い腰を上げて作りました。Claude Codeが。こちらの腰は軽くなりました。ありがてぇ〜。

本当に古き良きやつ。こういうのでいいんだよこういうので!

UMECOは参加者から1000円以上の徴収あるいは販売を行う場合は料金が2倍になるのでそれも出しています。
まずはお試しでnginxをデプロイしてみる
手順はマジで↑だけで、本当に簡単!というかんじ。 マニュアルも必要なことをバシッとシンプルに書いてくれているので、手順がわからない、ということはなかったです。
ためしに素のnginxをデプロイしようと思ったのですが、docker pull nginx:latestだと platform が合わずにコケてしまって以下のエラーがでました。
{ "status": "UnHealthy", "message": "Component is exited: Container failed with: failed to start containerd task \"xxx\": OCI runtime start failed: starting container: starting sub-container [/docker-entrypoint.sh nginx -g daemon off;]: creating process: failed to load /docker-entrypoint.sh: exec format error: unknown: starting container: starting sub-container [/docker-entrypoint.sh nginx -g daemon off;]: creating process: failed to load /docker-entrypoint.sh: exec format error\n" }
サポート | さくらのクラウド マニュアル を眺め、 linux/amd64 を指定せよということがわかったので docker pull --platform linux/amd64 nginx:latest でpullしたものをコンテナレジストリに登録してデプロイしたらうまくいきました。


デプロイ設定画面に最後にデプロイしたアプリケーションの構成情報と、今回のアプリケーションの構成情報が同一の場合には、新しいバージョンは作成されません。とある通り、latest連打ができなかったので適当にタグ名はつける必要ありです。何回かミスってるのは手元のNginxをpullしなおしたつもりがarm64のままだったりしたので何回かごちゃごちゃやっていた結果です。
あとは「処理中...」が結構長く*1ウグ〜となっていたら以下のエントリからAPIで叩けることを知ったのでちょっと楽になりました。ありがとうございます。
実物をデプロイしていく
コンテナイメージが1つしか指定できないため、nginx+PHP FPMの構成は自然にとることは難しそうと思ったのでApacheでイメージを構築しました。umeco-ikura でつかったDockerfileは以下。
FROM composer:latest AS vendor COPY ./composer.* /app/ RUN composer install --no-dev --ignore-platform-reqs FROM --platform=linux/amd64 php:8.4-apache AS app RUN a2enmod rewrite COPY docker/apache/slim-app.conf /etc/apache2/sites-available/slim-app.conf RUN a2dissite 000-default.conf \ && a2ensite slim-app.conf WORKDIR /var/www/html COPY --from=vendor /app /var/www/html COPY . /var/www/html RUN chown -R www-data:www-data /var/www/html EXPOSE 80 CMD ["apache2-foreground"]
失敗したらさきほどのAPIを叩きつつ、statusがUnhealthyでImage is not found(typoした)やUnexpected error(β版だからこういうこともありそう)やDeployment Failed(β版だからこういうこともありそう)などが出たので、ためしにAWSのAppRunnerにデプロイしてうまくいってそうなことを確認したり無邪気につけていたヘルスチェックを消してみたりしたが................動かなかった........かなしい........けどここまでブログを書いていたので恥ずかしげもなく投稿しちゃう。
画面上部に一部環境にて、アプリケーションの作成に失敗する不具合を確認しています。ご不便をおかけいたしますが、今しばらくお待ちください。ってあるからそれなのかな...と思いつつ、そろそろGW終わるのに衣替えのタスクが終わってないので一旦あきらめます。
AppRunをちょこっと触ることはできたし、AWS AppRunnerはじめてだったけどサクッと試せたので収穫はあった。さくらインターネットさん応援しているのでAppRunでうまくいかせたい気持ちがある、また今度再チャレンジするぴょん!
*1:成功の時ははやかったので、長かったら失敗とみて良さそうかも