Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AmplifyGen2+Nxで構築 するNext.jsモノレポ構成
Search
mah77ss
August 01, 2024
400
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AmplifyGen2+Nxで構築 するNext.jsモノレポ構成
Release for Amplify Boost Up #06 from Japan
mah77ss
August 01, 2024
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
The Curious Case for Waylosing
cassininazir
1
560
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Done Done
chrislema
187
17k
Skip the Path - Find Your Career Trail
mkilby
1
250
Speed Design
sergeychernyshev
33
2.1k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
580
Claude Code のすすめ
schroneko
67
230k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
RailsConf 2023
tenderlove
30
1.6k
How STYLIGHT went responsive
nonsquared
100
6.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
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