【初学者】React + AWS AmplifyでWebアプリを作成し公開する
動機
最近「知っているJavascriptのフレームワーク」を聞かれ、「JQuery」と答えたら笑われた。
私は人知れず傷ついた。
さっそくQiitaでJavascriptのフレームワークを探した。
「React」がよさそうだなと思い以下の記事を見つけた。
これですぐにWebアプリが作れるはずだ。
↓
実際に作ってみたところ、最新のフレームワークで動作するアプリを作るにはそれなりに苦労したため、ソースコードを公開し記事にしてみようと思った。
成果物
AWSが公開しているオープンデータをキーワードで検索できるサービスを作成し、実際に公開できました。
スマホ・PCに対応した、シングルページアプリケーション(SPA)となっています。
ソースコードはGithub(MIT License)で公開していますので、ご自由にお使いください。
ソフトウェア構成
- React 18.2.0 : 画面アプリ本体
- Material UI 5.8.7 : マテリアルUI
- react-markdown 6.3.0 : Markdown形式で記述されたデータの描画
- AWS Amplify 4.3.26 : ビルドとデプロイ、GraphQL(AppSync)、データストア(DynamoDB)
後から再構築しようとした際にエラーが少なくなるよう、できる限り最新のバージョンで、多くの追加パッケージを使わないようにした。
(Reduxなどの状態管理のフレームワークは最小構成では不要に感じたため削除した。)
環境構築
以下の手順で進めた。
- React Projectの作成
- Amplify Projectの作成(AWS上での作業)
- React ProjectにAmplifyの設定を紐づけ
- ローカルでビルド通るまで実装
- Git登録、GitをAmplifyに紐づけ(自動ビルド、デプロイ)
- 実装
1. React projectの作成
公式の方法でProjectを作成する。
npx create-react-app XXXXXX (project name)
2. Amplify Projectの作成
AWS Console上で
「新しいアプリケーションを作成」 → 「バックエンドを作成」を実行し、
Amplify Projectを作成する。
3. React ProjectにAmplifyの設定を紐づけ
ローカル環境にamplifyの実行環境が無い場合、まずは実行環境を構築する。
npm install -g @aws-amplify/cli
amplify configure
Amplify ProjectをAWSコンソール上で作成すると、コンソール上に「ローカル設定手順」が出現するので、React Project配下で実行する。
amplify pull --appId XXXXXXXXXXXXX --envName staging
4. ローカルでビルド通るまで実装
ローカル環境でビルド通る程度まで頑張る。
参考にさせていただいた上述のPJがご本人も言及している通りバージョンが古くなっており、
「React本体」や「Material UI」について、最新バージョンでビルドしようとすると通らない。
まずは本家のHPを確認し、基本的な文法を調べたほうが結果的に早回りになると思う。
npm start
5. Git登録、Amplifyでホスティング(自動ビルド、デプロイ)
ビルドが通るようになったら、Git登録する。
Amplifyの設定が.gitignoreに登録されていないので注意
#.gitignore
.graphqlconfig.yml
amplify/team-provider-info.json
git clone XXX (Gitリポジトリ)
git add *
git commit -m "first commit"
git push origin master
Git登録したら、AWSコンソール上でAmplifyの「リポジトリブランチの追加」からGitを連携しホスティングする。
ドメインはデフォルトでAWSが用意している環境上にホスティングされる。
自分のドメインを設定することも可能。後から変更可能。
6. 実装
頑張って実装する。
最終的に以下の構成とした。
findawsopendata
├─amplify : Amplify自動生成
├─node_modules : node_modules
├─public : index.htmlと画像データ
├─scripts : バックエンドデータ作成用Script
└─src : ソースコード
├─components : オープンデータの描画コンポーネント
├─containers : Main画面やInfo画面
├─graphql : GraphQL関連
└─models : GraphQLのSchema定義
GraphQLの実行は単純で、検索メニュー(MUIのAutoComplete)のonChangeイベント発生時の実行関数としてAPI.graphqlを実行し、取得した結果をステートに保存、表示している。(Reduxなどのフレームワークは使っていない)
今回のアプリではGraphQLを用いてDBからデータを取得する構成としたため、Schemaの設計を行った。
Schema設計はクライアント側で行ってamplify pushでバックエンドに反映することも可能だが、
私の場合はAmplify上で設計、AppSync上でクエリのテストを行ったSchemaをローカル側で amplify pullすることで同期することにした。
GUI上で完結するし、このやり方だと特にDBの知識が必要ということもないため、大変便利に感じた。
Amplify Studio上でのschema定義作成画面
App Sync上でのクエリの実行画面
終わりに
参考にした記事を書いていただいた@y_kawaseさん、ありがとうございました。何となく一歩を踏み出せたような気がしています。
また違うアプリを作って公開したいなという気持ちになりました。
Discussion