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

佐世保・展海峰に行ってきた話

ごきげんようみなさま、梅雨入りしてメンタルもどんよりしている宮野です。

先日のラスバレイベント「朋友のブルーストライク」、皆様イベントストーリーは完読されましたでしょうか。

今回はこれまでに登場した首都圏から離れた長崎、現在の佐世保が舞台となりました。佐賀民としては九州が舞台になって大変に嬉しく思います。

というわけで。

行くぜ、佐世保

行きます。

続きを読む

Lemonade Ver6.0.0リリースとアイコン募集のお知らせ

Lemonade Ver6.0.0 リリースしました!

assaultlily.miyacorata.net

Ver6.0.0 Enoshima のアップデートでリリィのアイコンを設定できるようになりました!

現状は発動しませんが、一人のリリィに複数のイラストが設定されている場合は読み込みごとにランダムに読み込まれる仕様になっています。 また、リリィプロフィールページではそのリリィのアイコンイラストを一覧で表示、作者さんのTwitterやpixivのリンクへも飛べるようになっています。

f:id:miyacorata:20210427123009p:plain

また機能実装中にぐんたまさん(@Lie_0004)よりアイコン画像を提供いただきました、ありがとうございます!

イコン画像を提供いただける方を探しています

Lemonadeではリリィのアイコン画像を提供くださる方を募集しています!

私が筆が遅いしこけしなので...

もし「私のイラストアイコンとして使っていいよ!」という方がいらっしゃいましたらぜひとも @miyacorata までリプライあるいはメールでお寄せください!

画像の大きさ等の目安

  • ファイルタイプ : JPG, PNG, GIF, SVG, WebP等ブラウザで表示できる画像
  • サイズの目安 : 100px四方以上、縦横比1:1程度 大きい分は大は小を兼ねるのでOKです。
    縦横比が必ずしも1:1でなくとも大まかに正方形に近ければシステム側でクロップして表示できますので厳密でなくとも大丈夫です。
  • そのリリィだと分かる画像であればカラーかグレースケールか、デジタルかアナログかを問いません。
続きを読む

PukiwikiのURL表示を"ちゃんと"httpsにする

みなさまごきげんよう、宮野です。

わかりづらい表題ですが、リバースプロキシしたApache上で運用しているPukiwikiのちょっと気になってた点を修正しましたというエントリです。

Pukiwiki を運用しています

f:id:miyacorata:20210107155837p:plain

doc.miyacorata.net

最近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 というフラグを別にセットし、リバースプロキシによりフォワードされていた場合はポート番号の付加を省略するようにしました。

解決

f:id:miyacorata:20210119162525p:plain

URLがちゃんとhttps://で始まるようになりました。

補足

X-Forwarded-proto ヘッダは事実上の標準となっているヘッダで、現在は Forwarded という標準化されたヘッダーがあります。

developer.mozilla.org

developer.mozilla.org

いずれ、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 というサービスがあるらしいです。

xip.io

このサイトでできるのは実に単純で http://127.0.0.1.xip.io/ というふうにIPアドレスをくっつけてアクセスするとそのIPに飛ばしてくれるというものです。さらにサブドメインもぜんぶ飛ばしてくれるというスグレモノ。

とはいえ、IPが全部含まれるのは少々めんどくさいです。打ちづらいし。なにより見栄えが悪い。(見栄えを気にしてどうするんだというのはある)

しかし 宮野に 電流走る──

「適当なドメインを自機IPにポイントすればよいのでは?」

やることは実に単純明快です。まず自機のIPを固定、なにかほどよいドメインを用意し、そのドメインワイルドカード込みで自機IPにポイントするのみ。

普通のと違うのはローカルIPをポイントするためLAN内からしかアクセスできないという点です。

IPの固定

やるだけ。ONUまたはルータによってやり方が違うので取説をみましょう。

f:id:miyacorata:20201223114749p:plain

ドメインをご準備

なんかドメイン取得してもいい気がしますがここは横着します。

f:id:miyacorata:20201223115149p:plain

ddns.kuku.lu

DDNS NowというダイナミックDNSサービスを利用します。ダイナミックDNSというのは動的に変わるIPアドレスドメインを対応付けるためのシステムです。

が、普通に設定画面からAレコード設定できるので普通に使っちゃっています。全然ダイナミックじゃねえ。

f:id:miyacorata:20201223121027p:plain

で自機のIPにポイントします。

できました

f:id:miyacorata:20201223121541p:plain

f:id:miyacorata:20201223121613p:plain

自宅のWi-Fiに繋げばスマッホからも見れます。いいですね。

f:id:miyacorata:20201223124619p:plain

ファイル保存用ストレージであるところのDドライブの閲覧だけLAN内限定でできるようにしました。過去撮った写真見れます。わーい。

では~

ポップリンクスのユニット画像の話

皆様ごきげんよう、宮野です。巷ではポップリンクス略してポプマスが話題ですね。

ポプマスの現時点で実装が決まっている任意のアイドル3人でユニットを作れるキャンペーンサイトがオープンしています。

f:id:miyacorata:20201215235226p:plain

で、作成後にTwitterでシェアするとリンクカードで画像が表示されるわけです。

Bildolibro vojaĝanto、エスペラントで絵本の旅人です。(ポプマスくんĝを通してくれなかったので死後裁きにあってほしい)

例示のため実際に作ってみたユニットがこちら。一人旅人というより暴走特急がいますが仕様です。

画像添付してないのにTweetに画像が表示される仕組み

TwitterAPI経由で画像を投稿するにはTwitterAPIを叩くためのアプリ作成と、TwitterユーザによるOAuth承認が必要です。 しかしながら、昨今のTwitterAPIは時間あたりのツイート数など規制が厳しく、特にアイマスのような多くのユーザを抱えるコンテンツのシェアに使うのは得策ではありません。

身近な例を挙げると、(シャニマスが無料10連をやっている時期など)日付変更直後に10連してからこのカード引いたよツイートが飛ばせない場合があるのはこのAPI規制によるものです。一気に多くのユーザが引いたよツイートするからですね。

APIはクソ、でも画像はツイートしたい、ではどうするか?をうまく解決したのが今回のポプマスユニットプロデュースキャンペーンであると言えるでしょう。

続きを読む

今日のこけし 王雨嘉さん

皆様ごきげんよう宮野です。みんなアサルトリリィをみよう。

この記事はNITKC ProLab Advent Calendar 2020の12月12日の記事として書かれているはずなのですが、8日から11日までスッカラカンでワロタ。なにわろてんねん。

しかも日付変わっとるわ遅刻やんけ。

adventar.org

この先も空いてたりするので部員各位書いてください(切実) 埋まらなければこけしかいて埋めるか(?)

こけしをかいた

PCを新調して(参考記事)クリスタも一応入れてノリが来ていたのでひさびさにこけしをかきました。

f:id:miyacorata:20201212231455p:plain

王雨嘉(わん ゆーじあ)さんです。アサルトリリィを見ていないオタクはアマプラで見れるので見ろ。

三姉妹の真ん中で優秀な姉と妹に囲まれて育ったため自信のない性格。無口で感情表現が苦手なため、困ると黙りこんでしまい「怒ってる」とよく誤解される。学生寮では郭神琳とルームメイトである。

アイスランド出身の王家リリィ三姉妹の次女さんです。長女王瑞希(わん るーしー)さんと三女王莉芬(わん りーふぇん)さんも優秀なリリィであるのもあって、自身を「ヘボリリィ」と称していますが普通にガチプロです。

レアスキル(一人一つ持てるチート特技みたいなの(語弊))は天の秤目、目測のみで相手方の位置と距離をセンチメートル単位で把握できるみちびきもビックリな代物。天の秤目とCHARMアステリオンを使ってクッソ精密射撃ができます。実際の様子が4話「キンモクセイ」でご覧いただけますのでオタクははやく見ろ。

今回の作り方

f:id:miyacorata:20201213000310p:plain

親の顔より見たベジェ曲線ツール。レイヤ一覧でネタバレしていますが今回はアウトラインをベジェ曲線で引いた後すべてラスタレイヤに転写して線画レイヤとしています。

こうするとラスタレイヤに転写したラインを消す手間は生じますが、ベジェ曲線の重なりを気にせずに線を引くことができ、いらぬ曲線の分割が抑えられ、結果きれいな曲線の集まりになりうれしくなります。

何かが根本的に間違っている気もしますがかわいくかけたのでヨシ!

着色も塗り絵式に筆でベタベタ塗る!かわいい!ヨシ!

おわりに

www.azone-int.co.jp

お迎えしたいですね(率直)

アサルトリリィBOUQUET、見よう!