1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ポートフォリオ開発ログ #3技術選定編

Posted at

はじめに

本記事はポートフォリオアプリ「DevJourney」開発の過程をまとめた連載の第3回です。

今回は第2回の要件定義で決まった要件を実現するために、どのような技術スタックを選んだのか。その「選定理由」と「比較検討のプロセス」を詳しく解説します。

技術選定の軸

以下の3つの軸を設定しました。

  1. 開発効率の最大化
  2. Infrastructure as Code(Iac)の実践
  3. 開発現場で汎用的に用いられているAWSサービスを扱う

クラウドプラットフォームの比較と選定

採用:AWS(Amazon Web Service)

本アプリケーションは特定のプラットフォーム(Microsoft 365等)に依存せず、高度なデータ分析特化でもないため、汎用性と安定性に優れたAWSを選択しました。

選定理由

  • 国内シェアが最も高く、IT市場での需要が圧倒的。
  • マネージドサービスが豊富で、個人開発でもエンタープライズ級の構成を組みやすい。
  • 後述するIaC(CDK)やCI/CD(CodePipeline)との親和性が非常に高い。
  • AWSの資格を取得したものの、会社の業務でほとんど扱う機会がなかったため。(個人的な理由)

バックエンドの比較と選定

採用:TypeScript × NestJS

選定理由
バックエンドには、Node.js上で動作するNestJSを採用しました。Angularにインスパイアされた厳格なアーキテクチャを持ち、依存性注入(DI)やモジュール化が標準で備わっています。

型安全性の徹底: TypeScriptを前提としているため、フロントエンドと型定義を共有しやすく、大規模開発にも耐えうる保守性を確保。

AWSとの親和性: CDKでインフラの実装を行う都合上、メインで扱われている言語がTypeScriptとなっているので、アプリ全体として扱う言語をTypeScriptに統一したいため。

比較対象 不採用理由
Express 軽量だが設計が自由すぎる(人依存になる)。AWSのような複雑なクラウド構成では、標準化されたNestJSの方が管理しやすい。軽量だが設計が自由すぎる(人依存になる)。AWSのような複雑なクラウド構成では、標準化されたNestJSの方が管理しやすい。
Go パフォーマンスは魅力だが、今回は「TypeScriptによる全レイヤーの言語統一」による開発スピード向上を優先。

フロントエンドの比較と選定

採用:TypeScript × Next.js

選定理由
ReactベースのフルスタックフレームワークであるNext.jsを採用しました。

市場価値の高さ: 求人数・ナレッジともにReact/Next.jsが圧倒的に優位である点。

AWSとの親和性: AWS AmplifyやApp RunnerでのSSR(サーバーサイドレンダリング)サポートが手厚く、デプロイ時の手間が少なくて済む。

比較対象 不採用理由
Nuxt.js / Vue.js AWSの公式ドキュメントやテンプレートはNext.jsが優先される傾向にあり、設定の平易さで一歩劣る。
Angular 学習コストが高く、かつ現代のSSRトレンドにおいてはNext.jsほどの勢いがない。 

データベース・そのほかの設定

1.データベース

採用:Amazon RDS for PostgreSQL

今回の要件(学習ロードマップの構造化データの保持)を考慮し、RDBを選択しました。

比較対象 不採用理由
MySQL JSONデータ型の処理がPostgreSQLと比較して劣るため。将来的にロードマップの詳細を柔軟な構造で保存する可能性を考慮した。
Aurora 個人開発にはオーバースペック/高コスト。 
DynamoDB  複雑な集計クエリに向かない。

2.認証

採用:Amazon Cognito

セキュリティリスクを最小化するため、ユーザー管理をフルマネージドサービスへ委譲。JWTベースの認証により、Next.jsとの統合が容易。

3.IaC

採用:AWS CDK (TypeScript)

今回の目玉の一つ。CloudFormationを直接書くのではなく、プログラミング言語(TS)でインフラを定義することで、ループ処理や条件分岐を活用した高度な抽象化を実現。

技術スタックの全体像

カテゴリ 選定技術 備考
フロントエンド Next.js (TypeScript) SSR / App Router採用
バックエンド NestJS (TypeScript) 明確な実装方式を意識
インフラ AWS (ECS on Fargate) 運用負荷を下げつつコンテナ化
DB RDS (PostgreSQL) 柔軟なデータ構造に対応
認証 Amazon Cognito フルマネージド認証
IaC CDK TypeScriptでインフラをコード化

まとめ

今回の技術選定では、 「TypeScriptへの統一」 と 「AWSマネージドサービスの活用」 を軸に据えました。これにより、開発スピードを維持しながらも、実務で求められる「堅牢なアーキテクチャ」と「IaCによる自動化」を両立する準備が整いました。

特にDB選定においては、単なる慣習ではなく「データの特性(JSON処理)」や「コスト・耐障害性」といった実務的な観点で比較検討を行いました。

次回は、これらの技術を用いてどのようにシステムを組み上げたのか、「第4回:設計・実装編①(アーキテクチャ図・DB設計)」について解説します!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?