Open5

個人開発のシステム構成を考える

ツキネビツキネビ

決めること

  • フロントフレームワーク
  • バックエンドフレームワーク
  • インフラ
  • データベース
  • ストレージ

とか

ツキネビツキネビ

決め方

  • 取得済みの技術を挙げる
  • 強化したい技術を選ぶ
  • それに合った構成を決める

私の場合

  • 取得済みの技術 => Next.js、ASP .NET Core、Python(ちょっと)、Java(ちょっと)
  • 強化したい技術 => モダンなバックエンド => モダンなバックエンドとは……?
  • それに合った構成は……?

フロントとバックで同時に新しいことを学ぶのは難しいため、フロントはNext.jsに決定する。

ツキネビツキネビ

モダンなバックエンド

あまり難しくなく、Next.jsとの親和性が高いこと。

調査前のイメージ

  • Python => バックエンドとして親和性高そう。計算が得意。
  • Next.js => 複雑になりそうなのであんまりやりたくない。取得済み技術のため除外。
  • .NET => 慣れてる。モダン……?取得済み技術のため除外。
  • Go => なんかよさげらしい。学習コストは高いかも?
  • Java => 好きくない。モダン……?
  • Rust => 最近耳にする。どないなん?
  • Ruby => フロントのフレームワークもあるらしい。早く作れるイメージ。

バックエンドをTSで書くのは違和感ある。好みの問題かも?
Python、Go、Rust、Rubyあたりで考える。

調査

Python

  • フレームワークはFlaskとDjangoがよさげ
  • 処理速度が遅い
  • シンプル
  • ライブラリが多い
  • Windowsで開発しにくい

Go

  • シンプル
  • スケーラビリティが高い
  • ライブラリが多い

Rust

  • 安全性が高い
  • 速い

Ruby

  • 癖があるらしい
  • Ruby on Rails
  • Rails API Only
  • 立ち上げスピードが速い

決めるための条件

  • Next.jsに合っていること
  • スピードはあまり気にしない
  • 大規模でもない
  • 計算もあまり必要ない
  • セキュアではあってほしい
  • ライブラリは多めがいい
  • 情報も多めがいい

決める

メリット デメリット
Python ライブラリ・情報多い Windowsで開発しにくい
Go ライブラリが多い
Rust 安全性が高い メモリが複雑
Ruby 素早く作れる APIOnlyの情報少ないかも

これを見るとGoがよさげかも。
フロントはTSで書くつもりだから静的型付けのGoが相性よさそう。
GoにするならフレームワークはオーソドックスなGinかな。

ツキネビツキネビ

インフラとの相性

  • Docker・Git使いたい
  • サーバーレスがいい

調査

  • vercel => Next.jsとGoがデプロイできる。Postgres使える。お金かかる。
  • Cloud Run => Goと相性いいかも?Docker使える
  • Cloudflare => 安いらしい?Goは不可(頑張れば行けそうだけど面倒)。DBとStorageも使える。
  • AWS Lambda => Docker使える
  • Supabase Database => DB
  • render
  • Fly.io => CI/CD の面倒は基本見ない

CloudflareメインにしてGoだけほかのにする?
Next.jsがvercelじゃなく、Goがvercelというちょっといびつな構成に笑

ツキネビツキネビ

フロントフレームワーク => Next.js
バックエンドフレームワーク => Gin
フロントインフラ => Cloudflare Pages
バックインフラ => Cloudflareかvercel
データベース => Cloudflare D1
ストレージ => Cloudflare R2