keep-it-simple について
keep-it-simple は、実装が複雑に感じられるときや複数の案があるときに、コーディングエージェントを明快で直接的な解決策へ導く開発スキルです。複雑さの兆候とコードを簡素化する方法を示します。
主な機能
- 01巧妙さより明快さを優先
- 02複雑なコードの兆候を特定
- 03ネストした条件を分岐に変更
- 04長い処理列を名前付きの手順に分割
- 05早すぎる最適化を回避
活用シーン
- 01理解しにくい実装の簡素化
- 02複数案から直接的な方法を選択
- 03不要な抽象化の有無を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yanko-belov/ code-craft --skill keep-it-simpleインストール後、Claude Code で/keep-it-simpleを入力して読み込まれたか確認します。
詳細
KISS(Keep It Simple, Stupid)
概要
機能する最もシンプルな解決策が、最善の解決策です。
巧妙なコードで感心する人はいません。シンプルなコードはより早くリリースでき、壊れにくく、ほかの人も保守できます。
使用する場面
- 解決策が複雑に感じられる
- 「エレガント」または「巧妙」なコードを書こうとしている
- 複数のアプローチがある
- スキルを見せつけたくなる
- シンプルな問題に高度なパターンを使っている
絶対ルール
NEVER choose clever over clear. Simple wins.
例外はありません:
- 「こちらのほうがエレガントだから」
- 「高度なスキルを示せるから」
- 「技術的に優れているから」
- 「気の利いたワンライナーだから」
検出:「巧妙さ」の兆候
自分のコードの巧妙さを誇らしく感じたら、シンプルにしてください:
// ❌ VIOLATION: Clever one-liner
const isPalindrome = (s: string): boolean =>
(s = s.toLowerCase().replace(/[^a-z0-9]/g, '')) === [...s].reverse().join('');
// ✅ CORRECT: Simple and clear
function isPalindrome(str: string): boolean {
const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, '');
for (let i = 0; i < cleaned.length / 2; i++) {
if (cleaned[i] !== cleaned[cleaned.length - 1 - i]) {
return false;
}
}
return true;
}
複雑さの代償
| 複雑なコード | 影響 |
|---|---|
| 巧妙なワンライナー | 読みにくく、デバッグしにくい |
| ネストされた三項演算子 | ロジックが不透明になる |
| 過度な抽象化 | 間接化によって意図が隠れる |
| 時期尚早な最適化 | 測定された効果のない複雑さ |
| デザインパターンの過剰使用 | パターンのためのパターン |
正しいパターン:明白なコード
ジュニア開発者が30秒で理解できるコードを書いてください:
// ❌ COMPLEX: "Elegant" functional chain
const result = data
.filter(Boolean)
.map(x => transform(x))
.reduce((acc, x) => ({ ...acc, [x.id]: x }), {})
.values()
.filter(x => x.active)
.sort((a, b) => b.date - a.date)
.slice(0, 10);
// ✅ SIMPLE: Clear steps with names
const validItems = data.filter(Boolean);
const transformed = validItems.map(transform);
const activeItems = transformed.filter(item => item.active);
const sorted = activeItems.sort((a, b) => b.date - a.date);
const topTen = sorted.slice(0, 10);
プレッシャーへの対処
1. 「こちらのほうがエレガントです」
プレッシャー:「このワンライナーのほうが、冗長なバージョンよりエレガントです」
**回答:**エレガンスとは簡潔さではなく、明快さです。シンプルなコードは巧妙なコードよりエレガントです。
**対応:**明快なバージョンを使ってください。中間変数に名前を付けてください。
2. 「高度なスキルを示せます」
プレッシャー:「高度なパターンを知っていることを示したいです」
**回答:**シニアエンジニアは複雑な解決策ではなく、シンプルな解決策で評価されます。
**対応:**問題をシンプルに解決してください。巧妙さは必要な場面のために取っておいてください。
3. 「技術的に優れています」
プレッシャー:「複雑なバージョンは O(n) で、こちらは O(n log n) です」
**回答:**時期尚早な最適化です。これは本当にボトルネックですか?
**対応:**シンプルなコードを書いてください。プロファイリングで必要性が示された場合にのみ最適化してください。
4. 「複数のアプローチを示しましょう」
プレッシャー:「多才さを示すため、2つの実装を提示します」
**回答:**明快な解決策が1つあるほうが、複数の選択肢より優れています。
**対応:**最もシンプルなアプローチを選んでください。それだけを提示してください。
危険信号 — 作業を止めて再検討する
次のうち1つでも気づいたら、シンプルにしてください:
- コードの説明コメントが必要
- ネストされた三項演算子
? : ? : - 連鎖した操作が多すぎる(5個以上)
- 解読が必要な正規表現
- その巧妙さを誇らしく感じる
- 「ワンライナー」の実装
- ジュニア開発者が30秒で理解できない
- 「多才さ」を示すための複数の解決策
これらはすべて、シンプルに書き直すべきという意味です。
シンプル化の手法
| 複雑 | シンプル |
|---|---|
| ネストされた三項演算子 | if/else 文 |
| 長い連鎖 | 名前を付けた中間変数 |
| 巧妙な正規表現 | シンプルなチェックを複数 |
| ワンライナー | コメント付きの複数行 |
| 暗黙的 | 明示的 |
| マジックナンバー | 名前付き定数 |
クイックリファレンス
| 症状 | 対応 |
|---|---|
| 「エレガント」なワンライナー | 明快な複数行のコードに展開する |
| ネストされた三項演算子 | if/else に変換する |
| 複雑な連鎖 | 名前付きの手順に分ける |
| 複数のアプローチ | 最もシンプルなものを選ぶ |
| 巧妙さへの誇り | シンプルに書き直す |
よくある正当化(すべて誤り)
| 言い訳 | 実際のところ |
|---|---|
| 「こちらのほうがエレガントです」 | 明快なコードは巧妙なコードよりエレガントです。 |
| 「高度なスキルを示せます」 | シンプルな解決策のほうが高いスキルを示します。 |
| 「気の利いたワンライナーです」 | ワンライナーは読みにくいことがよくあります。 |
| 「技術的に優れています」 | 時期尚早な最適化はよくありません。 |
| 「複数の選択肢で多才さを示せます」 | 明快な解決策が1つあるほうが優れています。 |
| 「専門家はこうします」 | 専門家はシンプルなコードを書きます。 |
要点
シンプルさは巧妙さに勝ります。明快さは簡潔さに勝ります。明白さはエレガンスに勝ります。
問題を解決するときは、機能する最もシンプルな解決策を見つけてください。ジュニア開発者が30秒で理解できないなら、シンプルにしてください。