.agents/skills/japanese-test-naming/SKILL.md
テストメソッド名やテストケース名に日本語を使用し、仕様の意図を明確に表現する場合に使用する。 Given-When-Thenパターンを日本語で表現することで、非技術者とのコミュニケーションも円滑にする。
npx skillsauth add ymkz/demo-monorepo japanese-test-namingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
テストメソッド名やテストケース名に日本語を使用し、テストの意図を明確に表現する。技術的な命名規則よりも、仕様や振る舞いを自然言語で説明することを優先する。
{テスト対象}_{条件}_{期待結果}
// ❌ 避ける: 英語の省略形や曖昧な命名
fun test1() { }
fun createBookTest() { }
fun shouldCreateBookWhenValid() { }
// ✅ 良い: 日本語で意図を明確に
fun 有効な書籍情報で作成すると保存されること() { }
fun ISBNが未指定の場合はエラーが返されること() { }
fun タイトルが100文字を超える場合はバリデーションエラーになること() { }
// ❌ 避ける
test('test', () => {});
test('create book', () => {});
// ✅ 良い
test('有効な書籍情報で作成すると保存されること', () => {});
test('ISBNが未指定の場合はエラーが返されること', () => {});
@Test
fun 書籍が存在しない状態で検索すると空リストが返されること() {
// Given: 書籍が存在しない状態で
// When: 検索すると
val result = bookRepository.search("Spring");
// Then: 空リストが返されること
assertThat(result).isEmpty();
}
@Test
fun タイトルが空文字の場合はバリデーションエラーになること() {
val request = BookCreateRequest(title = "", isbn = "1234567890");
val violations = validator.validate(request);
assertThat(violations).hasSize(1);
assertThat(violations.first().message).isEqualTo("タイトルは必須です");
}
@Test
fun 存在しない書籍IDで取得すると404エラーが返されること() {
val nonExistentId = 99999L;
assertThrows<NotFoundException> {
bookService.findById(nonExistentId);
}.also {
assertThat(it.message).contains("書籍が見つかりません");
};
}
@ParameterizedTest(name = "{0}の場合")
@CsvSource(
"空文字, ''",
"空白のみ, ' '",
"null, null"
)
fun 無効なタイトルはバリデーションエラーになること(
description: String,
title: String?
) {
val request = BookCreateRequest(title = title, isbn = "1234567890");
val violations = validator.validate(request);
assertThat(violations).isNotEmpty();
}
describe('書籍検索', () => {
test.each([
['キーワードに一致する書籍が存在する場合', 'Spring', 3],
['キーワードに一致する書籍が存在しない場合', 'Unknown', 0],
['空文字で検索した場合', '', 10],
])('%s: %sを検索すると%i件返されること', async (_, keyword, expected) => {
const result = await searchBooks(keyword);
expect(result.length).toBe(expected);
});
});
// 仕様をそのまま表現
fun 新規登録時に自動で作成日時が設定されること()
// 境界値を明示
fun タイトルがちょうど100文字の場合は正常に保存されること()
fun タイトルが101文字の場合はバリデーションエラーになること()
// 状態遷移を明示
fun 未公開の書籍を公開すると公開日時が設定されること()
// 実装詳細に依存
fun bookRepositorySaveTest() // Repositoryの実装をテストしているだけ
// 不完全な日本語
fun テスト() // 何をテストしているか不明
// 英語の直訳
fun bookCreateWhenValidThenSuccess() // 機械的な英語パターン
// build.gradle.kts
tasks.test {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
showStandardStreams = true
}
}
テストレポートに日本語が正しく表示される。
// vitest.config.ts
export default defineConfig({
test: {
name: '日本語テスト',
include: ['src/**/*.test.ts'],
reporters: ['verbose'], // 日本語テスト名を詳細表示
},
});
// 日本語テスト名を含む出力
tasks.test {
testLogging {
showExceptions = true
showCauses = true
showStackTraces = true
events("PASSED", "FAILED", "SKIPPED")
// 日本語を正しく表示
outputs.upToDateWhen { false }
}
}
日本語テスト名はそのまま表示される:
✓ 有効な書籍情報で作成すると保存されること
✓ ISBNが未指定の場合はエラーが返されること
✗ タイトルが空文字の場合はバリデーションエラーになること
RUN v1.0.0 /path/to/project
✓ apps/web-form/src/tests/book.test.ts (3 tests) 45ms
✓ 書籍検索 (3 tests)
✓ キーワードに一致する書籍が存在する場合: Springを検索すると3件返されること
✓ キーワードに一致する書籍が存在しない場合: Unknownを検索すると0件返されること
✓ 空文字で検索した場合: 空文字を検索すると10件返されること
class BookSearchTest {
fun キーワードに部分一致する書籍が返されること() { }
fun 大文字小文字を区別しないこと() { }
fun 検索結果は出版日の降順でソートされること() { }
fun 最大100件まで返されること() { }
fun 検索結果が0件の場合は空リストを返すこと() { }
}
これらのテスト名から、書籍検索機能の仕様が一目で理解できる。
| 問題 | 原因 | 解決策 | |------|------|--------| | CIで文字化け | 文字エンコーディング | UTF-8設定を確認 | | テストレポートで文字化け | フォント問題 | 日本語フォントをインストール | | IDEで警告 | メソッド名規約 | 無視して構わない |
tools
npm/pnpmベースのモノレポでWireitを使用してビルドパイプラインの依存関係を管理し、キャッシュと並列実行を活用する場合に使用する。
tools
このプロジェクトでは1リクエストあたりの全イベントを1つのJSONログに集約する「ワイドイベントロギング」を採用している。MDCとThreadLocalを組み合わせ、リクエスト処理のトレーサビリティ向上とパフォーマンス分析を実現する。
testing
単体テストとインテグレーションテストを使い分ける場合に使用する。テストピラミッドに基づき、テストの責務、実行速度、メンテナンスコストを考慮して適切なテスト戦略を選択する。
development
Spiceflow is a super simple, fast, and type-safe API and React Server Components framework for TypeScript. Works on Node.js, Bun, and Cloudflare Workers. Use this skill whenever working with spiceflow to get the latest docs and API reference.