最近仕事で、ソフトウェアアーキテクチャとか、逆コンウェイの法則とか、なんか色々考えてる流れで、個人もしくは0からなにの制約も無くサービスを作るとしたらどうするかなーって考えてみた。なお考えただけなので、それ半年後後悔するよって結果かもしれない
これのサービス版みたいなイメージですね。
こんな構成で書いてみます。
登場人物
- MySQL or PostgreSQL
- https://planetscale.com/ でもいいし、https://supabase.com/ を使ってもいいかもですね。
- Backend
- BFF感は強いけど、FrontendとBackendの間ではなくDBとFrontendの間なのでBackend
- しかしマイクロサービスではないので、FrontendのためのBackendでしかない
- Frontend
- クラウドサービス
- Vercel
- PlanetScale
別で考えること
- WEBだけじゃなくてAPIつくるとしたら?
- WEBだけじゃなくてバッチ処理とかFrontned以外をトリガーとする処理は?
思考を放棄
- SPA/SSR/SSG/ISR/SWR
とりあえず図
flowchart LR
UA--HTTPS-->Frontend
UA-->React.js-->GraphQL
subgraph Vercel
subgraph Frontend
Next.js
end
Next.js-->GraphQL
subgraph Backend
direction TB
GraphQL["Next.js API Route Endpoint"]-->Apollo
Apollo-->Resolver
Resolver--Query-->PrismaORM
Resolver--Command-->Domain[[DomainLayer]]-->PrismaORM
end
end
subgraph PlanetScale
PrismaORM-->MySQL
MySQL
end
マイクロサービス的に様々な用途に使われるAPIだとしたら、GraphQLのQueryがほぼそのままMySQLのクエリをWrapしてるみたいな開発は避けたほうが腐敗防止的にもいいと思うんだけど、まぁFrontendのためにしか使わないGraphQL Endpointという前提を置くとこれでいいんじゃないかな。
けどCommandはDB更新するだけならまだいいけど、トランザクション処理したり、他のAPI巻き込んだり、なんかまぁ色々複雑になると思うので、そこはDomain Layerにお仕事させるなど
Schedule Jobどうすうる?
一昔前のCloud Runとか、Serverless系(FunctionsやLambdaなど)はHTTPトリガーしかなかった(厳密にはpubsub eventとかあるけど、一旦置いとく)時代とおなじかな。HTTPで書いて叩こうね。ただ同じRuntimeに乗る以上リソースを専有されたくないので、Serverlessの良さを使ってスケールさせたり、HTTP Timeoutを拡張する考えじゃなくて、冪等に処理できるようにしてやっていくとかそういう戦略は必要かな。
まとめ
一昔前ならRailsとかLaravelとかまぁそういうフルスタックフレームワークがカバーしていた事を、全てNode.js(TypeScript)で書くほうが、Rails + jsで書くよりフロントが書きやすくなるし、FrontendとBackendを書く際に言語をスイッチするコストも掛からないってのは、一つの形としてありだよね。
個人的にはGoの硬さが好きなので、好きを見て自分の中での2022年版のGoかくなら〜を書いてみたい。
この2021も妄想で書いただけなので、まぁそれはそれ。
とりあえず、深く考えてないで書いてるので、もう少し調べたり色々見聞きしたりしたら確実にかわるとおもう。でもとりあえず昔はJavascriptがこんなに活躍する世界はおもってなかったよね。
Google MapがAjaxだ!って言って地図をぐりぐり動かせるようになったあの時は感動したけど!
追記
書いてみた
他の記事
Page | Date |
---|---|
Today 3:39 PM (GMT+9) | |
Today 11:13 AM (GMT+9) | |
Today 11:10 AM (GMT+9) | |
Last Saturday 10:37 PM (GMT+9) | |
Last Saturday 10:35 PM (GMT+9) | |
Last Saturday 10:20 PM (GMT+9) | |
Last Saturday 10:19 PM (GMT+9) | |
Last Saturday 3:38 PM (GMT+9) | |
Last Friday 5:46 PM (GMT+9) | |
Last Friday 5:07 PM (GMT+9) | |
Last Friday 1:37 PM (GMT+9) | |
Last Friday 12:15 AM (GMT+9) | |
Last Thursday 1:56 PM (GMT+9) | |
Last Thursday 1:54 PM (GMT+9) | |
Last Thursday 1:53 PM (GMT+9) | |
Last Thursday 1:52 PM (GMT+9) | |
Last Thursday 1:51 PM (GMT+9) | |
Last Thursday 1:47 PM (GMT+9) | |
Last Thursday 1:46 PM (GMT+9) | |
Last Thursday 1:45 PM (GMT+9) | |
Last Thursday 12:36 PM (GMT+9) | |
Last Tuesday 10:36 PM (GMT+9) | |
Last Tuesday 10:34 PM (GMT+9) | |
Last Tuesday 10:29 PM (GMT+9) | |
Last Tuesday 10:28 PM (GMT+9) | |
Last Tuesday 10:25 PM (GMT+9) | |
Last Tuesday 10:23 PM (GMT+9) | |
Last Tuesday 10:16 PM (GMT+9) | |
Last Tuesday 10:01 PM (GMT+9) | |
Last Tuesday 9:54 PM (GMT+9) | |
Last Tuesday 8:52 PM (GMT+9) | |
Last Tuesday 8:46 PM (GMT+9) | |
Last Tuesday 4:46 PM (GMT+9) | |
Last Monday 10:38 AM (GMT+9) | |
Last Monday 1:57 AM (GMT+9) | |
Last Monday 12:42 AM (GMT+9) | |
November 26, 2023 3:57 PM (GMT+9) | |
November 25, 2023 11:41 PM (GMT+9) | |
November 24, 2023 10:10 PM (GMT+9) | |
November 24, 2023 3:19 PM (GMT+9) | |
November 24, 2023 11:55 AM (GMT+9) | |
November 24, 2023 11:55 AM (GMT+9) | |
November 24, 2023 1:45 AM (GMT+9) | |
November 24, 2023 1:43 AM (GMT+9) | |
November 23, 2023 10:22 PM (GMT+9) | |
November 23, 2023 6:37 PM (GMT+9) | |
November 21, 2023 8:22 PM (GMT+9) | |
November 21, 2023 12:35 PM (GMT+9) | |
November 21, 2023 11:23 AM (GMT+9) | |
November 21, 2023 10:35 AM (GMT+9) | |
November 17, 2023 12:52 PM (GMT+9) | |
November 16, 2023 12:11 AM (GMT+9) | |
November 15, 2023 8:44 PM (GMT+9) | |
November 14, 2023 8:16 PM (GMT+9) | |
November 14, 2023 6:57 PM (GMT+9) | |
November 14, 2023 5:18 PM (GMT+9) | |
November 14, 2023 3:02 PM (GMT+9) | |
November 14, 2023 11:53 AM (GMT+9) | |
November 14, 2023 12:14 AM (GMT+9) | |
November 14, 2023 12:06 AM (GMT+9) | |
November 13, 2023 11:03 PM (GMT+9) | |
November 13, 2023 11:02 PM (GMT+9) | |
November 13, 2023 10:43 PM (GMT+9) | |
November 13, 2023 12:16 AM (GMT+9) | |
November 12, 2023 9:53 PM (GMT+9) | |
November 12, 2023 9:40 PM (GMT+9) | |
November 12, 2023 8:08 PM (GMT+9) | |
November 12, 2023 5:42 PM (GMT+9) | |
November 12, 2023 4:31 PM (GMT+9) | |
November 12, 2023 4:26 PM (GMT+9) | |
November 10, 2023 3:53 PM (GMT+9) | |
November 10, 2023 3:50 PM (GMT+9) | |
November 9, 2023 10:06 PM (GMT+9) | |
November 9, 2023 6:48 PM (GMT+9) | |
November 8, 2023 4:18 PM (GMT+9) | |
November 8, 2023 1:43 PM (GMT+9) | |
November 8, 2023 1:37 PM (GMT+9) | |
November 8, 2023 12:41 PM (GMT+9) | |
November 8, 2023 12:36 PM (GMT+9) | |
November 8, 2023 12:26 PM (GMT+9) | |
November 7, 2023 9:37 PM (GMT+9) | |
November 7, 2023 9:37 PM (GMT+9) | |
November 7, 2023 5:28 PM (GMT+9) | |
November 7, 2023 5:25 PM (GMT+9) | |
November 7, 2023 2:38 PM (GMT+9) | |
November 7, 2023 12:12 PM (GMT+9) | |
November 7, 2023 12:37 AM (GMT+9) | |
November 6, 2023 11:04 PM (GMT+9) | |
November 6, 2023 8:43 PM (GMT+9) | |
November 6, 2023 8:10 PM (GMT+9) | |
November 6, 2023 5:25 PM (GMT+9) | |
November 5, 2023 8:42 PM (GMT+9) | |
November 5, 2023 1:43 PM (GMT+9) | |
November 5, 2023 12:14 AM (GMT+9) | |
November 4, 2023 11:59 PM (GMT+9) | |
November 4, 2023 11:47 PM (GMT+9) | |
November 3, 2023 11:22 PM (GMT+9) | |
November 3, 2023 10:31 PM (GMT+9) | |
November 3, 2023 10:27 PM (GMT+9) | |
November 3, 2023 10:18 PM (GMT+9) | |
November 3, 2023 9:46 PM (GMT+9) | |
November 3, 2023 12:07 PM (GMT+9) | |
November 2, 2023 5:14 PM (GMT+9) | |
November 1, 2023 8:42 PM (GMT+9) | |
October 31, 2023 9:37 PM (GMT+9) | |
October 31, 2023 7:10 PM (GMT+9) | |
October 31, 2023 3:47 PM (GMT+9) | |
October 30, 2023 4:37 PM (GMT+9) | |
October 30, 2023 10:13 AM (GMT+9) | |
October 29, 2023 11:56 PM (GMT+9) | |
October 29, 2023 11:09 PM (GMT+9) | |
October 28, 2023 9:47 PM (GMT+9) | |
October 28, 2023 6:23 PM (GMT+9) | |
October 28, 2023 6:21 PM (GMT+9) | |
October 28, 2023 3:17 PM (GMT+9) | |
October 27, 2023 11:15 AM (GMT+9) | |
October 27, 2023 10:44 AM (GMT+9) | |
October 26, 2023 9:48 PM (GMT+9) | |
October 26, 2023 7:11 PM (GMT+9) | |
October 26, 2023 12:50 AM (GMT+9) | |
October 25, 2023 9:19 PM (GMT+9) | |
October 25, 2023 2:05 PM (GMT+9) | |
October 24, 2023 6:46 PM (GMT+9) | |
October 24, 2023 1:26 PM (GMT+9) | |
October 24, 2023 | |
October 24, 2023 12:48 PM (GMT+9) | |
October 23, 2023 | |
October 23, 2023 | |
October 23, 2023 11:53 AM (GMT+9) | |
October 23, 2023 2:50 AM (GMT+9) | |
October 23, 2023 1:27 AM (GMT+9) | |
October 22, 2023 3:33 PM (GMT+9) | |
October 22, 2023 | |
October 22, 2023 | |
October 22, 2023 | |
October 22, 2023 | |
October 22, 2023 12:29 AM (GMT+9) | |
October 22, 2023 12:00 AM (GMT+9) | |
October 21, 2023 10:36 PM (GMT+9) | |
October 21, 2023 5:34 PM (GMT+9) | |
October 20, 2023 | |
October 20, 2023 | |
October 20, 2023 | |
October 19, 2023 | |
October 19, 2023 | |
October 19, 2023 1:29 AM (GMT+9) | |
October 19, 2023 1:29 AM (GMT+9) | |
October 19, 2023 1:28 AM (GMT+9) | |
October 18, 2023 | |
October 16, 2023 | |
October 14, 2023 11:14 PM (GMT+9) | |
October 12, 2023 | |
October 6, 2023 1:30 AM (GMT+9) | |
October 4, 2023 | |
October 2, 2023 7:52 PM (GMT+9) | |
October 1, 2023 | |
September 22, 2023 1:31 AM (GMT+9) | |
September 20, 2023 1:32 AM (GMT+9) | |
September 16, 2023 1:33 AM (GMT+9) | |
September 16, 2023 1:32 AM (GMT+9) | |
August 28, 2023 1:34 AM (GMT+9) | |
August 28, 2023 1:33 AM (GMT+9) | |
July 2, 2023 4:49 PM (GMT+9) | |
May 25, 2023 3:27 PM (GMT+9) | |
April 30, 2023 6:35 PM (GMT+9) | |
March 23, 2023 8:13 PM (GMT+9) | |
March 13, 2023 3:04 PM (GMT+9) | |
March 1, 2023 11:57 PM (GMT+9) | |
January 1, 2023 | |
December 21, 2022 | |
December 20, 2022 | |
December 5, 2022 | |
October 25, 2022 3:03 PM (GMT+9) | |
August 19, 2022 | |
May 18, 2022 | |
May 16, 2022 11:58 PM (GMT+9) | |
May 1, 2022 | |
March 27, 2022 | |
March 1, 2022 | |
January 31, 2022 | |
January 13, 2022 | |
January 12, 2022 10:22 PM (GMT+9) | |
January 9, 2022 6:31 PM (GMT+9) | |
January 4, 2022 | |
December 24, 2021 | |
December 18, 2021 | |
December 16, 2021 | |
December 6, 2021 | |
November 21, 2021 | |
November 11, 2021 | |
November 7, 2021 | |
November 4, 2021 | |
July 16, 2021 | |
July 13, 2021 | |
May 26, 2021 | |
May 23, 2021 | |
March 3, 2021 | |
January 15, 2021 10:00 PM (GMT+9) | |
January 4, 2021 | |
December 15, 2020 12:00 PM (GMT+9) | |
December 13, 2020 | |
December 1, 2020 | |
November 18, 2020 11:00 PM (GMT+9) | |
November 11, 2020 6:00 AM (GMT+9) | |
November 10, 2020 1:00 AM (GMT+9) | |
November 9, 2020 11:00 PM (GMT+9) | |
October 22, 2020 | |
October 1, 2020 | |
September 10, 2020 | |
September 1, 2020 | |
April 22, 2020 | |
January 2, 2020 | |
August 22, 2019 | |
June 13, 2019 | |
March 21, 2019 | |
September 30, 2018 9:26 PM (GMT+9) | |
May 22, 2018 3:12 PM (GMT+9) | |
May 1, 2018 | |
November 27, 2017 | |
July 31, 2017 | |
October 23, 2011 11:20 PM (GMT+9) | |