ls-lintでファイルの命名を統一しよう
はじめに
ファイルやディレクトリの命名規則について、どのような運用をしていますか?
チームで共有している規約があるというところもあれば、既存資産から推測している...といったところもあると思います。
Next.js
やRemix
といったファイルシステムベースルーティングを採用しているフレームワークを使用していた場合、ファイルやディレクトリの命名は特に気を遣う部分だと思います。
これらはできれば機械的にチェックし、統一されているかどうかを確認できていると望ましいはずです。
これは、ls-lint
というツールを使って実現することができます。
ls-lint
Go製、マルチプラットフォーム対応のリンターです。
.ls-lint.yml
という設定ファイルに記述したルールを適用してくれます。
ルールはファイルの拡張子それぞれに設定することも、特定のディレクトリだけに設定することも可能です。
インストール手順は公式ドキュメントを参照してください。
Next.jsで設定してみる
例えば、pages
配下はURLになるのでkebab-case、components
配下はPascalCaseにしたいとします。
Zennにterms/transaction-law
というURLが存在したのでkebab-caseの例にしています。
// こんな感じ
src
├── components
│ └── Button
│ ├── Button.tsx
│ └── index.ts
└── pages
├── _app.tsx
├── _document.tsx
├── posts
│ └── [params].tsx
└── transaction-law.tsx
これらを満たすような.ls-lint.yml
を書いてみます。
ls:
src/pages:
.dir: kebab-case
.tsx: kebab-case | regex:^_[a-z-.]* | regex:^\[\w*\]
src/components/*:
.dir: PascalCase
.tsx: PascalCase
_app.tsx
や[param].tsx
のような_
始まりや[]
といったフレームワークから指定される命名を正規表現を書くことで対応できるようにしているところ意外はシンプルに見えますね。
npx ls-lint
もしくはpackage.json
のscriptsに"lint:ls": "ls-lint"
などと書いて実行すると成功していることが確認できます。
失敗することも確認するため、UserSetting.tsx
というkebab-caseを満たさないファイルを作成します。ls-lint
を実行すると失敗しました。
$ touch src/pages/UserSetting.tsx
$ npx ls-lint
2024/03/17 16:26:10 src/pages/UserSetting.tsx failed for rules: kebabcase|regex (^_[a-z-.]*)|regex (^\[\w*\])
まとめ
個人的には.ls-lint.yml
に書かれたルールがそのまま規約として運用できる点がとてもいいな〜と思いました。ファイルやディレクトリといった部分もこういったツールを活用して統一性を意識していきたいですね。
Discussion