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へのリンクを添える