12k
All articles

Node開発におけるAdonisJSの検証

AdonisJSとExpressをNode.js開発で比較し、Lucid ORM・VineJS・TypeScript対応がバックエンドワークフローに与える影響を検証する。

OpenReplay Team
OpenReplay Team
Node開発におけるAdonisJSの検証

Express で Node.js バックエンドをいくつか構築したことがあれば、そのパターンはご存知でしょう。ルーターをインストールし、バリデーションライブラリを選び、ORM を接続し、認証を設定する。そして新しいプロジェクトごとにこれを繰り返します。機能はしますが、毎回自分でフレームワークを組み立てているようなものです。

AdonisJS は異なるアプローチを取ります。これは必要なものすべてを一つの統合されたパッケージで提供する、バッテリー同梱型の TypeScript バックエンドフレームワークです。

重要なポイント

  • AdonisJS は、MVC パターンに従い、ルーティング、ORM、バリデーション、認証などを最初から同梱した、バッテリー同梱型で TypeScript ファーストな Node.js 向けバックエンドフレームワークです。
  • プロジェクトごとに独自のスタックを組み立てる必要がある Express とは異なり、AdonisJS は設定の摩擦なしにすべての部品が連携する統合されたエコシステムを提供します。
  • AdonisJS v7 は、コード生成によるエンドツーエンドの型安全性を導入し、ルートのタイポ、レスポンス形状の不一致、不正な Inertia props を実行時ではなくコンパイル時に検出します。
  • このフレームワークは、REST API、フルスタック Web アプリ、SaaS プラットフォームを構築するチームで、Node.js エコシステムにおいて Laravel や Rails スタイルの規約を求める場合に適しています。

AdonisJS とは?

AdonisJS は Node.js 向けのバックエンドファーストな Web フレームワークで、TypeScript をファーストクラスの市民として構築されています。MVC パターンに従い、ルーティング、ORM、バリデーション、認証、ファイル処理、メール、レート制限、テストサポートを最初から提供します。

2015年から活発に開発されています。現在のリリースである AdonisJS v7 は、長年の実世界での改良を表しており、スタック全体にわたるエンドツーエンドの型安全性を導入しています。

Laravel や Rails を使ったことがあれば、規約に馴染みを感じるでしょう。Express や Fastify から移行する場合、違いは即座に明らかです。ツールを組み立てるのをやめて、アプリケーションの構築を始めることができます。

AdonisJS vs Express: 核心的な違い

Express は設計上ミニマルです。ルーティングとミドルウェアを提供し、その後は一歩引きます。完全な制御が必要な場合には便利ですが、すべてのプロジェクトが同じセットアップ作業から始まることを意味します。パッケージの選択、接着コードの記述、それらの間の互換性の維持です。

AdonisJS は統合されたエコシステムでこれを解決します。実際にはこのようになります:

機能AdonisJSExpress
TypeScript サポート組み込み手動セットアップ
ORMLucid(同梱)自分で選択
認証組み込み手動(例: Passport)
バリデーションVineJS(同梱)手動(例: Zod、Joi)
CLI ツールAce CLIなし
ファイルアップロード組み込み Drive手動

Express では、これらの決定をプロジェクトごとに行います。AdonisJS では、すでに決定されており、部品は設定の摩擦なしに連携します。

AdonisJS TypeScript バックエンドの実際の姿

コントローラーは型付けされた HttpContext オブジェクトを受け取ります。バリデーターは VineJS で定義され、非同期バリデーションを実行し、データベースレベルのチェックのために ORM と直接統合されます。モデルはマイグレーションスキーマにマッピングされるデコレーターを使用するため、カラム定義の同期が保たれます。

export default class PostsController {
  async store({ request, auth, response }: HttpContext) {
    const data = await request.validateUsing(createPostValidator)
    const post = await auth.user!.related('posts').create(data)
    return response.created(post)
  }
}

これは、バリデーション済み、認証済み、データベース対応の POST ハンドラーです。探し回るミドルウェアのインポートも、手動の型キャストもありません。

注意: auth.user の非 null アサーション(!)は、ユーザーが存在することが保証されていることを TypeScript に伝えます。実際には、コントローラーが実行される前にユーザーが認証されていることを保証する認証ミドルウェアでこのルートを保護します。

AdonisJS v7 の新機能

AdonisJS v7 は一つの目玉機能を中心としています: コード生成によるエンドツーエンドの型安全性です。フレームワークはビルド時にルート、トランスフォーマー、Inertia ページコンポーネントをスキャンし、TypeScript の型を自動的に生成します。

これは次のことを意味します:

  • ルート名が型チェックされます。 urlFor('posts.shwo', ...) のタイポはコンパイルエラーになり、実行時の 404 にはなりません。
  • レスポンス形状が型付けされた契約になります。 トランスフォーマーはサーバーから出るデータを定義します。フロントエンドコードはこれらの型を直接インポートし、手動でインターフェースを複製する必要はありません。
  • Inertia props がコンパイル時に検証されます。 コントローラーがページコンポーネントに間違った props を送信した場合、ブラウザが検出する前に TypeScript が検出します。

v7 は、ログインとサインアップフローが動作する改良されたスターターキット、SWC による高速な TypeScript ツール、@adonisjs/otel による OpenTelemetry 統合、キーローテーションサポートを備えた書き直された暗号化モジュールも提供します。

AdonisJS v7 は Node.js 24 以降を必要とし、フレームワークを最新の Node ランタイム機能に合わせています。

誰が使うべきか

AdonisJS は、エンタープライズのオーバーヘッドなしに構造を求める、REST API、フルスタック Web アプリ、SaaS プラットフォームを構築するチームに適しています。軽量スクリプトや最小限のロジックを持つマイクロサービスのために Express を置き換えようとしているわけではありません。しかし、実際のデータモデル、認証、ビジネスルールを持つアプリケーションにとって、生産性の違いは顕著です。

フレームワークは複数のレンダリングアプローチをサポートしています — Edge によるサーバーレンダリングテンプレート、Inertia.js によるフルスタック SPA、または純粋な API バックエンド — すべてのアプローチでバックエンドコードの一貫性を保ちます。

まとめ

AdonisJS は Express が提供しないものを提供します: 初日から連携する完全で一貫したバックエンドツールキットです。v7 の型安全性機能により、サーバーで書くものとフロントエンドが消費するものの間のギャップはほぼゼロに縮小されます。

新しい Node.js プロジェクトを始める際に、設定に費やす時間を減らし、構築に費やす時間を増やしたい場合、AdonisJS は真剣に検討する価値があります。

よくある質問

AdonisJS は本番環境で使用できますか?

はい。AdonisJS は 2015 年から活発に開発されており、SaaS プラットフォーム、REST API、フルスタック Web アプリケーションを構築するチームによって本番環境で使用されています。バージョン 7 は、活発なコミュニティと継続的な開発を伴う最新の安定版リリースです。

React や Vue のようなフロントエンドフレームワークと AdonisJS を使用できますか?

もちろんです。AdonisJS は Inertia.js をサポートしており、React、Vue、または Svelte でフルスタック SPA を構築しながら、バックエンドロジックを AdonisJS コントローラーに保持できます。また、純粋な API バックエンドとして使用し、お好みのフロントエンドを接続することもできます。

AdonisJS はデータベースとのやり取りをどのように処理しますか?

AdonisJS には、Knex.js 上に構築された独自の ORM である Lucid が含まれています。Lucid は Active Record スタイルのモデル、マイグレーション、シーダー、ファクトリー、リレーションシップをサポートしています。PostgreSQL、MySQL、SQLite、MSSQL に最初から対応しています。

Express から AdonisJS への移行は難しいですか?

AdonisJS は規約駆動型であり、Express は意見を持たないため、アーキテクチャの変更は大きいです。ただし、すでに TypeScript と Prisma や TypeORM のような ORM を使用している場合、多くの概念が直接転用できます。公式ドキュメントは各コア機能について明確なガイドを提供しています。

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.