Dorails

日記

スタートアップがGolangを採用すること

Golangを採用しているスタートアップの話を聞いて思ったこと雑記。

 

Golangの特徴はGoroutineによる高い並列性と、機能を削減したシンプルな設計にある。

反対に他の言語に比べまだエコシステムが不十分であることや、シンプルな設計により機能が少ないことから記述量が増えてしまうこともある。

そしてビルドが必要になることから巨大なモノリスには向かず、マイクロサービス化を進めないと開発速度が低下する側面もある。

 

このような特徴を踏まえるとPMFに至るまで試行錯誤を繰り返すスタートアップ企業において相性悪くない?って思う。

まずユーザ数は少なく低負荷なのでメリットは享受できないし、マイクロサービス化が正当化できるほどエンジニアもいないこと、そして少ないエンジニアで高速に開発していくにあたりエコシステムが充実しているほど良いためデメリットは全面的に受けることになる。

そしてそれは最近もてはやされがちなRustもそうなのかなぁと。

 

この観点で見るとスタートアップがインタプリンタ言語を採用するのがやっぱり合理的に感じるし、エコシステムの充実度やフロントエンドとの相性、採用のしやすさからNodeが一番良さそう。

 

ただChatGPTに聞いたら以下のような返答が来た。

 

個人的な意見として、スタートアップがGo言語(Golang)を採用することは、多くの場合において合理的な選択だと考えています。

以下に、スタートアップがGo言語を採用するメリットをいくつか挙げます。

  1. 生産性と開発速度: Go言語はシンプルで直感的な文法を持ち、効率的な開発をサポートします。コードの可読性が高く、言語の設計哲学に基づいており、短期間で柔軟な開発が可能です。また、豊富な標準ライブラリとエコシステムが存在し、開発者の生産性を向上させます。

  2. パフォーマンスとスケーラビリティ: Go言語は高速で効率的な実行性能を持ち、大量のリクエストやトランザクションを処理することができます。並行処理とネットワーキングの機能が組み込まれており、スケーラビリティにも優れています。スタートアップが成長するにつれて、アプリケーションのパフォーマンス要件に対応できる特徴です。

  3. クロスプラットフォーム対応: Go言語はクロスプラットフォームでの開発に適しています。バイナリ形式での実行可能ファイルを生成するため、異なるオペレーティングシステムアーキテクチャでのデプロイが容易です。これにより、スタートアップは幅広い環境での展開を迅速に行えます。

  4. マイクロサービスアーキテクチャへの適合性: Go言語はマイクロサービスアーキテクチャに適しています。小さな単一責任のサービスを構築するのに適しており、軽量スレッド(goroutine)とチャネルを使用して非同期処理や並行処理を実現できます。スタートアップが成長し、マイクロサービスアーキテクチャに移行する可能性がある場合、Go言語は適切な選択肢です。

ただし、最終的な言語選択はプロジェクトの要件や目標、開発チームのスキルセットによって異なる場合があります。他の言語やフレームワークと比較検討し、プロジェクトのニーズに最も適したツールを選択することが重要です。

 

うーんこれは成功の桁が違う英語圏のコンテキストが強そうに思う。

日本におけるWebサービスの成功ってそこまでユーザつかないんだよね。

パフォーマンス課題も言語以前にスロークエリが原因であることが多く、逆に言えばこんなスロークエリあっても回るのであればどんな言語でも良いじゃんって感じる側面も強い。

 

まぁ一概にこれが正とは言い切れないが、少なくとも自分が技術選択するにあたりこの辺は考慮したい。

 

===

主張に反論させてみた。

その観点は理解できますが、以下の理由からGolangをスタートアップが採用する意義は依然として大きいと主張します。

  1. 初期開発速度: Golangはそのシンプルさから学習曲線が緩やかであり、新規プロジェクトを迅速に開始するのに理想的です。また、高レベルのパフォーマンスが必要とされない初期段階でも、Goのコードの明確さと可読性はバグを減らし、メンテナンスを容易にします。

  2. スケーラビリティ: パフォーマンスは初期段階では重要でないかもしれませんが、製品が成功してユーザーが増えた場合、その高パフォーマンスは大きな利点となります。その際に他の言語からGoへのリプレースを考えるより、最初からGoを採用しておく方がよりスムーズなスケーリングが可能です。

  3. マイクロサービスとモノリス: Goはマイクロサービスに適していますが、これはモノリスの開発に適していないという意味ではありません。また、Goはコンパイル時間が短いことで知られており、大規模なプロジェクトでもビルド速度はそれほど問題とはなりません。

  4. 人材の問題: Golangの人材が少ないという問題は理解できますが、Goの学習曲線は緩やかであるため、他の言語からの移行はそれほど難しくありません。また、Goの人材市場は急速に成長しています。

  5. エコシステム: Goのエコシステムは確かにTypeScriptやRubyなどの成熟したエコシステムに比べればまだ発展途上ですが、急速に成長しており、すでに多くの強力なライブラリとツールが利用可能です。

すべてのスタートアップがGoを採用すべきというわけではありませんが、そのシンプルさ、高パフォーマンス、そして急速に成長しているエコシステムは、多くのスタートアップにとって魅力的な選択肢となり得ます。

 

賛成派・反対派に分けて議論させたり、自分の主張に反論させるのは考えが深まって良い。