writing-clean-ts について
writing-clean-tsは、TypeScriptの作成、リファクタリング、レビューに使う開発者向けスキルです。レイヤー構成とタスクに応じた参照ルールを適用し、プロジェクトのlintツールでコードを検査します。
主な機能
- 01ControllerからEntityまでのレイヤー構成
- 02フレームワークとタスク別の参照ルール
- 03一般的なファイル用テンプレート
- 04ES modulesと#srcエイリアスの先行設定
- 05lint-fixとlintによる検査
活用シーン
- 01既存の構成に沿ったTypeScript機能の追加
- 02規約に基づくTypeScriptのリファクタリングやレビュー
- 03プロジェクトのlintとES modulesの設定
- 04フレームワーク規則に沿ったサービスやUIコンポーネントの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ beecode-rs/ claude-skills --skill writing-clean-tsインストール後、Claude Code で/writing-clean-tsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.txtreferences/core-rules.mdlinting.mdreferences/architecture/app-boot-layer.mdclass-vs-object.mdcomponent-layer.mdconstant-config-pattern.mdcontroller-layer.mddal-layer.mdentity-layer.mdfile-organization-pattern.mdmodel-vs-entity.mdnull-undefined-pattern.mdrepository-layer.mdrest-api-url-conventions.mdservice-layer.mdui-component-layer.mduse-case-layer.mdreferences/commands/clean-arch.mdclean-style.mdcleanup.mdreferences/frameworks/electron.mdexpo.mdexpress.mdreact.mdrmq.mdrxjs.mdtypeorm.mdzod.mdreferences/style/code-style.md詳細
TypeScript エキスパート
TypeScript を作成、リファクタリング、レビューし、単一のレイヤーアーキテクチャ(Controller → Use Case → Component → Service → Repository → DAL → Entity)と一貫した命名、スタイル、Lint の規約に従わせ、新しいコードが既存のスタイルに合致し、シームレスに統合されるようにします。
サービス、リポジトリ、DAL、エンティティ、モデル、列挙型、コントローラー、ハンドラー、ユースケース、アプリの起動コード、UI コンポーネントを作成または移動するとき、これらの規約に沿って TypeScript をリファクタリングまたはレビューするとき、または #src エイリアスを使った Lint 設定や ES モジュールを構成するときに使用してください。
基本ワークフロー
- スタックを検出する:対象パッケージの
package.jsonを読み込みます(モノレポの場合はルートではなく、作業対象のパッケージ)。以下のフレームワーク表にあるファイルも確認します。 - リファレンスを読み込む:まず
references/core-rules.mdを読み、その後、スタックとタスクに該当する行のファイルだけを読みます。読み込むファイルは、最初から最後まで通して読みます。範囲を指定して読み込まないでください。 - 機能コードを書く前にプロジェクトの設定を確認する:
#srcエイリアスを使った ES モジュールと、設定ファイルを含むlint/lint-fixスクリプトを確認します。いずれかが不足している場合は、まず設定します(references/linting.md)。小規模なプロジェクト、新規プロジェクト、既存プロジェクトであっても例外はありません。 - レイヤーの順序に沿って構築する:バックエンドは App Boot → Controller → Entity → DAL → Repository → Component/Service/Use Case、フロントエンドは Controller → UI Component の順に進めます。新しいファイルはすべて、スターターテンプレートをもとに作成します。
- ツールで Lint を実行する:
lint-fixを実行してから、lintを実行します。スクリプトで確認できる内容は、その出力だけで判断します。目視や AI エージェント/レビュアーによるコードレビューで判断しないでください。手作業で修正するのは、ツールが報告した問題のうち、ツールでは修正できないものだけです。ルールを無効にして通過させないでください。 - テストは
contract-testing-tsスキルの対象です。
必要なものだけを読み込む
リファレンスファイルを最初にすべて読み込まないでください。必ず最初に references/core-rules.md を読み、その後は条件に該当するファイルだけを読みます。それ以外のファイルは読まないでください。
フレームワーク
プロジェクトは複数の行に該当する場合があります(たとえば Express + TypeORM + Zod)。該当する行をすべて読み、それ以外は読まないでください。
| 次の場合に検出 | 読み込むファイル |
|---|---|
依存関係に expo または expo-router がある、"main": "expo-router/entry" がある、または app.json / app.config.ts に expo キーがある場合。コードの作成、移動、レビューを行う前に読みます | references/frameworks/expo.md |
依存関係に react がある場合(React Native、Expo、Electron のレンダラーを含む) | references/frameworks/react.md |
依存関係に express がある場合 | references/frameworks/express.md |
依存関係に typeorm がある場合 | references/frameworks/typeorm.md |
依存関係に amqplib がある場合、または src/controller/rmq/ が存在する場合 | references/frameworks/rmq.md |
イベントバスに使用する rxjs が依存関係にある場合、または src/controller/rxjs-bus/ が存在する場合 | references/frameworks/rxjs.md |
依存関係に electron がある場合、または src/main/ と src/renderer/ が存在する場合 | references/frameworks/electron.md |
依存関係に zod がある場合、またはタスクでコントローラーハンドラー、スキーマ、ペイロードのバリデーションを作成またはレビューする場合 | references/frameworks/zod.md |
トピック
| タスクの内容... | 参照先 |
|---|---|
| あらゆるコードタスク(必ず最初に読む) | references/core-rules.md |
| ファイル、エクスポート、列挙型、関数、変数、ブール値の作成、命名、名前変更 | references/style/naming-convention.md |
関数本体(条件演算子、ループ、let、switch、アロー関数、ミューテーション、デフォルト値)の記述や編集 | references/style/code-style.md |
| エラー処理、網羅的な switch、または関数の名前でその動作を網羅する必要がある場合 | references/style/function-guidelines.md |
| 約30行を超える関数、または関数やファイルの分割 | references/style/function-size.md |
| 関数シグネチャ(パラメーター、デフォルト値、コールバック)の記述や変更 | references/style/object-params-pattern.md |
日付/時刻フィールド(*At フィールド、Date 値、タイムスタンプ列) | references/style/timestamp-handling.md |
| ファイルやフォルダーの作成、コードの移動、コードを配置するレイヤーの判断 | references/architecture/file-organization-pattern.md |
| モジュールにクラス、プレーンオブジェクト、シングルトンのどれを使うかの選択 | references/architecture/class-vs-object.md |
| 定数、環境変数/設定値、ランタイム状態、プラットフォームチェック | references/architecture/constant-config-pattern.md |
| モデル型、またはエンティティとモデル間の変換 | references/architecture/model-vs-entity.md |
レイヤー間の欠損値(null、undefined、オプションフィールド) | references/architecture/null-undefined-pattern.md |
起動またはシャットダウンのコード(src/app-boot/、ライフサイクル) | references/architecture/app-boot-layer.md |
コントローラー(src/controller/) | references/architecture/controller-layer.md |
src/business/component/ 内のユニット(セレクター+ストラテジー、パブリック API+プライベートヘルパー) | references/architecture/component-layer.md |
src/business/service/ 内のサービス | references/architecture/service-layer.md |
src/business/use-case/ 内のユースケース | references/architecture/use-case-layer.md |
src/business/repo/ 内のリポジトリー | references/architecture/repository-layer.md |
src/dal/ 内の DAL(データベース、ファイル、メモリー、API ストレージ) | references/architecture/dal-layer.md |
src/dal/*/entity/ 内のエンティティ | references/architecture/entity-layer.md |
src/ui-component/ 内の UI コンポーネント | references/architecture/ui-component-layer.md |
| REST エンドポイントの URL の設計またはレビュー | references/architecture/rest-api-url-conventions.md |
lint の設定(新規プロジェクト、または lint/lint-fix スクリプトがないプロジェクト)、ESLint/Prettier/jsonsort 設定の編集、lint スクリプトでの検証内容の確認、lint ルールの理解 | references/linting.md |
コマンド
| ユーザーの依頼... | 参照先 |
|---|---|
| 「このコードを整理して」「このファイルをレビューして」「コード品質を確認して」「コード構成を検証して」 | references/commands/cleanup.md に加え、レビュー対象のコードに該当するフレームワークとトピックの行 |
| 「アーキテクチャをレビューして」「clean-arch」「構成を確認して」「適切なレイヤーにあるか確認して」 | references/commands/clean-arch.md に加え、references/architecture/ 内の file-organization-pattern.md、class-vs-object.md、model-vs-entity.md、constant-config-pattern.md、null-undefined-pattern.md、rest-api-url-conventions.md、レビュー対象のレイヤーのファイル、コントローラーが対象に含まれる場合は references/frameworks/express.md と references/frameworks/zod.md、Expo プロジェクトの場合は references/frameworks/expo.md。references/style/ は読み込まないでください |
| 「スタイルをレビューして」「clean-style」「読みやすさを確認して」、またはスタイルのみのフィードバック | references/commands/clean-style.md に加え、references/style/ 内のすべてのファイル、Expo プロジェクトの場合は references/frameworks/expo.md。references/architecture/ は読み込まないでください |
スターターテンプレート
コピー&ペーストして使えるひな形です。作成するファイルに対応するものだけを開いてください。
| 作成するもの... | テンプレート |
|---|---|
| 独立したメソッドを持つサービス(シングルトン) | templates/service-template.ts |
| 相互依存するメソッドを持つサービス(クラス) | templates/service-class-template.ts |
| パーサーサービス(正規表現、日付など) | templates/parser-service-template.ts |
| リポジトリークラス | templates/repository-template.ts |
| TypeORM DAL クラス | templates/dal-template.ts |
| TypeORM エンティティ | templates/entity-template.ts |
| サービスを統括するユースケース | templates/use-case-template.ts |
| Express の GET リストエンドポイント | templates/express-handler-template.ts |
| Express の POST 作成エンドポイント | templates/express-handler-post-template.ts |
| React Router コントローラー(Expo 以外) | templates/react-controller-template.tsx |
| React UI コンポーネント | templates/react-component-template.tsx |
| モデルの型定義 | templates/model-template.ts |
列挙型(キーと値が異なる場合は -mapper-enum) | templates/enum-template.ts |
| コンポーネントまたはサービスのサブフォルダー内にあるストラテジー/プラグイン可能なクラス | templates/subfolder-component-template.ts |
ライセンス
このスキルは、LICENSE.txt に記載された条件に基づいてライセンスされています。