TypeScript上級

上級 TypeScriptで学ぶマイクロサービス|解説編

導入

マイクロサービスアーキテクチャは、複雑なシステムを小さな独立したサービスに分割する手法です。特に、TypeScriptを使用することで、型安全性を保ちながら開発が進められ、開発者はより効率的に作業を行えます。ここでは、実務でよく遭遇する「ユーザー認証サービス」を例に取り、その設計と実装のポイントを解説します。

教科書レベルの解説(マイクロサービス)

重要な概念の整理

マイクロサービスでは、各サービスが独自のビジネス機能を持ち、他のサービスとはAPIを通じて連携します。このアプローチにより、異なるチームが独立して開発やデプロイを行うことが可能になります。ユーザー認証サービスでは、トークンベースの認証やOAuth2.0の実装が一般的です。これにより、セキュリティが強化され、スケーラビリティも向上します。

コード例(TypeScript)


import express from 'express';
import jwt from 'jsonwebtoken';

const app = express();
app.use(express.json());

const SECRET_KEY = 'your_secret_key';

app.post('/login', (req, res) => {
    const { username, password } = req.body;

    // ユーザー認証ロジック
    if (username === 'admin' && password === 'password') {
        const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
        return res.json({ token });
    }
    return res.status(401).json({ message: '認証失敗' });
});

app.get('/protected', (req, res) => {
    const token = req.headers['authorization']?.split(' ');
    if (!token) return res.status(403).json({ message: 'トークンが必要です' });

    jwt.verify(token, SECRET_KEY, (err, user) => {
        if (err) return res.status(403).json({ message: 'トークンが無効です' });
        res.json({ message: '保護された情報', user });
    });
});

app.listen(3000, () => {
    console.log('サーバーがポート3000で起動しました');
});

コードの行ごとの解説

  1. まず、Expressフレームワークを使用してアプリケーションを初期化し、JSONボディをパースするためのミドルウェアを設定します。
  2. ログインエンドポイント(/login)を定義し、ユーザー名とパスワードを受け取ります。
  3. 認証に成功した場合、JWTトークンを生成し、クライアントに返します。
  4. 保護されたリソースへのアクセスを制御するため、/protectedエンドポイントを定義します。
  5. リクエストヘッダーからトークンを取得し、検証を行います。トークンが無効な場合は、403エラーを返します。
  6. 最後に、アプリケーションをポート3000でリッスンします。

解説編

ユーザー認証サービスの実装において重要な点は、トークンの管理とセキュリティです。トークンが漏洩すると、悪意のあるユーザーが不正アクセスする可能性があります。そのため、トークンの有効期限を設定し、必要に応じてリフレッシュトークンを使用することが推奨されます。また、セキュリティの観点から、HTTPSを使用することも忘れないでください。これにより、データの盗聴を防ぎ、より安全な通信が実現します。

まとめ

  • マイクロサービスアーキテクチャでは、サービス間の連携が重要であり、API設計がカギとなります。
  • TypeScriptを使用することで、型安全なコードを書くことができ、開発効率が向上します。
  • ユーザー認証の実装には、トークンの管理とセキュリティ対策が不可欠です。