Skip to content

⚡️PHP 5.4から8までをサポートするCIを構築する

公開日:

Download PDF

スライドテキスト

Page 1

PHP 5.4から8までを

サポートするCIを構築する

Build a CI that supports PHP 5.4 to 8.x

pixiv Inc.
USAMI Kenta

2023-10-05

【Cybozu Tech Meetup #22】PHPカンファレンス 2023 リジェクトコン

Page 2

お前誰よ

  • うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん
  • ピクシブ株式会社 pixiv事業本部 Webエンジニアリングチーム PHPer
    • 2012年末から現職でPHPを書いているWebプログラマ
  • Emacs PHP Modeを開発しています (2017年-)
  • プログラミング言語にちょっとこだわりのある素人 (spcamp2010)

Page 3

emacs-php

Page 4

このトークの文脈

Page 5

今回のお題

Page 6

※注意:
本発表はレガシーPHPを 使い続けることを推奨する ものではございませぬぞ

Page 7

みなさんライブラリを
公開していますか?

Page 8

(たぶんあまり居ないと思うので)
しましょう

Page 9

PHPどこまで切るか

Page 10

そもそも誰が 使ってるの?

Page 11

数を見てみよう

Page 12

Page 13

Page 14

Page 15

Packagist Statsについて

  • Packagist = Composerのデフォルトリポジトリ
  • composer install時に送られるPHPバージョンが集計される
  • インストール回数なので本番運用環境での利用回数ではないので注意
    • 開発者が多かったりデプロイ回数が多かったりキャッシュ構造に左右
    • とはいえ、ある種の勢いが表現されていることは確か

Page 16

私が開発している ライブラリの場合

Page 17

5.x

7.x

8.x

Page 18

zonuexe/tetosqlについて

  • これが何者かはPHPカンファレンスで話します!!!
    • 間接的にPDOに依存しているが、PHPのバージョン依存はあまりない
  • もともとは5.5以上の対応だったが途中で心変わりして5.4対応にした
  • 2022年4月に何かが起こった (お察しください)
    • 途中で7.2と8.2が増え、5.xは潰えた (たぶんそれは…)

Page 19

5.xが全滅したので
サポート終了の判断が
できる

5.x

7.x

8.x

Page 20

サポート対象の決め方

  • PHP Groupが公式サポートしているバージョンを対象にする
  • 自分が(個人|会社)で使っているバージョンをサポートする
  • 現実的にサポート可能なバージョンは全てサポートする

💪

一般論としてはバージョンが上がれば
新しい機能や新しい構文が使えて嬉しい!!!

Page 21

Page 22

PHPのオブジェクト指向機能

  • PHP 7.4: 型付きプロパティ
  • PHP 8.0: コンストラクタプロモーション (PHP 8.2)
  • PHP 8.1: readonlyプロパティ
  • PHP 8.2: trait定数宣言
  • PHP 8.3: 型付き定数宣言

Page 23

<?php <?php

class Book { class Book {
/** public function __construct(
* @var string public readonly string $name,
* @readonly ) { */ }
private $name;
...
/** @param string $name */
public function __construct($name) {
$this->name = $name;

...

Page 24

そういうおしゃれな
言語機能は使えない!

Page 25

ここから本題

Page 26

この後のコードは
zonuexe/tetosqlを
ご参照ください

Page 27

むかしのバージョンの
PHPは
どうすれば使えるか

Page 28

古いPHPを動かす方法

  • ソースコードからコンパイルする
  • Dockerの公式コンテナ
  • GitHub Actions (shivammathur/setup-php)

Page 29

GitHub使ってるなら
Actionsが簡単

Page 30

Page 31

これで動かす 環境はできた

Page 32

新しいバージョン
使えないと辛くない?

Page 33

辛いところもあるし 辛くないこともある

Page 34

Polyfillを使おう

Page 35

Page 36

Page 37

Page 38

古いPHPでも
新しい関数は使える!

Page 39

問題はPHPUnit

Page 40

Page 41

PHP 5.3〜8.2
全部が動く都合のいい
PHPUnitなんてものはない

Page 42

ならどうするか

Page 43

PHPUnit4.8を
PHP8で動くように
魔改造する

😈

Page 44

PHPUnit4.8を
PHP8で動くように
魔改造する

😈

Page 45

Page 46

Page 47

メンテが… つらい…

Page 48

もっとよくできた
ものがある

Page 49

Page 50

Page 51

不思議な力で
複数バージョンの PHPUnitが動く

Page 52

Page 53

不思議な力で
互換性を
合わせてくれる

😇

Page 54

Page 55

Page 56

まとめ

Page 57

TetoSQLは依存が
少ないので複数 サポートが簡単

Page 58

みんなは
必要ないバージョンは
さくっと切ろうね!