## 共通トレーニング要素(両ロードマップで重視)
### 型と構造の明確化
- 型ヒントの導入(関数の入出力から)
- `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へ移行するロードマップ]]