ECSでコードを爆速にフォーマットする

公開日:

オンラインZoomウェビナーで開催された『WPHPerKaigi 2023 - PHPerのためのゆるいLT会 -』でライトニングトーク(5分)として発表しました。

Download PDF

スライドテキスト

Page 1

正しいプログラムは 綺麗なコードに宿る

A good program resides in clean code.

pixiv Inc.
USAMI Kenta

WPHPerKaigi 2023 - PHPerのためのゆるいLT会 -

2022-04-18

Page 2

お前誰よ

  • うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん
  • ピクシブ株式会社 pixiv事業本部 エンジニア
    • 最近はピクシブ百科事典(dic.pixiv.net)を開発しています
  • Emacs Lisper, PHPer
    • Emacs PHP Modeを開発しています (2017年-)
  • プログラミング言語にちょっとこだわりのある素人

Page 3

ふだんはEmacsとか PHPとかやってます

Page 4

さて

Page 5

綺麗なコード
書いてますか?

Page 6

コードの乱れは
心の乱れ

Page 7

正しいプログラムは 綺麗なコードに宿る

Page 8

綺麗なコードが
モダーンなコード

Page 9

美しいコードを書くのは
靴を脱いで揃えるのと同じ

Page 10

きたないコードは
争いを生む

Page 11

さあ美しいコードを
書きましょう…

Page 12

そう思いませんか?

Page 13

どうやってコードをインデントする?

https://www.emacswiki.org/pics/static/TabsSpacesBoth.png より

Page 14

均整でないソースコードの弊害

  • チーム内での認知的な摩擦
  • 同じリポジトリ内でも「ナワバリ」によってフォーマットの慣習が違う(!)
  • コードレビューで「ここにスペースを入れてください」「ここで改行してくださ
    い」などの不毛すぎる指摘をする羽目に…
  • 「レビュー対応」というコードスタイルを直すだけの最悪のコミットが履歴に積
    まれる (そういう些細な変更は‰xupで直して…という意見はある)

Page 15

誰がコードを書いても 同じスタイルにしたい

Page 16

Code Formatter

コードスタイルを整形
するツールの総称

Page 17

フォーマッター導入
待ったなし

Page 18

Page 19

Page 20

退屈なことは機械にやらせよう

  • ツールを呼び出すとフォーマッタが全てのコードを整形してくれる
  • 人間が細かいところに気をつけながらコーディングしなくていい
  • 最悪、人間がコードフォーマットをまったく把握してなくてもいい
  • コミットする前にフォーマッターをかけてくれることだけ徹底してくれれば

Page 21

それでだ

Page 22

モダーンな言語の定義

Page 23

言語標準の
フォーマッターがある

Page 24

go fmt
dart format
rustfmt

Page 25

われらが最新最高言語
PHPはどうだ

Page 26

Page 27

ただ普及してる
フォーマッターはある

Page 28

PHP-CS-Fixer
PHP_CodeSiffer

Page 29

_人人人人人人_ > 二つある <  ̄Y^Y^Y^Y^Y ̄

Page 30

語ると長いが…
設計思想の違いがある

Page 31

(設定ファイル名も ややこしかった…)

phpcs.xml vs .php_cs

Page 32

まじめなプロジェクトでは
どちらかを選んで使う

Page 33

二つのツールで同じような
設定をしても結果が
一致しなかったりする

Page 34

≒ 似た設定をしても フォーマット結果が
競合しかねない

Page 35

プロジェクト内で
フォーマットツールを
統一する必要がある

Page 36

で、あんたは どっち派?

Page 37

どうやってコードをインデントする?

CodeSniffer

CS-Fixer

両方

もちつけ

tadsan

https://www.emacswiki.org/pics/static/TabsSpacesBoth.png より

Page 38

そこで出てくるのが

Page 39

Page 40

ということで

Page 41

ECS!

Page 42

最速最強コードフォーマッター

E C S
asy oding tandard

ECS - The fastest and strongest code formatter

pixiv Inc.
USAMI Kenta

WPHPerKaigi 2023 - PHPerのためのゆるいLT会 -

2022-04-18

Page 43

Page 44

ECSってなあに?

  • Tomas Votruba氏が開発しているスタイルチェック/フォーマットツール
    • RectorというPHPStanベースのリファクタリングツールも作っている
  • 内部的にPHP-CS-FixerとPHP_CodeSnifferを使っている
    • 両方のツールに内蔵されたルールが使える!
  • 並列実行してくれて爆速! 一度実行したらキャッシュされるので待たせない
  • ひとつのツール内で両方のルールを合せてくれるのでツール間で喧嘩しない

Page 45

インストール方法

  • 非常に簡単!
    • composer require --dev symplify/easy-coding-standard:"^11.2"
    • バージョン指定しないとインストール時にかなり待たされるので注意
  • ./vendor/bin/ecs で実行できる
    • 初回実行時に勝手に設定ファイル(ecs.php)が作成される
    • PHP-CS-FixerやPHP_CodeSnifferのルールを指定する

Page 46

Page 47

清浄なコードベースを
保つには

Page 48

こきたないコードをマージさせない

  • コードベース全体を (勇気をもって) 全フォーマットする
  • メンバー全員に「コミットする直前に」必ずフォーマットすることを根付かせる
  • CIでECSを呼び出してスタイルが合ってないファイルがあれば失敗させる
  • 僕は編集中にテキストエディタから非同期フォーマットを実行するようにする
    拡張を書きました

Page 49

完璧主義の
みなさんにも
安心!

Page 50

おまえら
pixivは
どうなのかって?

Page 51

俺たちの戦いは これからだ!!

Page 52

続きはWebで