▲Vercel で PHP を使う。
PHP Advent Calendar 2020 - Day 2
ふうせん🎈 FU-SEN と申します。
Qiita Advent Calendar は様々なところに参加しているのですが、
PHP はこれが初参加らしいです。あれ?
おそらく参加しようと思ってすでに埋まってたのだと思いますが……
PHP は共用レンタルサーバでも対応している事が多く、
比較的動作するサーバが多いプログラミング言語かと思いますが、
少しでも安値で構築して公開しておきたい人もいるかと思います。
んじゃ、無料で PHP が使えるところを紹介しましょう。 ▲Vercel です。
▲Vercel ?
▲ Develop. Preview. Ship. For the best frontend teams – Vercel
知らない?……えっとですねぇ、2020 年名称が変わったサービスでして、
以前は組織名が ZEIT(ツァイト)、サービス名は Now という名前でした。
これでわかった人がいるかもしれません。▲ は当初から使われていますので。
Now として公開された当初は静的コンテンツのみでしたが、
後の Now v2 で正式動的コンテンツの動作に対応しました。
今は動的コンテンツに使われる用途の方が多いんじゃないかと思います。
無料で使える範囲がとても広いです。 開発者が実験的なコンテンツだったり、
ある程度の開発されたコンテンツは無料で使用できる仕組みにしてあります。
Let’s Encrypt で SSL 化もしますし、独自ドメインも適用できます。
サーバが世界中にあり、その一つとして東京に設置してあります。
アジア初、Vercel 内でも 5 ヶ所目に設置しています。
その仕組みは?……実は AWS や GCP を使用してあって、
使用状況によってサーバを動的に変化させているわけです。
クラウドサービスをフル活用しているんですね。
▲ Download Vercel CLI – Vercel
公開方法は CLI を用いて vercel
コマンドで公開するか……
または GitHub・Gitlab・Bitbucket による Git 連動が使用できます。
開発者らしくシェル・ターミナルからコマンドで簡単に公開する事ができます。
▲Vercel で PHP を動かす方法
「あれ?でも Vercel って PHP は対応してないんじゃないの?」
▲ Supported Languages for Serverless Functions - Vercel Documentation
ええ、公式には次の対応なのです。
- Node.js
- Go
- Python
- Ruby
これなら PHP も対応しててもおかしくなさそうなのですが、
公式には対応していません。
でもご安心を。 Community Runtimes として PHP が動作する仕組みがあるんです。
PHP Runtime for Vercel - juicyfx/vercel-php | GitHub
動かすためにはちょっと工夫が必要です。
公開するディレクトリ・フォルダを用意します。その直下の vercel.toml
を作成し、
次のテキストを入れます。
{
"regions": ["hnd1"],
"functions": {
"api/*.php": {
"runtime": "vercel-php@0.3.1"
}
},
"routes": [
{ "src": "/(.*)", "dest": "/$1" },
{ "handle": "filesystem" },
{ "src": "/.*", "dest": "/404.html" }
]
}
regions
は東京サーバ hnd1
を設定します。日本参照向けですね。
無料で動的コンテンツの場合は 1 ヶ所指定になるため、指定しておくと良いです。
functions
は api/
内にある .php
ファイルで PHP を実行します。
動的ファイルは api/
内での実行が必須となります。
routes
はファイルがない場合に 404.html
を表示する設定です。
例えば 404.html
の代わりに api/index.php
とする事もできます。
vercel.json
は Apache の .htaccess
に相当する部分で、
HTTP ヘッダの追加や転送など、細かく制御が可能です。
api/
ディレクトリ(フォルダ)を作成し、更にその中に phpinfo.php
を作成し、
その中に入れます。
<?php
phpinfo();
では公開してみましょう。
公開するのは CLI で公開するか、Git への公開になります。
Git への公開はプロジェクトを連携させた状態で git push
で更新すれば良いので、
(vercel.json
が入っている必要があります)
ここでは CLI を紹介しておきましょう。
vercel --prod
とします。--prod
がない場合は公開前の確認向けです。
では Web サイトで確認!(ここでは api/info.php
にしています)
phpinfo が公開されています。PHP が動作しているのを確認できました。
🎈 Vercel(vercel.com・vercel.app) | ふうせん🎈 FU-SEN
もうちょっと詳細な説明はこちらで記載してあります。
無料で PHP が使えるサービスは他にもあるのですが……
- Heroku
→ 公開サーバが欧米で、無料は最大 1 プロジェクト常時。 - Google App Engine(Google Cloud Platform)
→ バージョンが古めで、気がつけば課金される可能性がある。 - Google Cloud Run(Google Cloud Platform)
→ App Engine よりも課金がはやく、デプロイの手間がかかる。 - Glitch・Replit
→ OS パッケージそのままでバージョンが古い。
一長一短なところがあります。
Glitch・Replit は使用経験者が少ないと思います。紹介ページをリンクしておきます。
▲Vercel はこれらに比べると、敷居が低くて、東京サーバもあるので、
使いやすいと思っていて、今回紹介しています。
気になる人は上に紹介したサービスも試してみて下さい。
追加 2021/02/26
PHP Advent Calendar 2020 では PHP8 の話題が多かったので、
おそらく気にしている人もいるかと思います。
Bump: v0.4.0 · GitHub juicyfx/vercel-php@c2e01b5
2021年1月2日 に vercel-php が 0.4.0 になっていて、
このタイミングで PHP8 で動作可能になっています。
……はい、 すでに ▲Vercel で PHP8 が使えます。
vercel.json
の runtime
で記載しているvercel-php
のバージョンを変更して下さい。
{
"functions": {
"api/*.php": {
"runtime": "vercel-php@0.4.0"
}
}
}
これで vercel
する事で PHP8 になっているはずです。
…… vercel --prod
って入れてない理由わかりますよね?
いきなり PHP7 から PHP8 に変えて、動かない可能性がありますからね。
まずは別の URL で表示できるようにして、動作を確認してからvercel --prod
で本番環境に反映するのですよ。
▲Vercel はそこまで考えて作られてあるんです。
PHP Advent Calendar 2020