Adonis入門(導入編)
2019/06/24

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

adonisjsインストール完了

起動

$ 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サーバーのセットアップ完了です。

get-hoge

Routeの追加方法

rootにアクセスすることはできたので、次に試しにGET /hogeできるようにrouteを追加してみます。

以下のコードをstart/routes.jsに追記。

Route.get('/hoge', () => {
  return { hoge: 'hogege' }
})

http://127.0.0.1:3333/hogeにアクセスしてみると、以下のように表示されます。

get-root

しかし、このままでは、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ライクな気がしますね。