1. 読みやすさ(他人と未来の自分が読める) 2. 壊れにくさ(テスト・例外・境界条件) 3. 設計(責務分離・依存の整理) 4. 運用(ログ・設定・CLI・ドキュメント) ## 1. 「動く」から「読める」へ:まずは“型”を身につける ### すぐ効くチェックリスト(毎回これだけ) * 変数名が役割を説明している(`x` や `tmp` を減らす) * 関数が長すぎない(目安:20〜30行以内) * 1つの関数は1つの仕事(“ついで処理”を混ぜない) * 早期returnでネストを浅くする * マジックナンバーを定数化する * `print`デバッグ → `logging` へ移行する癖をつける ### 練習課題(効果が高い) あなたが過去に書いた「動けばOK」コードを1つ選び、機能追加はせずに、 * 関数分割 * 変数名改善 * 重複削除 だけで読みやすくする、をやってください。これが“リファクタリング筋”を作ります。 ## 2. 「壊れにくい」へ:テストは“全部”ではなく“要所”から テストで挫折しがちなのは、最初から網羅しようとするからです。最初はここだけで十分です。 ### 最初にテストすべき3点 * 境界値(空、0、最大/最小、1件だけ) * 異常系(形式が違う、欠損、ファイルがない、通信失敗) * 変換ロジック(入力→出力が決まる純粋関数) ### おすすめの進め方 * “テストしやすい形”にするために、先に I/Oとロジックを分離 * ファイル読む・API叩く・DBアクセス:I/O * 加工・判定・集計:ロジック(ここをテスト) ## 3. 「設計」へ:責務分離と依存の整理を覚える 「とりあえず動く」コードが肥大化する原因の多くは、1か所に責務が集まりすぎることです。 ### 初心者がまず覚える設計ルール(実務でも効く) * 関数は“入力→処理→出力”が見える形にする * データ構造を先に決める(辞書の形、クラス、dataclass) * “何をするか”と“どう保存/取得するか”を分ける 例:`calculate_total()` と `load_orders()` を混ぜない ### dataclass は早めに覚える価値が高い データが増えても崩れにくく、型ヒントとも相性が良いので、初心者の次の一歩にちょうどいいです。 ## 4. 「プロっぽい」へ:型チェック・静的解析・フォーマッタを味方にする ここは“才能”というより“道具の導入”で一気に品質が上がります。 ### 最小構成(これだけでOK) * フォーマット:`ruff format`(または `black`) * リント:`ruff` * 型:`mypy`(最初は厳しくしすぎない) * テスト:`pytest` ポイントは「全部理解してから導入」ではなく、入れて走らせながら慣れることです。 ## 90分でできる“ステップアップ練習”メニュー(週2回で伸びます) 1回90分で回せるようにしています。 1. 10分:既存コードを読む(改善点を3つメモ) 2. 30分:関数分割・命名・重複削除(機能変更なし) 3. 20分:ロジック部分にテストを2〜3本追加 4. 20分:`ruff` とフォーマッタを通して直す 5. 10分:READMEに「使い方」「入力例」「出力例」を追記 これを4〜6回やると、“動けばOK”から確実に抜けられます。 ## リンク - [[PythonからRustへ移行するロードマップ]]