はじめまして、Yoichiroと申します。
日々新しい技術が生み出されていく中で、小規模なアプリケーションを開発する際にはどんな技術を選定するべきか、アーキテクチャはどうするのが良いか、ホスティングは?DBは?いろんな悩みがあると思います。
今日は自分が選定した技術について自分なりの視点を持ってまとめようと思います。
この記事で書くこと
技術選定の理由
選定した技術を類似技術と比較したメリット
この記事で書かないこと
環境構築手順
具体的な開発手法
それでは本題に入っていきましょう!!
前提 なぜ勤怠管理アプリを作るのか
技術選定には要件を満たすためであるという選定理由が必要です。なので一応どんなアプリを開発したかを記載します。
知人が経営する飲食店で、勤怠管理をタイムカードとExcelを使用しており、タイムカードからの転記を手作業でしていたり間違えてExcelのシートを消してしまったりなど苦労しているところを見かけ、力になれればと思い立ったためです。
- 要件としては2店舗が同じ建物に共存しており、従業員数は15名弱
- 一般的な打刻機能、打刻修正機能があると良い
- 店舗のWi-Fiからのみ打刻ができる様にしたい(優先度低のため次フェーズで実装予定)
今回開発したシステムの全体的な構成図
選定した技術スタック
バックエンド
言語 Go
- サーバーレスとの相性が良い
- シングルバイナリでDockerとの相性が良く、Cloud Runでも使いやすい
- 起動のオーバーヘッドが小さく、Cold Startの影響を最小限に抑えられる
- 静的型付け言語
- Javaエンジニアとしての経験が活かせる。型の安全性や補完機能により、コードの理解やメンテナンスが容易になる
- 開発コミュニティが一定サイズ以上で、人気がある
- OSSプロジェクトが豊富で、ライブラリやツールの選択肢が多い。新しい機能やセキュリティアップデートも迅速に提供される
- 他のエコシステムとの連携もしやすく、技術的なサポートが得やすい
フレームワーク Gin
-
現時点(2024/09)で最も人気であり、GitHubのスター数も示すように他のフレームワークと比べても広く使われている
- GitHubのスター数
- Gin:78.1k
- Fiber:33.3k
- Echo:29.5k
- go-zero:28.9k
- GitHubのスター数
-
習得コストが低い
- シンプルで直感的なAPI設計を持ち、初心者にも使いやすい。また、性能面でも軽量かつ高速なため、特に低レイテンシが求められるアプリケーションに向いている
フロントエンド
言語 TypeScript
- 型安全性とエディタ補完
- フロントエンドでの開発において、TypeScriptは型安全性を提供し、バグの発見を早期に行える
フレームワーク Next.js
- サーバーサイドレンダリング
- SEO対策やパフォーマンス向上が必要な場合、Next.jsのSSR機能が役立つ
- 本音を言うと次回開発予定のアプリでSEO対策をしたいのでその練習として学習のために選択した
UIライブラリ TailwindCSS,chadcn/ui
- 開発速度の向上
- TailwindCSSはユーティリティクラスベースのCSSフレームワークであり、デザインを柔軟にカスタマイズできる。また、chadcn/uiはNext.jsプロジェクトとの相性が良く、スピーディにUIを構築できる。
ホスティング Vercel
- Next.jsとの最適化
- VercelはNext.jsを開発したチームによるホスティングサービスで、Next.jsアプリケーションのデプロイがシームレスである。CI/CDパイプラインが自動化されているため、迅速なデプロイが可能
基盤周り
クラウド Cloud Run
- コスト効率
- 小規模プロジェクトで使用する際に、自動スケーリング機能が備わっており、アクセスが少ない時間は課金が発生しないため非常にコスト効率が高い
- 比較対象
- Amazon EC2:仮想マシンでスケールは可能だが、サーバーの管理が必要。手動でスケール設定を行う必要があり、運用コストが高くなる場合あり
- Amazon ECS:コンテナオーケストレーションサービスで、スケールが可能だが、クラスターやネットワークの管理が必要。Cloud Runと比べてセットアップが複雑
コンテナ Docker
-
コンテナベースのデプロイ
- Dockerを使用することで、Cloud Runへのデプロイが容易になる。これにより、インフラの管理を気にせず、アプリケーションのコードに集中できる
-
環境の一貫性
- Dockerはアプリケーションの依存関係をすべてパッケージ化するため、開発環境と本番環境での差異をなくすことで本番環境特有のバグを減らすことが期待できる
DB Supabase
- スキーマの柔軟性とリアルタイム機能
- Supabaseはリアルタイムのデータベース機能を提供しており、勤怠管理アプリのようにデータの即時反映が求められるアプリケーションに最適。また、PostgreSQLベースであるため、スキーマの管理も容易
CI/CD
GitHub Actions
ソースコード リポジトリのホスティングや CI/CD サービスを提供している GitHub にできるかぎり寄せています。
GitHub Actions を使うと、Cloud Build と同様にコンテナイメージのビルドやコンテナレジストリへの Push、Cloud Runのデプロイの実行などが行えます。
次回はバックエンドの構成について記事を書きたいと思います。
引用記事