Slide 1

Slide 1 text

cdk initͰੜ੒͞ΕΔ͋ͷϑΝΠϧୡ͸Կͳͷ͔ ੡଄ϏδωεςΫϊϩδʔ෦ 2025/07/12 ࠤ౻ஐथ

Slide 2

Slide 2 text

2 ࣗݾ঺հ ● 2020೥ Ϋϥεϝιουೖࣾ AWS CDK ར༻։࢝ɹ ● 2021೥ AWS DevDayͰCDKӡ༻ϊ΢ϋ΢঺հ ● 2022೥ CDKࢧ෦্ཱͪ͛ ● 2023೥ AWS CDK Conference Japan ։࠵ ● 2024೥ AWS CDK Conference Japan ։࠵ ● 2025೥ ● AWS CDK Conference Japan ։࠵ ● CDKͷຊॻ͍ͯΈͨ ● ෦ॺ ○ ੡଄ϏδωεςΫϊϩδʔ෦ ● ໊લʢχοΫωʔϜʣ ○ ࠤ౻ஐथ ʢtmk2154/tomoki10ʣ

Slide 3

Slide 3 text

એ఻݉લϑϦɿAWS CDKͷຊॻ͍ͯΈͨ 3 ٕज़ॻయ18ͰCDKͷຊॻ͍ͯΈ·ͨ͠ʂ CDKࢧ෦ͷൃද͕٧·ͬͯ·͢ʂ͜Ε͔ΒCDK࢝ΊΔਓ΁ʂݟຊ΋͋ΔΑ @tmk2154 https://techbookfest.org/product/wEWtvT8aRZgzAcVSnE7wS8

Slide 4

Slide 4 text

͜Μͳձ࿩ͯ͠ͳ͍Ͱ͔͢ʁ 4 ઌഐ ΤϯδχΞ δϡχΞ ΤϯδχΞ ઌഐɺCDKͷνϡʔτϦΞϧΈͯcdk initͨ͠Β ͳΜ͔ΊͬͪΌϑΝΠϧ࡞੒͞ΕͨΜͰ͚͢Ͳ ͜ΕͳΜͳΜ͔͢ʁ ͏ΘɺԿ͚ͩͬ͜Ε…ௐ΂ͨ͜ͱ͋Δ͚Ͳ ๨ΕͪΌͬͨɻԿ͚ͩͬͳ͋… ͳΜ͔CDKΛྑ͍ײ͡ʹಈ͔ͨ͢Ίͷ΍ͭͩΑ

Slide 5

Slide 5 text

ࠓ೔ͷ࿩ 5 CDKͷຊͷதͰ͋͑ͯॻ͔ͳ͔ͬͨ࿩ ܅ͨͪ͸Կऀͳͷʁ → ͜ͷࢿྉΛݟΕ͹ࢥ͍ग़ͤΔʢॳ/தڃऀʣ → ҙ֎ͱ࢓༷૿͑ͯΔʂʢ্ڃऀʣ IaCͷ࣮૷Λॻ͘ͱ͜ΖͶ

Slide 6

Slide 6 text

໨࣍ • ͦΕͧΕͷϑΝΠϧ/σΟϨΫτϦͷ঺հ • cdk.json • package.json • package-lock.json / node_modules • jest.config.js • tsconfig.json • .gitignore/.npmignore 6

Slide 7

Slide 7 text

cdk.jsonͱ͸ CDKͷίϚϯυ࣮ߦ࣌ͷΤϯτϦʔϙΠϯτ΍watchɺcontextͳͲίϚϯ ࣮ߦ࣌ͷύϥϝʔλͳͲΛ؅ཧ͢ΔͨΊͷϑΝΠϧ σϑΥϧτͰ͸ҎԼͷϓϩύςΟΛ΋ͭ 7

Slide 8

Slide 8 text

cdk.jsonͷappϓϩύςΟ cdk synth΍cdk deployίϚϯυ࣮ߦ࣌ʹͲͷϑΝΠϧΛಡΈࠐΉͷ͔Λܾఆ͢Δ ΤϯτϦʔϙΠϯτΛࢦఆ͢ΔϓϩύςΟ • npx … ϩʔΧϧʹΠϯετʔϧ͞ΕͨύοέʔδΛ࢖༻ ҎԼ͸ࣄલτϥϯεύΠϧΛෆཁʹ͠ɺख࡞ۀʹΑΔ࣌ؒతϩεΛ๷͙ͨΊઃఆ※ • ts-node … TypeScriptͷϑΝΠϧΛίϯύΠϧͤͣʹ௚઀࣮ߦ • --prefer-ts-exts … ϞδϡʔϧͷΠϯϙʔτ࣌ʹɺJSΑΓTSϑΝΠϧΛ༏ઌ 8 ※https://github.com/aws/aws-cdk/pull/11470

Slide 9

Slide 9 text

cdk.jsonͷwatchϓϩύςΟ cdkίϚϯυͷwatchΦϓγϣϯΛ࢖͏࣌ͷύϥϝʔλઃ ఆ͕Մೳ include … มߋݕ஌͢ΔϑΝΠϧ exclude … มߋݕ஌͔Βআ֎͢ΔϑΝΠϧ Watchͱಉ͡֊૚ͰbuildϓϩύςΟʹ೚ҙͷίϚϯυΛ ઃఆ͢Δͱࣗಈ࣮ߦ͞ΕΔʢJavaͷϏϧυͳͲʣ 9 ࢀߟ৘ใɿhttps://aws.amazon.com/jp/blogs/news/increasing-development-speed-with-cdk-watch-jp/

Slide 10

Slide 10 text

cdk.jsonͷcontextϓϩύςΟ جຊ͸CDKΞϓϦʹ౉͢஋Λ؅ཧ͢ΔͨΊͷϓϩύςΟ σϑΥϧτͰ͸ػೳϑϥά͕૊Έࠐ·Ε͍ͯΔɻύϥϝʔλมߋ΍ޡࣈमਖ਼ͳͲͰ CDKࣗମͷ࣮૷͕มߋ͞ΕΔ͕ɺҎલͷόʔδϣϯͱͷޓ׵ੑΛอͭͨΊʹؚ·ΕΔ 10 ৄ͘͠͸ɿhttps://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md

Slide 11

Slide 11 text

cdk.jsonͷଞͷϓϩύςΟ • build … Synthલʹ࣮ߦ͢ΔίϚϯυΛࢦఆʢྫɿLambdaʹೖΕΔJavaͷϏϧυʣ • toolkitStackName … BootstrapͰ࡞੒͞ΕΔStack໊ͷมߋ • toolkitBucket … BootstrapͰ࡞੒͞ΕΔόέοτͷઃఆʢbucketNameɺkmsKeyIdʣ • versionReporting … CfnςϯϓϨʔτ΁ͷCDK࣮ߦόʔδϣϯͳͲͷهࡌͷON/OFF • pathMetadata … CfnςϯϓϨʔτͷMetadataͷaws:cdk:pathͷهࡌͷON/OFF • assetMetadata … CfnςϯϓϨʔτͷMetadataͷaws:asset:*ͷهࡌͷON/OFF • notices … ίϚϯυ࣮ߦ࣌ͷ੬ऑੑɺϦάϨογϣϯͳͲͷ௨஌ͷON/OFF • output … CfnςϯϓϨʔτͳͲͷग़ྗઌͷઃఆ ͳͲͳͲ 11 ࢀߟɿhttps://github.com/aws/aws-cdk-cli/tree/main/packages/aws-cdk#json-configuration-files ɹɹɹhttps://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/cli/cli-config.ts

Slide 12

Slide 12 text

package.json Node.js ϓϩδΣΫτͷઃఆϑΝΠϧ • name … ϓϩδΣΫτ໊ʢ഑෍͢Δ৔߹࢖༻ʣ • version … ϓϩδΣΫτͷόʔδϣϯʢ഑෍͢Δ৔߹࢖༻ʣ • bin … ΞϓϦΛCLI͔Β࣮ߦ͢Δ৔߹࢖༻ʢجຊ͸ෆཁʣ • scripts … npm run **Ͱ࣮ߦͰ͖ΔεΫϦϓτͳͲΛઃఆ • devDependency … ։ൃ͚ͩʹඞཁͳύοέʔδΛઃఆ • dependency … ࣮ߦʹඞཁͳύοέʔδΛઃఆ 12 ࢀߟɿhttps://docs.npmjs.com/cli/v11/configuring-npm/package-json#bin ɹɹɹhttps://dev.classmethod.jp/articles/remove-redundant-for-cdk-init/ …

Slide 13

Slide 13 text

package-lock.json/node_modules package-lock.jsonͱ͸ package.jsonͰΠϯετʔϧ͢Δύοέʔδͱґଘ͢Δύο έʔδͷπϦʔߏ଄Λهड़͠ɺਖ਼֬ͳόʔδϣϯ৘ใΛอଘ͠ ෳ਺Ϣʔβ΍؀ڥͰಉ͡ґଘؔ܎Λอূ͢Δ node_modulesͱ͸ package.jsonͰهࡌ͞ΕͨύοέʔδͳͲ͕Πϯετʔϧ͞ ΕΔσΟϨΫτϦ 13 ࢀߟɿhttps://docs.npmjs.com/cli/v11/configuring-npm/package-lock-json ɹɹɹhttps://docs.npmjs.com/cli/v11/configuring-npm/folders … package-lock.json

Slide 14

Slide 14 text

jest.config.js CDK͕σϑΥϧτͰ࢖༻͢ΔςετϑϨʔϜϫʔΫͰ͋Δ JestͷઃఆΛ؅ཧ͢ΔͨΊͷϑΝΠϧ • module.exports … CommonJSܗࣜͷϞδϡʔϧΤΫεϙʔτߏจ • testEnvironment … ςετ࣮ߦ؀ڥͷࢦఆɻNode.jsΛ࢖༻ • roots …ςετର৅ͱ͢ΔϑΝΠϧΛݕࡧ͢ΔσΟϨΫτϦΛࢦఆ • testMatch … ࣮ߦ͢ΔςετϑΝΠϧͷύλʔϯ໊Λࢦఆ • transform … ςετϑΝΠϧͷલॲཧΛࢦఆ ɹɹɹɹɹɹɹ .ts/.tsxϑΝΠϧΛts-jestͰτϥϯεύΠϧޙʹ࣮ߦ 14 ࢀߟɿhttps://archive.jestjs.io/docs/ja/22.x/configuration ESModule΁ͷม׵ɿhttps://blog.serverworks.co.jp/2025/04/01/125304 …

Slide 15

Slide 15 text

tsconfig.json TypeScriptίϯύΠϥͷઃఆ ts-node/ts-jestͳͲͷπʔϧ΋͜ͷઃఆΛࢀর 15 ࢀߟɿhttps://www.typescriptlang.org/tsconfig/ ɹɹɹhttps://zenn.dev/uhyo/articles/blueberry-book-catchup … • compilerOptions … ίϯύΠϧઃఆͷࢦఆ • target … ͲͷόʔδϣϯͷJavaScript޲͚ʹ͢Δ͔τϥϯεύΠϧ͢Δ͔ࢦఆ ྫɿES2022 ͩͱɺ ECMAScript 2022 ͷߏจͰग़ྗ • module … ϞδϡʔϧγεςϜͷࢦఆ ɹɹɹɹɹɹྫɿNodeNext ͩͱɺESModule αϙʔτʹ४ڌͨ͠ϞδϡʔϧγεςϜΛ࢖༻ • moduleResolution … import ͷղܾํ๏ͷࢦఆɻNode.js ४ڌͷํࣜͳͲ • lib … Ͳͷඪ४ϥΠϒϥϦʢྫɿDOM, ES2022 ͳͲʣͷܕఆٛΛར༻Մೳʹ͢Δ͔Λࢦఆ • declaration … *.d.tsܕఆٛϑΝΠϧΛੜ੒ • strict … ݫ֨ͳܕνΣοΫΦϓγϣϯΛ༗ޮԽ ͳͲͳͲ

Slide 16

Slide 16 text

.gitignore/.npmignore .gitignoreͱ͸ Gitʹίϛοτ͠ͳ͍ϑΝΠϧΛઃఆ 16 … .npmignoreͱ͸ npm publish͢Δ࣌ʹؚΊͳ͍ϑΝΠϧΛઃఆ ʢجຊϓϩδΣΫτ಺Ͱͷ։ൃʹ͸ෆཁʣ

Slide 17

Slide 17 text

͜Ε͔Β͸͜Ε 17 ઌഐ ΤϯδχΞ δϡχΞ ΤϯδχΞ ઌഐɺCDKͷνϡʔτϦΞϧΈͯcdk initͨ͠Β ͳΜ͔ΊͬͪΌϑΝΠϧ࡞੒͞ΕͨΜͰ͚͢Ͳ ͜ΕͳΜͳΜ͔͢ʁ ͳΜ͔ͦΜͳࢿྉ͋ͬͨͳ ͜ͷࢿྉݟͳ͕Β֬ೝͯ͠ΈΑ͏͔ʂ

Slide 18

Slide 18 text

ࢀߟ ݁ߏ͍Βͳ͍ϑΝΠϧ΍هड़͋ΔͷͰɺ͜ͷࢿྉ΋Ұॹʹݟͯফͦ͏ʂ 18 … https://dev.classmethod.jp/articles/remove-redundant-for-cdk-init/