mcpField
D
deno-expert

deno-expert

github.com/denoland開発102544 回インストール13 週間前に更新
リポジトリ

deno-expert について

deno-expertは、Denoに特化したコードレビュー、デバッグ、プロジェクト設定、パッケージ選定のためのナレッジスキルです。他のランタイムとの適用範囲を明確にし、Deno、Fresh、JSR、組み込みツールについて案内します。

主な機能

  1. 01DenoとFreshのコードレビュー
  2. 02Denoのランタイムや設定の問題を調査
  3. 03パッケージ選定とプロジェクト設定を支援
  4. 04Denoに限定した適用範囲を遵守
  5. 05インポート、権限、コード品質を確認

活用シーン

  1. 01Freshアプリケーションのレビュー
  2. 02Denoの権限やTypeScriptエラーの診断
  3. 03Denoプロジェクトの依存関係を選定
  4. 04プロジェクト設定とコード品質の確認

インストール

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

$npx skills add https://github.com/denoland/skills --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 フレームワーク - アイランドアーキテクチャ、ルーティング、コンポーネント
  • 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 アプリケーション
  • Islands が小さく、目的に絞られている(クライアント側の JavaScript を最小限にする)
  • Islands に渡す 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 に記述することを推奨します。

誤り:ページ全体を Island にする
// 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>
  );
}
誤り:シリアライズ不可能な Island の 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

コメント