Slide 1

Slide 1 text

Confidential エンジニアとして初めてコーディング規約 を作った話 株式会社Hacobu 松本 寛地 2024年1月25日

Slide 2

Slide 2 text

Copyright Hacobu, Inc. 2 自己紹介 ❏ 松本寛地 ❏ 1993年生まれ、今年30歳 ❏ 2021年12月にHacobu入社 ❏ 入社してからずっとVistaのフロントエンドエンジニア ❏ 趣味はサッカー観戦、将棋、麻雀

Slide 3

Slide 3 text

Copyright Hacobu, Inc. 3 コーディング規約 作ったことありますか?

Slide 4

Slide 4 text

Copyright Hacobu, Inc. 4 目次 1. 導入することを決めた背景 2. 導入する上で気をつけたこと 3. 具体的な導入手順とその成果 4. まとめ

Slide 5

Slide 5 text

Copyright Hacobu, Inc. 5 導入することを決めた背景 1. 導入することを決めた背景 2. 導入する上で気をつけたこと 3. 具体的な導入手順とその成果 4. まとめ

Slide 6

Slide 6 text

Copyright Hacobu, Inc. 6 導入することを決めた背景 1. メンバーによって書き方がバラバラだった 2. 保守性と品質を高めたかった 3. オンボーディングコストが高い

Slide 7

Slide 7 text

Copyright Hacobu, Inc. 7 導入することを決めた背景 メンバーによって書き方がバラバラだった ❏ メンバーの入れ替わりがあった際に、メンバーそれぞれコーディングスタイルがバラバラだった ❏ 変数やファイル名等の命名規則が人それぞれ違う ❏ メンバー間で共有したことが Linterやドキュメントに明示されていなかった 定数だけど キャメルケースで書 いてる。。? この前話したけど 忘れてるだけ?

Slide 8

Slide 8 text

Copyright Hacobu, Inc. 8 導入することを決めた背景 保守性と品質を高めたかった ❏ コードの書き方が統一されておらず、一貫性がなかった ❏ プロダクトを使うユーザーが増えてきたので、品質を高めたかった

Slide 9

Slide 9 text

Copyright Hacobu, Inc. 9 導入することを決めた背景 オンボーディングコストが高い ❏ 初期の方のコードと新しいコードで書き方が全然違うので、どちらを参考にするべきか都度説明する必要 がある ❏ コーディング規約がないことでコードの理解に時間がかかる

Slide 10

Slide 10 text

Copyright Hacobu, Inc. 10 導入する上で気をつけたこと 1. 導入することを決めた背景 2. 導入する上で気をつけたこと 3. 具体的な導入手順とその成果 4. まとめ

Slide 11

Slide 11 text

Copyright Hacobu, Inc. 11 導入する上で気をつけたこと 1. 導入するコストを最小限にする 2. 背景などをドキュメントに残す 3. 機械的に制御する

Slide 12

Slide 12 text

Copyright Hacobu, Inc. 12 導入する上で気をつけたこと 導入するコストを最小限にする ❏ 作った後に運用することがゴールなので、作ることに時間や労力のコストをかけたくない ❏ 既にあるスタイルガイドなどに乗っかれるものは乗っかりたい ❏ Airbnbをコーディング規約の基盤とする ❏ ルールはなるべく緩めに設定して、最低限必要なものに絞る

Slide 13

Slide 13 text

Copyright Hacobu, Inc. 13 導入する上で気をつけたこと 背景などをドキュメントに残す ❏ 作り始める前に、まずはチーム内で合意形成をとる ❏ 今後新しく入るメンバーもコーディング規約の意図を知ることができる

Slide 14

Slide 14 text

Copyright Hacobu, Inc. 14 導入する上で気をつけたこと 機械的に制御する ❏ Linterなどで機械的に制御できる箇所は制御する ❏ ESLintにない独自ルールが出てきたら別途 ESLintのconfigで定義する

Slide 15

Slide 15 text

Copyright Hacobu, Inc. 15 導入することを決めた背景 1. 導入することを決めた背景 2. 導入する上で気をつけたこと 3. 具体的な導入手順とその成果 4. まとめ

Slide 16

Slide 16 text

Copyright Hacobu, Inc. 16 具体的な導入手順とその成果 1. 合意形成のためのドキュメントを書く 2. コードに落とし込む

Slide 17

Slide 17 text

Copyright Hacobu, Inc. 17 具体的な導入手順とその成果 合意形成のためのドキュメントを書く ❏ ドキュメント化の手法として、ADR(Architecture Decision Record)を採用 
 ❏ ref. https://cloud.google.com/architecture/architecture-decision-records?hl=ja
 
 ❏ どうしてその意志決定をしたかなどの、背景や結果をシンプルに書くことができる 
 
 ❏ ADRは「導入する背景のADR」と「コーディング規約の ADR」を分けて作りました

Slide 18

Slide 18 text

Copyright Hacobu, Inc. 18 具体的な導入手順とその成果 コードに落とし込む ❏ ESLintのconfigを新規に追加 ❏ monorepoの1つのpackageで新しいESLintの設定を導入してみる ❏ モジュールの循環参照など、自動で直せる箇所以外は手動で直す。。。 <- 今ここ

Slide 19

Slide 19 text

Copyright Hacobu, Inc. 19 導入することを決めた背景 1. 導入することを決めた背景 2. 導入する上で気をつけたこと 3. 具体的な導入手順とその成果 4. まとめ

Slide 20

Slide 20 text

Copyright Hacobu, Inc. 20 まとめ ❏ コーディング規約はいつでも作れるが、早めにやるに越したことはない ❏ プロダクトが大きくなるにつれて入れにくくなる ❏ 属人的だった規約を機械的に解決できるなら解決した方がいい ❏ monorepo構成にしておくとpackage毎にESLint導入できるから嬉しい