Slide 1

Slide 1 text

Flutter 24新卒研修 2024/04/25 Kuno Ayana

Slide 2

Slide 2 text

ߨࢣνϡʔλʔ ٱ໺จࡊ !BZBOBLVOP ৽ଔͨΜΆΆࣨͨΜΆΆάϧʔϓ ࠷ۙυϥ͑΋ΜάοζΛങ͍ړͬͯͯۚܽ

Slide 3

Slide 3 text

ݚमͷΰʔϧ

Slide 4

Slide 4 text

ݚमͷΰʔϧ ΞϓϦ։ൃॳΊͯͷਓ 'MVUUFSָ͍ͬͯ͠ʙʂͷؾ࣋ͪΛ࣋ͪؼͬͯʂ 'MVUUFSνϣοτσΩΔਓ ਓʹڭ͑Δ͜ͱͰཧղ౓Λ্͛Α͏ʂ

Slide 5

Slide 5 text

ࣄલ४උ w 'MVUUFS4%,ͷΠϯετʔϧ w IUUQTEPDT fl VUUFSEFWHFUTUBSUFEJOTUBMM w J04ಈ͔͍ͨ͠ਓ w 9DPEFͷΠϯετʔϧ͓ΑͼղౚʢJ04ݚम؀ڥͱಉ౳ʣ w "OESPJEಈ͔͍ͨ͠ਓ w "OESPJE4UVEJP*HVBOBͷΠϯετʔϧ͓Αͼղౚʢ"OESPJEݚम؀ڥͱಉ౳ʣ

Slide 6

Slide 6 text

ࣄલ४උ $ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.19.6, on macOS 13.6.1 22G313 darwin- arm64, locale ja-JP) [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 15.2) [✓] Chrome - develop for the web [✓] Android Studio (version 2023.2) [✓] VS Code (version 1.87.2) [✓] Connected device (3 available) [✓] Network resources • No issues found!

Slide 7

Slide 7 text

ຊ೔ͷ͓඼ॻ͖ 1 2 3 'MVUUFSͱ͸ʁ ΞϓϦΛ࡞ͬͯΈΑ͏ʂ ΞϓϦͷத਎Λݟ͍ͯ͜͏ʂ 7 ωοτϫʔΫ௨৴ͯ͠ΈΑ͏ʂ 4 4UBUFͬͯͳΜͩΖ͏ʁ 5 5FYU'JMFEΛ࢖ͬͯΈΑ͏ʂ 6 8 νʔϜͰνϟϨϯδʂʂʂ ͓ΘΓʙ

Slide 8

Slide 8 text

'MVUUFSͱ͸ʁ

Slide 9

Slide 9 text

'MVUUFSͱ͸ʁ w ϚϧνϓϥοτϑΥʔϜ։ൃ͕ՄೳͳϑϨʔϜϫʔΫ w ϞόΠϧɾXFCɾσεΫτοϓɾ૊ΈࠐΈγεςϜΛαϙʔτ w 'MVUUFSΛ࢖༻ͯ͠ެ։͞ΕͨΞϓϦ͸ສΛ௒͑ͨʢ೥݄຤࣌఺ʣ w 'JSFCBTFͷػೳΛαϙʔτ w (FNJOJ(PPHMF"*%BSU4%,͕ϦϦʔε͞ΕΞϓϦʹ૊ΈࠐΊΔΑ͏ʹ 'MVUUFS'PSXBSEIUUQTXXXZPVUVCFDPNXBUDI W[,2:(,"F8 'MVUUFSެࣜIUUQT fl VUUFSEFW 8IBU`TOFXJO'MVUUFSIUUQTNFEJVNDPN fl VUUFSXIBUTOFXJO fl VUUFSCBBFE *NQSPWJOHJOGPUBJONFOUTZTUFNTBU5PZPUBXJUI'MVUUFSIUUQT fl VUUFSEFWTIPXDBTFUPZPUB

Slide 10

Slide 10 text

'MVUUFSͱ͸ʁ w (PPHMFʹΑͬͯ։ൃ͞Ε͍ͯΔ w (PPHMFͷΞϓϦʢ(PPHMF1BZ΍(PPHMF"ETͳͲʣͰ΋ར༻͞Ε͍ͯΔ w ϚςϦΞϧσβΠϯͷίϯϙʔωϯτΛ"OESPJEΑΓઌʹ࣮૷ͯͨ͠Γ͢Δ w ίϯϙʔωϯτΛඪ४Ͱ༻ҙͯ͘͠ΕͯΔ͔Βॳ৺ऀͰ΋ྑ͍ײ͡ʹ࡞ΕΔʂ ίϯϙʔωϯτҰཡIUUQTNNBUFSJBMJPDPNQPOFOUT

Slide 11

Slide 11 text

w %BSUͱ͍͏ίϯύΠϧܕݴޠͰ࣮૷ w (PPHMF͕+BWB4DSJQUͷ໰୊఺Λվળͨ͠୅ସݴޠͱͯ͠೥ʹ։ൃͨ͠΋ͷ w /VMM4BGFUZ΍ίϨΫγϣϯεϓϨουԋࢉࢠΛ࢖ͬͨ6*ͷߏங͕ՄೳʢผϖʔδͰઆ໌ʣ w "05ίϯύΠϧΛ௨ͯ͡ωΠςΟϒͷػցޠʹม׵͞ΕΔ w ͜ΕʹΑΓωΠςΟϒΞϓϦέʔγϣϯͱͯ͠௚઀࣮ߦ͞ΕΔʢิ଍ࢿྉͰઆ໌ʣ w ϨϯμϦϯάΤϯδϯ΋ࣗલʢJ04Ͱ͸*NQFMMFS͕σϑΥϧτʹʣ w એݴత6*Ͱॻ͘͜ͱ͕ՄೳʢผϖʔδͰઆ໌ʣ w 4UPSZCPBSEΛ࢖ͬͨ4XJGUͷίʔυΑΓ3FBDUͷํ͕ࣅͯΔ͔΋ 'MVUUFSͱ͸ʁ 'MVUUFSͷΞʔΩςΫνϟIUUQTEPDT fl VUUFSEFWSFTPVSDFTBSDIJUFDUVSBMPWFSWJFX )PXEPFT'MVUUFSSVONZDPEFPOJ04 IUUQTEPDT fl VUUFSEFWSFTPVSDFTGBRSVOJPT *NQFMMFSʹ͍ͭͯIUUQTEPDT fl VUUFSEFWQFSGJNQFMMFS EBTI܅ʹ͍ͭͯIUUQTEPDT fl VUUFSEFWEBTI

Slide 12

Slide 12 text

/VMM4BGFUZͬͯʁ ͲͷܕͰ΋OVMMΛ࢖ͬͯྑ͍ C͸OVMM΍ͳ͍͔ʙʂ ࣮ߦ࣌ʹOVMMͩͬͨ৔߹ ΤϥʔΛు͘ɾΞϓϦ͕མͪΔ int a = 100; int b = null; a = 100; print(a + b); OVMMTBGFUZʹ͍ͭͯIUUQTEBSUEFWOVMMTBGFUZ

Slide 13

Slide 13 text

࣮ߦ࣌ʹOVMMͷΤϥʔͰ མͪΔ͜ͱ͸ͳ͘ͳΔ /VMM4BGFUZͬͯʁ جຊతʹOVMM࢖ͬͪΌμϝ ࢖͍͍ͨ࣌͸ Λ͚ͭΔ int a = 100; int? b = null; a = 100; print(a + b); // Τϥʔ if (b != null) { print(a + b); } print(a + b!); C͕OVMMͷ࣌͸ ආ͚ͯ͘ΕΔͷͰ҆৺ OVMMTBGFUZʹ͍ͭͯIUUQTEBSUEFWOVMMTBGFUZ

Slide 14

Slide 14 text

label = UILabel() label.text = “Babu~” label.textColor = .black label.textAlignment = .center view.addSubview(label) Text( “Babu~", style: TextStyle(color: Colors.black), textAlign: TextAlign.center, ), ໋ྩతʢ4XJGUʣ એݴత6*ͬͯʁ એݴతʢ%BSUʣ ϥϕϧΛ࡞Εʂ ϥϕϧͷςΩετ͸όϒʙͰ͋Εʂ ৭͸ࠇͰ͋ΕʂਅΜதدͤͰ͋Εʂ ͦͷϥϕϧΛ7JFXʹ௥Ճͤ͑ʂ

Slide 15

Slide 15 text

label = UILabel() label.text = “Babu~” label.textColor = .black label.textAlignment = .center view.addSubview(label) Text( “Babu~", style: TextStyle(color: Colors.black), textAlign: TextAlign.center, ), ໋ྩతʢ4XJGUʣ એݴత6*ͬͯʁ એݴతʢ%BSUʣ զ͸όϒʙͱ͍͏ࠇ৭ͷ ਅΜதدͤςΩετͰ͋Δʂ

Slide 16

Slide 16 text

ΞϓϦΛ࡞ͬͯΈΑ͏ʂ

Slide 17

Slide 17 text

ΞϓϦΛ࡞ͬͯΈΑ͏ $ flutter create <<ϓϩδΣΫτͷ໊લ>> $ cd <<ϓϩδΣΫτͷ໊લ>> $ open iOS/Runner.xcworkspace // ios ͷਓͷΈ $ flutter run "OESPJEͷਓ͸࣮ػબ୒΋͘͠͸ "OESPJEελδΦ্ཱͪ͛ͯΤϛϡબ୒ ϓϩδΣΫτ໊͸ΞϯμʔόʔͰܨ͕ͳ͍ͱ ʰzϓϩδΣΫτ໊zJTOPUBWBMJE%BSUQBDLBHF OBNFʱ ͬͯΤϥʔుౖ͍ͯΒΕΔ

Slide 18

Slide 18 text

J04೿ͷਓ ࣄલ४උͰ࡞ͬͨ ΞΧ΢ϯτʹͳ͍ͬͯΔ͔ʁ

Slide 19

Slide 19 text

J04೿ͷਓ ࣮ػ઀ଓͯͨ͠Β J04%FWJDFͷͱ͜Ζʹ ͜Μͳ෩ʹग़ͯ͘Δ͸ͣ γϛϡϨʔλಈ͔͢ਓ͸ ޷͖ͳ΍ͭΛબΜͰͶʂ ࣍ճ͔Β͸ԼهίϚϯυͰ্ཱ͕ͪΔΑ $ open -a simulator

Slide 20

Slide 20 text

J04೿ͷਓʢ࣮ػʣ ઃఆҰൠ71/ͱσόΠε؅ཧ ͷڐՄ͕ԼΓ͍ͯΔ͔֬ೝʂ

Slide 21

Slide 21 text

"OESPJE೿ͷਓ "OESPJE4UVEJPΛ্ཱͪ͛ͯ "7%.BOBHFSΛબ୒ ΋͘͠͸࣮ػ઀ଓͯ͠ $ flutter run ޷͖ͳΤϛϡϨʔλΛ ▶︎ Λԡͯ͠ىಈ

Slide 22

Slide 22 text

8FCͰ΋ಈ͘ʂ $ISPNFͰ΋ಈ͚͘Ͳ ͔ͤͬ͘ͳΒεϚϗ͔γϛϡϨʔλͰ ಈ͔ͯ͠Έͯ΄͍͠ʂ

Slide 23

Slide 23 text

ಈ͍͔ͨͳʁʁʁ ϘλϯΛԡ͢ͱ ਅΜதͷ਺ࣈ͕Χ΢ϯτΞοϓ ͞Ε͍ͯ͘ΞϓϦ

Slide 24

Slide 24 text

෼ؒٳܜ

Slide 25

Slide 25 text

ΞϓϦͷத਎Λ ݟ͍ͯ͜͏ʂ

Slide 26

Slide 26 text

΢ΟδΣοτ ϖʔδશମ

Slide 27

Slide 27 text

΢ΟδΣοτ ϖʔδશମ "QQ#BS

Slide 28

Slide 28 text

΢ΟδΣοτ ϖʔδશମ "QQ#BS ςΩετ

Slide 29

Slide 29 text

΢ΟδΣοτ ϖʔδશମ "QQ#BS ςΩετ Ϙλϯ

Slide 30

Slide 30 text

΢ΟδΣοτ ϖʔδશମ "QQ#BS ςΩετ Ϙλϯ શ෦΢ΟδΣοτͱݺͿ ը໘͸΢ΟδΣοτͰ੒Γཱ͍ͬͯΔʂ

Slide 31

Slide 31 text

࣮ࡍͷίʔυΛݟ͍ͯ͜͏ʂ w ϥΠϒίʔσΟϯά͍ͯ͘͠ͷͰҰॹʹΞϓϦΛಈ͔͍ͯ͜͠͏ʂ w ͨ·ʹղઆͰεϥΠυʹ໭͖ͬͯ·͢ w ϦϙδτϦʹίʔυΛஔ͍ͯ͋ΔͷͰฉ͖ͦͼΕͨΒࢀߟʹͯ͠Ͷʂ w IUUQTHJUIVCDPNNJYJHSPVQ#FHJOOFS5SBJOJOH'MVUUFS w ίϛοτϝοηʔδ΍ίʔυ಺ίϝϯτ͕આ໌ʹͳ͍ͬͯ·͢ʂ

Slide 32

Slide 32 text

74$PEFͷਓʙʂ ֦ுػೳɾ(JUIVC$PQJMPUೖΕ͓ͯ͘ͱΊͪΌͪ͘ΌศརͰ͢ʂ ֦ுػೳ͸ʰ fl VUUFSʱͰݕࡧͯ͠Ұ൪্ʹग़Δ΍ͭ

Slide 33

Slide 33 text

֦ுػೳ͸͜͏࢖͏ʂ Կ͔Ͱғ͍͍ͨ ΢ΟδΣοτΛӈΫϦοΫ ϦϑΝΫλΛબ୒ ғ͍͍ͨ ΢ΟδΣοτΛબ୒ σσϯʂғΘΕͨʂ

Slide 34

Slide 34 text

)PUSFMPBESFTUBSUͱ͸ʁ )PUSFMPBE )PUSFTUBSU ͍͍ͪͪDUSMDͰࢭΊ͔ͯΒ fl VUUFSSVO͠ͳͯ͘େৎ෉ʂʂʂʂ λʔϛφϧͰ3Λԡ͢ ΄΅Ϧηοτ͞ΕΔ λʔϛφϧͰSΛԡ͢ 5FYU΍৭ͳͲ΢ΟδΣοτΛ มߋͨ͠Β൓ө͞ΕΔ 4UBUF͸ͦͷ·· ʢ4UBUFʹؔͯ͠͸ޙͰઆ໌ʣ fl VUUFSSVO ωΠςΟϒίʔυ͔Β ࣮ߦ͠௚͢ ˞)PU3FMPBE͕Ͱ͖Δͷ͸σόοάϏϧυ࣌ʢ+*5ίϯύΠϧ࣌ʣͷΈ

Slide 35

Slide 35 text

ඪ४΢ΟδΣοτ Α͘࢖͏΢ΟδΣοτ͕ ༻ҙ͞ΕͯΔʂ ඪ४΢ΟδΣοτ͕ݟΕΔIUUQTEPDT fl VUUFSEFWVJXJEHFUTCBTJDT

Slide 36

Slide 36 text

ඪ४΢ΟδΣοτΛ࢖ͬͯΈΑ͏ w ϥΠϒίʔσΟϯά͍ͯ͘͠ͷͰҰॹʹॻ͍ͯΈΑ͏ʂ w ࢖༻૝ఆ΢ΟδΣοτ w 5FYU w $FOUFS w $PMVNO w 3PX w 4J[FE#PY w $PMPSFE#PY IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 37

Slide 37 text

ਤܗΛඳըͯ͠ΈΑ͏ʂ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 38

Slide 38 text

$PMVNO΍3PX͸਌ͷαΠζ·Ͱ޿͕Δੑ࣭Λ࣋ͭ

Slide 39

Slide 39 text

$PMVNO΍3PX͸਌ͷαΠζ·Ͱ޿͕Δੑ࣭Λ࣋ͭ $PMVNO͸ॎʹ͍ͬͺ͍ ޿͕Ζ͏ͱ͢Δ

Slide 40

Slide 40 text

$PMVNO΍3PX͸਌ͷαΠζ·Ͱ޿͕Δੑ࣭Λ࣋ͭ $PMVNO͸ॎʹ͍ͬͺ͍ ޿͕Ζ͏ͱ͢Δ

Slide 41

Slide 41 text

$PMVNO΍3PX͸਌ͷαΠζ·Ͱ޿͕Δੑ࣭Λ࣋ͭ 3PX΋ԣΊ͍ͬͺ͍ ޿͕Ζ͏ͱ͢Δ $PMVNO͸ॎʹ͍ͬͺ͍ ޿͕Ζ͏ͱ͢Δ

Slide 42

Slide 42 text

ϦετΛදࣔͯ͠ΈΑ͏ w ϥΠϒίʔσΟϯά͠·͢ʂ w ࢖༻૝ఆ΢ΟδΣοτ w -JTU7JFX w $BSE w 1BEEJOH IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 43

Slide 43 text

w ·ͣ͸ࢥ͍ͭ͘ํ๏Ͱ΍ͬͯΈͯʂ w ΤϥʔʹͳΔਓ͕͍ͨΒώϯτग़͠·͢ʂ ϦετʹλΠτϧΛ͚ͭΑ͏ʂ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 44

Slide 44 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w -JTU7JFX΋޿͕Ζ͏ͱͯ͘͠Δੑ࣭Λ࣋ͭͷͰΤϥʔʹͳΓ·͢ 5IFGPMMPXJOH3FOEFS0CKFDUXBTCFJOHQSPDFTTFEXIFOUIFFYDFQUJPOXBT fi SFE 3FOEFS7JFXQPSUD/&&%4-":065/&&%41"*/5/&&%4$0.104*5*/(#*5461%"5& OFFETDPNQPTJUJOH DSFBUPS7JFXQPSUˡ*HOPSF1PJOUFS<(MPCBM,FZBEC>ˡ4FNBOUJDTˡ-JTUFOFSˡ @(FTUVSF4FNBOUJDTˡ 3BX(FTUVSF%FUFDUPS<-BCFMFE(MPCBM,FZ3BX(FTUVSF%FUFDUPS4UBUFD>ˡ-JTUFOFSˡ @4DSPMMBCMF4DPQF ˡ@4DSPMM4FNBOUJDT<(MPCBM,FZB>ˡ/PUJ fi DBUJPO-JTUFOFS4DSPMM.FUSJDT/PUJ fi DBUJPOˡ 4DSPMMBCMFˡ1SJNBSZ4DSPMM$POUSPMMFSˡl QBSFOU%BUBOPOF DBOVTFTJ[F DPOTUSBJOUT#PY$POTUSBJOUT X I*O fi OJUZ ɽɽɽ

Slide 45

Slide 45 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w -JTU7JFX΋޿͕Ζ͏ͱͯ͘͠Δੑ࣭Λ࣋ͭͷͰΤϥʔʹͳΓ·͢ 5IFGPMMPXJOH3FOEFS0CKFDUXBTCFJOHQSPDFTTFEXIFOUIFFYDFQUJPOXBT fi SFE 3FOEFS7JFXQPSUD/&&%4-":065/&&%41"*/5/&&%4$0.104*5*/(#*5461%"5& OFFETDPNQPTJUJOH DSFBUPS7JFXQPSUˡ*HOPSF1PJOUFS<(MPCBM,FZBEC>ˡ4FNBOUJDTˡ-JTUFOFSˡ @(FTUVSF4FNBOUJDTˡ 3BX(FTUVSF%FUFDUPS<-BCFMFE(MPCBM,FZ3BX(FTUVSF%FUFDUPS4UBUFD>ˡ-JTUFOFSˡ @4DSPMMBCMF4DPQF ˡ@4DSPMM4FNBOUJDT<(MPCBM,FZB>ˡ/PUJ fi DBUJPO-JTUFOFS4DSPMM.FUSJDT/PUJ fi DBUJPOˡ 4DSPMMBCMFˡ1SJNBSZ4DSPMM$POUSPMMFSˡl QBSFOU%BUBOPOF DBOVTFTJ[F DPOTUSBJOUT#PY$POTUSBJOUT X I*O fi OJUZ ɽɽɽ *O fi OJUZʂʂ

Slide 46

Slide 46 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w -JTU7JFX΋޿͕Ζ͏ͱͯ͘͠Δੑ࣭Λ࣋ͭͷͰΤϥʔʹͳΓ·͢ $PMVNO

Slide 47

Slide 47 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w -JTU7JFX΋޿͕Ζ͏ͱͯ͘͠Δੑ࣭Λ࣋ͭͷͰΤϥʔʹͳΓ·͢ $PMVNO

Slide 48

Slide 48 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w -JTU7JFX΋޿͕Ζ͏ͱͯ͘͠Δੑ࣭Λ࣋ͭͷͰΤϥʔʹͳΓ·͢ $PMVNO -JTU7JFX

Slide 49

Slide 49 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w -JTU7JFX΋޿͕Ζ͏ͱͯ͘͠Δੑ࣭Λ࣋ͭͷͰΤϥʔʹͳΓ·͢ $PMVNO -JTU7JFX

Slide 50

Slide 50 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w -JTU7JFX΋޿͕Ζ͏ͱͯ͘͠Δੑ࣭Λ࣋ͭͷͰΤϥʔʹͳΓ·͢ $PMVNO Ͳ͜·Ͱ޿͕ΔΜʁʁʁ -JTU7JFX

Slide 51

Slide 51 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w ղܾࡦ ᶃ -JTU7JFXͷߴ͞Λݻఆ͢Δ ᶄ &YQBOEFEͱ͍͏8JEHFUΛ࢖͏ $PMVNO ߴ͞QY Ͱʂ -JTU7JFX

Slide 52

Slide 52 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w ղܾࡦ ᶃ -JTU7JFXͷߴ͞Λݻఆ͢Δ ᶄ &YQBOEFEͱ͍͏8JEHFUΛ࢖͏ $PMVNO $PMVNOͷ༨Γͷ 伱ؒશ෦ຒΊͨΔʂ -JTU7JFX

Slide 53

Slide 53 text

$PMVNOͷதʹ-JTU7JFXΛೖΕΔͱ͖͸஫ҙʂ w ղܾࡦ ᶃ -JTU7JFXͷߴ͞Λݻఆ͢Δ ᶄ &YQBOEFEͱ͍͏8JEHFUΛ࢖͏ ᶅ Ϧετͷ࠷ॳͷཁૉʹλΠτϧΛ࣋ͨͤͯ͋͛Δʂ -JTU7JFXͷΈʹ͢Δ λΠτϧ ཁૉ ཁૉ ཁૉ ཁૉ ɾ ɾ ɾ

Slide 54

Slide 54 text

4UBUFͬͯͳΜͩΖ͏ʁ

Slide 55

Slide 55 text

4UBUFͬͯͳΜͩΖ͏ʁ w 4UBUFঢ়ଶ w 4UBUF͕มΘΔͱը໘ߋ৽͞ΕΔʢCVJME಺͕࠶࣮ߦ͞ΕΔʣ ͳΜΒ͔ͷΞΫγϣϯ ݁ՌΛඳը ݁ՌΛඳը

Slide 56

Slide 56 text

4UBUFͬͯͳΜͩΖ͏ʁ w 4UBUFঢ়ଶ w 4UBUF͕มΘΔͱը໘ߋ৽͞ΕΔʢCVJME಺͕࠶࣮ߦ͞ΕΔʣ ͳΜΒ͔ͷΞΫγϣϯ ݁ՌΛඳը ݁ՌΛඳը 6*G 4UBUF એݴత6*Λந৅Խ͢Δͱ ঢ়ଶΛҾ਺ͱͯ͠6*Λฦ͢ ෭࡞༻Λ࣋ͨͳ͍ؔ਺Ͱ͋Δ

Slide 57

Slide 57 text

w 4UBUFΛ࢖͏΢ΟδΣοτΛ4UBUFGVM8JEHFUͱ͍͏ w ٯʹ࢖Θͳ͍΢ΟδΣοτ͸4UBUFMFTT8JEHFUͱ͍͏ 4UBUFͬͯͳΜͩΖ͏ʁ 4UBUFGVM8JEHFU ݁ՌΛඳը ݁ՌΛඳը

Slide 58

Slide 58 text

ഒʹͳ͍ͬͯ͘ϘλϯΛ௥Ճ͠Α͏ w ϥΠϒίʔσΟϯά͠·͢ʂ w 4UBUFΛ৽ͨʹ༻ҙ͠Α͏ w ͦͷ4UBUFΛഒ͍ͯ͘͠ϘλϯΛ௥Ճ͠Α͏ʂ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 59

Slide 59 text

w ৽͍͠4UBUFΛఆٛ w ഒ͢ΔϝιουΛఆٛ w ഒ͢ΔϝιουΛݺͿϘλϯΛ௥Ճ ഒʹͳ͍ͬͯ͘ϘλϯΛ௥Ճ͠Α͏ void _twice() { setState(() { _counter2 = _counter2 * 2; }); } FloatingActionButton( onPressed: () { _twice(); }, IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 60

Slide 60 text

5FYU'JMFEΛ࢖ͬͯΈΑ͏ w ϥΠϒίʔσΟϯά͠·͢ʂ w จࣈଧͭͨͼʹԼʹςΩετදࣔͤ͞Δʹ͸ʁ w 4UBUFʹ͠ͳ͖Ό͍͚ͳ͍Ͷʂ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 61

Slide 61 text

จࣈදࣔϘλϯΛ࡞Ζ͏ʂ w ͖ͬ͞͸จࣈΛଧͭͨͼදࣔͩͬͨ w ϘλϯΛԡͨ͠Βจࣈ͕දࣔ͞ΕΔΑ͏ʹͯ͠ΈΑ͏ʂ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 62

Slide 62 text

จࣈදࣔϘλϯΛ࡞Ζ͏ʂ w TFU4UBUFͷλΠϛϯά͕ॏཁ w 5FYU'JMFEͷPO$IBOHFEͰ͸TFU4UBUF͠ͳ͍Α͏ʹ w ࠶ඳը͞Εͯ͠·͏ͨΊ w Ϙλϯԡͨ࣌͠ʹTFU4UBUF͢ΔΑ͏ʹʂ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM TextField( onChanged: (value) { tmpText = value; }, IconButton( onPressed: () { // Ϙλϯ͕ԡ͞Εͨ࣌ʹ state ʹ൓ө setState(() { text = tmpText; }); },

Slide 63

Slide 63 text

ϥϯν

Slide 64

Slide 64 text

w (JU)VCͷϦϙδτϦҰཡΛऔಘ͢Δ"1*Λୟ͍ͯΈΑ͏ʂ w IUUQTEPDTHJUIVCDPNKBSFTUSFQPTSFQPT BQJ7FSTJPOMJTU SFQPTJUPSJFTGPSBVTFS w ·ͣ͸DVSMίϚϯυͰୟ͍ͯΈΑ͏ ωοτϫʔΫ௨৴ͯ͠ΈΑ͏ʂ $ curl -L https://api.github.com/users/<<ࣗ෼ͷ github id>>/repos ϦϙδτϦҰཡ ͍ͩ͘͞ʙ <\ JE OPEF@JEIPHF OBNF)FMMP8PSME ʜ ωοτϫʔΫ௨৴ ΫϥΠΞϯτ "1*

Slide 65

Slide 65 text

w 'MVUUFSͰIUUQ௨৴͢ΔͨΊʹIUUQύοέʔδΛ͍ΕΑ͏ʂ w IUUQTQVCEFWQBDLBHFTIUUQ ωοτϫʔΫ௨৴ͯ͠ΈΑ͏ʂ QVCEFWʹ͸ ͨ͘͞Μͷύοέʔδ͕ʂ

Slide 66

Slide 66 text

w 'MVUUFSͰIUUQ௨৴͢ΔͨΊʹIUUQύοέʔδΛ͍ΕΑ͏ʂ w IUUQTQVCEFWQBDLBHFTIUUQ ωοτϫʔΫ௨৴ͯ͠ΈΑ͏ʂ QVCEFWʹ͸ ͨ͘͞Μͷύοέʔδ͕ʂ 3FBENF΍ *OTUBMMJOHΛݟͯ ࢖ͬͯΈΑ͏ʂ

Slide 67

Slide 67 text

w ϥΠϒίʔσΟϯά͠·͢ʂ w ϘλϯΛԡͨ͠Β(JUIVCͷϦϙδτϦऔಘ͢ΔΑ͏ʹ w දࣔ΋ͯ͠ΈΑ͏ʂ ωοτϫʔΫ௨৴ͯ͠ΈΑ͏ʂ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 68

Slide 68 text

ඇಉظॲཧʢBTZODBXBJUʣ ઀ଓதʂ ୳͠தʂ ௐ΂தʂ ฦ͠தʂ ଴ͬͯ͋͛Δʙ

Slide 69

Slide 69 text

ඇಉظॲཧʢBTZODBXBJUʣ ઀ଓதʂ ୳͠தʂ ௐ΂தʂ ฦ͠தʂ ଴ͬͯ͋͛Δʙ ͕͔͔࣌ؒΔૢ࡞Λ ϝΠϯεϨουʢ6*ʣΛϒϩοΫ͠ͳ͍Α͏ʹ όοΫάϥ΢ϯυͰ࣮ߦʂ

Slide 70

Slide 70 text

ඇಉظॲཧʢBTZODBXBJUʣͷྫ Future fetchUserData() async { // ϢʔβʔσʔλΛඇಉظͰऔಘ final response = await http.get( Uri.parse('https://api.example.com/user'), ); debugPrint('εςʔλείʔυ͸: ${response.statusCode}'); }

Slide 71

Slide 71 text

ඇಉظॲཧʢBTZODBXBJUʣͷྫ Future fetchUserData() async { // ϢʔβʔσʔλΛඇಉظͰऔಘ final response = await http.get( Uri.parse('https://api.example.com/user'), ); debugPrint('εςʔλείʔυ͸: ${response.statusCode}'); } BTZODΩʔϫʔυ͸ ؔ਺͕ඇಉظͰ͋Δ͜ͱΛࣔ͢

Slide 72

Slide 72 text

ඇಉظॲཧʢBTZODBXBJUʣͷྫ Future fetchUserData() async { // ϢʔβʔσʔλΛඇಉظͰऔಘ final response = await http.get( Uri.parse('https://api.example.com/user'), ); debugPrint('εςʔλείʔυ͸: ${response.statusCode}'); } BTZODΛ෇͚ͨؔ਺͸ ಺෦ͰBXBJUΛ࢖༻͢Δ͜ͱ͕Ͱ͖Δ ৗʹ'VUVSFΦϒδΣΫτΛฦ͢ BTZODΩʔϫʔυ͸ ؔ਺͕ඇಉظͰ͋Δ͜ͱΛࣔ͢

Slide 73

Slide 73 text

ඇಉظॲཧʢBTZODBXBJUʣͷྫ Future fetchUserData() async { // ϢʔβʔσʔλΛඇಉظͰऔಘ final response = await http.get( Uri.parse('https://api.example.com/user'), ); debugPrint('εςʔλείʔυ͸: ${response.statusCode}'); } BXBJUͰ଴ͬͯ͋͛Δʂ

Slide 74

Slide 74 text

w ·ͣ͸KTPO͔ΒEBSUͰѻ͑Δ.BQΦϒδΣΫτʹม׵͠Α͏ʂ w IPHFΈ͍ͨͳऔಘํ๏ͩͱจࣈྻUZQPͪ͠Ό͏͔΋ʜܕ΋ͳͯ͘ෆ҆ʜ w Ϟσϧʹม׵ͪ͠Ό͓͏ʂ KTPOΛύʔε͠Α͏ \ lOBNFzlLVOPz lBHFzlz ^ VTFSOBNF͸LVOP VTFSBHF͸ʂ

Slide 75

Slide 75 text

w ϨεϙϯεͷKTPOΛQBSTFͯ͠ϦϙδτϦ໊͚ͩऔಘ͠Α͏ w ࢖༻ύοέʔδ w IUUQTQVCEFWQBDLBHFTKTPO@TFSJBMJ[BCMF w IUUQTQVCEFWQBDLBHFTCVJME@SVOOFS w ίϚϯυ ϦϙδτϦͷ໊લ͚ͩදࣔͯ͠ΈΑ͏ʂ $ flutter pub run build_runner build IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 76

Slide 76 text

෼ؒٳܜ ͔࣍ΒνʔϜνϟϨϯδʹͳΓ·͢ʂ

Slide 77

Slide 77 text

νʔϜͰνϟϨϯδʂ "[VSF0QFO"*ͱͷνϟοτΞϓϦΛ ࡞ͬͯΈΑ͏ʂ

Slide 78

Slide 78 text

"[VSF0QFO"*4FSWJDFͱ͸ʁ w .JDSPTPGU"[VSF͕ఏڙ͢Δ"*αʔϏεͷͭ w 0QFO"*͕ࣾ։ൃͨ͠"*ϞσϧΛ.JDSPTPGU"[VSF্Ͱར༻Մೳ w ೖྗσʔλ͕"*ͷֶशσʔλʹར༻͞Εͳ͍ w .JDSPTPGU"[VSFͷηΩϡϦςΟػೳΛ࢖༻Ͱ͖ΔͨΊاۀͰͷར༻ʹ޲͍ͯΔ w "*Ϟσϧ͸0QFO"*͕ࣾఏڙ͍ͯ͠Δ$IBU(15Ͱ࢖ΘΕ͍ͯΔϞσϧͱಉ͡ʂ w ࣗવݴޠʹΑΔ࣭ٙԠ౴΍຋༁ɼձٞͷཁ໿ɾίʔυͷੜ੒ͳͲ༷ʑͳλεΫΛ࣮ߦՄೳ w ͪͳΈʹ$IBU(15ͱҧͬͯ8FCαʔϏε͕ແ͘"1*ར༻ͷΈ

Slide 79

Slide 79 text

"1*Λ࢖͏্Ͱͷ஫ҙࣄ߲ w ػີ৘ใ΍ୈࡾऀͷ஌తࡒ࢈ݖΛ৵֐͢ΔΑ͏ͳΠϯϓοτ͸͠ͳ͍Ͱ͍ͩ͘͞ʂʂʂ w ΋ͪΖΜ㒷ᨱதই΋/(Ͱ͢ w Ξ΢τϓοτ͸ݸਓͰར༻͢ΔൣғʹͱͲΊ͍ͯͩ͘͞ʂ

Slide 80

Slide 80 text

5FBN$IBMMFOHF w جຊ࣮૷͸֤ʑ΍͍ͬͯͩ͘͞ʂʂ w νʔϜʹͨ͠ҙਤ͸ฉ͖΍͘͢ɾڭ͑΍͘͢͢ΔͨΊͳͷͰϫΠϫΠ΍͍ͬͯͩ͘͞ʂ w ࠷ॳͷ໰୊͔Βղ͍ͯ͘ͱॱ൪ʹνϟοτΞϓϦ͕ग़དྷ্͕ͬͯ͘૝ఆͰ͢ʂ w ࠷ޙ·ͰḷΓண͚ͳ͍ͷΛ૝ఆͨ͠໰୊ྔͳͷͰযΒͣʂ w ٳܜ΋ࣗ༝ʹͱͬͯͶʂ w Կ͔࣭໰ɾ૬ஊ͋ͬͨΒଈ࠲ʹٱ໺ݺΜͰ΋Βͬͯେৎ෉Ͱ͢ʂ

Slide 81

Slide 81 text

5$౤ߘϖʔδͷ࡞੒ w ౤ߘ͢ΔϖʔδΛ࡞Ζ͏ʂ w ౤ߘϖʔδΛดͨ͡Βॻ͍ͨจࣈ͕දࣔ͞ΕΔΑ͏ʹͯ͠ΈΑ͏ w ώϯτϫʔυ w ը໘ભҠʢQVTIQPQʣ w 5FYU'JFME w TFU4UBUF IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 82

Slide 82 text

5$"[VSF0QFO"*ͱ઀ଓ w "[VSF0QFO"*"1*LFZ͸QBTTXPSEʹ͋Γ·͢ʂ w ઈର(JUʹQVTI͠ͳ͍Ͱʂʂʂ w ·ͣDVSMͰ౤͛ΕΔ͔֬ೝͯ͠ΈΑ͏ʂ w ެࣜυΩϡϝϯτIUUQTMFBSONJDSPTPGUDPNKBKQB[VSFBJTFSWJDFTPQFOBJ RVJDLTUBSU UBCTDPNNBOEMJOF$QZUIPOOFXQJWPUTSFTUBQJ curl ‘<<ΤϯυϙΠϯτURL>>/openai/deployments/<<σϓϩΠ໊>>/chat/completions? api-version=2024-02-15-preview' \ -H 'Content-Type: application/json' \ -H ‘api-key: <<ೝূ৘ใ>>' \ -d '{"messages": [{“role":"user","content":"͜Μʹͪ͸ʂ"}]}'

Slide 83

Slide 83 text

5$"[VSF0QFO"*ͱ઀ଓ w EBSUEF fi OFίϚϯυΛ࢖ͬͯ஋Λ౉ͯ͋͛͠Α͏ʂ w EBSUEF fi OFίϚϯυ͔Βड͚औΔ࣌͸͜͏ʂ flutter run —-dart-define=API_URL=<<ΤϯυϙΠϯτURL>> -—dart- define=DEPLOY_NAME=<<σϓϩΠ໊>> —-dart-define=API_KEY=<<ೝূ৘ใ>> const apiUrl = String.fromEnvironment('API_URL');

Slide 84

Slide 84 text

5$"[VSF0QFO"*ͱ઀ଓ w ౤ߘϖʔδͰॻ͍ͨ಺༰Λ"1*ʹ౤͛ͯΈΑ͏ʂ w ݁Ռ΋දࣔͯ͠ΈΑ͏ w ώϯτϫʔυ w IUUQύοέʔδ w VUG IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 85

Slide 85 text

5$KTPOΛϞσϧʹม׵ w KTPOΛϞσϧʹม׵ͯ͠࢖ͬͯΈΑ͏ w ڍಈࣗମ͸͖ͬ͞ͱมΘΒͳͯ͘0,ʂ w ώϯτϫʔυ w KTPO@TFSJBMJ[BCMFύοέʔδ w CVJME@SVOOFSύοέʔδ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 86

Slide 86 text

5$ϩʔσΟϯάΛදࣔ͠Α͏ w ϩʔσΟϯάΛදࣔͯ͠ΈΑ͏ʂ w "1*Λୟ͍͔ͯΒ݁Ռ͕ฦͬͯ͘Δ·Ͱͷؒ w ώϯτϫʔυ w 1SPHSFTTJOEJDBUPST w 4UBUF IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 87

Slide 87 text

5$จ຺Λཧղͤ͞Α͏ w 0QFO"*͸จ຺΋ཧղͯ͠ฦ౴ͯ͘͠ΕΔ w NFTTBHFTʹࠓ·ͰͷNFTTBHFΛ٧ΊࠐΉ͜ͱͰՄೳ w ࢦࣔޠΛ࢖ͬͨΓ͠ΓͱΓΛ͢Δͱจ຺ཧղͯ͠Δ͔֬ೝͰ͖Δ curl ‘<<ΤϯυϙΠϯτURL>>/openai/deployments/<<σϓϩΠ໊>>/chat/completions?api- version=2024-02-15-preview' \ -H 'Content-Type: application/json’ \ -H 'api-key: <<ೝূ৘ใ>>' \ -d '{"messages": [{“role":"user","content":"͠ΓͱΓ͠Α͏"}, {“content":"ָͦ͠͏Ͱ͢ͶʂͦΕͰ͸ɺ࢝Ί·͢ɻ\n\nʲϦϯΰʳ", “role”:"assistant"}, {“role":"user","content":"͝·"}]}'

Slide 88

Slide 88 text

5$จ຺Λཧղͤ͞Α͏ w ࠓ·Ͱͷձ࿩಺༰Λอ࣋ͯ͠"1*ʹ౤͛ΕΔΑ͏ʹͯ͠ΈΑ͏ w ώϯτϫʔυ w ϩʔΧϧετϨʔδ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 89

Slide 89 text

5$νϟοτཤྺΛදࣔ͠Α͏ w Ϧετදࣔʹͯ͠νϟοτͬΆ͘͠Α͏ʂ w σβΠϯ΋ࣗ෼޷Έʹ༡ΜͰΈͯʂ w ώϯτϫʔυ w 4BGF"SFB w -JTU7JFX w Ϧόʔεදࣔ IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 90

Slide 90 text

5$ΤϥʔΛදࣔ w λΠϜΞ΢τΛઃ͚ͯΈΑ͏ w ඵܦͬͯ΋Ϩεϙϯε͕ͳ͚Ε͹ΤϥʔΛฦ͢Α͏ʹͳͲ w Կ͔͠ΒͷΤϥʔΛड͚औͬͨΒμΠΞϩάͷදࣔΛ͠Α͏ʂ w ώϯτϫʔυ w TIPX%JBMPH w USZDBUDI IUUQTHJUIVCDPNNJYJHSPVQ'MVUUFS5SBJOJOHQVMM

Slide 91

Slide 91 text

5$ঢ়ଶ؅ཧʹ͍ͭͯ஌Ζ͏ w 4UBUFGVM8JEHFU w 8JEHFUͦͷ΋ͷʹঢ়ଶʢTUBUFʣΛ͍࣋ͬͯΔ w TFU4UBUFΛ໌ࣔతʹߦ͏͜ͱͰ࠶ඳը͞ΕΔͷͰΘ͔Γ΍͍͢ w ଞͷ8JEHFUͰঢ়ଶʹมԽ͕͋ͬͨ࣌ʹ൓өͰ͖ͳ͘ɼখن໛ϓϩδΣΫτ޲͖ w 3JWFSQPE w ঢ়ଶΛ೚ҙͷ৔ॴ͔ΒΞΫηεՄೳʹ͢Δґଘؔ܎஫ೖϑϨʔϜϫʔΫ w #MPD w ΠϕϯτΛ࢖༻ͯ͠ঢ়ଶͷมߋΛτϦΨʔ͠ෳࡶͳঢ়ଶͷϑϩʔΛ؅ཧͰ͖ΔϥΠϒϥϦ w ϏδωεϩδοΫͱ6*Λ؆୯ʹ෼཭Ͱ͖ςετ͕؆୯ʹ

Slide 92

Slide 92 text

#MPDύλʔϯ TUBUF #MPDΫϥε͸ ৗʹTUBUFΛ࣋ͬͯΔ

Slide 93

Slide 93 text

#MPDύλʔϯ TUBUF #MPDΫϥε͸ ৗʹTUBUFΛ࣋ͬͯΔ ࣋ͬͯΔ࠷৽ͷTUBUFΛݟͯ 6*Λߏங͢Δ

Slide 94

Slide 94 text

#MPDύλʔϯ ઒ ʢTUSFBNʣ TUBUF

Slide 95

Slide 95 text

#MPDύλʔϯ ઒ ʢTUSFBNʣ TUBUF TUBUFΛྲྀ͢ ʢFWFOUʣ

Slide 96

Slide 96 text

#MPDύλʔϯ ઒ ʢTUSFBNʣ TUBUF TUBUFΛྲྀ͢ ʢFWFOUʣ

Slide 97

Slide 97 text

#MPDύλʔϯ ઒ ʢTUSFBNʣ TUBUF TUBUFΛྲྀ͢ ʢFWFOUʣ ྲྀΕͯ͘ΔͷΛ ଴ͪߏ͑ͯΔ ʢMJTUFOʣ

Slide 98

Slide 98 text

Ϋϩʔδϯά

Slide 99

Slide 99 text

Ϋϩʔδϯά 'MVUUFSָ͠Ί͔ͨͳʁ