Clean Code JavaScript - 同事に見せても恥ずかしくないコードを書く方法
古いコードを開いたとき、自分の意図が分からなくなる経験はありませんか?あるいは、同僚がスクリプトの手伝いを頼んで来て、何時間もかけて解読しなければならない経験は?Clean Code JavaScriptリポジトリは、コードを理解可能で保守可能、プロフェッショナルにする実践的なルールのコレクションです。
なぜクリーンコードがそんなに重要なのか?
JavaScriptで15年以上働いてきた中で、何百ものプロジェクトを見てきました。そして大半の問題はアルゴリズムの複雑さではなく、コードの読みにくさにあります。コードを書く時間よりも読む時間の方が10倍も多いのです。Clean Code JavaScriptは、Robert Martinの名著「Clean Code」をJavaScriptの世界に適応させたものです。
リポジトリの作者Ryan McDermott氏によると:
「すべてのコードは、湿った粘土が最終的な形を取るように、粗い下書きとして始まります。仲間とレビューしながら、不完全さを削り取っていくのです。」
リポジトリから学ぶ5つの主要原則
1. 意味のある変数名
クリーンコードへの第一歩は、適切な命名です。変数名は次の条件を満たす必要があります:
- 発音可能であること
- 検索可能であること(Ctrl+Fで見つけられる)
- 精神的な翻訳を必要としないこと
悪い例:
const yyyymmdstr = moment().format('YYYY/MM/DD');
良い例:
const currentDate = moment().format('YYYY/MM/DD');
2. 関数は1つのことだけを行うべき
このエラーは90%のプロジェクトで見られます。関数は小説ではなく、短い詩であるべきです。
悪い例:
function emailClients(clients) {
clients.forEach(client => {
const record = database.lookup(client);
if (record.isActive()) email(client);
});
}
良い例:
function emailActiveClients(clients) {
clients.filter(isActiveClient).forEach(email);
}
function isActiveClient(client) {
const record = database.lookup(client);
return record.isActive();
}
3. 副作用を避ける
関数は責任範囲外のものを変更すべきではありません。これは配列やオブジェクトを操作する際に特に重要です。
悪い例:
const addItemToCart = (cart, item) => {
cart.push({ item, date: Date.now() });
};
良い例:
const addItemToCart = (cart, item) => {
return [...cart, { item, date: Date.now() }];
};
4. JavaScriptのためのSOLID
SOLID原則はJavaやC#だけでなく動作します。JSでの依存性反転の例:
悪い例:
class InventoryTracker {
constructor(items) {
this.items = items;
this.requester = new InventoryRequester();
}
}
良い例:
class InventoryTracker {
constructor(items, requester) {
this.items = items;
this.requester = requester;
}
}
5. テスト容易性
クリーンコードはテスト可能なコードです。各関数は単一の責任と予測可能な結果を持つべきです。
悪い例:
describe('MomentJS', () => {
it('handles all cases', () => {
// 20 строк теста разных сценариев
});
});
良い例:
describe('MomentJS', () => {
it('handles 30-day months', () => {
// один четкий сценарий
});
it('handles leap year', () => {
// другой сценарий
});
});
誰がこのリポジトリの恩恵を受けるのか?
- ジュニア開発者:動作するコードと良いコードの違いを理解できます
- チームリード:コードレビューにこれらの原則を活用できます
- 講師:JavaScriptコースの実例として優れた例が得られます
- フリーランサー:クライアントはクリーンで保守可能なコードを評価します
個人的な実装経験
私の実践では、1ファイル500行以上のコードが50ファイルあるプロジェクトがありました。Clean Code原則を実装した後:
- 新機能の追加時間が40%減少
- 本番環境のバグが3分の1に減少
- 新しい開発者のオンボーディングが2倍高速化
使い始めるには?
- リポジトリをブックマークする
- 最もよく違反している2〜3のルールを選ぶ
- 新しいコードから適用を開始する
- 古いセクションを徐々にリファクタリングする
著者も言っているように:「これらのルールは教義ではなく、ガイドです。我々の職業は若く、まだ学んでいる最中です。」
リンク:
関連プロジェクト