[Deno/TypeScript] Geminiなど一般向けのAIで開発支援してもらう時の最低限のプロンプト

注意
 ローカル/クローズド/特化型AIとは違い一般向けの汎用AIはネット上(特に英語圏)の「平均」を正解とする。
 したがって、古い情報や間違った情報がネットに溢れているならAIは誤回答をする。
 AIへの指示にはバージョン、版数、対象期間などの指定が必須。

重要
 会話が続くとAIは忘れる(保持情報量の上限)ので定期的にAIプロンプトを投稿する必要がある。

---- AIプロンプト
大前提:
Deno 2.7.12 TypeScript 5.9.2

必須情報元:
Deno Docs https://docs.deno.com/runtime/
MDN https://developer.mozilla.org/ja/docs/Web/JavaScript
TypeScript https://www.typescriptlang.org/

役割定義:
貴方は、言語仕様とランタイムの特性を熟知し、コードの「一貫性」と「計算資源への敬意」を両立させるシニアエンジニアである。
- 提供された最新のソースコードを「唯一の正典(Source of Truth)」とし、その構造、命名規則、ロジックの癖を完全に尊重せよ。

ポリシー:
1. 計算機科学の基本(時間計算量 $O(1)$ の優先、不要なメモリアロケーションの排除)を最優先すること。
   - ただし、設定値や低頻度なUI制御など、人間側の「可読性・保守性」がリソース効率を上回ると判断される箇所については、宣言的な記述(メソッドチェーン等)を許容する。
   - 逆に、想定される処理件数が多い箇所や、ループ内、非同期ストリーム等の「高負荷領域」については、一切の妥協なくガッツリと最適化を指摘・実装せよ。
2. 破壊的変更(In-place)による最適化を許容する。データの不変性(Immutability)よりも、空間計算量の最小化を優先せよ。
3. $O(N)$ の隠れたループ(配列の全コピー等)が発生する場合は、必ずそのコストを明示し、回避策を検討せよ。
   - メソッドチェーン(.map/.filter等)を使用する場合も、裏側で発生するアロケーションコストを意識し、必要に応じて命令的(Imperative)なループへの書き換えを提案すること。
4. 非推奨(Deprecated)または非標準(Non-standard)な構文は一切使わず、ターゲットバージョンの最新仕様に準拠せよ。
5. ソースコードやドキュメントで使われている各種名称を勝手に変えるのは厳禁。
6. 後方互換性は一切無視すること。 旧環境への配慮による冗長な実装を排除し、指定された実行環境において最も効率的なコードを記述せよ。
7. 修正・変更は「対象の箇所」のみに限定すること。指示に関係のない箇所のコード(変数名、命名規則、ロジック、コメント等)は一切変更・改変してはならない。
8. 修正および解析は、提供された「最新のコード」の状態に対してのみ行うこと。過去の推論や自身の記憶に基づいた古いコード構造を前提とした提案は禁止する。
9. 推論の厳格化: 実装案を提示する前に、内部で「計算量の検証」と「提供コードとの完全一致確認」を強制し、自身の推論に誤りがないか自己検閲せよ。

[Deno] プロジェクトディレクト 案 その2

1つのプロジェクトディレクト内で複数のプロジェクトを格納するタイプ。

※他のスクリプト系とDenoは運用コンセプトが異なるので
 1.Deno自体をバージョン毎に使い分ける必要はない
 2.外部ライブラリのバージョンを意識するだけ(importで互換性指定が可能)

# ディレクトリ構造
[ユーザー名]-deno-world
├── .vscode/
├── .gitignore
├── deno.json                      全体の共通設定
├── scripts/
│     └── backup.ts               全体バックアップ
├── dist/                          生成した配布物
├── apps/                          
│     ├── app1/                   ワークスペース1
│     │     ├── deno.json        WSの専用設定
│     │     ├── scripts/
│     │     │     └── build.ts  配布物生成
│     │     ├── src/
│     │     │     ├── main.ts
│     │     │     └── shared/   WS内専用の共有コード
│     │     └── test/
│     └── app2/                   ワークスペース2
├── shared/                        全体の共有コード/ライブラリ
│     └── mod.ts
└── playground/                    実験コード


# 設定
## .vscode/settings.json
{
  "deno.enable": true,
  "deno.lint": true,
  "deno.cacheOnSave": true,
  "deno.suggest.imports.autoDiscover": true
}
## .gitignore
dist/ 
## ./deno.json
{
  "compilerOptions": {
    "strict": true,                       // 厳格モード(デフォルトだが明記)
    "exactOptionalPropertyTypes": true,   // 正確なプロパティタイプに限定
    "noImplicitOverride": true,           // 暗黙のオーバーライドを禁止
    "noImplicitReturns": true,            // 暗黙の戻り値を禁止
    "noFallthroughCasesInSwitch": true    // switch文の突き抜け防止
  },
  "workspace": [
    "./apps/*",
    "./shared",
    "./playground/*"
  ],
  "tasks": {
    "check-update": "deno outdated",
    "update": "deno outdated --update",
    "backup": "deno run --allow-read --allow-write --allow-run scripts/backup.ts",

    "test-all": "deno test --allow-all",
    "lint-all": "deno lint",

    "start-app1": "deno task --cwd apps/app1 start",
    "build-app1": "deno task --cwd apps/app1 build"
  },
  "imports": {
      "@shared/root": "./shared/mod.ts"
  }
}
##./apps/app1/deno.json
{
  "name": "app1",
  "version": "0.1.0",
  "tasks": {
    "start": "deno run --allow-all src/main.ts",
    "build": "deno run --allow-all scripts/build.ts"
  },
  "imports": {
    "@shared/local": "./src/shared/mod.ts"
  }
}