Skip to content

Commit beaec96

Browse files
shimbacoclaude
andcommitted
ガイドラインを他プロジェクトと同期
- CLAUDE.md: コミットメッセージガイドラインと修正後のコミット手順を追加 - go/CLAUDE.md: templテンプレート関数の引数パターン(構造体ベース)を追加 - rails/CLAUDE.md: RSpecコーディング規約とシステムテストの待機処理を追加 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent ccd0498 commit beaec96

File tree

3 files changed

+140
-0
lines changed

3 files changed

+140
-0
lines changed

CLAUDE.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,56 @@ Rails 版と Go 版で別々の Dev Container が用意されています:
128128

129129
Rails 版の具体的なコマンドは `rails/CLAUDE.md` を参照してください。
130130

131+
### 修正後のコミット
132+
133+
**重要**: バグ修正や機能実装を行った場合でも、Claude Code が自動的にコミットを作成しないでください。
134+
135+
- 修正が完了したら、コミット前のチェック(フォーマット、リント、テスト)を実行して CI が通ることを確認
136+
- **コミットは `/commit` コマンドで行う**: ユーザーが差分を確認し、適切な粒度でコミットできるようにする
137+
- コミットメッセージは[コミットメッセージのガイドライン](#コミットメッセージのガイドライン)に従って日本語で記述
138+
139+
### コミットメッセージのガイドライン
140+
141+
コミットメッセージは**日本語**で記述してください。
142+
143+
**フォーマット**:
144+
145+
```
146+
<タイトル>(1行、簡潔に変更内容を要約)
147+
148+
<本文>(任意、変更の詳細や理由を説明)
149+
```
150+
151+
**良い例**:
152+
153+
```
154+
パスワードリセット機能を実装
155+
156+
- internal/handler/password_reset/にハンドラーを追加
157+
- internal/usecase/reset_password.goにビジネスロジックを実装
158+
- Resend APIを使用したメール送信機能を追加
159+
- Cloudflare TurnstileによるBot対策を実装
160+
```
161+
162+
```
163+
ユーザー認証のバグを修正
164+
165+
セッションタイムアウト後にリダイレクトが正しく動作しない
166+
問題を修正。
167+
```
168+
169+
**悪い例**:
170+
171+
-`Update handler` (英語、内容が不明確)
172+
-`fix` (何を修正したか不明)
173+
-`WIP` (作業中のコミットは避ける)
174+
175+
**原則**:
176+
177+
- タイトルは変更内容を簡潔に表現する
178+
- 必要に応じて本文で詳細を説明する
179+
- 関連する Issue やPR がある場合は参照を含める
180+
131181
### コメントのガイドライン
132182

133183
このガイドラインは Go 版と Rails 版の両方に適用されます。

go/CLAUDE.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,53 @@ Go 版では、型安全なテンプレートエンジン [templ](https://templ.
663663
- **コンポーネント化**: `@componentName()` で他のコンポーネントを呼び出し
664664
- **国際化対応**: `templates.T(ctx, "message_id")` で翻訳を取得
665665

666+
#### テンプレート関数の引数パターン
667+
668+
テンプレート関数の引数は**構造体ベースのパターン**を使用します。
669+
670+
**基本ルール**:
671+
672+
-**構造体を使用**: テンプレートに渡すデータは専用の構造体にまとめる
673+
-**`context.Context` を明示的に渡さない**: templ は `ctx` を暗黙的に提供するため不要
674+
-**複数の引数を個別に渡さない**: 引数が増えるたびにシグネチャ変更が必要になる
675+
676+
**良い例**:
677+
678+
```templ
679+
// ページデータ構造体を定義
680+
type NewPageData struct {
681+
CSRFToken string
682+
TurnstileSiteKey string
683+
FormErrors *session.FormErrors
684+
Email string
685+
}
686+
687+
// 構造体のみを引数に取る(ctxはtemplが暗黙的に提供)
688+
templ New(data NewPageData) {
689+
<form>
690+
<input type="hidden" name="csrf_token" value={ data.CSRFToken }/>
691+
// templates.T(ctx, "key") で翻訳を取得(ctxは暗黙的に利用可能)
692+
<label>{ templates.T(ctx, "email_label") }</label>
693+
</form>
694+
}
695+
```
696+
697+
**悪い例**:
698+
699+
```templ
700+
// ❌ context.Contextを明示的に渡している
701+
// ❌ 複数の引数を個別に渡している
702+
templ New(ctx context.Context, formErrors *session.FormErrors, csrfToken string, turnstileSiteKey string) {
703+
// ...
704+
}
705+
```
706+
707+
**メリット**:
708+
709+
- **拡張性**: 新しいフィールドを追加してもシグネチャが変わらない
710+
- **可読性**: 呼び出し側でフィールド名が明確になる
711+
- **Go の慣習**: 引数が多い関数には構造体を使用するのが Go の標準的なパターン
712+
666713
#### 詳細ドキュメント
667714

668715
テンプレートの詳しい書き方、レイアウトの継承、コンポーネントの再利用、テストの書き方などは以下のドキュメントを参照してください:

rails/CLAUDE.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,49 @@ Rails 版 Mewst は、標準の MVC アーキテクチャに加え、以下の
324324
- **命名**: `{ComponentName}Component`
325325
- **テンプレート**: ERB を使用
326326

327+
### RSpec コーディング規約
328+
329+
```ruby
330+
# ❌ context, let, described_classは使用しない
331+
context "when xxx" do
332+
let(:user) { create(:user) }
333+
end
334+
335+
# ✅ itブロック内で変数定義
336+
it "xxxのとき、somethingすること" do
337+
user = FactoryBot.create(:user)
338+
# テスト実装
339+
end
340+
341+
# ✅ FactoryBotで作成したレコードの変数名には_recordサフィックスを付ける
342+
user_record = FactoryBot.create(:user_record)
343+
post_record = FactoryBot.create(:post_record)
344+
345+
# ❌ サフィックスなしの変数名は避ける
346+
user = FactoryBot.create(:user_record)
347+
```
348+
349+
#### システムテストの待機処理
350+
351+
```ruby
352+
# ❌ sleepを使用した待機処理は避ける
353+
button.click
354+
sleep 2
355+
expect(page).to have_current_path(some_path)
356+
357+
# ✅ Capybaraの待機機能を活用
358+
button.click
359+
# ページ上の要素の変化を待つ(Capybaraが自動的に最大5秒待機)
360+
expect(page).not_to have_content("削除されたコンテンツ")
361+
expect(page).to have_content("新しく表示されるコンテンツ")
362+
363+
# ✅ have_css/not_to have_cssで要素の出現/消失を待つ
364+
expect(page).to have_css(".success-message")
365+
expect(page).not_to have_css(".loading-spinner")
366+
```
367+
368+
**重要**: システムテストでは`sleep`の使用を避け、Capybaraの自動待機機能を活用すること
369+
327370
### 国際化(I18n)
328371

329372
すべてのユーザー向けメッセージは**必ず国際化対応**します:

0 commit comments

Comments
 (0)