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ぜひ使ってね。
Lemonade Ver6.0.0リリースとアイコン募集のお知らせ
Lemonade Ver6.0.0 リリースしました!
Ver6.0.0 Enoshima のアップデートでリリィのアイコンを設定できるようになりました!
現状は発動しませんが、一人のリリィに複数のイラストが設定されている場合は読み込みごとにランダムに読み込まれる仕様になっています。 また、リリィプロフィールページではそのリリィのアイコンイラストを一覧で表示、作者さんのTwitterやpixivのリンクへも飛べるようになっています。
また機能実装中にぐんたまさん(@Lie_0004)よりアイコン画像を提供いただきました、ありがとうございます!
アイコン画像を提供いただける方を探しています
Lemonadeではリリィのアイコン画像を提供くださる方を募集しています!
私が筆が遅いしこけしなので...
もし「私のイラストアイコンとして使っていいよ!」という方がいらっしゃいましたらぜひとも @miyacorata までリプライあるいはメールでお寄せください!
画像の大きさ等の目安
- ファイルタイプ : JPG, PNG, GIF, SVG, WebP等ブラウザで表示できる画像
- サイズの目安 : 100px四方以上、縦横比1:1程度 大きい分は大は小を兼ねるのでOKです。
縦横比が必ずしも1:1でなくとも大まかに正方形に近ければシステム側でクロップして表示できますので厳密でなくとも大丈夫です。 - そのリリィだと分かる画像であればカラーかグレースケールか、デジタルかアナログかを問いません。
PukiwikiのURL表示を"ちゃんと"httpsにする
みなさまごきげんよう、宮野です。
わかりづらい表題ですが、リバースプロキシしたApache上で運用しているPukiwikiのちょっと気になってた点を修正しましたというエントリです。
Pukiwiki を運用しています
最近Pukiwikiの運用をはじめました。宮野がオタク資料を集めたり集めなかったりします。名付けてMiyaDoc。最近の更新はもっぱらアサルトリリィです。
ちょっぴりあった問題
MiyaDocで気になっていた点はページタイトル下のURL表示がhttpに固定されてしまうことでした。MiyaDocもちゃんとHTTPSで通信できるようにしていますから、この挙動はあまりよろしくありません。
原因はわかっていて、宮野鯖はMastodonなどを運用している関係でWebサーバにNginxを使っていますが、Apacheを使うやつ(Pukiwikiもその一つ)も動かしているのでNginxからApacheへリバースプロキシもしているためでした。
解決法
Pukiwikiのこのリンクは lib/func.php
で定義されている get_page_uri()
という関数で呼び出されていますが、HTTPとHTTPSの判別はさらに別の guess_script_absolute_uri()
という関数が呼び出されます。
guess_script_absolute_uri()
の実装を見てみると、$_SERVER['HTTPS']
が定義されていて値が on
であるとき、あるいは $_SERVER['REQUEST_SCHEME']
が定義されていて値が https
であるときに $is_ssl
がtrueになりスキームがhttpsになります。
ここまでわかればやることは明快です。リバースプロキシで X-Forwarded-Proto
ヘッダでHTTPSによるアクセスかどうか飛ばしているならそれを反映させればいいわけです。
$is_forwarded = (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https';
if ($is_ssl || $is_forwarded) { $host = 'https://' . SERVER_NAME . (($port == 443 || $is_forwarded) ? '' : ':' . $port); } else { $host = 'http://' . SERVER_NAME . ($port == 80 ? '' : ':' . $port); }
今回は $is_forwarded
というフラグを別にセットし、リバースプロキシによりフォワードされていた場合はポート番号の付加を省略するようにしました。
解決
URLがちゃんとhttps://で始まるようになりました。
補足
X-Forwarded-proto
ヘッダは事実上の標準となっているヘッダで、現在は Forwarded
という標準化されたヘッダーがあります。
いずれ、Forwarded
で書くのが当たり前になるのかな~と思っています。
VirtualHostをLAN内のどこからでも見えるようにして快適開発をする話
ごきげんよう、まもなくクリスマスですが皆様いかがお過ごしでしょうか?宮野です。
この記事はNITKC ProLab Advent Calendar 2020](https://adventar.org/calendars/5345)を12月22日の記事として書かれています。
1日遅刻ですが課題と再試で記事どころではなかったのですまんかった
バーチャルホストを使う
バーチャルホスト(VirtualHost)は一つのサーバで複数のドメインを運用するためのヤツです。宮野は自宅のPCにApache2.4系を入れています。
php -S 0.0.0.0:3000
すりゃいい気もしますが、LAN内からいつでも見えてほしいツールもこのPCで動かしたいのでバーチャルホストを使ってApacheをちゃんと設定します。ちゃんと設定しとけば本番でも活用できるしね。
WindowsにインスコしたApache2.4でバーチャルホストを使うには初期設定が必要です。
httpd.conf をいじる
バーチャルホストを使うにはまずApacheの設定の根幹であるところのhttpd.confをいじって設定を有効にする必要があります。httpd.conf の下の方をずずずっと見てみます。
# Virtual hosts #Include conf/extra/httpd-vhosts.conf
ありました。Includeの前のコメントアウトを消してバーチャルホストの設定を読むようにします。
httpd-vhosts.conf をいじる
既に雛形がしっかりしている上コメントアウトでバッチリ解説してあるのでじゅんじゅんに読んでいきましょう。英語は気合で読め。
解説の通りここで設定したバーチャルホストのうち一番上にあるものがここで設定済みのサーバと一致しないすべてのリクエストに使われます。おうちサーバなら適当でいいかもですが本番環境で使うならばエラーを返すように設定するべきですね。
バーチャルホストの設定例はこんな感じ。
<VirtualHost *:80> ServerAdmin starrysky@dainsleif.miyacorata.net DocumentRoot "C:/Users/miyacorata/Documents/StarrySky/public" ServerName starrysky.dainsleif.f5.si ErrorLog "logs/starrysky.localhost-error.log" CustomLog "logs/starrysky.localhost-access.log" common <Directory "C:/Users/miyacorata/Documents/StarrySky/public"> Require all granted AllowOverride all </Directory> </VirtualHost>
ログ系はいらん人はいらんでもいいんじゃないかな しらんけど
ディレクトリの設定は書いておかないと特にAllowOverrideは.htaccessが聞かなくて泣きを見ます。
これでこのマシンに対して starrysky.dainsleif.f5.si
でアクセスするとStarrySkyが開くようになりました。
LAN内からどこからでもアクセスしたい
さて、先程のセクションでServerNameを starrysky.dainsleif.f5.si
にしていることにお気づきいただけるでしょう。starrysky.localhost
とかじゃないんだ、と。
*.localhostでも同じことが出来ますが自機からのアクセスからしか出来ない上になんか増やしたらhostsを書き換える必要があります。それはあまりにもアホ。LAN内からアクセスできるようにしてスマホや別端末からのアクセスも可能にしたいものです。
じゃあLAN内にDNSサーバを立てる?めんどくさい。パス。
mDNS?だめです。starrysky.dainsleif.local みたいなの(Windowsだと)設定できないっぽいし。
じゃあどうすっかな思案したところであるサービスの存在を知りました。
xip.io というサービスがある
ちょっと調べてみると xip.io というサービスがあるらしいです。
このサイトでできるのは実に単純で http://127.0.0.1.xip.io/ というふうにIPアドレスをくっつけてアクセスするとそのIPに飛ばしてくれるというものです。さらにサブドメインもぜんぶ飛ばしてくれるというスグレモノ。
とはいえ、IPが全部含まれるのは少々めんどくさいです。打ちづらいし。なにより見栄えが悪い。(見栄えを気にしてどうするんだというのはある)
しかし 宮野に 電流走る──
「適当なドメインを自機IPにポイントすればよいのでは?」
やることは実に単純明快です。まず自機のIPを固定、なにかほどよいドメインを用意し、そのドメインをワイルドカード込みで自機IPにポイントするのみ。
普通のと違うのはローカルIPをポイントするためLAN内からしかアクセスできないという点です。
IPの固定
やるだけ。ONUまたはルータによってやり方が違うので取説をみましょう。
ドメインをご準備
なんかドメイン取得してもいい気がしますがここは横着します。
DDNS NowというダイナミックDNSサービスを利用します。ダイナミックDNSというのは動的に変わるIPアドレスとドメインを対応付けるためのシステムです。
が、普通に設定画面からAレコード設定できるので普通に使っちゃっています。全然ダイナミックじゃねえ。
で自機のIPにポイントします。
できました
自宅のWi-Fiに繋げばスマッホからも見れます。いいですね。
ファイル保存用ストレージであるところのDドライブの閲覧だけLAN内限定でできるようにしました。過去撮った写真見れます。わーい。
では~
ポップリンクスのユニット画像の話
皆様ごきげんよう、宮野です。巷ではポップリンクス略してポプマスが話題ですね。
ポプマスの現時点で実装が決まっている任意のアイドル3人でユニットを作れるキャンペーンサイトがオープンしています。
で、作成後にTwitterでシェアするとリンクカードで画像が表示されるわけです。
♪オリジナルユニット完成♪ #ポプマスユニットプロデュースキャンペーン 開催中!#ポプマス #事前登録受付中 https://t.co/ViH3J7xiCk
— 宮野 慧 (@miyacorata) 2020年12月15日
Bildolibro vojaĝanto、エスペラントで絵本の旅人です。(ポプマスくんĝを通してくれなかったので死後裁きにあってほしい)
例示のため実際に作ってみたユニットがこちら。一人旅人というより暴走特急がいますが仕様です。
画像添付してないのにTweetに画像が表示される仕組み
TwitterにAPI経由で画像を投稿するにはTwitterAPIを叩くためのアプリ作成と、TwitterユーザによるOAuth承認が必要です。 しかしながら、昨今のTwitterのAPIは時間あたりのツイート数など規制が厳しく、特にアイマスのような多くのユーザを抱えるコンテンツのシェアに使うのは得策ではありません。
身近な例を挙げると、(シャニマスが無料10連をやっている時期など)日付変更直後に10連してからこのカード引いたよツイートが飛ばせない場合があるのはこのAPI規制によるものです。一気に多くのユーザが引いたよツイートするからですね。
APIはクソ、でも画像はツイートしたい、ではどうするか?をうまく解決したのが今回のポプマスユニットプロデュースキャンペーンであると言えるでしょう。
続きを読む今日のこけし 王雨嘉さん
皆様ごきげんよう宮野です。みんなアサルトリリィをみよう。
この記事はNITKC ProLab Advent Calendar 2020の12月12日の記事として書かれているはずなのですが、8日から11日までスッカラカンでワロタ。なにわろてんねん。
しかも日付変わっとるわ遅刻やんけ。
この先も空いてたりするので部員各位書いてください(切実) 埋まらなければこけしかいて埋めるか(?)
こけしをかいた
PCを新調して(参考記事)クリスタも一応入れてノリが来ていたのでひさびさにこけしをかきました。
王雨嘉(わん ゆーじあ)さんです。アサルトリリィを見ていないオタクはアマプラで見れるので見ろ。
三姉妹の真ん中で優秀な姉と妹に囲まれて育ったため自信のない性格。無口で感情表現が苦手なため、困ると黙りこんでしまい「怒ってる」とよく誤解される。学生寮では郭神琳とルームメイトである。
アイスランド出身の王家リリィ三姉妹の次女さんです。長女王瑞希(わん るーしー)さんと三女王莉芬(わん りーふぇん)さんも優秀なリリィであるのもあって、自身を「ヘボリリィ」と称していますが普通にガチプロです。
雨嘉さんの姉と妹はこちらです! #アサルトリリィ pic.twitter.com/0L3ioHT1jE
— 二川二水@アサルトリリィ原作公式 (@assault_lily) October 26, 2020
レアスキル(一人一つ持てるチート特技みたいなの(語弊))は天の秤目、目測のみで相手方の位置と距離をセンチメートル単位で把握できるみちびきもビックリな代物。天の秤目とCHARMアステリオンを使ってクッソ精密射撃ができます。実際の様子が4話「キンモクセイ」でご覧いただけますのでオタクははやく見ろ。
今回の作り方
親の顔より見たベジェ曲線ツール。レイヤ一覧でネタバレしていますが今回はアウトラインをベジェ曲線で引いた後すべてラスタレイヤに転写して線画レイヤとしています。
こうするとラスタレイヤに転写したラインを消す手間は生じますが、ベジェ曲線の重なりを気にせずに線を引くことができ、いらぬ曲線の分割が抑えられ、結果きれいな曲線の集まりになりうれしくなります。
何かが根本的に間違っている気もしますがかわいくかけたのでヨシ!
着色も塗り絵式に筆でベタベタ塗る!かわいい!ヨシ!
おわりに
いよいよ雨嘉さんのアクションドールのご予約受付が12/18より開始となります!神琳さんと一緒に揃えてあげてくださいねー #アサルトリリィ https://t.co/w62ROGCG9W
— 二川二水@アサルトリリィ原作公式 (@assault_lily) 2020年12月11日
お迎えしたいですね(率直)
アサルトリリィBOUQUET、見よう!