## 共通トレーニング要素(両ロードマップで重視) ### 型と構造の明確化 - 型ヒントの導入(関数の入出力から) - `dataclass`でデータ構造を固定(辞書の海を減らす) - データ構造を先に決める習慣 ### 責務分離の意識 - I/Oとロジックの分離 - ファイル読込・API・DB = I/O - 加工・判定・集計 = ロジック(テスト対象) - 1つの関数は1つの仕事 - 「何をするか」と「どう保存/取得するか」を分けない ### テストの重要性 - 境界値テスト(空、0、最大/最小、1件) - 異常系テスト(形式違い、欠損、通信失敗) - 変換ロジックのテスト(純粋関数) ### コード品質の基本 - 読みやすい変数名・関数名 - 関数分割(20〜30行以内目安) - 重複削除 ### ツールの活用 - `ruff` (フォーマット・リント) - `mypy` (型チェック) - `pytest` (テスト) --- ## 「とりあえず動くPython」独自のトレーニング ### コーディング習慣の基礎固め - マジックナンバーの定数化 - 早期return でネストを浅くする - `print` デバッグ → `logging` への移行 ### 実践的リファクタリング訓練 - 既存コードを「機能追加なし」で改善する練習 - 関数分割のみ - 変数名改善のみ - 重複削除のみ ### 90分トレーニングメニュー(週2回推奨) 1. 10分:既存コードを読む(改善点3つメモ) 2. 30分:関数分割・命名・重複削除 3. 20分:テスト2〜3本追加 4. 20分:ruff とフォーマッタ適用 5. 10分:README に使い方・入出力例を追記 ### ドキュメント作成 - READMEへの「使い方」「入力例」「出力例」追記 ### 段階的アプローチ - テストは「全部」ではなく「要所」から - "テストしやすい形"にするための設計 --- ## 「PythonからRust移行」独自のトレーニング ### Rust移行を見据えたPython設計 - 例外を減らし、Result っぽい戻り値にする - 例外投げっぱなし → `(ok, value_or_error)` や専用エラー型 - `Optional` と `Result相当` を明確に分ける - 不変性の意識 - 関数は引数を破壊しない癖をつける - Pythonでも「不変が基本」の設計 ### Rust学習の順序設計 1. 型(struct/enum):dataclass 置き換え 2. エラー処理(Result / ?):例外文化からの脱却 3. 借用(&)とライフタイム:必要時のみ 4. 所有権とムーブ:パフォーマンス意識段階で ### Rust向き題材の選定 - 文字列パース/ログ整形/CSV変換 - APIレスポンスの整形(JSON→struct) - バリデーション(入力検証) - 小さめのCLIツール(引数→処理→出力) ### ハイブリッド戦略 - Python + Rust の併用から入る - Python:I/O、設定、オーケストレーション - Rust:パース、計算、バリデーション、コアロジック ### Rust設計パターン - 「所有して返す」設計(最初は参照を返さない) - `struct` と `enum` で状態を閉じる - 「不変が基本、必要な所だけ mut」 ### 段階的な学習ルート 1. Python:型ヒント + dataclass化 2. Rust:struct/enum + Result/? で CLI 1本 3. Rust:所有して返す設計でパース/変換系 2〜3本 4. Rust:参照(&str, &[T])でコピー削減 5. 必要時:ライフタイム/トレイト/非同期へ拡張 --- ## 学習パスの使い分け ### 現在の状況に応じた優先度 | 状況 | 優先すべきロードマップ | |------|----------------------| | Pythonの基礎固め中 | 「とりあえず動くPython」の90分メニュー | | コードは書けるが品質に不安 | 「とりあえず動くPython」のリファクタリング訓練 | | Rust移行を半年〜1年後に予定 | 両方(Pythonで型・dataclass を意識) | | 今すぐRust移行したい | 「PythonからRust移行」+ 辞書をdataclass化 | | 実務で両言語を使いたい | 「PythonからRust移行」のハイブリッド戦略 | --- ## おすすめの組み合わせ学習 ### フェーズ1:Python品質向上(1〜3ヶ月) - 90分トレーニング × 週2回 - 型ヒント + dataclass の習慣化 - logging、テスト、ツール導入 ### フェーズ2:Rust準備期(1〜2ヶ月) - Python側で Result的エラー処理に移行 - 不変性・引数破壊しない設計の意識 - 小さいCLI/パーサーを1本作る(Python) ### フェーズ3:Rust導入(2〜4ヶ月) - 同じ仕様をRustで再実装(小さく始める) - struct/enum + Result/? の習得 - 徐々にハイブリッド構成へ ## リンク - [[「とりあえず動くPythonプログラム」から脱出するロードマップ]] - [[PythonからRustへ移行するロードマップ]]