概要
PHP製の一時的なパッチ が、想定外に 2,000万回以上インストール された経緯 WPMLやSPIPなど有名CMSでも利用 されていた事実 バグや保守の問題 に直面し、 非推奨化を決断 より良い代替手段 の登場と セキュリティリスク への配慮 一時的な修正が長期間使われた教訓
174行のPHPが2,000万回使われた経緯
- 2012年、AOLのCMSのPHPアップグレード 対応のため、一時的なパッチとして174行のPHPコード作成
- pecl_http拡張のhttp_build_url()関数の代替 として自作実装
- ComposerとPackagistで公開 し、他の開発者も利用可能に
- 1~2年の短期利用を想定した一時的なshim として設計
- 結果として 2,000万回以上インストール され、月間40万回以上の利用実績
予想外の広がりと主要プロジェクトでの利用
- WPML(WordPressの多言語プラグイン) がコードベースに直接バンドル
- 150万以上のサイトで稼働
- idna-convertライブラリが依存し、SPIPやDebian/Ubuntuにも組み込み
- 多くのウェブサイトで今も動作中 という事実
- Composer経由以外にも幅広く利用 されていた実態
久しぶりの再訪とバグ発覚
- 数年ぶりにパッケージを確認 し、利用の多さに驚愕
- GitHub上で複数のIssueが報告
- 例: パス末尾のスラッシュにより「a」文字が全て消えるバグ
- // Workaround for trailing slashes というコメント下の回避策が原因
- 長期間バグが気付かれなかった ことに驚き
維持・引き継ぎ・非推奨の選択肢
- PHPから離れて久しく、保守継続は困難
- 新しいメンテナーに渡すリスク (信頼性・セキュリティ)
- PHP LeagueのURIライブラリやPHP 8.5の標準URI API 登場
- 古いshimに頼るより、公式かつ安全なものに移行推奨
- 攻撃者による乗っ取りのリスク も考慮
- READMEで移行方法を案内し、非推奨化を決断
一時的な修正が残した教訓
- 「一時的なコード」が長期間使われる現実
- 保守されないコードのリスク と コミュニティの進化 の重要性
- 多くの開発者やユーザーへの感謝
- AOLのCMSも結局「一時的な」polyfillのまま2020年まで稼働
セキュリティと信頼性の観点からの非推奨化
- 広く使われるパッケージの引き継ぎは大きな責任
- 未検証の新メンテナーによるリスク
- Veritasiumのxz Utilsバックドア動画を例に警鐘
- 今後は新規修正なし、バグも未修正のまま
- 「一時的な修正」の終焉と、より良い選択肢への移行推奨