nodejs-backend-patterns
Node.js のサーバーを、受け口・業務の処理・データの出し入れの 3 層に分け、認証・入力の確かめ・回数の制限・記録・誤りの扱いを Express と Fastify の例で組ませる。15 項目の心得と、接続の使い回しや取引の例も添える
npx skills add wshobson/agents/nodejs-backend-patterns入れる前にこのスキルがすること・注意点・SKILL.md の原文を確かめてください。解析は安全性の判定ではありません。
- インストール
- 49,184
- 実用度
- 2
- GitHub star
- 42,260
- 最終更新
- 2026/11/6
頼み方の例
そのままコピーして使えますnodejs-backend-patternsスキルを使って、この Express のサーバーの作りを点検してください。受け口・業務の処理・データの出し入れが分かれているか、誤りの扱いが 1 か所に集まっているか、入力の確かめと回数の制限があるかを一覧にし、直し方の案を添えてください。コードはまだ書き換えないでください。
対象のファイルや状況は、ご自身の作業に合わせて置き換えてください。
このスキルがすること
SKILL.md の記述から機械的に抽出- 外部通信・シェル実行・ファイル操作の記述は見つかりませんでした
これは安全性の判定ではありません。 SKILL.md にそう書かれているという事実だけを並べています。実際に問題があるかは使い方と文脈で決まるため、当サイトでは断定しません。導入前に SKILL.md の原文を確認してください。
SKILL.md の規模
いつ使うか
Node.js で、REST の API や GraphQL のサーバー、小さなサービスの集まりを作るときに効きます。サーバーの骨組み(層の分け方、ミドルウェア、誤りの扱い、認証、データベースとのつなぎ)を、そのまま写せる TypeScript の例で示すスキルです。
- 本文が挙げる使う場面
- 8 つ
- 本番に向けた心得
- 15 項目
- 受け口・業務の処理・データの出し入れ
- 3 層
- 同梱ファイル(2026-10-23 時点)
- 2 件
SKILL.md は目次で、中身は同梱の文書
SKILL.md 自体は約 2KB(1,995 バイト、2026-10-23 時点)で、使う場面と心得の一覧だけです。例とその説明は references/details.md と references/advanced-patterns.md にあり、要約で足りないときに読め、と書かれています。実際に効くのは、この 2 つの文書の例です。
本文が挙げる場面
使う場面は 8 つです。主なものは次のとおりです。
- REST の API や GraphQL のサーバーを作る
- Node.js で小さなサービスの集まりを作る
- 認証と権限の確かめを入れる
- ミドルウェアと誤りの扱いを組む
- SQL と NoSQL のデータベースをつなぐ
- WebSocket での即時のやりとりや、裏で走る仕事の処理を作る
3 層に分ける
同梱の文書の中心は、受け口(controller)・業務の処理(service)・データの出し入れ(repository)の 3 層です。フォルダは controllers/・services/・repositories/・models/・middleware/・routes/・utils/・config/・types/ の 9 つに分けます。
- 受け口HTTP の要求を受け、業務の処理を呼び、状態の番号と JSON を返す。誤りは next() で渡す
- 業務の処理メールアドレスの重複を確かめ、パスワードを bcrypt で変換して保存する。返す前にパスワードを外す
- データの出し入れpg の Pool に、値を $1 のような置き場所で渡す SQL を投げる
利用者の作成・取得・更新・削除の 4 つが、3 層それぞれで書かれています。層をつなぐのは、依存を登録して取り出す小さな入れ物(DI のコンテナ)で、advanced-patterns.md に全体が載っています。
ミドルウェアの 4 つ
- 認証
Authorizationの見出しから Bearer の値を取り出し、JWT を確かめてreq.userに入れる。役割の確かめもある - 入力の確かめZod の形で本文・問い合わせ・経路の値を確かめ、誤りを項目ごとに返す
- 回数の制限Redis に数を置く。全体は 15 分に 100 回、認証の口は 15 分に 5 回
- 要求の記録pino で、方法・URL・状態・かかった時間・利用者の道具・IP を 1 行に残す
誤りの扱い
誤りの型は、元になる AppError と、その下の 5 つ(入力の誤り 400、見つからない 404、未認証 401、権限なし 403、重複 409)です。最後に置く誤りの受け手が、AppError ならその状態の番号で返し、それ以外は記録して 500 を返します。
本番では内部の誤りの文を見せず、「Internal server error」とだけ返す書き方です。非同期の処理の失敗を受け手に渡す包み(asyncHandler)も載っています。
データベース・認証・一時保存
advanced-patterns.md に、残りの型があります。
| 型 | 中身 |
|---|---|
| PostgreSQL の接続の使い回し | 最大 20 本、使っていない接続は 30 秒で閉じ、つなぐのは 2 秒で諦める |
| MongoDB | Mongoose の接続、最大 10 本、メールアドレスに一意の索引 |
| 取引 | BEGIN から COMMIT、失敗したら ROLLBACK、最後に接続を返す |
| JWT | 呼び出し用は 15 分、更新用は 7 日。秘密の値は別々 |
| 一時保存 | Redis で取得・保存・削除と、型に合うキーをまとめて消す処理。関数の結果を覚える飾り付け(@Cacheable)も |
| 返す形 | 成功・失敗・ページ分けの 3 つの書き方を揃える |
15 項目の心得
SKILL.md の心得は 15 項目です。主なものは次のとおりです。
- TypeScript を使い、誤りは自分で作った型で扱う
- 入力は Zod や Joi で確かめる
- 秘密の値は環境変数に置き、コードに書かない
- 記録は Pino や Winston で構造を持たせる
- 回数の制限、本番の HTTPS、本番で
*を使わない CORS - 止めるときの後片付け、データベースの接続の使い回し、稼働の確かめの口
使わないほうがいいとき
Fastify を本気で使うとき
同梱の文書の Fastify の例は、立ち上げの 1 本だけです。層の分け方・ミドルウェア・誤りの受け手など、残りの例はすべて Express の書き方です。Fastify のプラグインやフックの作法は、このスキルでは扱われていません。
テストの書き方を知りたいとき
心得の 10 番目に「テストを書け」とありますが、テストの書き方は同じプラグインの javascript-testing-patterns を見よ、と本文が回しています。
型そのものを設計したいとき
同じプラグインの typescript-advanced-types が、ジェネリクスや条件型で呼び出し口の型を作る担当です。
注意点
解析で見つかった記述
SKILL.md と同梱の文書に、外部との通信、シェルでの実行、ファイルの書き換えの手順はありません。中身はすべてコード例と説明です。例のコードは、動かせばデータベース・Redis につなぎ、JWT の秘密の値を環境変数から読みます。同梱ファイルは references/ の 2 件です(2026-10-23 時点)。
例をそのまま写すと動かないところ
同じ authorize は、権限が足りないときに 403 の ForbiddenError ではなく 401 の UnauthorizedError を返しています。誤りの受け手の例は ValidationError を使っていますが、読み込んでいるのは AppError だけです。
更新の SQL は、項目の名前をそのまま入れる
データの出し入れの層の更新は、渡されたオブジェクトのキーをそのまま SQL の列の名前として組み立てます。値は置き場所で渡していますが、列の名前は文字列として埋め込まれます。要求の本文をそのまま渡すと、想定していない列まで書き換えられるので、入力の確かめで許す項目を絞ってから渡してください。
一時保存のまとめて消す処理
invalidatePattern は Redis の KEYS を使っています。Redis の文書(2026-10-23 確認)は、KEYS は大きなデータベースで性能を損なうので普段のアプリのコードで使わず、SCAN や集合を使え、と書いています。
CORS の設定が心得と食い違う
心得の 8 番目は「本番で * を使うな」ですが、Fastify の例は origin: true です。@fastify/cors の README(2026-10-23 確認)は、origin: true は要求の出どころをそのまま返して許す設定で、本番には勧めない、と書いています。Express の例のほうは、許す出どころを環境変数で並べる形です。
そのほかの細かい点
- Express の立ち上げの例は、要求の記録を
console.logで書いている(心得の 5 番目とは別の書き方) - 本文の大きさの上限は 10MB にしている
- PostgreSQL の接続で予期しない誤りが出ると、
process.exit(-1)で処理ごと止める - 取引の例は在庫を減らすだけで、在庫が足りるかは確かめていない
インストール数の推移
日次で記録9月18日 〜 11月7日(49日分)
インストール数と 1 日あたりの増加は Skillselion が に集計した値です。上流の更新は数日おきなので、前日比ではありません。GitHub star と最終更新は に GitHub から取得しました。
併用すると強いスキル
よくある質問
Express と Fastify のどちらを前提にしていますか
両方の立ち上げの例がありますが、層の分け方・ミドルウェア・誤りの受け手・返す形の例は Express の書き方です。Fastify の例は、立ち上げと、形を確かめる経路 1 本だけです。
JWT の有効期限はどう決めていますか
同梱の文書の認証の例では、呼び出し用の JWT が 15 分、更新用が 7 日です。2 つは別の秘密の値(JWT_SECRET と REFRESH_TOKEN_SECRET)で署名します。更新用の値を渡すと、新しい呼び出し用の JWT を返す処理も載っています。
回数の制限はどこで数えていますか
Redis に数を置く形です。全体の口は 15 分に 100 回、認証の口は 15 分に 5 回で、認証は成功した回を数えません。サーバーが複数台でも、同じ Redis を見るので数が揃います。
同梱ファイルには何がありますか
references/details.md に、Express と Fastify の立ち上げ、3 層の例、ミドルウェア 4 つ、誤りの型と受け手があります。references/advanced-patterns.md には、DI のコンテナ、PostgreSQL・MongoDB・取引、JWT、Redis の一時保存、返す形の揃え方があります(2026-10-23 時点)。