#90 RemixのuseFetcherとActionの設計 ─ 個人開発者向けのサービスの開発記録

tyshgc
·

本日までの(5/2-5/3)の作業

  • ✅ RemixのAction設計

  • 🚴 日報・分報の画面設計・実装

    • 🚴 設計・デザイン

    • 🚴 実装

  • サインインの実装

    • 認証画面実装

    • 認証ロジック実装(主にClient側)

    • Server側の認証チェック実装

    • Client側の認証チェック実装

RemixのAction

仕事の方はクライアントサイドはOOP DDD + RepositoryパターンでBackendがPythonでAPIを概念ベースのモデリングで設計しており、それらをアプリケーション用に集約するためにRemixのLoader/ActionをBFF(Backend for Frontend)として扱う様にしてます。薄いGatewayの様なものです。

今回初めてRemixの実装を実戦で投入しいるんで勝手がわかってない部分もあるので別の解がありそうですが、今どうするか悩んでいるのは一つの画面=ルートで複数のActionが必要な場合の実装方法についてです。

例えばルートのページとしてUserというページがあるとします。そのルートにOutletコンポーネントを置いて、ユーザ情報の表示Widget・ユーザの編集Widget・パスワード変更Widgetみたいなのを仮に置くとします。※WidgetはUIのグループみたいなものです。

  • Userページのルート(ここにOutletを置く)

    • https://hoge.com/user

    • /routes/user.tsx

  • ユーザ情報が表示されるWidget

    • https://hoge.com/user/preview

    • /routes/user.preview.tsx

  • ユーザ情報の編集フォームWidget

    • https://hoge.com/user/edit

    • /routes/user.edit.tsx

  • ユーザのパスワード変更フォームWidget

    • https://hoge.com/user/reset-password

    • /routes/user.reset-password.tsx

これらのルートがそれぞれが単体としてユーザページに表示するなら良いですが、previewもeditもreset-passwordも同じ画面(=ルート)に表示しておきたいとなるとActionは次のいずれかなのではと。

  1. Form毎にhidden要素でeditかreset-password識別できる要素を置いた上でAction関数内で分岐処理する

  2. editとreset-passwordの処理をAPIルートとして別途用意し、useFetcherのfetcher.Formでactionを指定して処理をする。※例は編集のみなのでパスワードリセットは別途APIルートを用意する必要があります。

1のケースの場合、actionで処理する具体的な処理は別ファイルにするとしてもやはりここにちょっとした処理分けロジックがあるのは気持ち悪く、また画面は表示にのみ関心を持たせたい気持ちが強いのでこの方法ではなく2のAPIルートを用意する方向にしました。

他に方法もありそうな気がするけどドキュメントやら見てもそれっぽいのないし、わからん。。

と、余談?ですが、APIルートはGETの時はloaderだけで良いですが、POST/PUT/DELETEの場合はactionがないと405エラーになります。そしてaction内でrequest.methodで分岐処理が必要…結局分岐いるのねという感じです。postActionとかputActionとかがあればいいのに…。

その他、メモなど

remix-flat-routes

Remix v2のルートファイルシステムがDot Delimitersはroutesディレクトリ配下に全ルートのファイルが並んで規模が大きくなり管理などを考慮するとつらそうということでremix-flat-routesというディレクトリに分割できるライブラリがありました。

気になるのは、公式のDot Delimiters思想から以前のファイルシステムに戻るようなものなので果たしてどうなのだろうかと。あとRemix初学者やremix-flat-routesを知らない開発者がメンバーになった時に若干の学習コストがかかるのは気になります。仕事の方はこれは採用せず(規模もそんな大きくないし)、個人開発の方では採用してみようと思います。

← #89 #91 →

@tyshgc
デザインファーム及びスタートアップ(上場)などを経てフリーランスとして、様々なスタートアップや大手企業の新規事業の立ち上げ期における事業設計・アプリケーションの設計・開発、サービスのUX分析とデザインとエンジニアリングの両軸でお手伝いさせていただいています。 現在、個人開発者向けの支援サービスを個人開発中。 X Account: @tyshgc