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

最近仕事で、ソフトウェアアーキテクチャとか、逆コンウェイの法則とか、なんか色々考えてる流れで、個人もしくは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だ!って言って地図をぐりぐり動かせるようになったあの時は感動したけど!

追記

書いてみた

他の記事

PageTagDate
BigQueryのLong Term Storageが高いなーとおもったので可視化と解決した
Data雑メモ
December 21, 2022
より早く高いアウトカムを実現するために、ソフトウェアの状態に向きあった結果モジュラモノリスと向き合い始めた
Spir
December 20, 2022
より早く高いアウトカムを実現するために、プロダクトマネジメントの型に投資する大切さ
Spirプロダクトマネジメント
December 5, 2022
個人でサービスを作るとしたら今ならこうかな(2022年版)
雑メモ
2021年11月末に退任してから4ヶ月の間たちました....
March 27, 2022
一つのIdP(AzureAD)で複数のGoogle WorkspaceにSAML連携してみた
雑メモコーポレートエンジニア
January 31, 2022
約2年間の在宅勤務で試行錯誤した音に関する環境変化
雑メモ
January 13, 2022
もしスタートアップ初期からJOINするとしたら(2022版)
雑メモCTOコーポレートエンジニア
December 24, 2021
35歳になる2022年から
雑メモ
December 18, 2021
コーポレートエンジニア振り返り(仮)
雑メモコーポレートエンジニア
December 16, 2021
約5年間のCTOというロールを終えて、そしてこれから
CTO
December 6, 2021
自由って難しい
雑メモ
November 21, 2021
改めて「コミュニケーション」とはを素人ながら考えてみた
コミュニケーション雑メモ
November 11, 2021
.devに「2021年も終わるので、0からREST APIを作るならどうしようかなを考えてみた(Go編)」を書いた
.devGo
November 7, 2021
WHY? WHY? WHY?
コミュニケーション雑メモ
November 4, 2021
Notionで公開してるブログにCloudflare Web Analyticsを導入してみた
May 26, 2021
Notionにcustom domainを当てたい
May 23, 2021
過去3回iPadを手放してることもあって、iPad Airを悩んでたけど。購入したらそれ以外に選択肢ないんじゃくらい満足してると言いたい。
January 15, 2021 10:00 PM (GMT+9)
もしスタートアップ初期からJOINするとしたら
December 15, 2020 12:00 PM (GMT+9)
Cloudflareに変更してドメインもついでにかえた
November 18, 2020 11:00 PM (GMT+9)
Work From Home(テレワーク)が始まってもう10ヶ月経過したので仕事場を振り返ってみた
November 11, 2020 6:00 AM (GMT+9)
アジャイル的に知識のアップデートをしてます
November 10, 2020 1:00 AM (GMT+9)
Hello Notion Blog
November 9, 2020 11:00 PM (GMT+9)
2020年これから
January 2, 2020
2019年時点のレジュメ
雑メモコミュニケーション
March 21, 2019