Skip to content

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

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

  • チーム内での認知的な摩擦
  • 同じリポジトリ内でも「ナワバリ」によってフォーマットの慣習が違う(!)
  • コードレビューで「ここにスペースを入れてください」「ここで改行してくださ

い」などの不毛すぎる指摘をする羽目に…

  • 「レビュー対応」というコードスタイルを直すだけの最悪のコミットが履歴に積

まれる (そういう些細な変更はfixupで直して…という意見はある)

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

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

CS-Fixer CodeSniffer

両方

もちつけ

tadsan

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

Page 38

そこで出てくるのが

Page 39

Page 40

ということで

Page 41

ECS!

Page 42

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

Easy Coding Standard

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で