Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AmplifyGen2+Nxで構築 するNext.jsモノレポ構成
Search
mah77ss
August 01, 2024
1
250
AmplifyGen2+Nxで構築 するNext.jsモノレポ構成
Release for Amplify Boost Up #06 from Japan
mah77ss
August 01, 2024
Tweet
Share
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
The Cost Of JavaScript in 2023
addyosmani
51
8.6k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Building Applications with DynamoDB
mza
95
6.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
For a Future-Friendly Web
brad_frost
179
9.8k
Rails Girls Zürich Keynote
gr2m
95
14k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
840
YesSQL, Process and Tooling at Scale
rocio
173
14k
Transcript
"NQMJGZ(FO /YͰߏங ͢Δ/FYUKTϞϊϨϙߏ 1 3
ࣗݾհ Mamoru ICHISE(ま〜) デザインカロン合同会社 所属 2 8FC੍࡞ ϩΰ ໊ɾγϣοϓΧʔυ γεςϜ։ൃ
ಋೖɾҠߦࢧԉ ࢧԉ %9 @mah77ss Qiita https://qiita.com/mah77ss ࠷ۙ৽αʔϏεͷ։ൃϫʔΫϑϩʔจॻཧҊ݅ʹैࣄ ͳͳͪΌΜ
ϙϦϨϙ • γεςϜαʔϏεɺίʔυ͝ͱʹϦϙδτϦΛ͚Δ࣮ 3 "ΞϓϦ ϑϩϯτ ϑϩϯτ ϑϩϯτ υΩϡϝϯτ ʜ
όοΫΤϯυ πʔϧ ʜ #γεςϜ $αΠτ όοΫΤϯυ αϒγεςϜ ࡞ۀ͝ͱʹϦϙδτϦΛΓସ͑Δख͕ؒൃੜɻϦϙδτϦͷཧࡶʹɾɾɾɻ 共通化できるコード の分散 リポジトリごとにパッ ケージバージョンを 管理 全体の作業状況が 分からない Made by ⼿書きバォント
ϑϩϯτ ϞϊϨϙ • ؆୯ʹݴ͑ɺϦϙδτϦͻͱͭͰશͯͷίʔυΛཧ 4 "ΞϓϦ ϑϩϯτ ϑϩϯτ υΩϡϝϯτ ʜ
όοΫΤϯυ πʔϧ ʜ #γεςϜ $αΠτ όοΫΤϯυ αϒγεςϜ ϦϙδτϦͷΓସ͕͑ෆཁʹͳΓɺ౷Ұతʹར༻Մೳɻ(PPHMFେखاۀ࠾༻͢ΔΈɻ 各プロジェクト、サー ビスはディレクトリ階 層で分ける。 全体に渡る修正も1 つのコミットで可能。 リポジトリのサイズ は大きくなる。 プロジェクト間の依 存関係の管理が必 要に。
͖͔͚ͬ 5 • (FOͷυΩϡϝϯτʹϞϊϨϙͷ ηοτΞοϓํ๏ͷهࡌ͕͋ͬͨɻ • (FOʹ͕͋ͬͨɺؾʹ͍ͯ͠ͳ ͔ͬͨɻ • (FO
/Y ZBSOXPSLTQBDFTͳ ͲͷϞϊϨϙπʔϧʹରԠ͍ͯ͠ΔΒ ͍͠ɻ • ZBSO͍ͬͯͳ͍͠ɺOQN XPSLTQBDF໌֬ʹυΩϡϝϯτʹ هࡌ͞Ε͍ͯͳ͔ͬͨɻ • ʮ/YʯͱΒΛͬͯΈΑ͏ʂ ͪΐ͏Ͳ৽نαʔϏεͷاը͕͋Γ ࢼͯ͠ΈΑ͏ʂ
/Y • オープンソースのビルドシステム • プロジェクトの依存関係を管理 • リポジトリが巨⼤化しても⾼速なCI • キャッシュによる開発時間削減 •
⼤規模なE2Eテストに対応 • Nxプラグインによる拡張が可能 WebフレームワークもテストライブラリもNxでインストール • NxCloudと連携することで、分散キャッシュ や分散タスク実⾏が可能 6 https://nx.dev/ େن$*͚ͷػೳʹେֻ͔ΓͳΈΛ͍࣋ͬͯͦ͏ɻ ࠓճεϞʔϧελʔτͰɺ؆୯ͳ8FCαΠτ /FYUKT ͷ࡞Ͱ·ͣͬͯΈΔɻ
ࠓճ࡞Δ8FCαΠτͷߏ 7 ϑϩϯτ 8FCαΠτ όοΫΤϯυ Next.js + TypeScript TypeScript リポジトリ
• ࠓճͷతʮϑϩϯτͱόοΫΤϯυΛ͚ͭͭɺͭͷϦϙδτϦͰίʔυΛཧ͢Δʯ AWS Cloud Nxワークスペース Amplify Managed Backend Hosting ϦϙδτϦͷʮϑϩϯτʯʮόοΫΤϯυʯͦΕͧΕͷϒϥϯνϓϧϦΫ֤ͯ͠σϓϩΠ࣮ߦ ϑϩϯτϒϥϯν όοΫΤϯυ ϒϥϯν $MPVE'SPOU 4 "QQ4ZOD %ZOBNP $PHOJUP -BNCEB 4
։ൃ࣌ͷϩʔΧϧߏ 8 $VSTPS .BD#PPL"JS "SN 8JOEPXT -BQUPQ (JU)VC 44) 84--JOVY
6CVOUV %FW$POUBJOFS /PEFKT CVMMTFZFTMJN%FCJBO 1VMM 1VTI "84440 OQY BNQY TBOECPY 1VMM 1VTI ϞϊϨϙͱݴ͍ͭͭɺ%PDLFSͷڥߏͱΞϓϦͷߏΛผϦϙδτϦͰཧ ཧ্ɺϦϙδτϦΛೖΕࢠʹ͍ͯ͠Δ ࠷ॳಉҰϦϙδτϦʹ͍͕ͯͨ͠ɺ"NQMJGZΞϓϦ࡞࣌ʹϦϙδτϦϧʔτͷ༰Ͱ ϓϩδΣΫτछྨ͕ఆ͞ΕͨͨΊɺผϦϙδτϦͱͨ͠ɻ ϧʔτʹ/Y͕ಋೖ͞Ε͍ͯͳ͍ͱɺ/YཧͷϦϙδτϦͩͱ"NQMJGZ͕ผͯ͘͠Εͳ͍ Ω ・Node 18以上ではsandboxが起動しな い問題があった。今はどうだろう? ・CursorでSSH経由のDevContainerへ 接続できない問題は修正された。 ・Arm版Macだとaws configureコマンド が失敗。対策はあるみたいだけれど、手っ取り 早くSSHで回避 ・ DevContainerが使えることで、手元の 環境のように操作できる。
/Y࡞ʙσϓϩΠμΠδΣετ • 下記Qiita投稿記事を編集してダイジェストでお送りします。 9 今年の5⽉にチャレンジした内容を記載しているので、最新の仕様とは、異なる場合があります。 https://qiita.com/mah77ss/items/816de5cc084c6f739fe7
/YϫʔΫεϖʔε࡞ • 最初に、リポジトリルートにNxワークスペースを作成する。 • --preset=ts はTypeScriptのプリセット指定。--preset=next を指定すると、Next.js プロジェクト のプリセットが作成されるが、バックエンドのデプロイにも「required-server-files.json」が必須 となりデプロイできないので回避
• リモートキャッシュの使⽤を聞かれるが、使⽤しないとしている。(NxCloudに接続される?) • サブディレクトリにプロジェクトが作成されるので、作成後、リポジトリルートへ移動している。 10 ϫʔΫεϖʔε࡞ # リポジトリルートでコマンド実⾏ $ npx create-nx-workspace@latest --preset=ts (略)
/YόοΫΤϯυ࡞ • libディレクトリへ Nx 共有ライブラリ test-shared-backend を作成する。 • 作成したライブラリへ amplify
をインストールする。 • モノレポは package.json が全体でただ⼀つのため、ライブラリ内の package.json をリポジトリ ルートの package.json へとマージして、削除する。 (test-shared-backend/amplify 配下の package.json も削除) 11 όοΫΤϯυ ϥΠϒϥϦ ͷ࡞ # リポジトリルートでコマンド実⾏ $ nx g @nx/js:library test-shared-backend --directory=lib (略) $ cd lib/test-shared-backend/ $ npm create amplify@latest (略)
/Yϑϩϯτ࡞ ɾࣄલʹ OY ΛάϩʔόϧΠϯετʔϧ͢Δɻ OQN J HOY!MBUFTU ɾBQQTσΟϨΫτϦ /FYUKT ΞϓϦ
UFTUOY Λ࡞͢Δɻ ɾQSPKFDUKTPO /FYUKT Ϗϧυ༻ͷλʔήοτΛՃޙɺ OY TFSWFUFTUOY ͰϩʔΧϧ࣮ߦɻ Ϗϧυ OY CVJMEUFTUOY ίϚϯυ 12 /FYUKTϑϩϯτΞϓϦͷ࡞ # リポジトリルートでコマンド実⾏ $ npm i -D @nx/next # install plugin for Nx/Next.js # Nx 15までは @nrwl/next を使⽤ $ nx g @nx/next:app test-nx --directory=apps (略)
/YϦϙδτϦͷσΟϨΫτϦߏ サブディレク トリ3 サブディレク トリ2 サブディレク トリ リポジトリ ルート /
apps test-nx lib test-shared- backend amplify 13 package.json node_modules
όοΫΤϯυͷσϓϩΠ 14 MJCUFTUTIBSFECBDLFOEΛϞϊϨϙϧʔτσΟϨΫτϦͱͯ͠ࢦఆͯ͠ɺਐΊΔɻ
όοΫΤϯυͷσϓϩΠ 15 • ⾃動検出されたフレームワーク はAmplify Gen2 • フロントエンドビルドコマンド は「mkdir ./dist
&& touch ./dist/index.html」、出⼒ ディレクトリをビルドは 「dist」を指定 ਐΊͯσϓϩΠɻΤϥʔ͕ग़ͨΒ BNQMJGZZNM Λमਖ਼͢Δɻ
ϑϩϯτͷσϓϩΠ 16 BQQTUFTUOY ΛϞϊϨϙϧʔτσΟϨΫτϦͱͯ͠ࢦఆͯ͠ɺਐΊΔɻ
ϑϩϯτͷσϓϩΠ 17 • ⾃動検出されたフレームワーク はNext.js、Amplify Gen2 • フロントエンドビルドコマンド は「npx nx
build test-nx」、出 ⼒ディレクトリをビルドは 「.next」を指定 ਐΊͯσϓϩΠɻΤϥʔ͕ग़ͨΒ BNQMJGZZNM Λमਖ਼͢Δɻ
σϓϩΠޭ • ⾊々やって・・・ 18
σϓϩΠϒϥϯνͷઃఆ 19 main front- main shared- main front- develop shared-
develop front- feature shared- feature ϑϩϯτͷ σϓϩΠ όοΫΤϯυͷ σϓϩΠ 連携 連携 ΞϓϦϥΠϒϥϦΛ૿ͨ͠Βɺ࿈ܞ༻ϒϥϯν͕ͲΜͲΜ૿͑Δʁཧͷܗ͕͔Βͳ͍ɻ main όοΫΤϯυͱ ϑϩϯτͷಉ࣌σϓϩΠ 連携 develop feature Ұൠతʹಉ࣌σϓϩΠ ͚͋͑ͯͯΈΔ ϞϊϨϙͷར͕ݮΔ͕σϓϩΠΛݶఆతʹ͢Δ
σϓϩΠΤϥʔͳͲ݁ߏग़ΔɻτϥϒϧγϡʔςΟϯά͕େมɻ ೝՄϦιʔε ϢʔβʔϓʔϧͳͲ ͷআͷํ͕͔Βͳ͍ɻ(FOͳΒ BNQMJGZSFNPWF BVUIͰ؆୯ʹআͰ͖ͨɻ ݁ہɺ$MPVE'PSNBUJPO͔Β֘ελοΫΛআ
(FO͔Β "VUIͷVTFSOBNF͕͑ͳ͍ɻ "NQMJGZ(FOͷυΩϡϝϯτʹهࡌ͋Γɻ QSFGFSSFEVTFSOBNFଐੑΛ͏ Ճͨ͠ -BNCEBͷݖݶΤϥʔ͕ $034ະઃఆΤϥʔͱͯ͠ฦ٫͞ΕΔɻݖݶΤϥʔͷ༰Λ औಘ͢Δʹɺ"1*(BUFXBZͷʮήʔτΣΠϨεϙϯεʯ$034ͷઃఆΛผ్ߦ͏ɻ Ճͨ͠ -BNCEBͷ࣮ߦʹɺผ్ʮFYFDVUFBQJ*OWPLFʯΛʮBNQMJGZBNQMJGZCBDLFOEOP BNQMJGZ"VUI"1154(SPVQ3PMFʙʯϩʔϧՃ͢Δඞཁ͕͋ͬͨɻ ٧·ͬͨͱ͜Ζ 20
"NQMJGZ6* ͷ 4UPSBHF.BOBHFS ίϯϙʔωϯτΛ͏ʹɺ"VUIFOUJDBUPSͰϥοϓ͢Δ͔ɺ XJUI"VUIFOUJDBUPSΛݺͼग़͢ඞཁ͕͋Γɺ "VUIFOUJDBUPS1SPWJEFSͰϥοϓ͢Δ͚ͩͰμϝ ͩͬͨɻ (FOͷࠒʹ͕͋ͬͨɺ4UPSBHFͷόέοτΞΫηε͢ΔࡍɺೝূࡁϢʔβʔͰΞΫηεͰ͖
͍ͯͨͷ͕ɺ$PHOJUPάϧʔϓʹॴଐ్ͨ͠ΞΫηε͕Ͱ͖ͳ͘ͳͬͨɻೝূࡁҎ֎ʹɺ $PHOJUPάϧʔϓʹର͢ΔΞΫηεڐՄΛผ్Ճ͢Δඞཁ͕͋Δɻ ٧·ͬͨͱ͜Ζ 21
"NQMJGZ6* ͷ 3FBDU7JFXίϯϙʔωϯτ EJWλάͷΘΓʹؾܰʹ͑ͦ͏ͳงғؾͩͱࢥͬͨͷ͕ɺ෦Ͱ SFBDUIPPLGPSNΛ ͍ͬͯΔΒ͘͠ʁ αʔόʔίϯϙʔωϯτͰѻ͑ͳ͔ͬͨɻ ͜Ε
/FYUKT ͷ "QQ3PVUFS ͷʹͳΔͷ͚ͩΕͲɺ$MJFOU$PNQPOFOU ͱ 4FSWFS$PNQPOFOFOU 34$ ͷछྨͷ 3FBDUίϯϙʔωϯτͱɺ/FYUKT ͷ 443ͷΈͱͷ͕ؔ ͍͜͠ɻ 4FSWFS$PNQPOFOU ͱ 443ͷΈશ͘ผͰɺ$MJFOU$PNQPOFOU Ͱ 443͞ΕΔ͜ͱ͕͋Δ Έͷཧղʹ͕͔͔࣌ؒͬͨɻ 34$ͷಋೖͰɺ3FBDUίϯϙʔωϯτͷཧ͕গ͠ෳࡶʹͳͬͨɻ ͜ΕΫϥΠΞϯτɺ͜Εαʔ όʔίϯϙʔωϯτͱ͚ͯཧɻڥք͕ᐆດͰɺཧͷσΟϨΫτϦߏ͕͔Βͳ͍ɻ NDσΟϨΫτϦ$MJFOU$PNQPOFOU 443͞ΕಘΔ͔Β.JYFE$PNQPOFOUɾɾ TBσΟϨΫτϦ4FSWFS"DUJPO TDσΟϨΫτϦ"QQ3PVUFSͰσϑΥϧτͰ34$͔ͩΒ࡞Βͳ͍ (FOͷαϯυϘοΫεͱͯศརɻ ཁͱͯ͠ɺαϯυϘοΫεͷ"84Ϧιʔεʹ؆୯ʹΞΫηε͍ͨ͠ɻαϯυϘοΫεͷ6TFS1PPM 4ɺ -BNCEBͳͲɺϫϯΫϦοΫͰҠಈ͍ͨ͠ɻ ٧·ͬͨͱ͜Ζ 22 ര։ൃʹ҆ఆͨ͠ʮܕʯ࡞Γ͕ඞཁɻ͔ΒͷϑϦʔελΠϧͩͱɺΤϥʔͩΒ͚ɺෳࡶʹɻ
ࠓͷͱ͜ΖԼهͷߏΛࢼߦத /FYUKTΞϓϦͷߏ 23 /FYUKT 443 3FBDU34$3$$ "NQMJGZ(FO ݴޠ
5ZQF4DSJQU +BWB4DSJQU ϞϊϨϙཧ /Y 6*ϥΠϒϥϦ "NQMJGZ6* .BUFSJBM6*ͬͨ͜ͱ͕͋ΓɺڵຯຊҐͰ ͬͯΈ͍ͨ $44ϑϨʔϜϫʔΫ 5BJMXJOE$44 ঢ়ଶཧ +PUBJ 483ྑ͍ʁ 8FCϑϨʔϜϫʔΫ -BNCEB"1*ͷϧʔςΟϯά༻ )POP ίϯϙʔωϯτͷྨཧ #$% $ %FTJHO "UPNJD%FTJHO
ʲ༨ஊʳਫय़ۦಈ։ൃ 24 https://suisyun.jp/kusatsu/ganbanyoku/ (滋賀県草津市) ご飯 開発 ⾵呂 (⽔⾵呂) 岩盤浴 開発
サウナ ⾵呂 各⼯程は ⾃由にイテレーション可能 ・リモート勤務が可能な恩恵 ・AWS環境には別端末を経由してリモート接続 ・社⽤のWiFiルータを使う セキュア? ͭ͘Ζ͗ͱࣄͷཱ྆Խ
25 IUUQTEFTJHOLBMPODPKQ