2026-04-12

週刊オープンソース:goro の CI 詰め、Go ライブラリ二つ、そして一つの撤退

4月6日〜12日の週。PHP-in-Go ランタイムの品質面を押し上げ、Go の新規 ライブラリを2つ、そして引きずらずに正直に棚上げしたプロジェクトを 1つ。

goro:CI のギャップを詰める

KarpelesLab/goro は Pure Go で書いている PHP の再実装で、PHP 本家のテストスイートをそのまま 回している。今週はおおむね 256 件の失敗から ~199 件まで に縮小。 82 コミットの内容は、$arr[] .= … 合成代入の二重追加バグ、readonly プロパティのエラーメッセージを本家と一字一句合わせる修正、4桁を 超える年を拒否する DateTime シリアライズ、createFromFormat の null バイト処理、EXPECTF 正規表現のマルチバイト UTF-8 対応、 テストランナーで SKIPIF → skipTest を正しく拾う修正、など。

大半は派手な新機能ではなく、エラーメッセージや端のケースの挙動を 本家に合わせる地味な作業。ただ、実際の PHP コードが goro 上で 「特に何も気付かず動く」ところまで持っていくには、この種の 詰めが効く。並行して進めている Rust 版 goro-rs にも同じ週に35コミット入った。

litertlm-ios:棚上げ

litertlm-ios は 6日に着手して10日には棚上げした。狙いは iPhone で Google の LiteRT-LM を Metal GPU 経由で動かすこと。ビルドは通り、動作もし、 LiteRTLM.xcframework が生成できる状態まで行った。ただ、Google の LiteRT-LM 向け GPU アクセラレータはクローズドソースで、オープン ソース側の経路を作るには LiteRT-LM のアクセラレータプラグイン インターフェースを TFLite の Metal デリゲートにブリッジするしかない。 これは迂回策であって、プロダクションの土台にはならない。

リポジトリの README に詳しいポストモーテムと、今の時点で代わりに使うべきランタイムの 比較表(MLX Swift、SwiftLM、llama.cpp、MLC-LLM)を書いた。Google が 本物の LiteRT-LM GPU 経路をオープンソース化する日が来れば (上流の issue がある)、ビルドまわりの資産はそのまま拾える。それまでは、 得たものを書き残して先へ進むほうがいい。

新しい Go ライブラリを二つ

anyhash — 60種類の ハッシュアルゴリズムをインポートではなく名前で選ぶ Go の ハッシュライブラリ。sha256.New() のかわりに New("sha256")。 大文字小文字・ハイフン無視のマッチング、計算途中の状態を複製する Clone()Sum() 後もそのまま書き続けられる設計、HMAC と HKDF、 そして PHP 互換の状態シリアライズ — PHP 側で開始したハッシュを Go 側で完了させる、あるいはその逆ができる。外部依存ゼロ、 Go 標準ライブラリのみで実装。

pktkit — ゼロコピーの L2/L3 パケット処理ライブラリ。FramePacket は型付きヘッダ アクセサを持つ []byte のエイリアスで、ラッパーのアロケーションも ホットパスでのコピーも無い。仮想ネットワークトポロジ — デバイス、 ハブ、アダプタ、トンネル — を組むための基盤で、IPv4 も IPv6 も 全体で対応。今週は API 面を詰める9コミット。(リポジトリ自体は 4月4日作成で、今週が実質初週。)

他にも今週

  • strtotime — 17コミット。PHP 互換の日時パーサを仕上げに向けて温めている最中。
  • libwallet — 12コミット。マルチチェーン対応モバイルウォレットの地道な前進。
  • aipencil — 構造化 JSON のシーン記述から SVG / PNG を生成する CLI の 初期作業。AI システムに、サイズや座標ではなく内容と関係性を 宣言させることで、決定的で安価な画像出力の道を与えるのが狙い。
  • smokenrg — Nero の NRG ファイルから音声を取り出す sed.free.fr の古い ユーティリティをミラー。純粋に保存目的。無料ホスティングは 永遠ではない。