今どきのウェブアプリと開発環境

今どきのウェブアプリ開発から遠ざかり過ぎたのでちょっと勉強中。

新しいシステムの設計を進めているんだけど、一旦この記事で今どきのやり方をまとめてみる。

開発環境周辺

現代ではCopilot必須かも。まあ、ChatGPTを叩きまくるのもいいけど、お金があるならCopilotをやらない理由は無いね。

IDEはVSCode一択かな。GitHub Copilotと連携すれば最強。 IntellijのgitのUIがかなり使いやすいんだけど、やっぱりVSCodeで全部やったほうが良さそう。

ソースコード管理はGitLabを使っている。まあ、GitHubエンタープライズか自前GitLabであれば問題無いかな。 GitLab CIとか使えば自動テストで品質を保証できるけど、まあローカルで自動テストを走らせるだけでもOK。 このあたりは開発チームの規模感に依る。

設計ドキュメント関連

markdown形式一択かなと思う。UMLはmermaidとかplantとかで記述。

  • gitのプロジェクトに設計ドキュメントを入れてしまった方が良さそう。
  • OpenAPIとかだとジェネレーターに渡すyamlも設計ドキュメントの一部とみなして管理すれば良さそう。
  • プロジェクト概要からユースケース図、ER図、システム運用マニュアルまである程度全てmarkdownで作っておくと吉。

DB周り

ORマッパー前提で"ID required"上等の設計がベストかも。

  • CRUDメインの簡単なアプリならMySQL系が良いかも。ORMのサポートも充実しているしフィールドの順番も変えられるしね。
  • かなり重たい集計処理の多いシステムならPostgreSQLかな。Nested Loopの改良版ではHash Joinに太刀打ちできないはず。
  • 必ずプライマリキーとして人工キー(いわゆるサロゲートキー)を1つだけ定義しておくこと。
  • 外部キー制約は必ずつけること。
  • 集計系とか一部のパフォーマンス重視のDB操作はクエリビルダーや生SQLも使うと良い。

バックエンド

いわゆる軽量な言語の中ではPythonが流行っている。個人的にはPHPでも良いと思っているけどね。

  • Python3は使えるようになっておいた方が良い。軽量言語でプロジェクトを立ち上げるのならPythonが無難か。
  • PHPも第二の選択肢としてイケていると思う。
  • API Gateway + Lambda の構成は、それぞれのサービスの制限事項を完全に理解した上で使うこと。
  • JWTの認証機構はとりあえずリフレッシュトークン使っとけといったところ。

フロントエンド

React, Vue, Angularの3大フレームワークをおさえておけば十分かな。 実際にはNext.js,Nuxt.js,Angularの3択になるかと思う。

  • サーバーサイドレンダリングが必要なプロジェクトかどうかをまず考えること。話はそれからだ。
  • デザインシステムは独自のものを作らない方が良さげ。やりたくなる気持ちはわかるが・・・。
  • 3大フレームワーク、TS、JWT、サーバーサイドレンダリング、WebSocketあたりを使いこなせれば一人前。

本番環境周り

今どきVMは微妙だけど、SaaSとかPaaSの弱点は把握しておいた方が良い。時間制限とかエフェメラルポートぐらいはね。

  • BtoBならアクセス集中などの予測不可能な動きはあまりない。VMとかコンテナでも十分だったりする。
  • BtoC(BtoBtoC)はアクセスがスパイクすることがあるので、Lambda等のサービスも視野に入れること。
  • RDBはやっぱりマネージドが無難。ただ、サポート切れになったら強制アップグレードでダウンタイムが出たりするからそのあたりの準備と覚悟は必要。
  • セキュリティ対策はAWS等のクラウド事業者が提供するWAF等を利用するしか無いと思った方が良い。

prev: マイベストプラクティス
next: 近況
created at : 2023-11-14 15:41:57
updated at : 2023-11-14 16:31:45
author : Toshiaki Yokoda