Slide 1

Slide 1 text

/P*OTUBMM$.4ઓུ ʙ೥ઌΛݟਾ͑ͨϑϩϯτΤϯυ։ൃΛߟ͑Δ

Slide 2

Slide 2 text

ࣗݾ঺հ ࡗݪণ඙ Ұൠࣾஂ๏ਓϦϨʔγϣϯσβΠϯ ݚڀॴ୅දཧࣄ *POJD%FWFMPQFS&YQFSU 4USJQF$PNNVOJUZ&YQFSU

Slide 3

Slide 3 text

 UJQTZT

Slide 4

Slide 4 text

৯඼දࣔҹ࡮ εϚϗͱϓϦϯλ͚ͩͰ৯඼දࣔϥ ϕϧΛͭ͘ΕΔ೔ຊॳͷઐ༻ΞϓϦ

Slide 5

Slide 5 text

XJOFDPEF ଟछྨଟ਺ྔͷϫΠϯΛෳ਺ڌ఺Ͱ؅ཧͰ ͖Δ೔ຊ།ҰͷΞϓϦɻ

Slide 6

Slide 6 text

Ͳ͏ҧ͍·͔͢ʁ ϒϥ΢β 18" J04ΞϓϦ

Slide 7

Slide 7 text

8FCඪ४Λϕʔεʹͨ͠ϚϧνϓϥοτϑΥʔϜల։ 888

Slide 8

Slide 8 text

ຊ୊ͱҧ͏͚Ͳɺ࣋ͪؼͬͯ΄͍͜͠ͱ ϞόΠϧ6*Λ࠶ݱ͢ΔͨΊͷ6*ϑϨʔϜϫʔΫ 8FCΞηοτΛϞόΠϧΞϓϦʹ͢ΔϥΠϒϥϦ *POJD'SBNFXPSL $BQBDJUPS

Slide 9

Slide 9 text

5IFBOTXFS JOBOVUTIFMM JTCFDBVTF UIBU`TXIFSFUIFTBSF 5IFBOTXFS JOBOVUTIFMM JTCFDBVTF UIBU`TXIFSFUIFTBSF ౴͑͸؆୯ɻͦ͜ʹϢʔβ͕͍Δ͔ΒͰ͢ɻ IUUQTNFEJVNDPNGSFFDPEFDBNQJCVJMUBQXBBOEQVCMJTIFEJU JOBQQTUPSFTIFSFTXIBUJMFBSOFEDCGEBGC

Slide 10

Slide 10 text

$.4ߏங͸᠘͕͍ͬͺ͍

Slide 11

Slide 11 text

ιϑτ΢ΣΞͷϝϯςφϯε IUUQTFOEP fl JGFEBUF

Slide 12

Slide 12 text

ϓϥάΠϯͷ࠾༻੹೚

Slide 13

Slide 13 text

όοΫΞοϓͷϝϯςφϯε %#ਧ͖ඈͼ·ͨ͠ɻ ࠷ऴόοΫΞοϓͬͯࡢ೔Ͱ͢ΑͶʁʂ ઌ݄͔ΒόοΫΞοϓͱΕͯ·ͤΜͰͨ͠ɻ σΟεΫ༰ྔ͕͍ͬͺ͍ͩͬͨΑ͏Ͱ͢ɻ Ͳ͏ͨ͠Β͍͍ΜͰ͔͢ʁʂʁʂ Ͳ͏ʹ΋ͳΓ·ͤΜɾɾɾɻ

Slide 14

Slide 14 text

ΞΫηεूதͨ࣌͠ͷରԠ 8FCαΠτ͕ݟΕͳ͍Μ͚ͩͲͲ͏ͯ͠ʁ ͔ͤͬ͘ςϨϏʹऔΓ্͛ΒΕͨͷʹɻ ΞΫηε͕ूதͯ͠αʔό͕མ͔ͪͨΒͰ͢Ͷɻ མͪண͘·Ͱ଴͔ͭ͠Ͱ͖ͳ͍Ͱ͢ɻ Ͳ͏ͨ͠Β͍͍ΜͰ͔͢ʁʂʁʂ ͕ͬͭΓαʔόʹ͓͍ۚΕͯ࠶ൃ๷ࢭΛʂ

Slide 15

Slide 15 text

Ϣʔβ͕ϨΠΞ΢τΛյ͢ Ͳ͜Λߋ৽ͨ͠Β͍͍ʁ "ͱ#ͷϑΟʔϧυΛߋ৽͍ͯͩ͘͠͞ɻ $ͷϑΟʔϧυΛߋ৽ͨ͠Β͜ΘΕͨʂ $ͷϑΟʔϧυΛߋ৽͔ͨ͠ΒͰ͢ɻ

Slide 16

Slide 16 text

ύεϫʔυ؅ཧͬͯͪΌΜͱ͞ΕͯΔʁ ύεϫʔυΈΜͳͰಉ͡Ͱ͍͍Ͱ͔͢ʁ ୀ৬౳͋Δͱࢥ͏ͷͰɺݸਓ୯ҐͰ͓ئ͍͠·͢ ๨Εͯ͠·͏͔΋ɻ෇ᝦʹॻ͍ͯɺ1$ʹ షΓ෇͚͓ͯ͜͏ 🙈🙉🙊

Slide 17

Slide 17 text

ϗεςΟϯάྉۚ ֹ݄ Φʔτεέʔϧ 1)1.Z42- /FUMJGZ 0ԁʙ ͋Γ ෆՄ 'JSFCBTF )PTUJOH 0ԁʙ ͋Γ ෆՄ 4ࣾ 425ԁʙ ͳ͠ Մ "ࣾ 20999.70ԁʙ ͳ͠ Մ

Slide 18

Slide 18 text

Ϣʔβ͕ߋ৽͢ΔࣗࣾαΠτͰ͸ɺ$.4ߏஙɻ ͦΕɺඞཁͰ͔͢ʁ

Slide 19

Slide 19 text

੔ཧͯ͠ߟ͑Α͏ ͳͥ$.4ߏங͕ඞཁʁ ̍ɽ)5.-Λॻ͚ͳ͍Ϣʔβ͕ߋ৽Ͱ͖ΔΑ͏ʹ͢ΔͨΊ ̎ɽಉҰςϯϓϨʔτͰྔ࢈ͨ͠هࣄΛ؅ཧ͢ΔͨΊ ɹɹʢྫɿχϡʔεαΠτʣ ̏ɽ&$αΠτߏஙͳͲෳࡶͳखॱ͕ඞཁͳ΋ͷΛखܰʹߏங͢ΔͨΊ

Slide 20

Slide 20 text

͜Ε(JU)VCͰղܾͰ͖Δʂ

Slide 21

Slide 21 text

Ϩετϥϯϧϕφτϯ IUUQTHJUIVCDPNMFCFOBUPOCFOBUPOOFU

Slide 22

Slide 22 text

ίϯηϯτϚʔέοτ IUUQTHJUIVCDPNDPODFOUNBSLFUDPNXFCTJUF

Slide 23

Slide 23 text

౎ࢢܦӦϓϩϑΣογϣφϧεΫʔϧ

Slide 24

Slide 24 text

̍ɽ)5.-Λॻ͚ͳ͍Ϣʔβ͕ߋ৽Ͱ͖ΔΑ͏ʹ͢ΔͨΊ ؆୯ͳϖϥΠνͩͬͨΒɺ͜ͷϨϕϧͰ͍͚Δɻ ఆٳ೔৘ใ͚ͩ$.4Ͱهࣄ࡞ͬͯΔҙٛͱ͸ɾɾɾɻ

Slide 25

Slide 25 text

ϑϨϯνͷΦʔφʔγΣϑ ʮ͜ΕݟͨΒߋ৽Ͱ͖ͨΑʯ

Slide 26

Slide 26 text

·ͪͮ͘Γձࣾͷελοϑ ʮΩʔࣗମΛؒҧͬͯ࡟আͨ͠Βɺࣦഊͨͬͯ͠ϝʔϧ͖ͨʯ

Slide 27

Slide 27 text

·ͪͮ͘Γձࣾͷελοϑ ॻ͖׵͙͑Β͍Ͱ͖ΔΑɻ

Slide 28

Slide 28 text

࣮૷ྫ̍ɿࣗ࡞ςϯϓϨʔτ
    export interface IItem { selector: string; template: string; data: Array<{ title?: string; ja?: string; price?: string; body?: string; image?: string }>; } export const news: IItem = { selector: '
      ', template: '
    • {{ title }}

      {{ body }}

    • ', data: [ { title: 'ίϩφײછ঱༧๷ରࡦ', body: 'ίϩφײછ঱༧๷ରࡦͱͯ͠ɺۭؾͷೖΕସ͑ɺִؒʹ༨༟ͷ͋Δ੮΁ͷ͝Ҋ಺ɺΞΫϦ ϧ൘౳ɺ઀٬ελοϑͷϚεΫண༻ͳͲͷରԠΛ͓ͯ͠٬༷Λ͓ܴ͍͑ͨ͠·͢ɻ
      ౰ళ͸ɺ৽ܕίϩ φ΢ΠϧεରࡦೝূళͰ͢ɻ
      2࣌ؒఔ౓Ͱͷ͓৯ࣄΛ͓ئ͍͍ͨ͠·͢ɻ', }, ], }; )5.- 5ZQF4DSJQU

      Slide 29

      Slide 29 text

      ࣮૷ྫ̍ɿ͜Μͳ/PEFΛ࣮ߦͯ͠#VJME const targets = ['index.html']; const items: IItem[] = [news, redWine, whiteWine, champagneWine, announcement]; const build = () => { execSync(`rm -r -f ${process.cwd() + '/www'}`); mkdirSync(process.cwd() + '/www'); execSync(`cp -r ${process.cwd() + '/src/template'}/* ${process.cwd() + '/www'}`); for (const templateFile of targets) { let template = readFileSync(process.cwd() + '/www/' + templateFile).toString('utf-8'); for (const item of items) { const insertData: string[] = []; for (const line of item.data) { let template = item.template; for (const [key, value] of Object.entries(line)) { const re_url = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/ gi; const replaceText = (value as string).replace(re_url, '$1'); template = template.replace(new RegExp(`{{ ${key} }}`, 'g'), replaceText as string); } insertData.push(template); } const changeSelector = item.selector.replace(/>${insertData.join('')}<`); template = template.replace(item.selector, changeSelector); } writeFileSync(process.cwd() + '/www/' + templateFile, template); } }; build(); createWineSearchIndex(); apiBuild(); 5ZQF4DSJQU

      Slide 30

      Slide 30 text

      ࣮૷ྫ̎ɿ+BWB4DSJQUϑϨʔϜϫʔΫ

      ͓஌Βͤ

        {news.map(d =>
      • )}
      +49 ͜Ε͚ͩͰॻ͚ͪΌ͏ɻ؆୯ʂ

      Slide 31

      Slide 31 text

      ಉҰςϯϓϨʔτͰྔ࢈ͨ͠هࣄΛ؅ཧ͢ΔͨΊ ϔουϨε$.4Λ࢖ͬͯಈతʹσʔλऔಘ͠Α͏ 8PSE1SFTTDPN NJDSP$.4 LJOUPOF

      Slide 32

      Slide 32 text

      ಉҰςϯϓϨʔτͰྔ࢈ͨ͠هࣄΛ؅ཧ͢ΔͨΊ { path: ':id', component: ArticlePage, }, this.route.paramMap.subscribe(as ync (params: ParamMap) => { this.articleId = parseInt(params.get('id'), 10); const {article} = await this.articleService.getCategory( this.articleId ); this.article = article; });

      {{ item.date | date: "yyyy೥MM݄dd೔" }} / {{ item.count }}Point

      Slide 33

      Slide 33 text

      44(443QSFSFOEFSJPΛ࢖ͬͯϨϯμϦϯά΋Ͱ͖Δ ಺༰ $43 Ϣʔβ؀ڥͰHTMLΛϨϯμϦϯά 44( αʔόϗεςΟϯάલʹHTMLΛϨϯμϦϯά 443 ϦΫΤετ࣌ʹHTMLΛϨϯμϦϯά QSFSFOEFSJP ಛఆIP͔ΒͷϦΫΤετ͚࣌ͩɺαʔό͕ϨϯμϦ ϯάࡁΈHTMLΛฦ٫

      Slide 34

      Slide 34 text

      ߏ଄͕೉͍͠΋ͷ΋γϯϓϧʹͭ͘ΕΔ

      Slide 35

      Slide 35 text

      $%/Λ࢖ͬͨ഑৴͕༰қʹͳΓߴ଎ʹ

      Slide 36

      Slide 36 text

      ٕज़ͷ՝୊͸ٕज़Ͱղܾ͠Α͏ ಈతݴޠ͕૸Δαʔόͷ੹೚όοΫΞοϓ΍αʔόෛՙͷίϯτ ϩʔϧηΩϡϦςΟ͸Ϣʔβ͕յͨ͠ΒͲ͏͠Α͏FUD ϦεΫϚωʔδϝϯτ͠ͳ͕Β$.4ߏங΋͋Γ͚ͩͲɺ੩తαΠ τԽ͢Δ͜ͱͰ͜ΕΒͷ໰୊Λ৐Γӽ͑ΕΔՄೳੑ͕͋ΔͷͰҰ౓ ߟ͑ͯΈ·ͤΜ͔ɻ 8FCΞηοτΛ഑৴͢Δ͚ͩͷͨΊʹɺຊ౰ʹඞཁʁ

      Slide 37

      Slide 37 text

      ઌͷ͜ͱΛߟ͑Α͏ ʢ8FCαΠτ͕΄͍͠Ͱ͢ɻ೥ޙ͸͓ళ͕ ɹͲ͏ͳͬͯΔ͔Θ͔Βͳ͍ʣ ʢೲ඼ͨ͠ΒऴΘΓɻϝϯςܖ໿ͱΕΔͱخ͍͠ʣ ೥͓ؒئ͍͢Δ͜ͱͳ͔͔ͬͨΒ ϝϯςܖ໿ͷܧଓ͸΍Ί͓ͯ͜͏ ʢܖ໿ऴΘΓͳͷͰɺҰࣜ౉ͯ͠ऴΘΓ·͢Ͷʣ