💬

AWS上でのSPA/サーバーレスシステム開発におけるSEが設計フェーズにやること

2021/06/08に公開

前提

  • 元々は社内のメモとして残していたものを個人メモ+publicな知見としても使えそうなので、公開することにしました
  • とある案件で得た経験を、他の案件でも応用できるよう整理したものになります
    • 案件の規模感としてはおおよそ1000万〜1億ぐらいで使える想定
  • 多分、タイトルのままの視点でみるとまだまだ不足あるかと思いますので、それは適宜加筆修正して育てていければ

概要

  • やれたらいいことも含んでいる
  • 必要に応じて、PM/PGに手伝ってもらいながら決める
  • フレームワーク・ツールが自動でやってくれてて、見逃してる項目があるかもしれない

要件確認

  • 対象のクライアント情報
    • PC、スマホ、その他
    • OS、ブラウザ、version
    • ディスプレイサイズ
  • サービス/システム名
  • ドメイン
  • ユースケース図
  • アクティビティ図
  • 機能一覧 / 画面一覧
  • 用語の整理
    • 用語の英語
      • プログラム、DB、API等の設計で利用
    • あいまいな表現、重複した表現の整理

設計

  • アーキテクチャ
    • 利用リソース洗い出し
    • 外部通信部分の洗い出し
  • ネットワーク
    • public/privateな部分の明確化
      • VPC・subnet
    • 外部通信部分のプロトコル
      • HTTP(S)
      • MQTT(S)
      • etc
  • 概念図、論理モデル図、物理モデル(ER)図
  • テーブル定義書(またはcreate table sql)
  • ドメイン設計
    • サブドメイン
    • 本番以外の環境も
  • API定義
    • 200の正常系
    • エラー系
      • 認証失敗 API GWでレスポンス返す
      • クライアントの入力不正 4xx系
      • サービス側異常 5xx系
    • 認証/認可
      • APIごとに認証の要不要
      • APIごとに認可の内容
  • 各リソースのスペック、パラメータ
    • RDS、lambda、etc
  • 文字コード/タイムゾーン
    • クライアント・アプリ・DB
    • 基本は、UTF-8, UTC

開発環境構築

  • ファイル管理
    • リポジトリ
      • 1つ?複数?
    • ファイル構成
  • エディタ
    • VS Code
    • 拡張リスト
  • フォーマット
    • lint
    • pretty 使う/使わない
    • できれば自動lint
      • VS Code 設定の共有
  • コードガイドライン
  • 命名規則
    • メソッド、変数、
    • ファイル名
    • リソース名
  • CI/CD環境構築
    • 環境(開発、検証、本番)毎の切り替え考慮
    • (理想は)ブランチ毎の開発環境構築
      • DBは難しいので、運用ルールでどうにかする
  • 開発フロー構築
    • タスク管理(PM作業でもある)
      • 進捗目安設定
        • 正常系完了:30%
        • 異常系完了:50%
        • テスト完了(レビュー依頼可):70%
    • git(hub)フロー 参考
    • issue テンプレート
    • PR テンプレート
    • レビューガイドライン
  • 開発環境構築
    • docker
    • フロント用、mock APIサーバ
    • サービス用、ローカル疑似サービス環境
    • マイグレーション
    • テスト環境
      • 単体
      • 結合

フレームワーク・ツール選定

  • 言語・version
  • デプロイツール
    • serverless framework / CDK
  • フロントエンド
    • CSSライブラリ
    • アプリケーションフレームワーク
      • nuxt js
      • amplify sdk
  • バックエンド
    • フレームワーク
    • ライブラリ
      • DB
      • ロガー
      • 便利ツール
      • 時間処理
      • etc
  • テスト
    • 単体テスト
      • Jest
    • E2Eテスト
      • cypress

サンプル実装コード

  • フロントからのリクエスト→DBアクセス→レスポンス
    • デプロイして動作確認し、ローカルと動作が合うか確認
    • ずれてるところは、どう扱うかの方針
  • 共通処理のライブラリ化
    • ロガー
    • O/R マッパ
      • DB接続
    • 認証/認可
    • 時刻処理
    • 共通返り値処理
      • 成功時
      • エラー時
      • 異常エラー時
      • 認証失敗時
    • 外部APIアクセス
      • 必要なパラメータだけ渡せばよい形

その他注意すること

  • 再処理
    • lambda失敗時に再実行されるが問題ないか?
      • 再実行されるタイミング・回数
      • それでも失敗に終わった場合どうするか
  • 二重登録
    • 何かしらの理由で、再度送信された場合の対応
  • 欠落
    • 何かしらの理由で、データ欠落する場合の対応
  • 到達保証
    • 有無の確認
  • 外部とのAPI仕様
    • 文字列 or 数値
    • 桁数、最大値、最小値、少数精度

Discussion