みんなのPython勉強会#76での登壇資料
ʮPythonΛͬͯސ٬͔Βײँ͞ΕΔࣄΛ͢ΔͨΊʹ৺͕͚ͨ͜ͱʯ2021.12.14ΈΜͳͷPythonษڧձ #76Yuichi Nakazawa
View Slide
Web DesigningגࣜձࣾຊγεςϜٕݚʮࣄۀΛม͑ͨ։ൃձ͕ࣾݟΔPythonͷݱࡏʯ2
ࣄۀΛม͑ͨ։ൃձ͕ࣾݟΔPythonͷݱࡏ• ฐ͕ࣾPythonΛ࠾༻͖͔͚ͨͬ͠• Python / Django ͷ։ൃʹ͓͚ΔϝϦοτ• Web։ൃ࣌ͷίετͷͳ͠• ίϛϡχςΟ׆ಈ3
ࣄۀΛม͑ͨ։ൃձ͕ࣾݟΔPythonͷݱࡏ• ฐ͕ࣾPythonΛ࠾༻͖͔͚ͨͬ͠• Python / Django ͷ։ൃʹ͓͚ΔϝϦοτ• Web։ൃ࣌ͷίετͷͳ͠• ίϛϡχςΟ׆ಈ4
̌ˋɹ5
͓·͑ͩΕΑ• ݝੜ·Εҭͪ• גࣜձࣾຊγεςϜٕݚ ॴଐ• औక Web։ൃ෦σΟϨΫλʔʢӦۀɺਓࣄɺ։ൃͨ·ʹɾɾʣ• झຯɿ֨ಆήʔϜɺےτϨ• @y_nakazawa1220Yuichi Nakazawa6
גࣜձࣾຊγεςϜٕݚ• Web։ൃ͕ओྗ(SESͱडୗ)• Python/DjangoҊ݅Ͱɻ࠷ۙReactVueҊ݅ଟ͍• PyCon JPɺDjangoCongressΛத৺ʹεϐʔΧʔΛഉग़• اۀ͚ͷPythonߨ࠲• ࣥචOSSߩݙ• GEEKLAB.NAGANOͷӡӦJapan System Laboratory7
GEEKLAB.NAGANO• 2014ΑΓΤϯδχΞ͚ͷίϛϡχςΟεϖʔεͱͯ͠։ઃ• ΈΜͳͷPythonษڧձ # • աڈ̏ͷ։࠵• τʔΫɺ͘͘ձɺεϓϦϯτ• ΦϯϥΠϯʹͯʮEffectivePythonʯͷಡॻձΛ։࠵த
ΤϯδχΞઈࢍืूத9https://bit.ly/3lYrqY7
ʮPythonΛͬͯސ٬͔Βײँ͞ΕΔࣄΛ͢ΔͨΊʹ৺͕͚ͨ͜ͱʯ
QuestionࣄΤϯδχΞΛ͍ͯͯ͠ྑ͔ͬͨͳ͋ࢥ͏࣌ͲΜͳ࣌Ͱ͠ΐ͏͔ʁ11
ྫ͑ɾɾ• ৽͍͠ݴޠٕज़ΛͬͯίʔυΛॻ͍ͨͱ͖• ΩϨΠͳίʔυ͕ॻ͚ͨͱ͖• ։ൃͨ͠ͷΛϦϦʔεͨ͠ͱ͖• ސ٬ʢϢʔβʔʣ͔Βײँ͞Εͨͱ͖• etc..12
ྫ͑ɾɾ• ৽͍͠ݴޠٕज़ΛͬͯίʔυΛॻ͍ͨͱ͖• ΩϨΠͳίʔυ͕ॻ͚ͨͱ͖• ։ൃͨ͠ͷΛϦϦʔεͨ͠ͱ͖• ސ٬ʢϢʔβʔʣ͔Βײँ͞Εͨͱ͖• etc..13
ײँͷݴ༿خ͍͠• ۀվળͰ͖ͨ• ϏδωεΛ֦େͰ͖ͨ• ࣭αϙʔτ͕͋Γ͕͍ͨ• ҰॹʹࣄͰ͖ͯྑ͔ͬͨ• ·ͨҰॹʹࣄ͍ͨ͠14
ϞνϕʔγϣϯΞοϓʹܨ͕Δ• ࣗͷٕज़Ͱސ٬ʹߩݙͰ͖ͨ• Γߕ൹ɺୡײ• ։ൃͰಘͨݟΛڞ༗͍ͨ͠• ࠓճग़དྷͳ͔ͬͨ͜ͱΛ࣍ճ׆͔ͦ͏• ΑΓεΩϧΞοϓͯ͠ސ٬ͷཁʹԠ͍͑ͨ• ΤϯδχΞͱͯ͠ͷᛗ࣋Λ࣋ͯΔΑ͏ʹͳΔ15
ࠓͰͦ͜ɺ͜͏͍͏Λ͍ͯ͠·͕͢ɾɾ16
History of JSL17
History of JSL• ত51ۀ• େखSIerͷෛҊ݅ΈࠐΈܥͷҊ݅Λத৺ʹʢෛҊ݅ଟΊʣ• ϦʔϚϯγϣοΫΛػʹҊܹ݅ݮ• 2013ʹR&D෦Λઃཱ• ڭҭܥϕϯνϟʔͱίϥϘ• R&D෦͕த৺ͱͳͬͯPythonΛओ࣠ͱͨ͠WebܥҊ݅Λ෦Λ্ཱͪ͛• ಉ࣌ظʹΤϯδχΞ͚ίϛϡχςΟ GEEKLAB.NAGANOΛઃཱ18
Pythonʹग़ձ͏·Ͱͷฐࣾ• ྑ͍ҙຯͰѱ͍ҙຯͰɺ۪ʹΔ͜ͱ͕ಘҙͩͬͨɻࠔͬͨ࣌ͷJSLͱݴΘΕΔ͜ͱ͋ͬͨ• εΩϧηοτ͕߹Θͳͯ͘ɺͳΜͱ͔Δ• COBOLɺ.netɺCɺC++ɺJavaɺC#ɾɾ• ମܥతʹٕज़Λशಘ͢ΔΘ͚Ͱͳ͍ͷͰଐਓతʹͳΔ• ۀͰशಘ͢ΔͨΊɺ͓ͷͣͱۀ͕ଟ͘ͳΔ• ٕज़शಘʹରͯ͠ͷࢿͯ͜͠ͳ͔ͬͨ• ϨΨγʔͳҊ͕݅ଟ্͍ʹɺҊ݅ͷαΠΫϧͷૣ͍ʢฏۉ̏ϲ݄ఔʣ• Web͕ओྲྀʹͳΓͭͭ͋ΔதͰɾɾ19
ސ٬͔Βײँ͞ΕΔ͕ɾɾ20
ΤϯδχΞർฐ͢Δ• མͪண͍ͯ҆ఆͨ͠Ҋ݅ΛΓ͍ͨ• ྲྀಈతͳٕज़ཁૉ͕ෆ҆ཁૉʹͳΔ• ίʔυॻָ͚͍ͯ͠ͷϨϕϧͰͳ͍• ΤϯδχΞͷᛗ࣋Ͳ͜ΖͰͳ͍ɾɾ• ٳΈ͍ͨ• ษڧͨ͘͠ͳ͍21
ϦʔϚϯγϣοΫ22
Ҋܹ݅ݮ23
JSLͱPython24
JSLͱPython• 2013ʹࣾͷR&D෦ͰϓϩμΫτ։ൃʹ࠾༻ɻڭҭܥϕϯνϟʔͱίϥϘ• Python / Django / AWS• PyCon JPΛத৺ͱͨ͠ΧϯϑΝϨϯεͰ࣮Λൃද͢ΔΑ͏ʹͳΔ• ίϛϡχςΟͰͷܨ͕ΓʹΑΓɺPython/DjangoͷWebҊ݅Λ֦େ• Web։ൃ෦ͷ্ཱͪ͛• ࣾϫʔΫγϣοϓٕज़ͷԣల։• ίϛϡχςΟ͕͖͔͚ͬͰΤϯδχΞͷ࠾༻25
ಇ͖ํɺٕज़शಘʹࢿ• ͔̎̌̍̐ΒϦϞʔτϫʔΫΛ࠾༻• εʔύʔϑϨοΫε੍• ΧϯϑΝϨϯεࢀՃࢧԉ• ొஃ࣌ͷΠϯηϯςΟϒ• Udemy for Business• ٕज़ॻߪೖ• etc…26
DjangoʹΑΔWebΤϯδχΞҭͷಓDjangoCongress201927https://bit.ly/3CFL6oM
ةػײ ۦಈ։ൃ28
Pythonʹग़ձͬͨޙͷࣾ• Pythonͱ͍͏ج͕࣠ग़དྷͨ͜ͱʹΑΓɺPython/DjangoΛͬͨWeb։ൃͱ͍͏ίΞϏδωε͕ग़དྷͨɻSESʹ͓͍ͯظͷܖʹܨ͕ͬͨ• ΤϯδχΞͷڭҭ͘͢͠ͳΓɺPythonΛىͱͯ͠ଞͷٕज़ֶͼ͘͢ͳͬͨɹ• ίϯαϧPythonߨ࠲ग़དྷΔΑ͏ʹͳͬͨ• ʮ͚Δ͚ͩʯͷࣄ͔Βʮސ٬ʹఏҊ͚ͯ͠Δʯɺೳಈతͳࣄ͕ग़དྷΔΑ͏ʹͳͬͨ• ࠔͬͨ࣌ͷJSLํੑΛม͑ͯྑ͍ҙຯͰ͍ͬͯΔ29
Pythonʹग़ձͬͨޙͷࣾ• Pythonͱ͍͏ج͕࣠ग़དྷͨ͜ͱʹΑΓɺPython/DjangoΛͬͨWeb։ൃͱ͍͏ίΞϏδωε͕ग़དྷͨɻSESʹ͓͍ͯظͷܖʹܨ͕ͬͨ• ΤϯδχΞͷڭҭ͘͢͠ͳΓɺPythonΛىͱͯ͠ଞͷٕज़ֶͼ͘͢ͳͬͨɹ• ίϯαϧPythonߨ࠲ग़དྷΔΑ͏ʹͳͬͨ• ʮ͚Δ͚ͩʯͷࣄ͔Βʮސ٬ʹఏҊ͚ͭͭ͠Δʯɺೳಈతͳࣄ͕ग़དྷΔΑ͏ʹͳͬͨ• ࠔͬͨ࣌ͷJSLํੑΛม͑ͯྑ͍ҙຯͰ͍ͬͯΔ30
ఏҊͯ͠31
ೳಈతͳࣄ32
ͳʹ͕ྑ͍ͷ͔ʁ33
ೳಈతʹఏҊ͢Δ͜ͱͷϝϦοτ• ฐࣾଆ• ࣗࣄͱͯ͠ɺ։ൃʹऔΓΊΔ• ༷ͷᴥᴪʹΑΔɺޙΓ࡞ۀΛݮΒͤΔ• ܁Γฦ͠ͷ࡞ۀґཔɺଞࣾͷ͝հΛ͚ͯ͠Δ• ސ٬ଆ• ݟ͑ͳ͍ίετΛͬͯ͘͜ͱʹΑΓɺػೳΛ࣮ݱ͢ΔͨΊʹɺͳʹ͕ඞཁͳͷ͔Λೲಘ্͍ͨͰൃ͚Δ• ϦϦʔεޙͷӡ༻อकʹ͍ͭͯҙ͚ࣝͯ͠ΔΑ͏ʹͳΔ• ҆৺ײ34
ఏҊ࣌ʹ৺͕͚͍ͯΔ͜ͱ35
৺͕͚͍ͯΔ͜ͱ1. ʮͳͥɺΔͷ͔ʯΛސ٬ͱҰॹʹߟ͑Δ2. ݟ͑ͳ͍ίετʹ͍ͭͯߟ͑Δ3. ن༧ࢉʹదͨ͠͝ఏҊ4. ͜·Ίʹސ٬ͱίϛϡχέʔγϣϯΛऔΔ36
࣮ࡍʹ͋ͬͨέʔεΛྫʹ• ސ٬ɺඇΤϯδχΞͷํ• BtoC͚ͷεϚϗΞϓϦΛ࡞Γ͍ͨ• Ϣʔβʔຖͷσʔλཧ͕ඞཁ• ը૾PDFͷΑ͏ͳίϯςϯπཧ͍ͨ͠37
1.ʮͳͥɺΔͷ͔ʁʯΛސ٬ͱҰॹʹߟ͑Δ38
εϚϗΞϓϦʹiOS/Android ωΠςΟϒΞϓϦ39
ωΠςΟϒΞϓϦͰग़དྷΔ͚Ͳɾɾ• ωΠςΟϒΞϓϦΛ࡞Δͱҙ֎ͱίετ͕͔͔Δ• Apple Developer Programʢ$99/ʣGoogle Play Console($25 ొ࣌)• 1ճͷOSΞοϓσʔτʹରԠ͢Δอकඅ༻• ΞϓϦΤϯδχΞ͕WebΤϯδχΞʹൺͯগͳ͍ͨΊଐਓԽ͕ͪ͠• ϦϦʔεޙͷอकɾӡ༻·ͰαϙʔτͰ͖ͳ͍Մೳੑɾɾ40
ώΞϦϯάͯ͠ΈΔͱɾɾ• εϚϗΞϓϦɺ֤ΞϓϦετΞ͔ΒΠϯετʔϧ͢Δͱ͍͏ઌೖ؍• ωΠςΟϒΞϓϦͰͳ͘ͱཁ݅ΛຬͨͤΔ͜ͱଟ͍• σόΠε੍ޚඞཁͳ͍• PUSH௨ෆཁ• εϚϗʹ࠷దԽ͞Ε͍ͯΔWebΞϓϦͰՄ41
݁Ռɾɾ• WebΞϓϦͰͳ͠• React + Django (Django REST framework)• ༻͢Δٕज़ͷࢄଐਓԽΛ͛Δ• iOS / AndroidͷOSґଘ͕ແ͘ڞ༻Ͱ͖ΔͨΊଞͷػೳ࣮ʹ༧ࢉΛ͑Δ42
ώΞϦϯά͍ͯ͠Δͱɾɾ43
͋ΕΓ͍ͨ͜ΕΓ͍ͨ44
༷ͷഁɾɾ45
ݪʹཱͪฦͬͯ46
ʮͳʹΛΓ͍ͨͷ͔ʯΛ͏Ұɺސ٬ʹߟ͑ͯ͘47
ड͚Ͱͳ͘48
ࣗࣄͰҰॹʹߟ͑ͯΈΔ49
Ͳ͏͢Εྑ͍ΞϓϦ͕ग़དྷΔͩΖ͏͔ʁ50
51
2.ݟ͑ͳ͍ίετʹ͍ͭͯߟ͑Δ52
ݟ͑ͳ͍ίετ• ސ٬ࢹͰߟ͑ͨ߹ɺཁ݅ͷΞϓϦΛ։ൃ͢Δͷ͕࠷ऴత• ΞϓϦͷػೳɺUI/UXͱ͍ͬͨɺʹݟ͑Δػೳʹ͕ͪ͠• ϦϦʔεޙͷӡ༻Πϝʔδ͕ग़དྷ͍ͯͳ͍͜ͱଟ͍• ։ൃ͍ͨ͠ΞϓϦʹΑΔ͕ɺόοΫΤϯυͷ։ൃ͕ඞཁͳ͜ͱ͕ଟ͍• ࠓճͷέʔεϢʔβຖͷσʔλཧίϯςϯπཧ͕ඞཁ53
ࠓճɺඞཁͱࢥΘΕΔͷ• Ϣʔβʔใɺ֤छίϯςϯπ• ೝূɺೝՄ• Πϯϑϥߏ• ֤छίϯςϯπͷCRUD• ϩάཧ• CI• etc…54
͜ΜͳʹඞཁͳΜͰ͔͢ʂʁ😵55
ஸೡʹ͓͑͢Δ͜ͱ͕େ56
ஸೡʹ͓͑Δ͜ͱ͕େ• ͔Γ͍͢จݴͰ͑Δ• ͍จষΊͯɺਤઆΛ༻͍Δ• ͍ͨͣΒʹΧλΧφޠΛ༻͍ͳ͍• ϝϦοτɾσϝϦοτΛ͑Δ• ٕज़ϨϕϧʹԠͯ͡ɺ뱌ͯ͠ձΛ͢Δ• ͍ͬͯͯવͷΑ͏ͳಠΓΑ͕Γͳ͑ํɺ͋ͱͰτϥϒϧʹ57
ݟ͑ͳ͍ίετΛʮݟ͑ΔԽʯͯ͠ೲಘͯ͠Β͏58
࡞ͬͯऴΘΓͰͳ͘ઌΛݟ௨ͨ͠ఏҊ59
60
3. ن༧ࢉʹԠͨ͡͝ఏҊ61
ੜʑ͍͠Ͱ͋Γ·͕͢ɾɾ• Ϗδωεͱͯ͠εέʔϧ͢Δ·Ͱɺ։ൃʹճͤΔ༧ࢉ͕গͳ͍͜ͱ͋Δ• தখاۀɺݸਓࣄۀओ• ۚ༥ػ͔ؔΒ༥ࢿΛड͚Δ߹ɺ·ͣಈ͘ͷΛݟͤΔ͜ͱ͕େࣄ• ୯ͷิॿۚॿۚͩͱϥϯχϯάίετ͕͔͔ΔΫϥυܥͷΠϯϑϥαʔϏεͷఏҊͷํ͕͍͠62
ΤϯδχΞ͋Δ͋ΔͰ͕͢ɾɾ• ৽͍͠αʔϏεΛ͍͍ͨ• ৽͍͠ݴޠΛ͍͍ͨ• ৽͍͠ΞʔΩςΫνϟΛࢼ͍ͨ͠• etc…63
ٕज़తཉٻΛຬ͍ͨͨ͠64
έʔεόΠέʔεͰߟ͑Δ• ྲྀߦΓΑΓशख़ٕͨ͠ज़ख๏ͷํ͕ίετΛ͑ΒΕΔ• ଐਓԽ͠ͳ͍ɾɾ͍ͬͯΔΤϯδχΞ͕ଟ͍ͷ• शख़͕͍ٕज़ٯʹίετʹͳΔ͜ͱɾɾ• ॳظ։ൃͰͲ͜·ͰΔ͔ɾɾʢԽ/CI etc…ʣ• ඞཁͳػೳͰ͋ͬͨɺʮࠓඞཁͳͷ͔ʯɺʮকདྷʯ͋Εྑ͍ͷ͔Λཧ͢Δ• σʔλཧDjangoͷཧαΠτͰΔͷख65
ΠϯϑϥબఆΈͲ͜Ζ• ैྔ՝ۚͷΫϥυαʔϏεෆ҆ʹͳΔސ٬͍Δɾɾ• AWSͷ֤छαʔϏεɺݟੵΓπʔϧΛ༻ͯ͠24࣌ؒՔಇͨ͠߹ͷֹ݄Λఏࣔ͢Δ• ௨৴ྉɺఆ͍ͯ͠ΔଓͱτϥϑΟοΫΛ໌্ࣔͨ͠Ͱ࠷େͷֹ݄Λఏࣔ͢Δ• Ϩϯλϧαʔόʔɺֹ݄ݻఆͰ͍҆ϓϥϯ͕ଟ͍͕ɺεΫϥον։ൃΛ͢Δ߹ɺύʔϛογϣϯͷ੍ݶ͕͋Γ։ൃͮ͠Β͍• ʮAmazon lightsailʯ੍ݶ͕͋ΔͷͷɺఆֹͰ͑ΔͷͰศར66
ٕज़తཉٻେࣄ67
తͱखஈΛΕͣʹ68
࣌ʹ͋Δ͖ΛࣺͯΔ69
4. ͜·Ίʹސ٬ͱίϛϡχέʔγϣϯΛऔΔ70
ސ٬ʹ҆৺ײΛ• ϞοΫΛૣΊʹ࡞ͯ͠ސ٬ʹ֬ೝͯ͠Β͏• ૣ͍ஈ֊Ͱ༷༻ײͷᴥᴪΛແ͘͢• ͜·ΊʹਐḿΛ͑Δ• ϝʔϧ͔ΒSlack• աͳ৺Λސ٬ʹ͔͚ͳ͍• ͪ͜ΒͷଆͷؾҾ͖క·Δ71
ސ٬ͱͷؔੑ࡞Γ• ৴པؔΛங͘ͷ͕େࣄ• ཁٻ௨ΓͷࣄΛ͢Δ͜ͱେલఏ• ࡶஊ৯ࣄΛҰॹʹͰ͖Δͱϕλʔ• ʢڞ௨ͳझຯ͕͋Δͱ࠷ߴʣ72
ސ٬͔Βײँ͞ΕΔࣄΛ͢ΔͨΊʹ৺͕͚ͨ͜ͱ1. ʮͳͥɺΔͷ͔ʯΛސ٬ͱҰॹʹߟ͑Δ2. ݟ͑ͳ͍ίετʹ͍ͭͯߟ͑Δ3. ن༧ࢉʹదͨ͠͝ఏҊ4. ͜·Ίʹސ٬ͱίϛϡχέʔγϣϯΛऔΔ73
ͱݴ͏ͷɾɾ74
৭ʑࣦഊ͠·ͨ͠ɾɾ1. ࠷৽ͷٕज़ɺख๏ʹ߆Γࣦ͗ͯ͢ഊ2. ΦʔόʔεϖοΫͳఏҊΛࣦͯ͠ഊ3. ӦۀͰࣦഊ4. ίϛϡχέʔγϣϯෆͰࣦഊ75
76
·ͱΊ• ސ٬͕࣮ݱ͍ͨ͜͠ͱΛώΞϦϯά͠ͳ͕ΒࣗࣄͰߟ͑ͯΈΔ• ݟ͑ͳ͍ίετΛʮݟ͑ΔԽʯͯ͠ɺઌΛݟ௨ͨ͠ఏҊΛ͢Δ• අ༻ͱ૬ஊͯ͠ɺ࣌ʹ͋Δ͖ΛࣺͯͯΈΔ• ސ٬ͱͷ৴པ͕ؔେ• ސ٬͕تΜͰΒ͏ఏҊࣄ͕ग़དྷΕɺ࠶͓͕͚͍ͨΓɺଞࣾʹ͝հ͚ͯ͠Δ• ΤϯδχΞͱͯ͠ͷΓߕ൹Λײ͡ΒΕΔ77
ͳ͔ͳ͔͍͠78
ఏҊͰ͖Δ͕ݮ͖͍ͬͯͯΔɾɾ•ͦͦ ཁ݅ఆ͔ٛΒೖΕΔҊ͕݅ݮগ•ఏҊͰ͖ΔϑΣʔζɺػձͷݮগ•SESʹΑΔظΞαΠϯʹΑΔɺϚϯωϦԽʢਓؒؔɺٕज़ʣ•͵Δ·౬ʹਁ͔ͬͯ͠·͏•ΤϯδχΞͱͷؔΘΓ͕ओʹͳΓɺඇΤϯδχΞͷํͱؔΘΔػձ͕ͳ͍ͨΊࢹ͕ڱ͘ͳΓ͕ͪ•݁ՌɺఏҊͰ͖Δਓ͕ݶΒΕͯ͠·͏ɾɾ79
·ͩ·ͩಓ80
ةػײ ۦಈ։ൃ81
82
Thanks to Stapyʂʂ83
ݟͭΊ͢ྑ͍ػձʹͳΓ·ͨ͠• ҆ఆͨ͠ϏδωεϞσϧʹ͙͋ΒΛ͔͍ͯ͠·͍ͬͯͨ• ࣾձΛݴ͍༁ʹͯ͠͠·͍ͬͯͨ• ձࣾͷһͱͯ͠ɺΤϯδχΞͱͯ͠ग़དྷΔ͜ͱԿͳͷͩΖ͏ɾɾ•དྷɺ͏Ұʮةػײۦಈʯͷਫ਼ਆͰऔΓΜͰ͍͖͍ͨ84