
AWS Amplify で monorepo を導入し 単一リポジトリで複数プロジェクトをデプロイ
2022-02-255 min read
目次
概要
amplifyのプロジェクトでmonorepo化を実現しました。
(単一リポジトリで複数のフロントエンドを構築する)
環境
この作業は以下の環境で実施しています。
- macOS 12.1
- node v17.5.0
- typescript 4.3.5
- amplify-cli 7.6.21
monorepoとは
複数のプロジェクトを1つのリポジトリで管理する開発方式です。
最近目にする回数が多くなったので新しい概念と思いきや、 20年以上前からある考えであり、"shared codebase" と呼ばれています。
In version control systems, a monorepo is a software development strategy where code for many projects is stored in the same repository.
Google Facebook でもこの方式を採用しています。
なぜmonorepoにしたのか?
なぜmonorepo化にしたのか、、、それは
- 複数のフロントエンドとバックエンドをtypescriptで構築しinterfaceを共有する
- 1つのリポジトリに統一しプロジェクト全体の見通しを良くする
- 複数の環境へのステージングを1つのパイプラインに乗せたい
といった理由があったからです。
Amplify プロジェクト初期化
流れ
- リポジトリに2つのプロジェクトの構成を構築する
- Amplify上でフロントエンドアプリケーションを1つ作成しリポジトリを連携
- Amplify上でフロントエンドアプリケーションの2つめを作成しリポジトリを連携
リポジトリの作成
リポジトリの構成を次の様に構築します。
※ フロントエンドにNextJSを利用しました。
https://docs.amplify.aws/guides/hosting/nextjs/q/platform/js/
.
├── README.md
├── amplify
├── amplify.yml
├── frontApp1
│ ├── README.md
│ ├── next-env.d.ts
│ ├── next.config.js
│ ├── node_modules
│ ├── package-lock.json
│ ├── package.json
│ ├── pages
│ ├── public
│ ├── styles
│ └── tsconfig.json
└── frontApp2
├── README.md
├── next-env.d.ts
├── next.config.js
├── node_modules
├── package-lock.json
├── package.json
├── pages
├── public
├── styles
└── tsconfig.json
またamplify.yml
を次の様に記載します。
version: 1
applications:
- appRoot: frontApp1
frontend:
phases:
preBuild:
commands:
- npm install
build:
commands:
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
- appRoot: frontApp2
frontend:
phases:
preBuild:
commands:
- npm install
build:
commands:
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
リポジトリの連携〜monorepoの選択
リポジトリを連携する画面のcheckboxでmonorepoを選択できます。
これによりビルド時の環境変数として以下の変数が追加されます。
AMPLIFY_MONOREPO_APP_ROOT=frontApp1 # もしくはfrontApp2
AMPLIFY_DIFF_DEPLOY=false
それ以外の項目は通常プロジェクトと同じ様に構築していきます。
完了
2つのプロジェクトの作成が完了するとマネジメントコンソール上ではこのように表示されます。
参考にしたサイト
Recommends
New Posts
Hot posts!
Date
Tags
Author