AdonisJSをv4→v5へのアップグレードを行ったのだが、あまりにも大変だったので、いくつかに分けて紹介。
現在、絶賛執筆中です。随時記事を追加していきます。
ちなみに、公式では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の期限を更新する。