個人的言語選定
個人的には
- フロントエンドはTypeScript
- その他はRustかGo
がいいと思ってます。
個人的にはRustを押したいですが、個人的にはRust、他の人にはGoという感じな気はしてます。
フロントエンドも他バックエンド系言語が取り込むかは現状では微妙かなと思います。もしバックエンドが1,2言語に統一された後の時代に、フロントエンドも統一はありそうな気はします。
以前はTSでフルスタックにすべてをこなすことをメインに考えていましたが、フルスタックフレームワークでの利用は100%恩恵受けれるんですが、バックエンドはサーバー分離(モノレポだったとしても)が入ると、結局型共有の恩恵は、別言語+OpenAPI shemaとあまり変わらず、他少しの型共有しか恩恵受けられず、選定理由としてそこまで強くないなと感じたりしていました。(ライブラリ知識を共有できるなどありますが)
静的で、実行時速度が速いもの、メモリ効率がいいものを選ぶ。
-
静的
AIがコードはどうしても曖昧なのと、トークン消費的な観点などから、より静的にチェック、訂正、生成をできるものが強いかと思います。
実行時に動かさないとエラーがあるかどうか馬鹿らしいので、静的に事前検知したいなと特に思います。
特有例ですが、以前MyBatisいい感じだなとか思ってましたが、自動生成を挟まないものだと動的要素が強すぎて個人的に選定すべきではないし、
選定するとしても自動生成はあるべきかと改めて思いました。 -
実効速度
実効速度も、別に公道を走るのにスーパーカーは必要ないという話はありますが、
別に同じ値段で買えるのであれば、
最初からスーパーカーでもよいのでは?別に普通の車かスーパーカーか、どちらも手間が変わらなければ性能がいいものを使う理由はないかなと思います。 -
メモリ効率
年々ハードウェアが進化してディスクやメモリなどはだいぶ容量を許容できるようになっていますが、マイクロサービス化や、
クラウド化でのコストを少しでも抑えたいとなるとメモリ効率が良いものを求めるほうが良いかなと思います。まあ無視してもいいかもしれないですが。
Rustはコンパイル速度、GoはRustに比べてGCによる実効速度問題と、デスクトップアプリやスマホアプリへの対応可否。どちらを選ぶか難しい。
| Rust | Go | |
|---|---|---|
| コンパイル速度 | 遅い | 速い |
| 実行時速度 | GCなし・高速で安定 | GCあり・Rustより遅くGC停止も発生 |
| デスクトップ・スマホアプリ | Tauriで対応可 | 対応が弱い |
Rustのコンパイル速度が速くなるのが先か、GoがRustに近く速くなるか、いろんな面をカバーできるか、どちらが速く
解決されるかでどっちが優位になるか変わってくるかなと思います。
Rustは意外にもスマホアプリをtauriで対応できたり簡単な特に機能が少ないアプリ試作しかしたことないですが、
マルチプラットフォーム言語としても使いやすくあるのかなと思います。
学習コストはほぼ無視できる。
自分が詳しくない言語でもAIがサポートしてくれるので、学習コストを理由に言語を選ぶ必要も薄まってきた気がします。特に指揮を取る人ではないメンバーレベルだとなお、後からの理解でもよく
最初からその言語の知識を持っている必要性はより低いと思います。
AIの学習データについても多少考慮は必要かもしれませんが、言語やフレームワーク側の公式がMCPとかskills提供をしてくれるので、
単純なweb api程度であれば色々試しやすい気がします。あとは、静的に問題検知できればまあ書いたコードが悪くてもコンパイラーが間違えと修正を教えてくれるので。
理解なく使うのは良くないので、開発していくなかで理解は必要ですが、その必要というのを遅らせることができると思っているので、学習コストというのは無視してよいと思っています。
その他・AI向けの言語
Vercel Labsが開発した zero のような、AIエージェントがコードを読み・修正し・ビルドすることを前提に設計された言語も出てきていますが、本当にそれを選ぶ理由があればその新AI向け言語という選択もあると思います。
個人的課題
バックエンド系というよりは、フロントエンドのデザイン崩れを静的担保したい。デザインの良し悪しは難しいとして、例えば子要素が親要素より大きくなっているや、
背景色に対して、文字色が似たような色で見えづらいとかは静的に検知してAIに解消させたい。言語というよりはどちらかといえばcss側の新しいツールか、もし既存ツールでうまくできるものがあれば教えてください。