@IT ソフトウェア品質向上セミナー AI/機械学習、自動化で開発現場にも訪れるシンギュラリティにどう備えるか https://itmedia.smartseminar.jp/public/seminar/view/1250
基調講演時の資料です。
؝ٝإفزכչ堣唒ח➂ָさׇպؙحؙػحسָ㹋騧ׅ倜׃ְٔٔ٦أؿٗ٦הכؙحؙػحس吳䒭⠓爡䪮遭鿇ٌغ؎ٕ㛇湍ؚٕ٦فؚٕ٦فꞿ薲ス兰㣐1/58
View Slide
荈䊹稱➜• ໜ࿊ ஐେ / @slightair• 20143݄ iOSΞϓϦΤϯδχΞͱͯ͠ΫοΫύουʹೖࣾ• ೖ͔ࣾͯ͠ΒͣͬͱΫοΫύουiOSΞϓϦͷ։ൃʹܞΘΔ• ٕज़෦ϞόΠϧج൫άϧʔϓʹͯࣾͷϞόΠϧΞϓϦ։ൃͷج൫උΛਐΊ͍ͯΔ2/58
ؙحؙػحس،فٔJ04"OESPJEߘ͞ΕͨϨγϐΛݕࡧɾӾཡ͢ΔΞϓϦ1• Ϩγϐͷݕࡧ• Ϩγϐͷߘ• ݕࡧʹཔΒͳ͍Ϩγϐͱͷग़ձ͍• ϨγϐΛ௨ͨ͠Ϣʔβಉ࢜ͷίϛϡχέʔγϣϯ1 ॳճϦϦʔε iOS: 200911݄ / Android: 20121݄3/58
،آؑٝت• ϞόΠϧΞϓϦ։ൃମ੍ͷมભ• ։ൃΛਐΊΔ্Ͱຬ͍ͨͨ͠ཉٻɺͦΕΛ࣮ݱ͢ΔͨΊʹ• ʮػցʹਓ͕ؒ߹ΘͤΔʯ৽͍͠ϦϦʔεϑϩʔ• αʔϏεɾΞϓϦͷ࣭ʹର͢Δߟ͑ํ• ·ͱΊ4/58
ٌغ؎ٕ،فٔ涪⡤ⵖך㢌鼂5/58
ٌغ؎ٕ،فٔ涪⡤ⵖך㢌鼂1. ΞϓϦ։ൃઐνʔϜͷ࣌2. ෳͷνʔϜͰͻͱͭͷΞϓϦΛ։ൃ͢Δ࣌3. ෳͷαʔϏεɾΞϓϦΛల։͢Δ࣌6/58
،فٔ涪㼔ث٦يך儗➿䎃劍7/58
涪⡤ⵖ• ΞϓϦ։ൃઐͷ෦ॺ͕͋Δ• ଞ෦ॺ͔ΒػೳՃͷґཔΛड͚ͯΞϓϦͷमਖ਼Λߦ͏• ϦϦʔε͍ͨ͠ػೳ͕ͨ͠Βಈ࡞֬ೝޙϦϦʔε͢Δ• GitHub Enterprise ͰίʔυɾϓϩδΣΫτΛཧ͢Δ8/58
9/58
涪鋉垷ך䭁㣐חさׇؿٗ٦ך侭⪒• αϒϛοτɾϦϦʔε࡞ۀΛ࣋ͪճΓͰߦ͑ΔΑ͏ʹखॱΛ·ͱΊΔ• ίʔυϨϏϡʔʹΑͬͯΞϓϦɾίʔυͷ࣭Λ୲อ͢Δ• ϢχοτςετΛॻ͍ͯCIΛճ͢• γφϦΦςετ/UIςετͷඋΛ͡ΊΔ10/58
醱侧ךث٦يדמהאך،فٔ涪ׅ儗➿䎃䖓劍։䎃11/58
涪⡤ⵖ• ৫ମ੍͕มΘΓɺͦΕͧΕྗྖҬΛ࣋ͭ෦ॺʹΞϓϦΤϯδχΞ͕ࢄͨ͠• ෳͷαʔϏε։ൃ෦ॺͱϞόΠϧج൫ɺςετΤϯδχΞ͕ίϛοτ͢Δ• νʔϜͦΕͧΕͷྗྖҬʹಛԽͯ͠ಈ͚ΔΑ͏ʹͳͬͨ• ίʔυϨϏϡʔνʔϜΛ·͍ͨͰߦ͏12/58
13/58
ٔٔ٦أؿٗ٦• ͍͍ͩͨ2िؒͰ1ճϦϦʔε͢ΔΠςϨʔγϣϯΛճ͢͜ͱʹͨ͠• ϦϦʔε։ൃऀࢪࡦͷ߹ʹ߹Θͤॊೈʹௐͨ͠• ϦϦʔεϚωʔδϟʔͱ͍͏ϦϦʔε͝ͱͷऀΛ࣋ͪճΓͰཱͯɺΠςϨʔγϣϯதͷมߋ෦ॺؒͷ࿈ܞΛ·ͱΊͨ22 ΫοΫύουϞόΠϧΞϓϦͷ։ൃମ੍ͱϦϦʔεϑϩʔ - ΫοΫύου։ൃऀϒϩά14/58
؎ذٖ٦ءّٝךⰻ鏬1. ϦϦʔεʹؚΊΔػೳΛݕ౼͢Δ/issueΛ࡞Δ2. ։ൃɾ࣮(10Ӧۀ)• PRకΊΓ(։ൃظؒͷ8ɺίʔυϨϏϡʔͱमਖ਼ͷ༨༟Λ࣋ͭͨΊ)• ίʔυϑϦʔζ3. ςετɾಈ࡞֬ೝɾमਖ਼(3Ӧۀ)4. αϒϛοτɺϦϦʔε• iOS৹ࠪͰҰिؒ͘Β͍ͬͨޙϦϦʔε• Android 2͓͖ʹ 10%ɺ50%ɺ100% ͱஈ֊తϦϦʔε5. ϦϦʔεޙࢹ(ΫϥογϡɺϦΫΤετΤϥʔɺ͝ҙݟɾ͓͍߹Θͤ)15/58
16/58
17/58
18/58
ٔٔ٦أ׀הך䮶鵤• ϦϦʔε͝ͱʹৼΓฦΓɺظؒதʹى͖ͨͦͷରࡦΛڍ͛ɺվળΛ܁Γฦͨ͠3• ϑϩʔΛָʹճ͢ɺ࣭Λ্͛ΔͨΊͷΛ͢Δ4• ϦϦʔεखॱissueͳͲͷࣗಈ࡞• issuePRͷ࡞ʹ߹ΘͤఆܕจΛBotʹߘͤ͞Δ• ։ൃ্Α͘ϋϚΓ͕ͪͳϙΠϯτ• ঢ়ଶͷΈ߹ΘͤΛཏ͢ΔνΣοΫϦετ4 ΞϓϦ։ൃͷ࣭ఈ্͛ࢪࡦΛWebhooksͰBot͕ࢧԉ͢Δੈք - ΫοΫύου։ൃऀϒϩά3 KPTͰ೪Γڧ࣭͘վળʹऔΓΜͩ - ΫοΫύου։ൃऀϒϩά19/58
20/58
㉏겗暴㹀ך倵瘻㼔欽ךغ٦آָّٝ㟓⸇• ಛఆͷࢪࡦ͚ͩΛೖΕΔόʔδϣϯΛ࡞Γ͍ͨέʔε͕૿͖͑ͯͨ• ϦϦʔε࣌ΛݫີʹܾΊͯࢪࡦΛग़͍ͨ͠• ޮՌݕূͷͨΊ͠Β͘ಉҰը໘ʹଞͷࢪࡦΛೖΕͨ͘ͳ͍• ༏ઌͷߴ͍ࢪࡦͳͷͰίʔυϨϏϡʔͳͲΛ༏ઌͯ͠ཉ͍͠• ଞ෦ॺͷࢪࡦɾޮՌݕূΛϒϩοΫͯ͠͠·͏• ࢥͬͨΑ͏ʹࢪࡦ͕ଧͯͳ͍ɺ։ൃࢪࡦͷݕূΛ͋͛ΒΕͳ͍͔ͱ͍͏ෆຬ͕ଟ͘ͳΔ21/58
22/58
㉏겗؝٦سٖؽُ٦ח气䒦• PRͷ༰ɺίϯςΩετΛཧղ͢Δ·Ͱͷෛ୲͕େ͖͍• εϖϧϛε/ελΠϧ่ΕͳͲͷࠣࡉͳϛεͷࢦఠ͕ͭΒ͍• ϓϩδΣΫτͷίʔυཧղͷࠩͳͲʹΑΓҰ෦ͷϨϏϡΞʔෛ୲͕ूத͢Δ• ϚʔδͰ͖Δ·ͰͷϨϏϡʔ͕͍ͪ23/58
倵瘻؝٦سٖؽُ٦ך頾䬐幾ׅ• ػցతʹίʔυͷΛࢦఠ͢ΔπʔϧΛ։ൃɾಋೖ͢Δ5• มߋΛΘ͔Γ͘͢ॻͨ͘ΊͷςϯϓϨʔτΛඋ͢Δ6• ίʔυϨϏϡʔͰԿΛ͖͢ͳͷ͔࠶֬ೝ͢Δ• εϖϧϛε/ελΠϧ่ΕͳͲͷࠣࡉͳϛε• ࣮ํ๏ɺ࣮ݱखஈͷଥ͞"• ػೳ͕ҙਤ௨Γ࣮͞Ε͍ͯΔɺదͳϩάΛऩूͰ͖͍ͯΔ͔6 ։ൃΛ্͛ΔͨΊͷ Pull-Request ͷͭ͘Γํ - ΫοΫύου։ൃऀϒϩά5 Danger - https://danger.systems/ruby/24/58
25/58
倵瘻؟ـىحز⡲噟ך荈⹛⻉• ϦϦʔεϚωʔδϟʔ͕ख࡞ۀͰαϒϛοτ͢Δͷେมɺؒҧ͍ى͖͍͢• αϒϛοτʹඞཁͳূ໌ॻྨͷڞ༗ՄೳͳݶΓݮΒ͍ͨ͠• CIϚγϯͰΞϓϦͷϏϧυɺ৹ࠪఏग़·Ͱߦ͑ΔΑ͏ʹͨ͠7• ChatBotʹαϒϛοτͷࢦࣔΛग़͢ͱJenkinsδϣϒ͕ΩοΫ͞Εfastlane8ͰҰ࿈ͷ࡞ۀ͕࣮ߦ͞ΕΔ8 fastlane - App automation done right - https://fastlane.tools7 iOSΞϓϦͷαϒϛοτࣗಈԽͱূ໌ॻཧͷޮԽ - ΫοΫύου։ൃऀϒϩά26/58
27/58
28/58
醱侧ך؟٦ؽأ٥،فٔ㾜ׅ儗➿䎃։29/58
涪⡤ⵖ• ΫοΫύουΞϓϦҎ֎ʹΞϓϦΛϦϦʔε͢ΔαʔϏεͷ։ൃ͕૿͖͑ͯͨ• ΫοΫύουΞϓϦҎ֎ͷΞϓϦͰಉ͡ΈΛͬͯ։ൃɾݕূΛ্͍͛ͨधཁ͕͋ΓɺطଘπʔϧΛྲྀ༻͍ͯ͠Δ30/58
31/58
涪鹌♳ד弫׃ְ妜実ծ㹋植ׅחכ32/58
涪鹌♳ד弫׃ְ妜実• ՄೳͳݶΓࢪࡦͷ։ൃͱݕূΛ͘͢ճ͍ͨ͠• νʔϜΛ͚Δ͜ͱͰͦΕͧΕͷඪୡࢪࡦͷ࣮ݱೳྗΛ࠷େԽ͍ͯ͠Δ• ։ൃΛ্͛ͭͭαʔϏεɾΞϓϦͷ࣭ΛԼ͛ͨ͘ͳ͍• ࣋ଓՄೳͳ։ൃڥΛҡ͍࣋ͨ͠ɺίʔυͷ࣭Λอ͍ͪͨ33/58
涪ד儗ַַָגְךכוֿזךַ• Ϗϧυ͕͍࣌ؒʁ• ίʔυϨϏϡʔͷෛ୲͕େ͖͍ʁ• ͕͔͔࣌ؒΔɺྔ͕ଟ͍• ϨϏϡʔ͕͍ͪ• ͦͷଞʁ34/58
倵瘻涪ד儗ַַָהֿ锃叨׃• ։ൃڥͷ༷ʑͳΛܭଌ͢Δ• ֤։ൃऀͷϚγϯͰͷϏϧυ࣌ؒ• PR͕࡞ΒΕ͔ͯΒϚʔδ͞ΕΔ·Ͱͷ࣌ؒ• ि͝ͱͷϚʔδPR• ϚΠϧετʔϯ͝ͱͷϚʔδPR• ։ൃؔऀͰٞ͢Δ35/58
36/58
37/58
38/58
穠卓ؽٕسך䖉儗כ搀鋔דֹזְ• શମͷϏϧυ࣌ؒΑΓɺ։ൃ࣌ͷमਖ਼ͱϏϧυͷ܁Γฦ͕͠͡Θ͡Θޮ͍͍ͯΔ• ࣗಈԽͱผͷΞϓϩʔν͕ඞཁ• ϞδϡʔϧׂΛਐΊΔͳͲݡ͘ϏϧυͰ͖ΔΑ͏ʹΞϓϦͷߏΛม͑Δ• εϖοΫͷߴ͍PCΛಋೖ͢Δ39/58
穠卓؝ىُص؛٦ءّٝ؝أزָ넝ְ• ࢪࡦͷίϯϑϦΫτࢭεέδϡʔϧௐͷͨΊͷใڞ༗ඞཁ͕ͩෛ୲͕େ͖͍• ίʔυϨϏϡʔΛߦͬͨΓɺ͍ͬͯͨΓ͢Δ࣌ؒແࢹͰ͖ͳ͍• issueͷཧ͕ਓʹΑͬͯෆ͍ͯͯ͠ɺϦϦʔεϚωʔδϟʔ͕ۤ࿑͍ͯ͠Δ• ίετΛ͔͚͗ͣ͢ʹ҆ఆͯ͠ϦϦʔεΛճ͍ͨ͠40/58
荈⹛⻉ׅץֹהֿהכוֿזךַ• ܁Γฦ͠ߦ͏ܾ·ͬͨ࡞ۀͷෛ୲ΛݮΒ͢• ਓ͕ؒؒҧ͍͑͢ͱ͜ΖΛݮΒ͢• ਓ͕ؒෆಘҙͳͱ͜ΖΛػցʹ·͔ͤΔ• ڥͷ౷Ұɾঢ়ଶͷ࠶ݱΛ༰қʹͰ͖ΔΑ͏ʹ͢Δ• ڧ͍ݖݶΛ࣋ͭΞΧϯτɾূ໌ॻΛڞ༗͠ͳͯ͘ࡁΉΑ͏ʹ͢Δ41/58
չ堣唒ח➂ָさׇպ倜׃ְٔٔ٦أؿٗ٦42/58
؝ٝإفزכչ堣唒ח➂ָさׇպ• ਓؒΛத৺ͱ͢Δߟ͑ํΛΊɺػցΛத৺ͱ͢Δߟ͑ํʹγϑτ͢Δ• ਓؒͷϖʔεʹै͏ͱͦͷ࣌ʑͷ߹Ͱ่ΕΔɺػցͷϖʔεʹਓ͕ؒ߹Θͤͨ΄͏͕ޮతͳͷͰͳ͍͔• ʮػցʹΒͤΔʯ͔Βʮػցʹ߹ΘͤΔʯ43/58
倜׃ְٔٔ٦أؿٗ٦ • ຖि༵ۚͷૣேʹίʔυΛϏϧυ͠ɺࣗಈతʹՌΛαϒϛοτ/Ξοϓϩʔυ͢Δ9• ։ൃऀ͜ͷλΠϛϯά·Ͱʹ࣍ͷϦϦʔεʹؚΊ͍ͨमਖ਼ΛϚʔδ͢Δ• ։ൃνʔϜͰेʹಈ࡞֬ೝͨ͠ίʔυͷΈΛϚʔδ͢Δ• Ϛʔδޙʹෆ۩߹͕ݟ͔ͭͬͨΒɺมߋΛ͙͢ʹࠩ͢͠• ϦϦʔεީิ൛ͷ؟ـىحز،حفٗ٦س䖓ʹશମͷಈ࡞֬ೝΛߦ͏ɺ֤։ൃνʔϜͷϦϦʔεఆΛΫϦΞͨ͠ΒϦϦʔε͢Δ• க໋తͳ͕ݟ͔ͭͬͨΒͦͷόʔδϣϯͷϦϦʔεΛεΩοϓ͢Δ9 ΫοΫύουΞϓϦΈΜͳ͕৸͍ͯΔؒʹαϒϛοτ͞ΕΔ - ΫοΫύου։ൃऀϒϩά44/58
45/58
46/58
倜׃ְٔٔ٦أؿٗ٦חזג״ַֿה• ϦϦʔεαΠΫϧ͕ૣ͘ͳͬͨɺϦϦʔεճ͕૿͑ͨ• ֤։ൃνʔϜ͕εέδϡʔϧΛҙࣝͯ͠ߦಈͰ͖ΔΑ͏ʹͳͬͨ• ϦϦʔεΛࢭΊΔ΄Ͳͷॏେͳʹ։ൃνʔϜ͕Ϛʔδલʹؾ͖ͮ͘͢ɺͦͷ࣌Ͱ৯͍ࢭΊΒΕΔΑ͏ʹͳͬͨ• ෦ॺΛԣஅ͢Δௐ͕΄΅ඞཁͳ͘ͳͬͨ• ຖिϦϦʔεʹΑΔ҆৺͔Βɺमਖ਼Λ࣍ʹճ͢ͱ͍͏બΛ༰қʹऔΓ͘͢ͳͬͨ47/58
倜׃ְٔٔ٦أؿٗ٦ד㔭גְֿה• ϦϦʔεεΩοϓ͕΄΅Ͱ͖͍ͯͳ͍• ͜ͷ࣌ظʹೖΔͣͩͬͨͷͱ͍͏ҙ͔ࣝΒಀ͛ΒΕͣɺमਖ਼ΛੵΜͰखಈ࠶αϒϛοτΛߦ͏͜ͱ͕͋Δ• ࠶αϒϛοτ͢Δͱͯ͠ɺ৽͘͠க໋తͳෆ۩߹ΛೖΕΔ͜ͱ͕ͳ͍Α͏ʹ৻ॏʹ͢͢Ί͍ͯΔ• fastlane deliver ͷෆ۩߹Ͱࣗಈαϒϛοτ͕ෆ҆ఆͳ͜ͱ͕͋Δ• ج൫νʔϜͰ fastlane ʹίϛοτ͍ͯ͠ΔͷͰπʔϧͷमਖ਼Λଓ͚͍ͯ͘48/58
49/58
؟٦ؽأ٥،فٔךㅷ颵ח㼎ׅ罋ִ倯50/58
倜׃ְؿٗ٦ךַㅷ颵חכ孡⢪גְ• ෆ۩߹ͷ͋ΔϦϦʔεΛͯ͠͠·͏͜ͱͰɺϢʔβʔʹෆརӹ͕͍͚͋ͬͯͳ͍• ϢʔβʔϑΝʔετͷՁ؍Λ͏·͘ڞ༗Ͱ͖͍ͯͨͷͰɺ࣭ΛकΔͨΊʹ࣌ؒΛ͔͚Δ͖ͱ͍͏ײ֮ࣗવͱ͍࣋ͬͯͨ• ݁ՌతʹαϒϛοτɾϦϦʔεલͷಈ࡞֬ೝΛखް͘͢Δ͜ͱʹܨ͕͍ͬͯͨ51/58
涪ث٦يָㅷ颵؝ٝزٗ٦ٕדֹ״ֲח• ൃੜͨ͠ෆ۩߹ͷରԠʹ͍ͭͯ୭͕ߟ͑Δͷ͔͖ͬΓ͍ͤͨ͞• ෆ۩߹ରԠͷඞཁੑɺରԠํΛߟ͑ΔͳΒ։ൃνʔϜ͕దͷͣ• ϦϦʔεલʹൃ֮ͨ͠ෆ۩߹௵͖͠Βͳ͍ͱ͍͚ͳ͍ͱ͍͏ࢥ͍ࠐΈΛղফ͢Δ• ෆ۩߹Λ͘͢ݕ͠ɺͦͷରॲΛͲ͏͖͔͢։ൃνʔϜͰߟ͑ΒΕΔΑ͏ʹ͢Δ• ࣍ͷ։ൃͰࣅͨΑ͏ͳෆ۩߹Λ࢈·ͳ͍Α͏νʔϜͰؾʹ͔͚ΒΕΔΑ͏ʹ͢Δ52/58
ٔٔ٦أ傍גㅷ颵衅הׁזְחכ• ෆ۩߹ͷϨϕϧΛߟ͑Δɺக໋తͳͷɺܰඍͳͷΛ۠ผ͢Δ• ͯ͢ͷෆ۩߹Λ͢ͱ͍͏͜ͱʹͱΒΘΕͳ͍• ͦͷෆ۩߹Ϣʔβʹͱͬͯෆ߹͕ى͖Δͷͳͷ͔ɺ։ൃɾӡӦଆʹͱͬͯෆ߹͕ى͖Δͷͳͷ͔ɺͰରԠΛߟ͑Δ53/58
ذأز٥⹛⡲然钠ך⸬桦⻉• ٳͳͲਓͷಈ͍ͯͳ͍࣌ؒʹࣗಈςετ݁ՌΛػցʹͦΖ͑ͯΒ͏• ҰճͷϦϦʔεظؒͰͷςετڥͷཏΛ͖͋ΒΊΔ10ʢը໘αΠζɺOSόʔδϣϯͳͲͷΈ߹Θͤʣ• ͋ΔఔͷظؒͰΈͨ࣌ཏ͞Ε͍ͯΔΑ͏ʹ͢Δ• ࣗಈԽͰ͖ͳ͍खಈςετͰؔ࿈ػೳʹมߋ͕ͳ͚Εলུ͢Δ• ߹ཧతʹςετΛΓ͗͢ͳ͍ઓུΛऔΔ10 ຖिϦϦʔεΛ࣮ݱ͢Δςετ׆ಈ - ΫοΫύου։ൃऀϒϩά54/58
55/58
תה56/58
ֿֿ侧䎃ך《穈䮶鵤ג• ͍·ܗʹͳ͍ͬͯΔͷɺؒ܁Γฦ͖ͯͨ͠ϦϦʔεͱৼΓฦΓʹΑͬͯੵΈ্͕͖ͬͯͨͷ• ։ൃମ੍ͷมભΛܦͯαʔϏεɾΞϓϦ։ൃʹ͓͚ΔཉٻΛݟͭΊɺͦΕΛຬͨͨ͢ΊͷࣗಈԽΛਐΊ͖ͯͨ• ػցΛத৺ͱ͢Δߟ͑ํʹγϑτ͢Δ͜ͱͰলུɾޮԽͰ͖Δͱ͜Ζ͕͋Δ͜ͱʹؾ͍ͮͨ• ʮػցʹΒͤΔʯ͔Βʮػցʹ߹ΘͤΔʯߟ͑Λม͍͑ͯ͘57/58
ַֿך《穈• ݱࡏͷϦϦʔεϑϩʔͱͯ͠৭ʑڍ͖͕͛ͯͨɺͯ͢ͷ͜ͱ͕ຬʹͰ͖͍ͯΔΘ͚Ͱͳ͍• ΈΛ͑ɺ։ൃؔऀͷҙࣝΛม͍͑ͯ͜͏ͱ͍͏ঢ়گ• ৫αʔϏεɾΞϓϦΛऔΓר͘ঢ়گʹ߹Θͤม͍͑ͯ͘• ࣗಈԽΛਐΊΔɺػցʹ߹ΘͤͯޮԽͨ͠ɺਓؒਓ͕ؒྗ͖͢ͱ͜Ζʹྗ͍ͯ͘͠• ·ͩ·ͩࣗͨͪͷҙࣝΛม͍͑ͯ͘ඞཁ͕͋Δͱײ͍ͯ͡ΔɺҙࣝΛม͑ΔͨΊͷऔΓΈͰ͋Δ58/58