Firefox Desktop Browser 91 が8月5日にリリースされました。
Release notes
Firefox 91 release notes for developers
Pickup for WebClass
webclass に影響のある変更はありませんでした。
今後の Firefox のリリースについて
次回のリリースは2021年9月7日に予定されています。
その他ブラウザのリリースはこちらにまとめています。
Firefox Desktop Browser 91 が8月5日にリリースされました。
Firefox 91 release notes for developers
webclass に影響のある変更はありませんでした。
次回のリリースは2021年9月7日に予定されています。
その他ブラウザのリリースはこちらにまとめています。
こんにちは。福岡です
ご無沙汰になってしまいましたが、最近に調整していた開発環境の話を紹介します。いろんなPHPのバージョンで動くか検査する方法です。
WebClass は Debian と RHEL をサポートしています。具体的には、両者について OS の側でサポートされている期間の間、WebClass も動くように維持するというポリシーです。したがって、サポートする PHP バージョンもこれらOSが現在サポートしている範囲になります。
正直なところ、特に RHEL はメジャーバージョン単位のサポート期間が長くてしんどいです。RHEL 6 の PHP 5.3 はようやく去年にサポート・メンテナンス2が終了しました( REF:Red Hat Enterprise Linux 6 (RHEL6) のサポート終了と移行について)。これで 5.3 が消えると思いきや、RHEL 7 は PHP 5.4 !! 。PHP 5.4 の最初のリリースは 2012年 3月でして、これももう10年になろうとしています(REF: Version 5.4 changelog)。なお、Debian 11 が先週にリリース(REF)されたため、これから PHP 7.4 の対応等を進めていくことになります。
どうやって PHP 5.3 - PHP 7.4 で動くように確認するのか? これが問題です。
昔は、それこそ Debian 8 と Debian 9 と CentOS6 と、という感じで複数のサーバを構築していました。ですが、機能も増えてきている今の WebClass を1つ1つ手でチェックしていくというのは無理です。ベテランプログラマーはバージョン依存が出にくい PHP のコーディングスタイルを身につけていますが、新しく加わった人がそれを身につけるものしんどいし、レビューでもチェックしきれません。実際のところ、バージョン依存の問題をポロポロと出してしまっています。
そこで、検査と開発者へのフィードバックの機械化を進めています。
WebClass ではアジャイルな開発スタイルを採用しています。開発作業の流れとしては、社内の GitLab を使って Issue => Merge Request => Merge を繰り返しています。そして、このイテレーションでは GitLab の継続的インテグレーション機能を使って、テストとパッケージングを機械化し、素早く完全な変更を繰り返していくことを意識しています。自動テストの一部は PHP Unit を使っており、継続的インテグレーション機能(Pipelie)は次のような感じです。
PHP Unit の実行環境として、それこそ少し前までは Debian のサーバを構築していました。その後にテスト用のサーバの維持などの問題で CI での自動テストの運用が止まってしまいましたが、そうするとやっぱり開発者が自分でテストをするというのは、どうしてもおろそかになります。そこで、CI-Runner が使う Php Unit 実行用の docker イメージを作り、メンテナンスが後手に回ったテストを直し、今では Merge Request を発行するたびに自動的に Php Unit の結果がフィードバックされるようになっています。
PHP のバージョンごとにコンテナイメージを追加することで、複数のPHPバージョンで並行して自動テストを行うことができます。今は PHP5.6 と PHP 7.3 の環境で自動テストが走っています。
一方、Php Unit さえあればいいかと言うとそうでもありません。自動テストが実装されていないところはテストされないのが何より問題です。WebClass は2000年から開発スタートして、今まで完全な作り直しはありません。ですので、フレームワークのない状態から今まで拡張の傍らで必死にリファクタリングを進めて構造化し、後から自動テストスイートを加えて、そこからテスト可能な実装にリファクタリングしてテスト実装して、と走ってきました。まだテスタブルでないコードも、自動テストが実装されていないコードも残っています。
Php Unit は自動テストが実装されないとコードを検査できませんが、PHP のコードの文法レベルであればすぐにスキャンできます。文法レベルの問題としては、例えば以下があります。
// PHP 5.4 から使える。それ以前のバージョンでは文法エラー
$array = [ 1, 2, 3];
// この書き方はどのバージョンでも使える
$array = array( 1, 2, 3 );
この程度と思いきや、文法エラーは PHP をロードした時点でエラーになって落ちるので、初期の require() などで1つでも混入すると機能が全く動かなくなります。ですので、検査する価値はあります。
PhpLinter のライブラリもいくつか公開されていますが、中を除くと基本は PHP に実装されている Lint 機能を使っているようです。この機能はコマンドラインで php -l test.php
と実行して検査できます。ということは、 PhpUnit を動かせるコンテナであれば、composer とか phing を使うまでもなく以下のコマンドでチェックできます。
find $SRCDIR \( -type f -name "*.php" -o -name "*.inc" \) -exec php -l {} \; | grep -v 'No syntax errors detected'
ということで、準備しました!
PHP 7.4 で早速 PhpUnit が落ちています。また、UnitTest のJob に 7.0 などがいないのは、まだ調整中のためテストJob を入れたり外したりしているからです。
自動テストに失敗していれば、Merge Request 画面でもその結果が表示されて、マージできなくなります。
Lint を実行するコマンドは、実は PHP のバージョンごとに用意してあります。
これは、大学に提供しているカスタム機能などがその大学での実行環境に依存していることが有るためです。このように、もともと特定の環境で動くことを想定しているコードがどうしてもあるのと、新しいバージョンに対応させていく優先順位はありますので、全てを一気にとは行きません。このタイムラグを解決するための苦肉の策です。
composer の overtrue/phplint などのツールもあり、phplint ツールのコンフィグファイルを書き分けるても有るのですが、それはやめました。理由は2つ。1つは、PHP バージョンごとに実行環境を分けているので、PHP バージョンが古いと composer の使いたいライブラリやバージョンを使えなかったりして返ってややこしい。1つは、php -l は Deprecated などの情報もバリバリ書き出してくれるので、将来のバージョン対応を見据えて Error ではない情報もチェックするときに便利なため。こういうときには良くも悪くも Bash は単純で、除外リストなど開発者がそのまま読んだり調整しやすいと思ったからです。
PHP のバージョンごとのテスト用 Docker がひとまず揃いました。CI でも動かしますが、Docker なので開発者の手元でもすぐに動かせます。まずはこれで PHP の文法レベルの問題は未然に防げるようになると期待できます。
さらにテストの内容を充実させるために PHPUnit のテストはどんどん書き足していきます。そのため、Merge Request のレビューではテスト可能な設計になっているか、テストの内容は十分か、なども引き続き突っ込んでいきます。
また、レビューにおける脆弱性の検査もなかなか難しいため、GitLab の SAST 機能あたりに興味を持っています。よく見ると PHPについては PHP-CS の拡張パターンのようですが。
https://git.lan.datapacific.co.jp/help/user/application_security/sast/index
小さなチームでレガシーコードも抱えていますが、うまくやりくりして良くしていきます。
こんにちは。福岡です
今日ではいろんなクラウドサービスが利用されており、いつも当たり前のように使っているところで突然サービスが止まってしまったりすると、仕事が進められなくて困ったりします。もしくは、動きが変わってしまうこともあります。
WebClass を利用いただいている学校では WebClass もそうですが、実際にはブラウザのアップデートやインターネット回線、遠隔会議システムなど組み合わさって利用されていると思います。
ブラウザのリリース情報とWebClassの対応については こちら で案内しています。
ここでは、他にいくつか、組み合わせて使っていらっしゃると考えられるクラウドサービスの稼働状況を確認できるサイトを列挙しました。
Zoom
Cisco Webex
Microsoft Office 365
こうしたサービス稼働状況はずっと見ていられるわけではないですし、リリースノートも毎回細かく見ていくのはかなり大変です。ですが「あれ?」と思ったときに、こちらのサービス状況を見ると問題切り分けの助けになることもあると思います。
こんにちは。福岡です。
Chrome for Desktop 87 が 11月17日にリリースされています。このChromiumエンジンベースの Microsoft Edge 87 も今週中にリリースされる予定です。
Chrome 87 に関する情報は以下です。こちらに、主な変更点の情報へのリンクがあります。
https://developers.google.com/web/updates/tags/chrome87
JavaScript の言語レベルの変更はこちらにも情報があります。
https://v8.dev/blog/v8-release-87
CSS/JS の Chrome Platform の更新はこちらです。
https://www.chromestatus.com/features#milestone%3D87
Release Note から辿った情報で、WebClassを利用するにあたって特に気になる変更はありません。
Adobe は12月末を持って Flash のサポートを打ち切ります。
これに合わせて各ブラウザも動いています。
Safari 14 はすでにFlashの機能を削除しています。
Chrome は次のリリースの v88 で完全削除される予定です。
Chrome 88 のリリースは 1/19 の予定です。
その他ブラウザのリリースはこちらにまとめています。
こんにちは。福岡です。
Safari14 がMacでは9月16日にリリースされています。だいぶ遅れましたが、変更をまとめておきます。
Release Note
https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes
WebClass と関係しそうなところは以下です
その他、プライバシー・セキュリティ対応やJS/CSSなどの新機能対応があります。
また、iOS&iPadOS 14 も同じ日にリリースされています。
Release Note
https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14-release-notes
iOS 14 update
WebClass と関係しそうな点としてはデフォルトブラウザを変えれるようになっています。
Mac の Safari14 では、リリースノートに Web Extension のサポートが加わったとあります。
Safari には以前から拡張機能があったような気がしましたが、Safari独特のものだったかもしれません。一方、Chrome や Firefox などの拡張機能は WebExtensionAPI に準拠しています。そのため、WebExtensionAPIを使ったブラウザ拡張開発では複数のブラウザに対応させやすかったのが、Safari だけ蚊帳の外だったのでしょう。
Safar Extensions
https://developer.apple.com/safari/extensions/
https://developer.apple.com/documentation/safariservices/safari_web_extensions
インストールする方法はこちら
https://support.apple.com/ja-jp/HT203051
まだ試験段階ですが、HTTP/3 プロトコルが使えるようになっています。
これについてはどこかで改めて調べ直したいですが、HTTP/3 プロトコルはWebの通信プロトコルの次世代版です。
現在は HTTP1.1 に加えて HTTP2 が使われ始めています。1つのページがCSSやJS、イメージなど多数のリソースで構成されているケースが増えてきていますが、1ページを表示するにあたって同時にたくさんのリソースを取得する時、HTTP1.1 では通信の仕組みとして無駄がありました。それを改善してページ表示を早くするためのプロトコルの改善が行われています。HTTP2 とHTTP3 はGoogleが提案したもので、Chrome では以前からHTTP3 が試せるようになっています。
HTTP2 は例えば SAKURA interne のこのような解説があります。
https://ssl.sakura.ad.jp/column/http2/
WebClass でも試してみたいところです。
さらに、そもそもTCP ではやりとりが丁寧すぎるということで、UDP にしたのが HTTP/3 です。
同じく SAKURA internet に以下のように解説があります。
https://ssl.sakura.ad.jp/column/http3/
TCP と UDP は通信の信頼性の差で優劣をつけるものではなく、通信の目的によって使い分けられるものです。例えば動画などのストリーミングデータ配信では多少の欠損があっても連続的にどんどんデータを流せるUDPが使われたりします。
そういえば、PDF も今ではファイルのデータを全部ダウンロードするまで待たずに表示しています。もはや動画のストリーミングデータみたいなノリです。Google 的には、Web ページのデータはもはやこのようなストリーミングデータ的にブラウザにどんどん流れ込んでくるようなものと考えていい、というノリなのでしょうか。