業務でAdonisJSというフレームワークを利用する機会があったので、概要をまとめていこうと思います。
AdonisJSとは
- TypeScriptベースのフルスタックWebフレームワークです
-
LaravelやRailsと似ている部分が多くあり、これらの開発に慣れている人は導入しやすい
- Laravelのようにルーティング、コントローラ、ORMなど公式パッケージが提供されています
- MVCパターンを採用しています
- 2015年にHarminder Virkさんが作り、そこから複数人のコアチームで開発が続けられ、2025年4月現在はver6がリリースされています
- MITライセンスの下で配布されている
- ベンチマーク・オリンピックで勝つために機能を削るのではなく、現実の問題を解決することに主眼を置いて開発されたようです
シェア
npm trendsによると、ReactやVuejsと比べてまだまだ利用者は少ないようです。
調べてみてもAdonisJSについて記事を書いている方は少ないです。
公式ドキュメントは英語ですが充実しています。
機能
AdonisJSでプロジェクトを作る際には、選択肢として以下の4つから選ぶことになります。
- Web starter kit:テンプレートエンジン(EdgeJS)を使った昔ながらのWeb開発を行う人向け
- Inertia starter kit:InertiaJSを使ってSPAを作成する人向け。フロントエンドとしてはVue3・React・Svelte・Solid.jsが利用できます
- API starter kit:API開発をする人向け。画面が必要な場合は、フロントエンドはVuejsやReactなど任意のものを利用する
- Slim starter kit:コア部分とでデフォルトのフォルダ構造のみ必要で、それ以外は自分たちで構築していく人向け
やってみた
最後にAPIプロジェクトを作って、疎通出来るか試してみます。
前提として、nodejsバージョン20以上が必要になります。
APIプロジェクト作成
プロジェクトを作成します。
APIでは以下について選択することでプロジェクトを作成できます。
- スターターキット:Web、Inertia、API、Slimのいずれか
- 認証:セッション、アクセストークン、Basic認証のいずれか
- DB:Sqlite、PostgreSQL、Mysql、Microsoft SQL Serverのいずれか
npm init adonisjs@latest adonis-api-sample
> create-adonisjs adonis-api-sample
_ _ _ _ ____
/ \ __| | ___ _ __ (_)___ | / ___|
/ _ \ / _` |/ _ \| '_ \| / __|_ | \___ \
/ ___ \ (_| | (_) | | | | \__ \ |_| |___) |
/_/ \_\__,_|\___/|_| |_|_|___/\___/|____/
> Which starter kit would you like to use ... Press <ENTER> to select
Slim Starter Kit A lean AdonisJS application with just the framework core
Web Starter Kit Everything you need to build a server render app
> API Starter Kit AdonisJS app tailored for creating JSON APIs
Inertia Starter Kit Inertia app with a frontend framework of your choice
> Which authentication guard you want to use ... Press <ENTER> to select
> Session Authenticate users using cookies and session
Access Token Authenticate clients using API tokens
Basic Auth Authenticate users using HTTP Basic Auth
Skip I want to configure the Auth package manually
> Which database driver you want to use ... Press <ENTER> to select
SQLite
LibSQL
MySQL
> PostgreSQL
MS SQL
> Download starter kit (1.46 s)
Downloaded "github:adonisjs/api-starter-kit"
> Install packages
[ wait ] installing dependencies .
> Prepare application
> Configure Lucid
> Configure Auth
╭──────────────────────────────────────────────────────────────────╮
│ Your AdonisJS project has been created successfully! │
│──────────────────────────────────────────────────────────────────│
│ │
│ > cd adonis-api-sample │
│ > npm run dev │
│ > Open http://localhost:3333 │
│ > │
│ > Have any questions? │
│ > Join our Discord server - https://discord.gg/vDcEjq6 │
│ │
ディレクトリ構成としては以下になります。
※見づらいので3階層まで表示
API Starter Kit
tree -L 3 -I node_modules*
.
|-- ace.js
|-- adonisrc.ts
|-- app
| |-- exceptions
| | `-- handler.ts
| |-- middleware
| | |-- auth_middleware.ts
| | |-- container_bindings_middleware.ts
| | |-- force_json_response_middleware.ts
| | |-- guest_middleware.ts
| | `-- silent_auth_middleware.ts
| `-- models
| `-- user.ts
|-- bin
| |-- console.ts
| |-- server.ts
| `-- test.ts
|-- config
| |-- app.ts
| |-- auth.ts
| |-- bodyparser.ts
| |-- cors.ts
| |-- database.ts
| |-- hash.ts
| |-- logger.ts
| `-- session.ts
|-- database
| `-- migrations
| `-- 1744189966356_create_users_table.ts
|-- eslint.config.js
|-- package-lock.json
|-- package.json
|-- start
| |-- env.ts
| |-- kernel.ts
| `-- routes.ts
|-- tests
| `-- bootstrap.ts
`-- tsconfig.json
疎通確認
最後に疎通してみましょう。
以下のコマンドを実行し、AdonisJSの開発サーバを起動します。
node ace serve --hmr
[ info ] starting HTTP server...
╭─────────────────────────────────────────────────╮
│ │
│ Server address: http://localhost:3333 │
│ Watch Mode: HMR │
│ Ready in: 1.37 s │
│ │
╰─────────────────────────────────────────────────╯
[01:22:37.567] INFO (13960): started HTTP server on localhost:3333
デフォルトでHello WorldのAPIが用意されているので、リクエストしてみると正常にレスポンスが返ってきました!
導入から実行できるようにするまで、非常に簡単に出来ましたね
curl -X GET http://localhost:3333
{"hello":"world"}
おわりに
今回はAdonisJSについての簡単な概要と、実際にAPIを叩けるようにするまでを試しました。
細かい内容については、次の記事で書いていこうと思います