Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

hairy

Hairy が定めた、Web開発におけるこだわりの指針とベストプラクティスを提供するスキルです。プロジェクトの設計・実装方針に迷った際に、Hairy の見解に基づいた推奨アプローチを参照できます。

description の原文を見る

Hairy's {Opinionated} preferences and best practices for web development

SKILL.md 本文

Hairyf の選好設定

このスキルは、web開発に対する Hairyf の好みのツール、設定、ベストプラクティスをカバーしています。このスキルは主観的です。

クイックサマリー

カテゴリ選好設定
パッケージマネージャーpnpm
言語TypeScript (strict mode)
モジュールシステムESM ("type": "module")
Linting & Formatting@antfu/eslint-config (Prettier なし)
テストVitest
Git Hookssimple-git-hooks + lint-staged
ドキュメンテーションVitePress (docs/ 内)

グローバル選好設定

可能な限り尊重すべき、高レベルで横断的な選好設定:

"specify" キーワード

タスクが "specify" でマークされている場合(例:「このリポジトリを hairy に合わせて specify する」):

  • 現在のプロジェクトを検査し、これらの選好設定に合致するまで最適化するリクエストとして扱う。
  • 具体的には、以下をトリガーする必要があります:
    • @skills/arch-upkeep と関連する arch-* スキルを使用したアーキテクチャ検出とアップグレード計画。
    • 選好設定を考慮したスタック選択(@skills/unjs を使用して unjs エコシステムを優先)。
    • @skills/taze を使用した依存関係の鮮度チェックとアップグレード。
    • "specify" タスクが完了したと判断する前に、lint + typecheck(存在する場合はテスト)の最終パス。

unjs エコシステムフレームワークを優先する

  • フレームワークやランタイムを選択する場合(SSR、API、ツーリング、dev サーバーなど)、最初に unjs エコシステムプロジェクトを優先します(例:Nuxt、Nitro、h3、unstorage、unplugin、unocss、ofetch、その他 unjs 管理ツール)。
  • 明確で正当な理由(機能の不足、エコシステムの制約、またはレガシー要件)がある場合のみ、non-unjs オプションにフォールバックします。
  • 具体的な選択、レシピ、デフォルトについては、@skills/unjs に委譲し、その推奨事項に従います。

アーキテクチャは arch-* スキルにマップする必要がある

  • プロジェクトのアーキテクチャは常に標準的な arch-* スタック(tsdown library、CLI、monorepo、unplugin、webext、vscode など)のいずれかにマップすべきです。
  • 現在の形状がターゲットのいずれかにきれいにマップしない場合、それをアップグレード機会として扱い、アドホック構造を追加する代わりに移行を計画します。
  • @skills/arch-upkeep を使用して:
    • 現在のアーキテクチャを検出する。
    • 最適なターゲット arch-* スキルを選択する。
    • そのアーキテクチャへの段階的な移行をオーケストレーションする。

taze で依存関係を新鮮に保つ

  • 依存関係は大きなリファクタの際だけでなく、継続的に新鮮に保つべきです。
  • taze@skills/taze を参照)を使用して以下を推奨します:
    • 古い依存関係を監査する。
    • 制御されたアップグレードを実行する(定期的にマイナー/パッチ、メジャーは明示的なレビューで)。
    • pnpm ワークスペースとカタログを使用してモノレポ全体のバージョンを調整する。
  • taze の提案に従わない特定の理由がない限り、package.json のバージョンを手で編集することは避けます。

常に lint + typecheck で終了する

  • 非自明な変更(機能、リファクタ、設定変更、依存関係アップグレード、CI 変更など)を実装した後、常に lint と typecheck を実行してからタスク完了と判断します。
  • 標準スクリプト:
    • nr lint@antfu/eslint-config 経由の ESLint。
    • nr typecheck → strict mode の TypeScript(プロジェクト全体)。
  • CI と Git hooks の場合:
    • pre-commit hooks が少なくともステージファイルで lint を実行していることを確認。
    • GitHub Actions(またはその他の CI)が PR とメインへのプッシュで linttypecheck の両方を実行していることを確認。

コアスタック

パッケージマネージャー(pnpm)

パッケージマネージャーとして pnpm を使用します。

モノレポセットアップの場合は、pnpm ワークスペースを使用します:

# pnpm-workspace.yaml
packages:
  - 'packages/*'

pnpm-workspace.yaml で pnpm の名前付きカタログを使用して依存関係バージョンを管理します:

カタログ目的
prod本番環境の依存関係
inlinedバンドラーによってインライン化される依存関係
dev開発ツール(linter、bundler、testing、dev-server)
frontendフロントエンドにバンドルされるフロントエンドライブラリ

カタログ名は上記に限定されず、必要に応じて調整できます。デフォルトカタログの使用は避けます。

@antfu/ni

統一されたパッケージマネージャーコマンドに @antfu/ni を使用します。ロックファイルに基づいてパッケージマネージャー(pnpm/npm/yarn/bun)を自動検出します。

コマンド説明
ni依存関係をインストール
ni <pkg>依存関係を追加
ni -D <pkg>dev 依存関係を追加
nr <script>スクリプトを実行
nu依存関係をアップグレード
nun <pkg>依存関係をアンインストール
nciクリーンインストール(pnpm i --frozen-lockfile のような動作)
nlx <pkg>パッケージを実行(npx のような動作)

コマンドが見つからない場合は、pnpm i -g @antfu/ni でグローバルインストールしてください。

TypeScript(Strict Mode)

strict mode を有効にした TypeScript を常に使用します。

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true
  }
}

ESM(ECMAScript Modules)

常に ESM モードで作業します。package.json"type": "module" を設定します。


コード品質

ESLint(@antfu/eslint-config)

フォーマットと linting の両方に @antfu/eslint-config を使用します。これにより Prettier が不要になります。

// @ts-check コメント付きで eslint.config.js を作成します:

// @ts-check
import antfu from '@antfu/eslint-config'

export default antfu()

package.json にスクリプトを追加します:

{
  "scripts": {
    "lint": "eslint ."
  }
}

linting エラーが発生した場合、nr lint --fix で修正してみてください。lint:fix スクリプトは追加しません。

Git Hooks(simple-git-hooks + lint-staged)

pre-commit linting に simple-git-hookslint-staged を使用します:

{
  "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"
  }
}

ユニットテスト(Vitest)

ユニットテストに Vitest を使用します。

{
  "scripts": {
    "test": "vitest"
  }
}

規約:

  • テストファイルをソースファイルの隣に配置:foo.tsfoo.test.ts(同じディレクトリ)
  • 高レベルのテストは各パッケージの tests/ ディレクトリに配置
  • test ではなく describeit API を使用
  • アサーションに expect API を使用
  • TypeScript null assertions には assert のみを使用
  • 複雑な出力アサーションには toMatchSnapshot を使用
  • 言語固有の出力には toMatchFileSnapshot を明示的なファイルパスと拡張子で使用(それらのファイルを linting から除外)

プロジェクトセットアップ

パブリッシング(ライブラリプロジェクト)

ライブラリプロジェクトの場合、bumpp でトリガーされた GitHub Releases を通じてパブリッシュします:

{
  "scripts": {
    "release": "bumpp -r"
  }
}

ドキュメンテーション(VitePress)

ドキュメンテーションに VitePress を使用します。ドキュメントを docs/ ディレクトリ配下に配置します。

docs/
├── .vitepress/
│   └── config.ts
├── index.md
└── guide/
    └── getting-started.md

package.json にスクリプトを追加します:

{
  "scripts": {
    "docs:dev": "vitepress dev docs",
    "docs:build": "vitepress build docs"
  }
}

参考資料

グローバル選好設定

トピック説明参考資料
unjs エコシステムを優先unjs エコシステムフレームワークとツーリングを優先、@skills/unjs に委譲core-unjs-preferences
arch-* 経由のアーキテクチャリポジトリの形状を標準的な arch-* スキルにマップし、arch-upkeep 経由でアップグレードcore-arch-upkeep-routing
taze で新鮮な依存関係taze を使用して依存関係を継続的に新鮮に保ち、制御されたアップグレードを実行core-deps-taze
Lint + typecheck をゲートとしてローカルと CI で常に lint + typecheck で終了core-lint-typecheck

プロジェクトセットアップ

トピック説明参考資料
@antfu/eslint-configフォーマットと linting 用の ESLint flat configantfu-eslint-config
VS Code 拡張機能開発推奨拡張機能vscode-extensions

開発

トピック説明参考資料
アプリ開発Vue/Vite/Nuxt/UnoCSS web アプリケーション向けの選好設定app-development

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
hairyf
リポジトリ
hairyf/skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/hairyf/skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: hairyf · hairyf/skills · ライセンス: MIT