🙈

Google TypeScript Style Guideを読む

2022/02/24に公開

はじめに

  • TypeScriptのプロジェクトでコーディング規約を決める時にeslintのおすすめ設定だけでは上手くいかないことがあります。この記事ではGoogleが提供しているスタイルガイドを見て使えそうなところを紹介します。
  • eslint@typescript-eslint/eslint-pluginの内容と照らし合わせて紹介します。

対象読者

  • 社内プロジェクトのTypeScriptのコーディング規約を整備したい方
  • @typescript-eslint/eslint-pluginplugin:@typescript-eslint/recommendedplugin:@typescript-eslint/recommended-requiring-type-checkingの設定だけではソースコードの治安の維持が出来なくなってしまった方

Google TypeScript Style Guideとは

https://google.github.io/styleguide/tsguide.html

  • GoogleがTypeScriptのルールやベストプラクティスをまとめたガイドです
  • Syntax/Language Rules/Source Organization/Type System/Consistencyの5つの分類で各ルールを説明しています

各分類ごとに気になったルールをピックアップしていきます

Syntax

ルール名 概要 関連eslintルール
Identifiers class/method/global constant valuesなどの命名スタイルが定義されてます。 @typescript-eslint/naming-convention
Naming style 命名時に使用しない方が良いものを紹介しています。 @typescript-eslint/naming-convention
Comments & Documentation JSDocに関するルールを紹介しています。 eslint-plugin-jsdoc

Language Rules

ルール名 概要 関連eslintルール
Visibility publicなどを記述するケースを定義しています。 @typescript-eslint/explicit-member-accessibility
Parameter properties Parameter Propertiesの記述方法を定義しています。 @typescript-eslint/no-parameter-properties
Field initializers フィールドの初期化について定義しています。
Primitive Types & Wrapper Classes ラッパークラスではなくプリミティブ型を使用します。
Array constructor Arrayの表記方法を定義しています。 @typescript-eslint/array-type
Exceptions new Error()をthrowするようにします。
Equality Checks ===, !==を使うようにします。 eqeqeq
Function Declarations/Use arrow functions in expressions アロー関数と通常のfunctionの使い分けについて定義しています。

Source Organization

ルール名 概要 関連eslintルール
Import Paths importのパス指定について定義しています。
Exports named exportsを推奨しています。 import/no-default-export
Import & export type import typeを使用しないことを推奨します。 @typescript-eslint/consistent-type-imports

Type System

ルール名 概要 関連eslintルール
Type Inference 変数の初期化時に型推論が効く場合、型定義を明示的に記述しないことを推奨します。
Nullable/undefined type aliases type定義時にnull/undefinedを使用しないことを推奨します。
Optionals vs |undefined type optionalパラメーターやフィールドの場合、| undefinedで型指定をしないようにします。
Using unknown over any anyではなくunknown を使用することを推奨します。 @typescript-eslint/no-explicit-any

Consistency

  • 同じファイル、同じディレクトリ内のファイルと同じように一貫性のあるスタイルを推奨します。

使えそうなケース

  • TypeScript初心者が多いプロジェクトの立ち上げ時
  • コードレビュー時に指摘する時の参考サイトとして紹介する
  • Arrayなど表記ゆれが多くなるのでどちらにするか決める時

おわりに

  • このスタイルガイドが全てではありませんが、コーディング規約を決める時に参考にしてみてはいかがでしょうか。

おまけ:記事内のeslintプラグイン一覧

https://www.npmjs.com/package/@typescript-eslint/eslint-plugin
https://www.npmjs.com/package/eslint-plugin-jsdoc
https://www.npmjs.com/package/eslint-plugin-import

Discussion