CoreServerV2でComposerをPHP8で回す話
ごきげんよう皆様、12月になって急に寒くなりましたがお元気でしょうか。私は無事に体調を崩し、唸りながら仕事をしています。
12月なのにブログを書く予定がなく、とはいえそろそろなんか書くかの気持ちがある。
— 宮野 慧 (@miyacorata) 2021年12月7日
最後のブログ投稿が5月に展開峰に行ってきたときの話だったのでとうとうこのブログも目立つ位置に広告が載るようになってしまいました。癪なので期間が空きすぎるのも考えものなので更新します。ブログをもっと書け。
結論だけちゃっちゃと知りたい人は一番下にスクロールしましょう。
PHP8に移行したい
1年前
PHP8系爆誕してて卒倒した
— 宮野 慧 (@miyacorata) 2020年12月1日
PHP8.0系がリリースされました。
現在
— 宮野 慧 (@miyacorata) 2021年10月23日
写真は全く関係がありません
LemonadeVer9系からPHP8に移行するか
— 宮野 慧 (@miyacorata) 2021年10月27日
PHP8.0がリリースされてもうすぐ1年という頃、そろそろPHP7.4で動かしているLemonadeも8.0にバージョンアップして良いのかな、と思うようになってきました。
PHP8.0にすると何が嬉しいのか
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.json
でPHPのバージョンを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ぜひ使ってね。