ルール
避ける 過度に 大きい ファイル。
大きい ファイル ~を持つ 複数の 責任
~は 難しい ~すること 保守。
対応言語: 45+はじめに
数千行に及ぶファイルは通常、複数の無関係な懸念事項を処理するため、特定の機能を見つけることが困難になります。3000行の utils.js バリデーションヘルパー、文字列フォーマット、日付操作、APIユーティリティを含むファイルは、開発者が不要なコードをスクロールして必要なものを見つけることを強制します。また、複数の開発者が同時に異なるセクションを変更するため、大きなファイルはマージコンフリクトを引き起こします。
なぜ重要なのか
コードの保守性:大きなファイルは無関係な機能を混在させ、開発者は1つの関数を変更するために何百行もの無関係なコードを理解する必要があります。特定のロジックを見つけることは、適切に命名されたファイルに移動するのではなく、検索作業となります。
Version control conflicts: 複数の開発者が同じ大きなファイルで異なる機能に取り組む場合、マージの競合が頻繁に発生します。より小さく、焦点を絞ったファイルは、各開発者が別々のファイルで作業するため、並行開発を可能にします。
コードレビューの効率:大きなファイルでの変更をレビューするには、より多くのコンテキストが必要です。レビュー担当者は、変更が同じファイル内の他の無関係なコードにどのように影響するかを理解する必要があります。ファイルが小さいほど変更の範囲が明確になり、レビューが迅速化されます。
コード例
❌ 非準拠:
// utils.js (1500+行)
function validateEmail(email) { /* ... */ }
function validatePhone(phone) { /* ... */ }
function formatCurrency(amount) { /* ... */ }
function formatDate(date) { /* ... */ }
function parseJSON(str) { /* ... */ }
function apiRequest(url) { /* ... */ }
function debounce(fn, delay) { /* ... */ }
function throttle(fn, limit) { /* ... */ }
// ... 他にも100以上の無関係な関数
誤っている理由: 1つの巨大なファイルに、バリデーション、フォーマット、パース、APIコール、パフォーマンスユーティリティが含まれています。検出 debounce() 何百もの無関係な関数をスクロールする必要があります。複数のチームがこのファイルを変更すると、常にマージコンフリクトが発生します。
✅ 準拠済み:
// validation/email.js
export 関数 validateEmail(email) { /* ... */ }
// validation/phone.js
export function validatePhone(phone) { /* ... */ }
// formatting/currency.js
export function formatCurrency(amount) { /* ... */ }
// formatting/date.js
export function formatDate(date) { /* ... */ }
//api.js
export function apiRequest(url) { /* ... */ }
// performance/debounce.js
export function debounce(fn, delay) { /* ... */ }
これが重要である理由: カテゴリ化されたディレクトリ内の専用ファイルにある各ユーティリティ関数。検索 debounce() ~に移動することを意味します performance/debounce.js 直接。異なるユーティリティに取り組むチームは、別々のファイルに存在するため競合しません。
まとめ
可能な限り、ファイルは500行未満に保ってください。これを超える場合は、個別のモジュールに抽出できる明確な責任を探してください。関連ファイルはディレクトリに整理し、構造を維持しつつ、個々のファイルが集中し、保守しやすいようにしてください。

