0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🗡️ Node.jsのAPIサーバを守る7つの戦術(Express編)🗡️

Posted at

こんにちは、任意団体easteで代表をやっています、@kocho5252です。
今回は、Node.js + ExpressでAPIサーバを運用している方向けに、
「混沌としたAPIサーバを整理して堅牢に保つ7つの戦術」をまとめてみました。

1. ルーティングを整理する

APIが複雑になってくると、ルート定義だけで混乱しがちです。
そこで、ルーティングごとにファイルを分割して、コントローラーと明確に分けることをおすすめします。

// routes/users.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');

router.get('/', userController.getAllUsers);
router.post('/', userController.createUser);

module.exports = router;

2. コントローラーでロジックを分離

ルーティングは「入口」を管理するだけにして、処理はコントローラーでまとめます。
こうすることで再利用性が上がり、テストもやりやすくなります。

// controllers/userController.js
exports.getAllUsers = async (req, res, next) => {
  try {
    const users = await User.find();
    res.json(users);
  } catch (err) {
    next(err);
  }
};

3. ミドルウェアで共通処理をまとめる

ログ、認証、CORSなどの共通処理はミドルウェアで統一すると便利です。

app.use(require('cors')());
app.use(require('morgan')('dev'));
app.use(express.json());

4. エラーハンドリングを統一

例外処理を集中管理することで、予期せぬクラッシュを防ぎます。

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: err.message });
});

5. 環境変数で設定を管理

DB接続やポート番号などの設定は、環境変数で管理しましょう。
ハードコーディングは避けるのが基本です。

PORT=3000
DB_URL=mongodb://localhost:27017/mydb
require('dotenv').config();
const port = process.env.PORT || 3000;

6. テストで品質を担保

JestやSupertestを使ってAPIの挙動をチェックすると、安心してデプロイできます。

const request = require('supertest');
const app = require('../app');

test('GET /users returns 200', async () => {
  const res = await request(app).get('/users');
  expect(res.statusCode).toBe(200);
});

7. ログと監視で運用を安定させる

WinstonやPinoでログを管理し、PM2やDockerでプロセスを監視するのがおすすめです。

const winston = require('winston');
const logger = winston.createLogger({
  transports: [new winston.transports.Console()]
});

まとめ

  • ルーティング・コントローラー・ミドルウェアを整理する
  • エラーハンドリングと環境変数で柔軟性を確保
  • テスト・ログ・監視で運用を安定させる

まずは1つずつ戦術を取り入れて、APIサーバの混沌を制覇しましょう。

この記事が少しでも参考になればうれしいです。
任意団体easteとして、今後もこうした「開発・運用の整理」に役立つTipsを発信していきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?