$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AmplifyGen2+Nxで構築 するNext.jsモノレポ構成
Search
mah77ss
August 01, 2024
1
340
AmplifyGen2+Nxで構築 するNext.jsモノレポ構成
Release for Amplify Boost Up #06 from Japan
mah77ss
August 01, 2024
Tweet
Share
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Thoughts on Productivity
jonyablonski
73
5k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
510
Automating Front-end Workflow
addyosmani
1371
200k
The SEO Collaboration Effect
kristinabergwall1
0
310
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
GraphQLとの向き合い方2022年版
quramy
50
14k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
For a Future-Friendly Web
brad_frost
180
10k
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