メインコンテンツまでスキップ

12. Best Practices

コードスタイルガイド

一貫したコードスタイルは、コードの可読性と保守性を向上させます。以下は、Nest.jsプロジェクトで推奨されるコードスタイルガイドです。

Linterとフォーマッタの設定

Nest.jsプロジェクトでは、ESLintとPrettierを使用してコードスタイルを自動的にチェックおよび整形します。

ESLintの設定

@nestjs/eslint-pluginをインストールし、ESLintを設定します。

npm install --save-dev @nestjs/eslint-plugin eslint

.eslintrc.jsファイルをプロジェクトのルートディレクトリに作成し、以下の内容を追加します。

module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
root: true,
env: {
node: true,
jest: true,
},
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
};

Prettierの設定

Prettierをインストールし、設定ファイルを追加します。

npm install --save-dev prettier

.prettierrcファイルをプロジェクトのルートディレクトリに作成し、以下の内容を追加します。

{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 80,
"tabWidth": 2
}

フォルダ構造

プロジェクトのフォルダ構造を整理することで、コードの可読性と保守性を向上させることができます。以下は、推奨されるNest.jsプロジェクトのフォルダ構造です。

my-app/
├── src/
│ ├── app.module.ts
│ ├── main.ts
│ ├── cats/
│ │ ├── cats.controller.ts
│ │ ├── cats.module.ts
│ │ └── cats.service.ts
│ ├── common/
│ │ ├── filters/
│ │ ├── guards/
│ │ ├── interceptors/
│ │ ├── pipes/
│ │ └── interfaces/
│ ├── config/
│ │ ├── config.module.ts
│ │ └── config.service.ts
│ ├── database/
│ │ ├── database.module.ts
│ │ └── database.providers.ts
│ ├── middleware/
│ │ └── logger.middleware.ts
│ ├── users/
│ │ ├── users.controller.ts
│ │ ├── users.module.ts
│ │ └── users.service.ts
│ └── main.ts
├── test/
│ ├── app.e2e-spec.ts
│ └── jest-e2e.json
├── .eslintrc.js
├── .prettierrc
├── nest-cli.json
├── package.json
└── tsconfig.json

フォルダ構造の説明

  • src/:アプリケーションのソースコードを配置します。
    • cats/:Catsモジュールに関連するファイルを配置します。
    • common/:フィルター、ガード、インターセプター、パイプ、インターフェースなどの共通ファイルを配置します。
    • config/:アプリケーションの設定ファイルを配置します。
    • database/:データベース関連のファイルを配置します。
    • middleware/:ミドルウェア関連のファイルを配置します。
    • users/:Usersモジュールに関連するファイルを配置します。
    • main.ts:アプリケーションのエントリーポイントです。
  • test/:テストコードを配置します。
    • app.e2e-spec.ts:E2Eテストの例です。
    • jest-e2e.json:JestのE2Eテスト設定ファイルです。

ドキュメンテーション

プロジェクトのドキュメンテーションを整備することで、開発者間のコミュニケーションを円滑にし、プロジェクトの理解を深めることができます。

APIドキュメンテーション

Swaggerを使用して、APIドキュメンテーションを自動生成することができます。

Swaggerの設定

@nestjs/swaggerパッケージをインストールします。

npm install --save @nestjs/swagger swagger-ui-express

main.tsファイルに以下の設定を追加します。

import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
const app = await NestFactory.create(AppModule);

const options = new DocumentBuilder()
.setTitle('NestJS API')
.setDescription('The NestJS API description')
.setVersion('1.0')
.addTag('cats')
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('api', app, document);

await app.listen(3000);
}
bootstrap();

これで、http://localhost:3000/apiにアクセスすると、Swagger UIでAPIドキュメンテーションを確認できます。

パフォーマンス監視

アプリケーションのパフォーマンスを監視することで、ボトルネックを特定し、最適化することができます。Nest.jsでは、以下のツールを使用してパフォーマンスを監視できます。

PrometheusとGrafanaの使用

PrometheusとGrafanaを使用して、アプリケーションのメトリクスを収集し、可視化することができます。

Prometheusの設定

まず、prom-clientパッケージをインストールします。

npm install --save prom-client

次に、main.tsファイルに以下の設定を追加します。

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as promClient from 'prom-client';

async function bootstrap() {
const app = await NestFactory.create(AppModule);

const collectDefaultMetrics = promClient.collectDefaultMetrics;
collectDefaultMetrics();

app.use('/metrics', async (req, res) => {
res.set('Content-Type', promClient.register.contentType);
res.end(await promClient.register.metrics());
});

await app.listen(3000);
}
bootstrap();

これで、http://localhost:3000/metricsにアクセスすると、Prometheusのメトリクスを確認できます。

まとめ

Nest.jsアプリケーションの開発において、これらのベストプラクティスを遵守することで、コードの品質、可読性、保守性を向上させることができます。常に最新のベストプラクティスとツールを活用し、プロジェクトの成功に貢献しましょう。