Amplify + Cognito + Appsyncでの
MVPチーム開発

株式会社KOSKA 川野塁

自己紹介

株式会社KOSKA  川野塁

 

  • 新卒ソフトウェアエンジニア
  • 普段の業務ではメインはフロントエンド(Typescript/React)
  • 軽くバックエンドもお触り(Scala, Go)

業務での開発プロダクト

工場の生産管理 + 原価管理Saas

現場に設置したカメラ等のIoTセンサから取得したデータを基に、現場と原価の見える化

サービスのいい感じの写真貼る

開発の背景

  • メインで開発中のプロダクトとは別のサブプロジェクトだった=> MVPとしての開発
  • 初めはCPOが一人で開発を進めていた
  • ユーザが増え始めて、徐々に開発が本格化してきた 

⬇︎

最短での仮説検証のための開発
から

チームでの本格的開発へとシフト

AWS Amplify

  • CLIによるサーバーレスなバックエンドの構築
  • フロント&サーバー間の通信における、スキーマの自動生成
  • デプロイ・ホスティング

インフラ構成

認証系

Cognitoを使って実装

下の実装で、ログイン周りの実装が完了。

ログインのUIもCognitoが用意してくれている。

ログインUI

デプロイ

GitHUBのブランチとAmplify環境を紐づけることで、そのブランチに変更があった場合、自動でデプロイが行われる。

フロントエンドのデプロイ

バックエンドのデプロイ

Amplify CLIから行う。schemaファイルを変更してamplify push

フロントでの通信の型定義

amplify pushでgraphQLのスキーマを修正

⬇︎

その修正後のスキーマの型からフロント側のtypescriptの型定義ファイルを自動で書き換え

 

特にフロントとバックエンドの担当がくっきり分かれているような環境で起こりうる、共有漏れや認識の齟齬による手戻りが発生しづらい。精神的にも楽。

メリットだけじゃない

もちろん...

Amplifyの謎挙動

Amplifyはまだまだ開発段階のプロダクトだからなのか、予期せぬ挙動に何度も苦しんできた

  • function機能が使えない               => pythonでlambdaを立て、Amplifyのfunctionでデプロイしようとしたが、pythonの環境系のファイルでerrorが起き、amplify pushできなかった。              => 現在はserverless frameworkでデプロイしている
  • データソースのアタッチがうまくいかない時がある => 手動

複数人でバックエンドを同時に編集するのが難しい

  • 現在主に開発しているのは4~5人
  • appsyncの開発環境としてdevelop環境を用意しているが、複数人が同時にやっていると上書きのし合いになってしまう
    • 公式では機能ブランチを都度立てるか、開発者が各個人の環境をもつことを推奨している
    • 機能ブランチを立てるのはめちゃくちゃだるい。時間かかるし、dynamoのデータシードのコストとか、 lambdaのデプロイとか(functionsでやってるなら問題ない)
  • 現在は同時にいじることがあまり生じていない(とはいえ最近はたまに手待ちが出てきそう、といった感じではある)が、今後開発者ごとの環境は考慮したい

resolver問題

  • resolverはフロントからのparamを具体的にどう処理するかを定義する場所
  • 独自のvtlという言語を使って実装する                                         
  • ifとかforeachとか変数定義もできる

 単純なCRUD処理なら問題ないが、少し複雑なロジックが入り込むと実装が困難になる

⬇︎

lambdaでの実装
⬇️
lambda立てすぎることで凝集度がさがる。影響範囲がわかりづらくなっていく

resolver問題2 ~test~

  • テストを書きたいと思った時に結構めんどくさい
  • まずはVTL単体のテストを書くことにした

Text

  • 手順としては指定ファイルをcompileさせた上で、JSONでparseして、その結果をVTLの出力結果として、期待通りかテストする
  • 今後はdynamoまで含めたテストをやりたい(lambdaではdynamoローカル立ててやってる)

スタートアップには向いているのではないか

これはAWSの公式でも言われているが、認証周りやデプロイ等のプロダクトそのものの機能とは少し外れた部分の実装コストをかなり下げることが可能

⬇︎

仮説と検証を限られたリソースで、高速で回さなければいけないスタートアップにはかなり向いている

実際、機能開発を結構速い速度で進めることができたことで、プロダクトに機能が増えたり、ユーザーからの要望に答える機能回収を行うことができた

実は...

個人開発でもamplifyにはお世話になっている
 

perChaseというアプリを開発中。登録したインフルエンサが選んだファッションアイテムが、定期的に送られてくる

ファッションサブスクサービス。

 

市場があるかどうかの検証のために、雑に夏休み中にwebで作った。

Thanks For Listening!

deck

By rui_official