Taglibro de miyacorata

Vi fine falos en la marĉon.

CoreServerV2でComposerをPHP8で回す話

ごきげんよう皆様、12月になって急に寒くなりましたがお元気でしょうか。私は無事に体調を崩し、唸りながら仕事をしています。

最後のブログ投稿が5月に展開峰に行ってきたときの話だったのでとうとうこのブログも目立つ位置に広告が載るようになってしまいました。癪なので期間が空きすぎるのも考えものなので更新します。ブログをもっと書け。

結論だけちゃっちゃと知りたい人は一番下にスクロールしましょう。

PHP8に移行したい

1年前

PHP8.0系がリリースされました。

現在

写真は全く関係がありません

PHP8.0がリリースされてもうすぐ1年という頃、そろそろPHP7.4で動かしているLemonadeも8.0にバージョンアップして良いのかな、と思うようになってきました。

PHP8.0にすると何が嬉しいのか

www.php.net

Nullsafe演算子、Match式、Union型などがアツいなと思いました。

実はNullsafe演算子はLaravelではoptionalヘルパが存在しているのでありがたみとしては弱めなんですが、それでも言語がサポートしてくれるのは嬉しいものです。

Match式は見ての通りなものなので割愛します。とはいえ現在あるSwitchの中で複数の変数を書き換えてる場合があって、まだまだSwitchが残ってしまいそうです。とはいえいずれ撲滅したいですね。

Union型はなかなかアツいです。PHPは標準の関数でも文字列と配列の両方を受け入れたりとかします。例えば文字列の置換をしたい場合、

str_replace('fuck', 'meow', 'What the fuck'); // -> "What the meow" になる
str_replace(["\n", "\r"], '', $text); // -> $text の中の文字列の改行を消せる

といったように使えます。当然独自に定義したヘルパ関数などでも文字列と配列の両方をとることは可能です。ところで、PHP7.4では関数の引数で型宣言をすることが可能でしたが、いずれかの型のみが指定可能で複数の型を指定することはできませんでした。これはつまり、厳密に複数の型を指定したい場合は関数の内部で型チェックなどをする必要があり、また入力補助を活用するためにPHPDocを書いておく必要があることを意味します。

PHP8.0でUnion型が追加されたことで、上述の問題点は解消されました。当然関数内部の処理のために型チェックは必要ですが、それでもPHPDocに頼らずに引数の型指定と入力補助とチェックができるのはありがたいことです。

PHP8.0にしよう

Lemonadeは現状、CoreServerV2上で動いています。設定等のカスタマイズ性はVPSに劣りますが、VPSが必要なほどすげえことをやってるわけではなかったので、カスタマイズ性を犠牲にしてでも基盤管理を丸投げするズボラ運用をしたければアリな選択肢だと思っています。

LemonadeがLaravelベースである以上、依存関係をインストールするためにComposerが必要になります。(流石にcomposer installしたあとのすべてをFTPアップロードとかはしたくない) CoreServer公開鍵暗号を使ったSSH接続ができますので特に問題にはならない、と思いきや、思わぬ罠があります。

CoreServerのコンソールのPHPは7.4

困った。

管理画面でそれぞれのサブドメインで使うPHPのバージョンを指定することはできるのですが、コンソールのPHPが7.4固定なのは罠でした。

composer.jsonPHPのバージョンを8.0系以上と指定しているため、この状態ではそもそもComposerが仕事をしてくれません。

しかし宮野に電流走る

そういえばこのPHPはどこにあるんだろう

miyacorata@coreserver:~$ which php
/usr/local/php74/bin/php

ということは?

miyacorata@coreserver:~$ /usr/local/php80/bin/php -v
PHP 8.0.8 (cli) (built: Jul 29 2021 00:06:01) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.8, Copyright (c), by Zend Technologies

勝ちです。コンソールでもPHP8.0が使えます。.bashrc

alias php80="/usr/local/php80/bin/php80 "

と書き加えたため、より手軽に使えるようになりました。あとは php80 ~/composer.phar install すれば依存関係が全部インストールされます。

Artisanのコマンドとかも全部 php80 artisan optimize みたいにやればOKです。やったー。

まとめ

コアサーバV2のSSHでPHP8.0を動かしたいときは /usr/local/php80/bin/php を叩きましょう。

アサルトリリィはいいぞ。Lemonadeぜひ使ってね。

lemonade.lily.garden