AdonisJS v5へのアップグレードが大変だったのでまとめた
AdonisJS v5へのアップグレードが大変だったのでまとめた
2022/10/29

AdonisJSをv4→v5へのアップグレードを行ったのだが、あまりにも大変だったので、いくつかに分けて紹介。

現在、絶賛執筆中です。随時記事を追加していきます。

ちなみに、公式ではv4で作成したアプリをアップグレードするのを薦めていない。。
規模が大きいサービスに取り入れていたらと思うとゾッとしますね。。

公式ではv4で作成したアプリをアップグレードするのを薦めていない

https://docs.adonisjs.com/releases/out-of-preview

AdonisJSは、「QRコードから飛び出すARをカンタンに作成できるサービス QRAR」のAPIサーバーで利用しています。
当時、テスト駆動を意識して書いたおかげもあり、不具合を出すことなくアップグレードが完了できた。

どうやるか

通常アップグレードしていく場合、パッケージのバージョンを上げてエラー箇所を修正していくかと思うが、v5では根本的に書き方や構造が変更されているので、新しく別プロジェクトとして作成していく。

機能的に廃止されたとかがなかったので、そこはまだマシだったかな。。

やったこと

新プロジェクトの作成

こちらは何かしたわけではないので、記事としては省略。

以下のコマンドで別プロジェクトを作成する。

$ yarn create adonis-ts-app server2

データベースに接続できるようにする

データベース機能の追加と旧データベースに接続する際にマイグレーションファイルの修正が必要だったので、その手順を紹介。

認証機能を追加する

認証機能の追加手順を紹介。
以前はJWT認証で実装していたが、v5では代わってOpaqueAccessTokenを使っての認証になるので、実装方法を変える必要がありました。
また、ソーシャル認証も取り入れています。

Validatorの実装

AdonisJSでリクエストボディをバリデーションできるValidator機能の導入天順を紹介。

テスト

テストの導入手順と変更点を紹介
テストはVowという内製?のテストツールからJapaに変更されている。
全体的に大きな変更はなく、メソッド名が違ったりの小さな変化だった。

機能拡張した点や小技を紹介

開発環境をSSLで起動する

Facebookで認証を行うのにSSLである必要があるので、開発環境でもHTTPSで起動できるようにする。

SQLをデバッグする

ORMを使っていると内部で実際にどういったSQLが叩かれているかがわからない。
正常に動作しているか、ログにSQL文を表示させる。

件数検索できるようにDatabase,ModelにgetCountを追加する

v4には検索件数を取得できるgetCountがあったのだが、v5ではなくなってしまったので、QueryBuilderのマクロにgetCountを追加する

OAT Tokenの期限を更新する

以前のJWTトークンではリフレッシュトークンを使ってログイン期限を更新するようにしていたが、OATトークンはリフレッシュトークンがないので、初回認証から一定時間経つと再認証が必要になる。

最終認証からN日間認証を許可するという仕様になるようにOAT Tokenの期限を更新する。