antfu
Anthony FuのJavaScript/TypeScriptプロジェクト向けのこだわりのツール設定と規約を提供します。新規プロジェクトのセットアップ、ESLint/Prettierの代替設定、モノレポ構成、ライブラリの公開、またはユーザーがAnthony Fuのスタイルを好む場合に活用してください。
description の原文を見る
Anthony Fu's opinionated tooling and conventions for JavaScript/TypeScript projects. Use when setting up new projects, configuring ESLint/Prettier alternatives, monorepos, library publishing, or when the user mentions Anthony Fu's preferences.
SKILL.md 本文
コーディング慣行
コード構成
- 単一責任の原則: 各ソースファイルは明確で焦点を絞ったスコープ/目的を持つべき
- 大きなファイルの分割: ファイルが大きくなったり複数の責務を扱う場合は分割する
- 型の分離: 型とインターフェースは常に
types.tsまたはtypes/*.tsに分離する - 定数の抽出: 定数は専用の
constants.tsファイルに移動する
実行環境
- 同形的コードを推奨: Node、ブラウザ、Workers で動作する環境非依存コードを可能な限り記述する
- 明確な実行環境指示: コードが環境固有の場合、ファイル先頭にコメントを追加する:
// @env node
// @env browser
TypeScript
- 明示的な戻り値型: 可能な限り戻り値型を明示的に宣言する
- 複雑なインライン型を避ける: 複雑な型は専用の
typeまたはinterface宣言に抽出する
コメント
- 不要なコメントを避ける: コードは自己説明的であるべき
- 「何」ではなく「なぜ」を説明: コメントはコードが何をするかではなく、推論や意図を説明する
テスト (Vitest)
- テストファイル:
foo.ts→foo.test.ts(同じディレクトリ) describe/itAPI を使用する (testは不可)- 複雑な出力には
toMatchSnapshotを使用する - 言語固有のスナップショットには明示的なパスで
toMatchFileSnapshotを使用する
ツール選択
@antfu/ni コマンド
| コマンド | 説明 |
|---|---|
ni | 依存関係をインストール |
ni <pkg> / ni -D <pkg> | 依存関係 / 開発依存関係を追加 |
nr <script> | スクリプトを実行 |
nu | 依存関係をアップグレード |
nun <pkg> | 依存関係をアンインストール |
nci | クリーンインストール (pnpm i --frozen-lockfile) |
nlx <pkg> | パッケージを実行 (npx) |
npm パッケージバージョンの確認
fast-npm-meta を使用してパッケージの最新バージョンを調べます。小さなメタデータエンドポイントをクエリするため、レジストリ全体をダウンロードする (パッケージあたり数メガバイト可能) よりも効率的です。
nlx fast-npm-meta version vite # 7.3.1
nlx fast-npm-meta version "nuxt@^3.5" # 3.5.22 — 範囲対応
nlx fast-npm-meta version vite nuxt vue # 複数同時に
nlx fast-npm-meta version vite --json # スクリプト用 JSON
nlx fast-npm-meta full vite # 完全バージョンリスト + dist-tags
最新バージョンのみが必要な場合は npm view <pkg> version よりも、またはレジストリから直接 package.json を読むよりもこちらを推奨します。
TypeScript 設定
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true
}
}
ESLint セットアップ
// eslint.config.mjs
import antfu from '@antfu/eslint-config'
export default antfu()
タスク完了時は pnpm run lint --fix を実行してコードをフォーマットしコーディングスタイルを修正します。
詳細な設定オプションについては: antfu-eslint-config
Git フック
{
"simple-git-hooks": {
"pre-commit": "pnpm i --frozen-lockfile --ignore-scripts --offline && npx lint-staged"
},
"lint-staged": { "*": "eslint --fix" },
"scripts": {
"prepare": "npx simple-git-hooks"
}
}
pnpm カタログ
pnpm-workspace.yaml で名前付きカタログを使用してバージョン管理を行います:
| カタログ | 目的 |
|---|---|
prod | 本番依存関係 |
inlined | バンドラー内参照依存関係 |
dev | 開発ツール (リンター、バンドラー、テスト) |
frontend | フロントエンドライブラリ |
デフォルトカタログは避けます。カタログ名はプロジェクト要件に応じて調整できます。
リファレンス
| トピック | 説明 | リファレンス |
|---|---|---|
| ESLint 設定 | フレームワークサポート、フォーマッター、ルールオーバーライド、VS Code 設定 | antfu-eslint-config |
| プロジェクトセットアップ | .gitignore、GitHub Actions、VS Code 拡張機能 | setting-up |
| アプリ開発 | Vue/Nuxt/UnoCSS の慣行とパターン | app-development |
| ライブラリ開発 | tsdown バンドリング、純粋 ESM パブリッシング | library-development |
| モノレポ | pnpm workspaces、一元化されたエイリアス、Turborepo | monorepo |
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- antfu
- リポジトリ
- antfu/skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/antfu/skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。