mcpField
D
deno-expert

deno-expert

github.com/midudev開発7.0k56 回インストール1 週間前に更新
リポジトリ

deno-expert について

コードレビュー、デバッグ、プロジェクト設定、ベストプラクティスを扱う Deno 向けスキルです。Deno と Fresh を対象とし、他のランタイムの質問とは明確に切り分けます。

主な機能

  1. 01Deno と Fresh のコードレビュー
  2. 02ランタイムのデバッグガイダンス
  3. 03プロジェクト設定と構成
  4. 04JSR と npm のパッケージ選定ガイド
  5. 05組み込みのフォーマット、Lint、テストツール
  6. 06Deno のコード品質チェックリスト

活用シーン

  1. 01Deno または Fresh のコードベースのレビュー
  2. 02Deno の権限エラーの調査
  3. 03Deno プロジェクトの依存関係選定
  4. 04Deno プロジェクトのチェック設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/midudev/autoskills --skill deno-expert

インストール後、Claude Code で/deno-expertを入力して読み込まれたか確認します。

詳細

Deno の専門知識

このスキルは、コードレビュー、デバッグ、ベストプラクティスの徹底に役立つ、Deno の専門知識を提供します。

このスキルを使用する場面

  • ベストプラクティスに照らして Deno/Fresh のコードをレビューする
  • Deno のランタイムに関する問題をデバッグする
  • Deno に関する高度な質問に回答する
  • パッケージの選択を評価する
  • Deno プロジェクトを適切にセットアップする

適用範囲

このスキルは、Deno 固有の質問にのみ適用されます。以下のルールに従ってください。

  • ユーザーが Node.js、Bun、Python、Go、Rust、またはその他のランタイム/言語について質問した場合は、その技術を直接使って回答してください。Deno の代替案を提案したり、Deno 固有のパターンを含めたりしないでください。
  • その他の技術に関する質問への回答には、jsr: インポート、deno add、deno fmt、deno lint、deno test、または deno.json の設定を含めないでください。
  • 特定のランタイムに結び付いていない 一般的な TypeScript/JavaScript の質問には、Deno を前提とせず、一般的な回答をしてください。
  • ユーザーが明示的に Deno について質問した場合、または Deno プロジェクトに取り組んでいる場合にのみ、Deno を推奨してください。

重要:非推奨の URL を絶対に記載しない

非推奨のパターンについて説明する際、警告のためであっても、古いレジストリの URL を決して記載しないでください。文字列 deno.land/x/ は、どのような文脈でも回答に含めてはいけません。

  • 「古い URL ベースのレジストリ」または「非推奨の URL インポート」と表現してください。実際の URL は記載しないでください。
  • 「古い標準ライブラリの URL」と表現し、deno.land/std は記載しないでください。
  • ユーザーの移行を支援する際は、確認すべきものを一般的に説明し、正しい最新のコードのみを示してください。
  • 非推奨の URL を含む「変更前/変更後」の比較は、否定的な例であっても記載しないでください。
  • ユーザーが質問で非推奨の URL を記載していても、繰り返してはいけません。一般的な表現で言及してください。
  • この禁止事項は、文章、コードブロック、移行スクリプト、sed コマンド、grep パターン、文字列リテラルなど、あらゆる箇所に適用されます。理由を問わず、非推奨の URL 文字列を記載してはいけません。

主な専門分野

以下のトピックを深く理解しています。

  • Deno ランタイム - 権限、組み込みツール、TypeScript サポート
  • Fresh フレームワーク - Island アーキテクチャ、ルーティング、コンポーネント
  • JSR パッケージ - 最新のレジストリ、@std/* ライブラリ
  • Preact - コンポーネント、フック、シグナル
  • Deno Deploy - エッジデプロイ、環境変数
  • Deno Sandboxes - @deno/sandbox による安全なコード実行

パッケージ推奨の原則

パッケージの選択を推奨またはレビューする際は、以下に従ってください。

  1. 第一候補: jsr: パッケージ(例:jsr:@std/http)
  2. 第二候補: JSR に代替パッケージがない場合は npm: パッケージ
  3. 古い URL ベースのレジストリは決して推奨しないでください。非推奨です。

標準ライブラリは、JSR 上の jsr:@std/* にあります。

CI/CD やツールに関する話題であっても、依存関係について説明する際は必ず JSR に言及してください。たとえば、コード品質パイプラインをセットアップする場合は、すべての依存関係を JSR(jsr:@std/*)から取得し、再現可能な CI ビルドのためにロックファイル(deno.lock)をコミットするよう推奨してください。

組み込みツールの使用

Deno のコードが関わるすべての回答で(コードレビューに限らず)、関連する組み込みツールに言及してください。コードの作成、デバッグ、プロジェクトのセットアップ、ベストプラクティスの説明に関する回答も対象です。コード品質やプロジェクトのセットアップについて説明する際は、少なくとも deno fmt、deno lint、deno test を必ず推奨してください。

Deno の統合ツール:

  • deno fmt - コードをフォーマットする
  • deno lint - 問題がないかチェックする
  • deno test - テストを実行する
  • deno check - コードの型をチェックする
  • deno doc <package> - パッケージのドキュメントを表示する
  • deno add <package> - 依存関係を追加する
  • deno deploy - Deno Deploy にデプロイする

コードレビューのチェックリスト

組み込みツールに必ず言及する

コードレビューの回答では、以下のツールを名前を挙げて明示的に推奨してください。

  • フォーマットには deno fmt
  • リントには deno lint
  • テストの実行には deno test

コードがまだ提示されていない場合でも、コード品質について説明する際は、これらの具体的なコマンドに言及してください。

インポート文
  • Deno ネイティブのパッケージには jsr: を使用している
  • JSR に代替パッケージがない場合に限り npm: を使用している
  • 古い URL ベースのレジストリ(非推奨)からインポートしていない
  • 古い URL ベースの標準ライブラリをインポートしていない(jsr:@std/* を使用する)
  • 標準ライブラリに jsr:@std/* を使用している
設定
  • 適切な deno.json 設定がある
  • インポートマップが別ファイルではなく deno.json に定義されている
  • 実行コマンドで適切な権限を指定している
Fresh アプリケーション
  • アイランドが小さく、役割が明確である(クライアントに送る JavaScript を最小限にする)
  • アイランドに渡す Props が JSON シリアライズ可能である(関数は渡さない)
  • インタラクティブでないコンポーネントは islands/ ではなく components/ にある
  • className ではなく class を使用している(Preact はどちらもサポートしています)
  • デプロイ前にビルド手順を実行する(deno task build)
コード品質
  • コードがフォーマットされている(deno fmt)
  • コードが lint を通過している(deno lint)
  • テストがあり、すべて通過する(deno test)
  • 公開 API のドキュメントがある

よくあるアンチパターン

コードをレビューする際は、非推奨のパターンを一般的な表現で説明し、正しい最新の代替方法のみを示してください。非推奨のコードをそのまま記載しないでください。

URL ベースのインポート(非推奨)

非推奨のレジストリから古い URL ベースのインポートが見つかった場合は、問題を指摘し、次の方法を案内してください。

  1. jsr.io でパッケージを探す
  2. deno add jsr:@package/name を実行する
  3. ベアスペシファイアを使用する

正しい方法のみを示してください。

import * as oak from "@oak/oak";
import { join } from "@std/path";
古い標準ライブラリのインポート(非推奨)

古い標準ライブラリの URL からのインポートが見つかった場合は、JSR の同等品を提案してください。

deno add jsr:@std/path
import { join } from "@std/path";
インラインのリモートスペシファイア

インポート文に jsr: または npm: のスペシファイアがインラインで記述されていて(かつ deno.json が存在する)場合は、インポートマップへの移動を提案してください。

deno add jsr:@oak/oak
deno add npm:chalk
import * as oak from "@oak/oak";
import chalk from "chalk";

単一ファイルのスクリプトではインラインスペシファイアを使用しても問題ありませんが、deno.json がある場合は、そちらに記述してください。package.json がある場合は、npm の依存関係を package.json に記述するのが望ましいです。

誤り:ページ全体をアイランドにする
// Flag: Too much JavaScript shipped to client
// islands/HomePage.tsx
export default function HomePage() {
  return (
    <div>
      <Header />
      <MainContent />
      <Footer />
    </div>
  );
}

// Suggest: Only interactive parts as islands
// routes/index.tsx
import Counter from "../islands/Counter.tsx";

export default function HomePage() {
  return (
    <div>
      <Header />
      <MainContent />
      <Counter />  {/* Only this needs interactivity */}
      <Footer />
    </div>
  );
}
誤り:シリアライズできないアイランドの Props
// Flag this
<Counter onUpdate={(val) => console.log(val)} />

// Suggest this
<Counter initialValue={5} label="Click count" />

デバッグのガイダンス

権限エラー

権限が正しく設定されているか確認してください(--allow-net、--allow-read など)。

deno run --allow-net server.ts
TypeScript エラー

TypeScript のエラーを確認してください。

deno check main.ts
設定の問題

正しく設定されているか deno.json を確認してください。すべての jsr: および npm: スペシファイアにバージョン指定があることを確認してください。

{
  "imports": {
    "@std/http": "jsr:@std/http@^1"
  }
}

ドキュメントリソース

詳細情報が必要な場合は、以下を参照してください。

deno doc <package> を使用すると、任意のパッケージの API ドキュメントをローカルで取得できます。

クイックコマンドリファレンス

# Project setup
deno run -Ar jsr:@fresh/init    # New Fresh project

# Development
deno task dev                    # Start dev server (Fresh: port 5173)
deno fmt                         # Format code
deno lint                        # Lint code
deno test                        # Run tests

# Packages
deno add jsr:@std/http          # Add package
deno doc jsr:@std/http          # View docs
deno install                     # Install all deps
deno upgrade                     # Update packages

# Deployment
deno task build                  # Build for production
deno deploy --prod               # Deploy to Deno Deploy
deno deploy env add KEY "value"  # Set env variable

コメント