Skip to content

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

公開日:

に東京都中央区日本橋のサイボウズ株式会社 東京オフィス(東京日本橋タワー27階)で開催された『【Cybozu Tech Meetup #22】PHPカンファレンス 2023 リジェクトコン』でライトニングトーク(5分)として発表しました。

Download PDFPDF

スライドテキスト

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

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

Page 13

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

Page 14

⚡️PHP 5.4から8までをサポートするCIを構築する 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

⚡️PHP 5.4から8までをサポートするCIを構築する 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 {public function __construct(public readonly string $name,) {}

...

class Book {/*** @var string* @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

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

Page 31

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

Page 32

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

Page 33

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

Page 34

Polyfillを使おう

Page 35

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

Page 36

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

Page 37

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

Page 38

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

Page 39

問題はPHPUnit

Page 40

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

Page 41

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

Page 42

ならどうするか

Page 43

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

😈

Page 44

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

😈

Page 45

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

Page 46

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

Page 47

メンテが… つらい…

Page 48

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

Page 49

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

Page 50

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

Page 51

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

Page 52

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

Page 53

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

😇

Page 54

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

Page 55

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

Page 56

まとめ

Page 57

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

Page 58

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