🔥

Crowi 2.0 開発日記 #5

に公開

前回の続き:

https://zenn.dev/sotarok/articles/f4e63ce899df6c

TL;DR

  • jest 通るようにしました、CI もつけました
  • node 22 にしました
  • ts-rest 試してみてます
  • frontendからAPIを叩けるようにしています

Codebase changes

https://github.com/crowi/crowi/compare/main...dev2-2

local のテストで使っていた uploads などを commit してしまったのを rebase したので、hash変わってしまい、compare がうまく機能しなくなってしまった...
ので、base branchを dev2-2 に変更しました

Pull Requset 作っておくことにしました

https://github.com/crowi/crowi/pull/886

テストを通す

  • 前回、jest の upgrade だけしてテストが通るのは後回しにしたので、test が通るように
  • es関連のテストで落ちているのは今後対応するということでいったん skip

CI を再度有効化

  • テストが通ったとうことで、CIを有効化する
  • これまでは CircleCI を使っていたが、GitHub Actions に移行するので GitHub Actions の設定を追加

convertional-changelog を導入

  • AI がちゃんと Commit log を書いてくれるので、いよいよ convertional-changelog などを導入しても良いんじゃないかということで導入した (最初から自分でちゃんと書け、というツッコミはある (それはそう))

残ってた frontend 関連パッケージの削除

  • 削除したんだよ

node 20 → 22

  • upgrade しました

monorepo化 (turbo + pnpm)

  • サーバー側のコードが、いったんupgrade、testなど含めてかなり修正が進んだので、そろそろサーバー側の動作そのものがきちんとできる状態を目指したい
  • しかしその場合、frontend をこのまま追加すると厄介になるので monorepo にしたい
  • というわけで、monorepo にしました
  • 今までの package は apps/crowi-api に移動

Docker compose の update

  • docker compose up で、mongodb8 と redis だけ立ち上がるようにしました
  • 通常の開発の構成なら docker compose をあげて、.env に以下の記載があれば立ち上がるはずです
  • .env.sample にも書いてあります (ちょっと未整理)
MONGO_URI="mongodb://localhost:37017/crowi"
REDIS_URL="redis://localhost:16379"

ts-rest の POC

API の型定義のために trpc とか検討してみたものの、

  • API は型を定義できる
  • client library も生成できる (monorepo なので、frontendはこの client app を使う。また、ios/android app などもこのパッケージを参照できるようにする。また npm にも publish し、3rd party app が この client lib を使って API 連携システムを実装できる)
  • 既存の express 実装をこれに adopt する形で実装を移行できる

という要件に当てはまるもので、tRPC、zodios、Nest.JS + Swagger など色々あったのだけど、試しに ts-rest の検証をしてみています。

検証のためブランチを一旦分けました。どうだろうなあ、書き味。

https://github.com/crowi/crowi/pull/887

やってることは、

  • 認証系の middleware はこれまで SSR だったので redirect していたが、API Error を json で返すようにしている
    • それに合わせた type の定義など
  • 認証では、cookie base (session) で認証していたので、jwt token を返せるようにしている

Astroを追加 & Frontendに、APIテスト用 route を追加

  • crowi-web として astro を追加しました
  • そこに api を叩けるようにするページを作りました
  • これまで express でになっていた、/install や /login などを一旦 ts-rest で定義しつつ astro から叩いてみて、書き味などを検証してみます

なお試しに叩いてみたが、まだ叩けないw
ちょっと修正が必要...多分

まとめ

  • 進捗してるんだかしてないんだか。

Discord

引き続き、Discord は興味本位でも、冷やかしでも、アドバイスでも、お手伝いでも大歓迎ですので、ぜひ遊びに来てください!

https://discord.gg/jnWzJeu

Discussion