意見の対立終了!? 技術選定の新常識「技術選定ChatGPT」の衝撃


技術選定の件、話題になってますが話がズレてたり、一方的な意見が多いと思ってます。

技術選定はエンジニアが自由にできるのはベストパターンです。ただ、それは運用面、保守面、拡張面、効率面等色々な面を考慮し最適化を選択する必要があります。
これは社長側、事業部側、エンジニア側、運用者側での各々で見えてる面が違うためバラバラの意見になるのは当然です。

# 結論
いっその事、技術選定ChatGPTを作って、そこに状況を説明して帰ってきた答えも皆で文句言わず採択するという運用にするのはいかがですか？

# 技術選定は難しい 
技術選定は、新しいプロジェクトや既存のシステムのアップグレード時に非常に重要なプロセスとなります。正しい技術の選択は、システムのパフォーマンス、保守性、スケーラビリティ、コスト効率など、様々な要因に直接影響を与えるためです。

技術選定に関する議論の中でよくあるシナリオは、異なる背景や専門知識を持つステークホルダーが集まり、それぞれの立場から最良と思われる選択肢を提案することです。しかし、このプロセスは、意見の対立や議論のズレ、一方的な視点が優先される可能性があります。

社長側はビジネスの視点、長期的な戦略を重視するかもしれません。
事業部は効率や即時の成果を求めるかもしれません。
エンジニアは技術的な正確さや新しい技術への興味を持っているかもしれません。
運用者はシステムの安定性や保守性を重視するかもしれません。
これらの異なる視点は、良いシステムを構築するためのバランスを取る上で必要ですが、対立する場合も多いです。

# 第3者の登場

ステークホルダーが色々いるなら第3者が決めるのがベストなので、新しい方法として"技術選定ChatGPT"の提案です。

# なぜ技術選定ChatGPT?
客観的な意見: 人の感情や先入観を排除し、データとロジックに基づいた意見を得られます。
迅速な結果: 複数の選択肢や条件を考慮した結果を素早く得ることができます。
柔軟性: 状況や要求が変わった場合にすぐに再評価することができます。
技術選定ChatGPTを用いることで、各ステークホルダーが持っている情報や要求を明確にし、それを基に客観的な意見を取り入れることができます。そして、得られた答えを皆で共有し、文句を言わずに採択するという新しい運用を検討することができます。

# という事でやってみた
## 受託の場合
```
ECサイトを新規で構築したいと思ってます。
リソース：エンジニアとして、php,java,Ruby,React,Vueのエンジニアが居ます。
スケジュール：開発期間は半年
開発スタイル：受託型
ポイント：受託型なのでバグがなく品質の良いものを納品したい
この場合に技術選定をお願いします。
```
```
新規のECサイト構築を行う際の技術選定は、プロジェクトの要件やリソースに応じて大きく異なる場合があります。以下は、ご提供いただいた情報を基にした提案です。

1. バックエンド:
Java (Spring Boot):
理由: Java は業界で広く使用されており、Spring Bootは企業向けのアプリケーションを迅速に開発するためのフレームワークとして知られています。また、Javaを使用することで安定性や拡張性が確保されやすいと言われています。
Ruby (Ruby on Rails):
理由: Ruby on Railsは迅速な開発が可能で、特にスタートアップや中小企業での使用例が多い。コードの可読性も高く、品質を確保しつつ開発を進めるのに適している。
どちらの言語・フレームワークを選択するかは、開発チームの得意とする技術や、プロジェクトの具体的な要件によると思います。

2. フロントエンド:
React:
理由: Reactはコンポーネントベースのライブラリで、大規模なアプリケーションに適しています。また、Reactは世界中で非常に人気があり、コミュニティや資料も豊富に存在します。これにより、問題の解決や新しい技術の採用が容易になります。
Vue.js:
理由: Vue.jsは学習曲線が緩やかで、簡潔なコードで高性能なアプリケーションを構築できるため、開発チームがVueに慣れている場合は選択の余地があります。
3. データベース:
MySQL or PostgreSQL:
理由: 両方ともオープンソースのRDBMSで、ECサイトのようなトランザクション処理を多く扱うアプリケーションに適しています。Java (Spring Boot) または Ruby on Railsとの互換性も良いです。
結論:
バックエンドには、Java (Spring Boot) または Ruby on Railsを推奨します。具体的な選択は、エンジニアの経験やプロジェクトの要件に応じて行ってください。

フロントエンドには、ReactまたはVue.jsを推奨します。同様に、エンジニアの経験やプロジェクトの要件に応じて選択してください。

データベースには、MySQLまたはPostgreSQLを推奨します。

品質を最重視する場合、統一感を持たせるために、フロントエンドとバックエンドの技術選定を1つずつに絞ることをおすすめします。また、受託型のプロジェクトであるため、定期的なコードレビューやテスト駆動開発(TDD)の採用も考慮するとよいでしょう。

```

## アジャイル開発の場合
```
ECサイトを新規で構築したいと思ってます。
リソース：エンジニアとして、php,java,Ruby,React,Vueのエンジニアが居ます。
スケジュール：開発期間は3ヶ月
開発スタイル：アジャイル型
ポイント：アジャイル型でどんどん機能追加していく形の開発を考えています。
```
```
3ヶ月という短期間での開発と、アジャイル型の開発手法を採用し、どんどん機能を追加していくスタイルを考慮した技術選定の提案を行います。

1. バックエンド:
Ruby (Ruby on Rails):

理由: Railsは「Convention over Configuration（設定より規約）」の哲学のもとで設計されており、迅速な開発が可能です。また、Gemというライブラリが豊富に存在するため、多くの機能を短時間で実装できます。アジャイル型の開発に特に適していると言われています。
PHP (Laravel):

理由: LaravelもRailsと同じように「Convention over Configuration」の哲学を持つフレームワークです。PHPはWeb開発の歴史が長く、多くのホスティングサービスやリソースが存在します。
2. フロントエンド:
Vue.js:

理由: Vue.jsは学習曲線が緩やかで、シングルページアプリケーション(SPA)の構築が容易です。また、ドキュメンテーションやコミュニティが活発なため、問題に対する解決策を速やかに見つけることができます。
React:

理由: コンポーネントベースの設計思想で、再利用可能なコンポーネントを容易に構築できます。また、Reactのエコシステムが非常に強力であり、多くのライブラリやツールが提供されています。
3. データベース:
PostgreSQL:
理由: 柔軟性が高く、拡張性に優れています。また、RailsやLaravelとの互換性も良好です。
結論:
バックエンドには、Ruby on Railsを優先的に推奨します。3ヶ月という短い開発期間とアジャイル型の開発に適しているためです。

フロントエンドには、Vue.jsを推奨します。迅速な開発と直感的なAPIが提供されており、エンジニアの経験やプロジェクトの要件にも合致すると考えます。

データベースには、PostgreSQLを推奨します。

アジャイル開発の特性上、開発の初期段階での技術選定は非常に重要です。また、スプリント毎のフィードバックを受け取りながら、適切な方向性を保ちつつ開発を進めることが求められます。上記の技術スタックは、迅速な開発をサポートし、柔軟に機能追加を行うための選定となっています。
```

## 結果
受託ならJava、アジャイルならRoRで、フロントは、受託ならReact,アジャイルならVueという事みたいです。
なんとなく理由は、ちゃんと作るならJava、Reactで、速さ重視ならRoR,Vueという感じでしょうか？
実際の開発現場のジャッジとして問題なさそうな気がします。

# まとめ
技術選定は、多くの要因やステークホルダーの意見をバランス良く考慮する必要があります。技術選定ChatGPTを導入することで、客観的で迅速な判断をサポートし、より効果的な選択を可能にするかもしれません。

# 最後に
エンジニアの皆さん、エンジニア未経験の皆さん、若手エンジニアの皆さん、勉強方法について悩みがあればなんでも気軽に質問して下さい！
これからも記事を書いていきますので、モチベーションアップのためフォロー、イイねお願いします。