スキル一覧に戻る
j5ik2o

single-type-per-file

by j5ik2o

4🍴 0📅 2026年1月24日
GitHubで見るManusで実行

SKILL.md


name: single-type-per-file description: >- コード生成時に「1公開型 = 1ファイル」の原則を強制する。 公開型(public class, interface, trait, protocol, enum, type、JS/TSではexportされたオブジェクト) ごとに個別ファイルを作成し、1ファイルに複数の公開型を詰め込むことを禁止する。 トリガー:新規ファイル作成、クラス/構造体/インターフェース追加、コード生成リクエスト時に自動適用。

Single Type Per File

コード生成時に「1公開型 = 1ファイル」を強制する汎用原則。言語を問わず適用する。

原則

1つの公開型につき1つのファイルを作成する。

公開型の定義

以下を公開型として扱う:

言語公開型
Java/Kotlin/Scalapublicclass, trait, object, enum
Rustpub struct, pub trait, pub enum
Go大文字始まりの type
Pythonモジュールレベルの class
TypeScript/JavaScriptexportされた class, interface, type, オブジェクト
Swiftpublic class, public protocol, public enum
C#public class, public interface, public enum

ルール

MUST(必須)

  • 1つの公開型につき1つのファイルを作成
  • ファイル名は公開型の名前を反映(例: UserRepositoryuser_repository.py
  • 既存ファイルに新しい公開型を追加しない

ALLOWED(許可)

  • 公開型に必要なプライベート実装型は同居可
  • 公開型の内部ネスト型は同居可
  • sealed interface/traitとその閉じた実装群は同居可

MUST NOT(禁止)

  • 1ファイルに複数の公開クラス/構造体/インターフェース
  • 「関連しているから」という理由での型の集約
  • 言語idiomを理由にした原則の無視

正しい例

src/
├── user.py           # class User
├── user_repository.py    # class UserRepository
├── order.py          # class Order
└── order_status.py   # enum OrderStatus

誤った例

src/
├── models.py         # class User, class Order, enum OrderStatus ← 禁止
└── repositories.py   # class UserRepository, class OrderRepository ← 禁止

sealed interface/trait の例外

Scalaのsealed trait、Kotlinのsealed class、Rustのenumなど、閉じた実装群は同居可:

// payment_method.rs - 許可される例外
pub enum PaymentMethod {
    CreditCard(CreditCard),
    BankTransfer(BankTransfer),
}

struct CreditCard { /* ... */ }  // プライベート実装
struct BankTransfer { /* ... */ } // プライベート実装
// PaymentMethod.kt - 許可される例外
sealed class PaymentMethod {
    data class CreditCard(val number: String) : PaymentMethod()
    data class BankTransfer(val accountId: String) : PaymentMethod()
}
// PaymentMethod.scala - 許可される例外
sealed trait PaymentMethod
final case class CreditCard(number: String) extends PaymentMethod
final case class BankTransfer(accountId: String) extends PaymentMethod

判断基準

新しい型を追加する際のチェックリスト:

  1. この型は公開型か? → Yes なら新規ファイル作成
  2. 既存の公開型の内部実装か? → Yes なら同居可
  3. sealed interface/traitの閉じた実装か? → Yes なら同居可
  4. 上記以外 → 新規ファイル作成

言語idiomとの関係

Go の errors.go、Rust の mod.rs など言語固有の慣習があっても、本原則を優先する

理由:

  • ナビゲーション性の向上(ファイル名 = 型名)
  • 責任の明確化(ファイル肥大化 = 設計の問題)
  • Git履歴の追跡容易性

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です