AdonisJsを知ったきっかけ
お仕事でRailsに増える機会があり、ORMのありがたみをひしひしと感じました。特に、モデル同士の関連付け(アソシエーション)。
それで私の得意分野であるNode.jsフレームワークにもRailsライクなものはないかなと探して見つけたのが、AdonisJsでした。
(調べて分かったのですが、どうやらLaravelライクに作られているそうです。)
やりたいこと
今までは、MongoDBをmongooseのpopulationを使ってゴリゴリに書いていたので、ORMを用いるとどれだけラクにModelの管理ができるかを感じてみたいなと思います。
最終的には、AdonisJsをAPIサーバーとして運用して、SPAでTODOアプリを作成してみようと思います!(フロントにはVue.jsを使用予定)
まずは導入編!
セットアップ
インストール
$ mkdir ~/www/adonisjs
$ cd adonisjs
$ sudo yarn global add @adonisjs/cli
ファイル生成
今回は、APIサーバーにするので、--api-only
オプションを付けます。
$ adonis new server --api-only
以下のテンプレートがcloneされます。
https://github.com/adonisjs/adonis-api-app
起動
$ cd server
$ adonis serve --dev
SERVER STARTED
> Watching files for changes...
info: serving app on http://127.0.0.1:3333
http://127.0.0.1:3333
にアクセスして以下のように表示されたら、APIサーバーのセットアップ完了です。
Routeの追加方法
rootにアクセスすることはできたので、次に試しにGET /hoge
できるようにrouteを追加してみます。
以下のコードをstart/routes.js
に追記。
Route.get('/hoge', () => {
return { hoge: 'hogege' }
})
http://127.0.0.1:3333/hoge
にアクセスしてみると、以下のように表示されます。
しかし、このままでは、routeが増えてくると、routes.js
は膨大なサイズになってしまうので、Controllerを使って、処理部分をファイル分割してみます。
Controllerを使ったRoute
Controllerの作成
コンソールからHogeというControllerを作成する。
typeを聞かれるので、HTTPの方を選択。(--type http
を付ければ省略できる。)
$ adonis make:controller Hoge
> Select controller type
❯ For HTTP requests
For Websocket channel
✔ create app/Controllers/Http/HogeController.js
HogeControllerが作成された。
'use strict'
class HogeController {
}
module.exports = HogeController
Controllerを編集
HogeController内にindexというメソッドを作成して、先程routes.jsに書いた/hoge
の処理をこちらに持ってくる。
'use strict'
class HogeController {
index() {
return { hoge: 'hogege' }
}
}
module.exports = HogeController
RouteからControllerを指定
/hoge
のrouteを編集する。
Route.get('/hoge', 'HogeController.index')
このように書くことで、Controllerを指定することができる。
importとかexportとかいちいち書かなくていいのがラクですね。
まとめ
一旦ここまで。
まずは、AdonisJsをセットアップして、RouteとControllerの理解でした。
すでにNode.jsのフレームワークを使っている方は苦労しないと思います。
なんとなく、名前もRailsライクな気がしますね。