Day 2: イディオマティックGo - 評価基準
評価項目
チャレンジ1: リファクタリング(25点)
| 項目 | 配点 | 評価基準 |
|---|---|---|
| 命名規則 | 10点 | キャメルケース使用、Get不使用、適切なエクスポート |
| 早期リターン | 10点 | ネストが深くない、エラーは先に返す |
| エラーメッセージ | 5点 | 小文字、簡潔、適切な内容 |
減点対象:
- スネークケースの残存: -5点
- Getが付いたまま: -3点
- エラーメッセージが大文字: -2点
---
チャレンジ2: オプションパターンの実装(25点)
| 項目 | 配点 | 評価基準 |
|---|---|---|
| 構造体定義 | 5点 | 適切なフィールドが定義されている |
| Option型 | 5点 | 関数型として正しく定義されている |
| Withオプション | 10点 | WithTimeout, WithBaseURLが正しく実装されている |
| NewClient | 5点 | デフォルト値が適切に設定されている |
ボーナス(+5点):
- 追加のオプション(WithHeader, WithRetryなど)を実装している
---
チャレンジ3: defer, panic, recoverの実践(25点)
| 項目 | 配点 | 評価基準 |
|---|---|---|
| SafeExecute | 10点 | recoverでpanicをキャッチしエラーに変換 |
| MustParse | 10点 | 変換失敗時に適切にpanicする |
| 動作確認 | 5点 | main関数で両方のケースをテストしている |
減点対象:
- recoverがdefer内で呼ばれていない: -5点
- panicの使い方が不適切: -5点
---
チャレンジ4: インターフェースの設計(25点)
| 項目 | 配点 | 評価基準 |
|---|---|---|
| 小さいインターフェース | 10点 | Getter, Setter, Deleterが分離されている |
| 組み合わせ | 5点 | 埋め込みで組み合わせている |
| 実装 | 10点 | MemoryStorageがStorageを満たしている |
---
総合評価
| 点数 | 評価 |
|---|---|
| 90-100点 | 優秀 - イディオマティックGoを深く理解している |
| 70-89点 | 良好 - Goらしいコードが書けている |
| 50-69点 | 合格 - 基本的な規則は理解している |
| 0-49点 | 要再提出 - Goの慣習を学び直す必要がある |
---
コードレビューチェックリスト
命名規則
- [ ] キャメルケースを使用している
- [ ] 略語は一貫している(HTTPかHttp)
- [ ] ゲッターにGetを付けていない
- [ ] インターフェース名がerで終わっている(1メソッドの場合)
エラー処理
- [ ] 早期リターンを使用している
- [ ] エラーメッセージが小文字で始まっている
- [ ] エラーを無視していない(または明示的に
_で受けている)
defer/panic/recover
- [ ] deferが適切に使用されている
- [ ] panicは回復不可能なエラーのみで使用
- [ ] recoverはdefer内で使用されている
インターフェース
- [ ] インターフェースが小さい
- [ ] 具象型を返し、インターフェースを受け取っている
ドキュメント
- [ ] エクスポートされた識別子にコメントがある
- [ ] コメントは識別子名で始まっている
- 特に良い点を探す: イディオマティックGoの良い例を見つけて褒める
- 改善点は具体的に: 「なぜダメか」ではなく「どうすれば良いか」を伝える
- 参考資料を提示: Effective GoやCode Review Commentsへのリンクを添える
---