PHP7.4
自動テストで見つかるエラーは完全対処。
自動テストで見つかるエラーは完全対処。
自動テストをちゃんとやりきるために、本番環境向けにやっている独自のエラーログ機能を、テスト環境では無効化して本来のエラー検知をおこなうようにしてみました。
アンパンマンDBのテストがNOTICEレベルのエラーで落ちるようになりました。
NOTICEレベルというと、それ自身ではダメージはないけど、怪しい動きをしている部分で報告されるエラーです。
現状の実運用では直ちに対策する必要はないものの、何かしらのバグの副作用で起きることが多く、将来のPHPでは本当のエラーになることもあるので、今のうちに見つけて潰しておいた方がいいのです。
実は本当に修正が必要ないNOTICEエラーもあるのですが、それも「バグの副作用で起きたNOTICE」を覆い隠すノイズになるので、修正が必要ない部分は、NOTICE回避するだけの修正をすることになります。

昨日途中まで進めていたクエスト、クリアしてきました。
ちなみに、写真はクエストとは特に関係のない、フェスタ・インフェルノです。
ァォィョッュはソロ志向なので、パーティ同盟となるフェスタ・インフェルノとは今後も無縁の予定です。
テストが通らなくなっていた部分を修正。
細かい警告とかはまだ残っているので、そこらへんも修正したら、8.0に上げる準備に取り掛かろうと思います。
謎のエラーが起きることもあるから、レンタルサーバーからVPSに逃げるのもありかなぁ…。
魔法の迷宮ボスモンスター「アンドレアル」登場!
…なんですが、どうせ私ではまだ勝てないと思うので、ほったらかしてァォィョッュのお使い系のクエストを進めていました。
クリアしたのは「はじめてのおつかい」、本当に比喩とか抜きに文字通り「おつかい」のクエストですね。
ついてクンのチュートリアル兼しぐさ習得にもなっているのです。
それ以外のクエストも、受注したりアイテムを集めたり、クリアしてないけどちょっとずつ進んでます。
一部仕様の変わってしまった部分で、警告が出たりテストが通らなくなった部分を直したりしていました。
謎のエラーは頻度は下がったけどまだ起きるには起きるみたい…。
バージョン0.34.1公開しました。
むしろ7.3の頃より安定した気がしたので、7.4にバージョンアップしました。
ただ、一部動作が変わっているように見える部分があるので、一応慎重に確認しておきます。
別ドメインでPHPバージョンアップの実験中。
これで大丈夫なら、本当にバージョンアップします。
PHPのバージョンを上げたらSQLiteが使えない件ですが、サーバー会社に問い合わせたら、すでに対応が予定されていました。
とりあえずは待つだけで良さそうです。
ただ、SQLiteのための対応ではなくて、サーバー自体を根本的に新調するとのことで、メンテナンス時間はそこそこ長くなるようです。
その時が来たら、またお知らせします。

テンの日。
バージョン6前夜祭だか何だか知りませんが、サーバー会社とのやり取りやVS2022で遊ぶのに忙しかったので、ドラクエ10の方は最低限の回収のみ。
この写真、右側にいるプーちゃんはテンの日にだけ出てきて、ボスカードをくれます。
左奥にいるテリーはランダムに表れて、ボスカードを渡すと倒してくれます。
つまり、このプーちゃんとテリーの組み合わせで登場すると、実質何もしなくてもボス討伐報酬がもらえます。
強敵は自分で倒してこそ、とは思うものの、ネトゲのボスは周回前提で正直だれるし、時間もないのでこういうのはありがたいのです。
そもそも!
うちのサーバーが!!
PHPのバージョン上げると!!!
SQLite対応が省かれる!!!!
アンパンマンDBも動かない!!!!!
先日のFlaky Testの件、本来安定しているはずの状況でも環境問題で不安定化してしまうものがありました。
開発環境でも本番環境でも引けるのに、テスト環境(CircleCI)でだけ何故かDNSを引けないことがあったのです。
それを解決するには、自前でDNSを解決するしか、ってことで、これ。
【php】curl関数でresolveオプションを指定して名前解決を操作する at softelメモ
curl_setopt($ch, CURLOPT_RESOLVE, array('ホスト名:ポート番号:宛先のIPアドレス'));
の形式でIPアドレスを指定できるというやつです。
その前に、本当にDNSのせいなのかも確認しておきたいところですが、何せ不安定なもので、「失敗の様子を確認したい時に限って失敗してくれない」ということもありうるんですよね…。
Twitterに投稿する文字列をカウントするいい感じのPHPライブラリ「twitter-text-php」を見つけました。
アンパンマン日替わり紹介botに使う分を中心に、素朴な文字カウントから切り替えてみようと思います。
うちのサーバーもすでにPHP8に対応しているのですが、サーバーは対応していてもプログラムが正常に動かなかったため、移行できていませんでした。
そろそろどうにかしたいので、デバッグ可能な検証環境を用意したいなと考えています。
当初、Dockerがちょうどいいかなと思っていたのですが、PHPだけでなく、サーバーやドメインも関わってくるので、仮想マシンまるごと用意した方がいいのではないかと考えています。
Haxe - The Cross-platform Toolkit
Haxeについて調べてました。
複数のプログラミング言語のソースコードにコンパイルする言語です。
以前から興味出していたんですが、日記の方には書いてませんでした。
私はC#とPHPを中心的に使っているんですが、Webのフロントエンド向けにはJavaScriptがいいとか、やりたいことに対して使うべき言語がてんでバラバラなんですね。
Windows向けとWeb向けに同じものを取り扱う別のシステムを作ろうとしたら、同じものを違う方法で書き直すことになるわけで、二度手間になるわけです。
この共通ロジックをHaxeで書けば、C#とPHP、そしてJavaScriptにコンパイルして、同じものをいろんな場所で使えるようになるはずなのです。
直しました。
文字列連結の「.」を使うべきところ、間違えて除算の「/」を使ってしまい、文字列は数値じゃないから0扱いされて、0除算が発生し、NaNが生まれて、NaN相手に文字列操作はできないから、結果はNULLになって、NULLをデータベースの非NULL列に入れようとしたために、エラーになっていました。
最後のエラーだけ見てて原因の特定に時間がかかってしまいましたが、0除算の時点でWARNINGが発生するのでそこで気付くべきでした。
動的型付けのPHPだから型が合わなくても進んでしまったというのも厄介なところでした。
ミフミンのバージョン3.2ストーリー進行。
ちょっとムービー見ただけ。
アンパンマンDB4やらなんやらで、ページを目視確認しながらもりもり開発していった結果、自動テストのカバレッジが著しく下がってしまいました。
カバレッジが高いからいいコード、なんて都合のいいことはないのだけれど、自動テストをもれなく書いていると、予期せぬデグレとか、外部サービスの仕様変更とか、確認したつもりでできていなかった部分とか、結構見つかるものなのです。
で、外部サービスの仕様変更で使えなくなった機能の削除とか、目視ではいい感じに動いているように見える機能のちゃんとしたテストとか、やってました。
そして、ちゃんとテストした機能なら、当初考えていた意外にも使い道がありそう…ということで、何か考えています。
バージョン2が出ていたようなので、アップデートしてみました。
速度が速くなっているらしいですね。
ァォィョッュもハロウィンイベントクリア。
ムービーをスキップしたらずいぶん早く終わりました。
しかし、クリア後が結構だるそう。
岩を後一回で壊れる状態にして右側に籠城する作戦だったが、支えになるはずだった赤ブロックが早々に壊れてしまった。 #ミスタードリラー #NintendoSwitch pic.twitter.com/7qScz5Ea5o
— 📛松田美文 (@matsuda323) July 8, 2020
管理用の活動記録画面に、ゲーム記の一部のページにある進行状況と、Qiitaの投稿情報と、最近コミットしたGitHubの情報を出せるようにしました。
APIは便利ですね。
日記の賑やかし用と言えば、これもあったんでした。
PHPのComposerに、fundというのがあったんですよ。
「composer fund」というコマンドで、支援を求めているパッケージを調べることができるというものです。
Composerを使っている人が直接的に得をする機能ではないので日本語情報は少ないですが、ライブラリ開発者だって金がないと暮らしていけないし、優秀なライブラリを作れないわけですからね。
無料の物にあえて金を払うというのも、様々なものが無料で手に入る今、考えるべきことなのかもしれません。
数の多いところはおおむねやっつけた。
ログが無茶苦茶肥大化することもなくなったので、後は余裕があるときにリスクの高そうなところから対応していけば良さそう。
候補になる箇所が多すぎて大変なので、特に必要な場所に絞って対応できるように、エラーログの統計を取ってそれを参考に修正していくことにしました。
影響の大きいところを優先的に。
表面化しにくいバグも見つけたので、効果は上がっています。
アンパンマンDBを中心に、引き続きNotice修正中。