21
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜスケールするとTypeScriptが辛くなり、Goが輝くのか:TypeScriptからGoに変えたら○○だった

Last updated at Posted at 2025-12-22

背景:なぜTypeScriptをやめたのか

もともとバックエンドは以下の構成でした。

  • Next.js
  • TypeScript
  • ORM: Prisma
  • コンテナ: Docker

TypeScript自体に不満があったわけではありません。
むしろ開発体験は非常に良好でした。

ただ、プロダクトが成長するにつれて次の課題が顕在化しました。

  • 高負荷時のレイテンシ増大
  • メモリ使用量の不安定さ
  • コンテナ起動時間の遅さ
  • 型があっても「実行時エラー」は普通に起きる

「スケールを見据えたとき、このままで良いのか?」
という疑問が、Go移行のきっかけでした。

結論:TypeScriptからGoに変えたら○○だった

結論から言うと、

運用が圧倒的にラクになった

これに尽きます。

以下、具体的に見ていきます。

良かった点①:パフォーマンスを“考えなくていい”

Goにして最初に驚いたのは、
特に何も工夫していないのに速いことでした。

  • レスポンスタイムが安定
  • GCで悩まされない
  • CPU・メモリ使用量が予測しやすい

TypeScript時代は、

  • 非同期処理の書き方
  • ライブラリの癖
  • Nodeのバージョン差

を意識する必要がありましたが、Goではそれが激減しました。

良かった点②:シングルバイナリの破壊力

Goはビルドすると単一バイナリになります。

これが想像以上に強力でした。

  • Dockerfileが極端にシンプル
  • 本番とローカルの差分がほぼゼロ
  • デプロイが「置き換えるだけ」

Node.js特有の

  • node_modules地獄
  • lockfile差分
  • Alpineとの相性問題

から完全に解放されました。

良かった点③:コードの“統一感”が出る

Goは言語仕様がかなり制限されています。

その結果、

  • 書き方が自然に揃う
  • レビューで揉めない
  • 属人性が下がる

という副次効果がありました。

TypeScriptでは起きがちな

  • 書き手による設計のばらつき
  • 謎に凝った型定義

がほぼ消えました。

正直しんどかった点①:初速は遅い

Goはシンプルですが、
TypeScriptほどの即効性はありません

  • ORM周りの実装が冗長
  • ジェネリクスの表現力は控えめ
  • 便利ライブラリは自作前提

「サクッとAPIを生やす」体験は
TypeScriptの方が上です。

正直しんどかった点②:型で遊べない

TypeScriptに慣れていると、
Goの型システムは物足りなく感じます。

  • Conditional Typesがない
  • 型レベルプログラミング不可

ただし、それが逆に保守性を上げている
というのも事実でした。

移行して分かった「Goが向いているケース」

以下に当てはまるなら、Goはかなり有力です。

  • 中〜大規模のバックエンド
  • 長期運用が前提
  • パフォーマンスと安定性重視
  • チーム開発で属人性を減らしたい

逆に、

  • MVP開発
  • フロントエンドとコード共有したい

ならTypeScriptの方が幸せです。

まとめ

TypeScriptからGoへの移行は、

  • 開発体験はやや落ちる
  • 代わりに運用体験が激的に良くなる

というトレードオフでした。

個人的には、

「プロダクトが育ったらGo」はかなりアリ
という結論です。

この記事が、同じ悩みを持つ方の判断材料になれば幸いです。

21
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?