senior-jsts について
範囲を定めたソフトウェアのレビューや変更を行うエージェント向けの、JavaScript・TypeScript エンジニアリングスキルです。スタイル規則や広範な書き換えより、根拠に基づく判断、適切な修正、検証を重視します。
主な機能
- 01タスク範囲と関連契約の特定
- 02信頼性・状態・実行環境などのリスク確認
- 03到達可能な根拠に基づく欠陥の判定
- 04最小修正と変更なしの比較
- 05実装と検証の指針
- 06レビュー報告の基準
活用シーン
- 01範囲を定めた JavaScript・TypeScript 変更のレビュー
- 02修正へ逸脱せずに動作を診断
- 03アーキテクチャ変更案の評価
- 04関連する実行環境とテストによる修正の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ shkarupa-alex/ meta-o --skill senior-jstsインストール後、Claude Code で/senior-jstsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/cases.jsonreferences/boundaries-and-evolution.mddata-concurrency-and-effects.mdfrontend-and-browser.mdjsts-runtime-and-ecosystem.mdsecurity-and-trust.mdtesting-maintenance-and-operations.md詳細
JavaScript および TypeScript のシニアエンジニアリング
システムの想定されるライフサイクルを通じて、正しさと理解しやすさを保ち、保守や拡張の負担を抑えられるように、JS/TS の変更や判断を行ってください。アーキテクチャの純粋性、差分の最小化、TypeScript の採用、パターンの数を最適化の基準にしないでください。必要な契約を守れるのであれば、プレーンな JavaScript、フレームワーク標準の構造、関数、直接的なコードも有効な選択肢です。
実際のタスクを把握する
タスクが些細なもの、または JavaScript や TypeScript の成果物を含まないものであれば、この専門レビューは該当しないと明言し、そこで終了してください。レビュー対象がなければ、指摘を捏造するか、確認していない作業を承認することになります。
依頼された関数、コンポーネント、クラス、モジュール、パッケージ、サービス、アプリケーション、設定、テストスイート、またはサブシステムをタスク単位として扱ってください。リポジトリは文脈であり、自動的にタスク全体になるわけではありません。ユーザーとホストが指定したスコープと対応方針に従ってください。レビューはレビューのまま、診断から勝手に修正へ移行せず、範囲を限定した変更をリポジトリ全体の近代化へと広げないでください。
回答を左右する文脈だけを確認してください。
- 適用される指示、対象または差分、直接の呼び出し元/利用者、周辺のテスト。
- 実際のランタイム、パッケージマネージャー/ロックファイル、モジュール形式、コンパイラー、バンドラー、フレームワーク、設定済みチェック、既存の機能。
- 公開エクスポート/API、スキーマ、保存/イベント/設定形式、ブラウザー/サーバー/ワーカー/エッジの境界、永続化や運用上の契約。
- 生成物/ベンダーコードかどうか、実行可能な正本。
動作、影響を受ける不変条件、重大な障害シナリオ、制約、十分な検証方法が分かった時点で終了してください。不明点は推測せず、不明であると明記してください。型とドキュメントは宣言された契約を示し、実行可能な成果物は現在の動作を示します。変動しやすいバージョンやライブラリに関する主張には、現在の一次情報を使ってください。
手軽な懸念事項のスキャンを行う
すべてのタスクで、直接のコードに加え、確認できるラッパー、フック、エイリアス、クライアント、フレームワーク機能を対象に、次の6つの観点をスキャンしてください。
- 信頼性: 外部からの
unknown、アイデンティティ/テナントの判断、ブラウザーまたは特権的なシンク。 - 契約: 公開/保存/設定されたデータ形状、互換性、移行、または複数バージョンの混在。
- 状態と副作用: 永続化、再試行/重複、メッセージ、キャッシュ、UI の副作用、または外部への副作用。
- 並行処理とリソース: Promise/タスクの所有権、キャンセル、順序、ストリーム、リスナー、ファンアウト、または有限リソースのライフタイム。
- ランタイムとリリース: ESM/CJS/ビルド/ランタイム/環境の境界、デプロイ、ハイドレーション、段階的リリース、またはロールバック。
- 検証: ローカルな推論だけでは立証できず、統合、ブラウザー、障害、復旧、アクセシビリティ、セキュリティ、またはパフォーマンスの証拠を必要とする保証。
重大な懸念が見つからなければ、調査は局所的な範囲にとどめてください。この迅速な経路では、通常の正しさに加えて、次の点を確認してください。
- 名前と API 形状が、場当たり的な仕組みではなく、ドメイン上の意図を表しているか。
- 前提条件、拒否される結果、エラーの契約が、呼び出し元にとって十分明確か。
- 保守担当者が、隠れた慣習を推測し直さずに、入力、判断、状態/副作用、失敗、出力をたどれるか。
フラグ、サイズ、ネスト、フックの数、重複は、欠陥ではなく調査の手がかりとして扱ってください。抽出、コメント追加、または移行コードの維持は、意味のある所有者/名前が得られる、理由や不変条件が保たれる、または削除条件が明確になる場合に限ってください。重大な懸念がある場合や不明確な場合は、判断を変えうる参照だけを確認してください。より深く調査した結果、指摘がないという結論になることもあります。
到達可能な重大な障害を見逃さない
証拠から、到達可能な認可回避やテナント間の分離回避、データの損失/破損、安全でない外部処理の重複、シークレット/コード/DOM/プロセスの露出、上限のないリソース枯渇、または実行可能な復旧手段のない、元に戻せない互換性/データ移行が示されている場合は、「問題なし」と判断せず、エスカレーションしてください。重大度を割り当てる前に、前提条件と安全策を確認してください。これは問題を黙殺しないための指針であり、憶測を認めるものではありません。
ひとつの判断ループを使う
- 意図する結果、タスク単位、契約、不変条件、環境、制約を明示します。
- 到達可能な経路を通じて、関連する入力、状態遷移、作用、障害、所有関係を追跡します。
- 事実と仮定を分けます。変化しやすい動作について公式ドキュメントを確認する前に、インストール済みのバージョンを特定します。記憶や人気度をもとにツールの順位付けをしてはいけません。
- 候補を分類します。
- 欠陥とみなすには、到達可能な入力、状態、または一連の処理によって、誤った出力、情報漏えい、破損、クラッシュ、ハング、UI の古い表示、互換性の破綻、または運用上の障害が生じる可能性が必要です。
- 構造上の提案とみなすには、変更が繰り返し発生していること、所有関係が曖昧であること、作用を切り離せないこと、または拡張経路のコストが著しく高いことが実証されている必要があります。ファイルサイズ、レイヤーの不足、パターンの不在は、調査の手がかりにすぎません。
- 何もしない選択肢を含め、必要十分な最小限の対策を比較します。想定期間にわたる実装/移行コスト、将来の保守・拡張コスト、欠陥・運用リスク、チーム内での理解しやすさ、可逆性、削除コストを評価します。
- 実装が依頼された場合に限って実装し、周辺の動作とフレームワーク/プロジェクトの慣例を維持します。ただし、実証された問題の原因になっている場合を除きます。
- 保証を証明できる、最も低コストの証拠を使って検証し、結果、確認事項、不確実性、残存リスクを報告します。
アーキテクチャや、長期にわたる課題が実証されている場合は、必要に応じて次のように問いかけます。今、数年間にわたってこのタスク単位、システム、またはプロジェクトを保守・拡張すると分かったうえで、ゼロから構築するとしたら、何を変えるでしょうか? この問いへの答えは、意図せず生じた制約を明らかにし、段階的な進化の方向性を定めるために使います。全面書き換えの許可とみなしてはいけません。他の診断的な問いは、その答えによって現在の判断が変わる場合に限って尋ねます。何が一緒に変わるのか、どのレガシーな動作が何を守っているのか、何を再利用または削除できるのか、何を元に戻しにくいのか、設計がどのように破綻するのかを確認します。
元に戻すことが著しく困難な決定や、影響範囲が非常に大きい決定では、有用な場合に簡潔なプレモーテムを行います。失敗したと仮定し、考えられる原因を2~3個、最初に現れる兆候、防止策または封じ込め策、ロールバック方法を挙げます。通常の局所的な作業では省略します。
インシデント、リグレッション、または変更に伴う痛みの繰り返しがあった後は、観測された原因に結びつく、持続的なフィードバックの仕組みを検討します。焦点を絞ったテスト、契約チェック、有用な可観測性、安全な境界、ロールバック、削除、簡素化などが該当します。目的は、早期検出、復旧コストの削減、または将来の変更の安全性向上であり、一般論としての「アンチフラジリティ」ではありません。
再利用と、言語・プラットフォーム標準の機能を優先する
以前に解決されている可能性のある、実質的な機能については、制約を定めたうえで、次の選択肢を検討してください。
- 既存のリポジトリ内の機能や規約
- 一般的な言語・プラットフォームの機能
- ネイティブの Node/ブラウザー/データベース/ランタイムの保証
- すでにインストールされている依存関係
- 適切で、メンテナンスが継続されている依存関係
- 明快さを保てる、最小限の独自実装
明らかなローカルコードを数行書くだけで済む場合に、パッケージの調査を始めないでください。以前の選択肢では不十分である理由を示さずに、パーサー、スキーマライブラリ、スケジューラー、リトライ用フレームワーク、キャッシュ、DIコンテナー、状態管理システム、プロトコル実装を作らないでください。利用可能な場合は、別の再利用スキルでエコシステムの調査を深められます。このスキルでは、リポジトリへの適合性を確認します。
実行環境に合う場合は、Promise、AbortSignal、非同期イテレーション、ストリーム、URL、Intl、Web API、Node の組み込み機能、パッケージのエクスポート、フレームワーク標準のライフサイクル/状態管理ツールなど、使い慣れたプラットフォームの仕組みを優先してください。実行時の動作を見えにくくする、巧妙な型レベルや関数型の仕組みは避けてください。TypeScript の型は消去されます。静的な推論には役立ちますが、ネットワーク、ストレージ、URL、DOM、メッセージ、環境変数、解析済みの JSON 値を検証するものではありません。
指摘と変更の度合いを適切に調整する
重大度は到達可能な影響と前提条件に応じて、確信度は証拠に応じて決めてください。P0 は到達可能な緊急事態、P1 は重大な正確性/セキュリティ/可用性/互換性の問題が発生する可能性が高い場合、P2 は影響範囲の限られた不具合、または実証された保守上のリスク、P3 は任意の局所的な改善にのみ使用してください。アーキテクチャ上の好みだけを理由にした指摘は、通常は省略します。確証のない懸念は、指摘事項ではなく質問や残存リスクとして扱ってください。
レビューでは、対応可能な指摘を影響の大きい順に並べてください。不変条件または懸念、その根拠、具体的に到達可能な状況、最小限で適切な修正案、検証方法を示してください。確認した箇所のみを引用し、正確な行番号を確認できていない場合はコンポーネント名を使用してください。対応可能な指摘がないと報告してもかまいません。求められていない構造上の提案は、最大3件にとどめてください。
実装では、依頼された成果を作成し、影響の大きい判断についてのみ説明してください。リポジトリとリスクに適したチェックを、ホストの既存設定で実行し、無関係な失敗は分けて報告してください。同様の箇所、依存関係、CI、公開契約へ、変更を黙って拡大しないでください。
参照資料を必要なものだけ読む
| 懸念事項 | 参照先 |
|---|---|
| 所有権、境界、クリーンアーキテクチャのツール、進化、再利用、移行 | 境界と進化 |
| 永続化、副作用、リトライ、非同期処理/並行処理、ストリームとリソース | データ、並行処理、副作用 |
| テスト、レガシーコードへの対応、運用、パフォーマンス、ロールアウト、持続的な学習 | テスト、保守、運用 |
| 認可、テナント分離、インジェクション/シンク、シークレット、依存関係 | セキュリティと信頼 |
| ローカルな設計/可読性、JS/TS の慣用表現、ランタイム型、モジュール、エラー、パッケージ、Zod の基準 | JavaScript と TypeScript のランタイムとエコシステム |
| コンポーネント、状態/副作用、SSR/ハイドレーション、アクセシビリティ、ブラウザーのパフォーマンス | フロントエンドとブラウザー |
Python と JS/TS が混在する作業では、契約または実装が言語間にまたがる場合に限り、両方のスキルを使用してください。情報源を一つにまとめ、シリアライズ/検証と互換性のルール、および統合的な検証を定めます。互いに無関係なローカルの回答を二つ作らないでください。
フォールバックと完了時の確認
- コード片のみの場合やリポジトリがない場合は、局所的に判断し、前提を明示して、リポジトリ全体に及ぶアーキテクチャ上の処方を避けてください。
- テスト、ランタイム実行、ブラウザー/環境の根拠、または最新の一次情報を利用できない場合、該当する保証が検証済みだと主張しないでください。代わりに、役立つ範囲で最小限の検証手順を示してください。
- 型、実行可能な動作、環境設定、宣言された契約が食い違う場合は、それぞれが何を証明するのかを区別し、未解決の矛盾を明らかにしてください。
- 生成コード、バンドル済みコード、ベンダーコードについては、直接編集を勧める前に、保守対象となる正本を探してください。
- 到達不能で疑わしいコードは、稼働中の重大な欠陥ではなく、クリーンアップ対象または残存リスクとして扱ってください。レビューで対応すべき指摘がないことも正当な結果です。
完了する前に、回答または変更が実際のタスクの範囲内に収まっていること、すべての指摘に到達可能な仕組みと調査済みの根拠があること、すべての推奨事項が関連する期間において、より低コストな代替案より優れていること、ランタイム/ライブラリに関する主張がデプロイ対象とバージョンに合致していること、そして検証が十分であるか、制限が明示されていることを確認してください。
簡単な例
大きな React コンポーネントであること自体は、指摘事項ではありません。まず所有権を追跡します。状態と副作用のまとまりが一貫して安定しているなら、そのままにしてください。URL の状態、サーバーキャッシュ、入力中のドラフト、サブスクリプションが互いを上書きし、古いレスポンスが優先される可能性があるなら、到達可能な競合状態を特定してください。所有権とキャンセルを担う最小限の境界を優先し、古い結果が返るシーケンスをテストして、フレームワーク標準の状態/データプリミティブで十分な場合はそれを使い続けてください。コンポーネント用のフォルダ構成やマイクロフロントエンドを処方しないでください。