個人でサービスを作るとしたら今ならこうかな(2022年版)

Date
August 19, 2022
Private

最近仕事で、ソフトウェアアーキテクチャとか、逆コンウェイの法則とか、なんか色々考えてる流れで、個人もしくは0からなにの制約も無くサービスを作るとしたらどうするかなーって考えてみた。なお考えただけなので、それ半年後後悔するよって結果かもしれない

これのサービス版みたいなイメージですね。

こんな構成で書いてみます。

登場人物

  1. MySQL or PostgreSQL
    1. https://planetscale.com/ でもいいし、https://supabase.com/ を使ってもいいかもですね。
  2. Backend
    1. BFF感は強いけど、FrontendとBackendの間ではなくDBとFrontendの間なのでBackend
    2. しかしマイクロサービスではないので、FrontendのためのBackendでしかない
  3. Frontend
  4. クラウドサービス
    1. Vercel
    2. PlanetScale

別で考えること

  1. WEBだけじゃなくてAPIつくるとしたら?
  2. WEBだけじゃなくてバッチ処理とかFrontned以外をトリガーとする処理は?

思考を放棄

  • SPA/SSR/SSG/ISR/SWR

とりあえず図

image
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だ!って言って地図をぐりぐり動かせるようになったあの時は感動したけど!

追記

書いてみた

他の記事

PageDate
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)