DevOps、スクラム開発、アジャイル、レビュー、ペアプログラミング…「チーム開発」というと様々な粒度で多くの視点からの作法やツールがありますが、ここでは「エンジニアがチームへ貢献するために心構え、使う道具、プライベート活動をより充実させる」という観点でお話します。
ΤϯδχΞͷνʔϜ։ൃϞόΠϧΞϓϦνʔϜ։ൃ࣮ફೖ
View Slide
ࣗݾհా༞հ19877݄6രԬݝभࢢग़͍͍ੜ׆ -> ΫϥεϝιουαʔόαΠυΞϓϦέʔγϣϯ։ൃΛओ୲࠷ۙͷڵຯ Akka Streams
ฏ௩໌ଠࢠͷັྗ͋Δ౦ژਓʮԬͷ໌ଠࢠɺͲ͜ͷϝʔΧʔಉ͡ຯ͕͢Δʯ ↓ൿͷλϨͱ10ஈ֊ͷຯ͚ɾਏ͞ʹΑΓϠέΫιͳ͕ΒѹతࠩผԽʹޭฏ௩໌ଠࢠţŪŖžŖ http://www.hira-tsuka.co.jp/hpgen/HPB/entries/4.html
νʔϜ։ൃεΩϧݸਓͷͷͩ͠ΑΓྑ͘Ͱ͖Δ
ҙ1͍ͪ αʔόʔαΠυΤϯδχΞͷࢹͰ͢ߟ͑ํͷ1αϯϓϧʹ͍ͯͩ͘͠͞
ҙ2நత͔ͭײͷ͕ଟΊͰ͢
ຊͷલʹ
IT༐ऀͷઓಆྗ࣮ͬͯʁऩೖʁਓ຺ʁ
ແݶʹࢦඪ͋Γ·͢ΑͶ
ʩʩݸਓٕೳνʔϜ։ൃεΩϧ
ʩʩݸਓٕೳνʔϜ։ൃεΩϧνʔϜ։ൃεΩϧɺ͋ΒΏΔೳྗͷϕʔεʹͳΔͱࢥ͍·͢
͡Ό͋ɺνʔϜ։ൃεΩϧͬͯԿʁ
Slack͙͢ʹฦࣄΛ͢ΔϗϫΠτϘʔυिҰͰҿΈʹߦ͘CacooChatWorkGitHubϨϏϡʔίϝϯτΛਓΛΊΔͳίʔυΛΊΑࡶஊʮͰ͖·ͤΜʯϝʔϦϯάϦετʮҙਤʯΛίϝϯτʹॻࣗ͘ΑΓ༏लͳਓΛ࠾༻͢Δષਖ਼Ͱ͋Ε࣏ࣾରಀ͛Δզຫ͢Δཱྀߦߦ͜͏ࡶஊ զຫ͠ͳ͍ʮΓ·͢ʯ͡Ό͋ɺνʔϜ։ൃεΩϧͬͯԿʁ
Slack͙͢ʹฦࣄΛ͢ΔϗϫΠτϘʔυिҰͰҿΈʹߦ͘CacooChatWorkGitHubϨϏϡʔίϝϯτΛਓΛΊΔͳίʔυΛΊΑࡶஊʮͰ͖·ͤΜʯϝʔϦϯάϦετʮҙਤʯΛίϝϯτʹॻࣗ͘ΑΓ༏लͳਓΛ࠾༻͢Δષਖ਼Ͱ͋Ε࣏ࣾରಀ͛Δզຫ͢Δཱྀߦߦ͜͏͡Ό͋ɺνʔϜ։ൃεΩϧͬͯԿʁࡶஊ զຫ͠ͳ͍ʮΓ·͢ʯཻࢹΒΒ৺ɾٕɾମͷϨϕϧײΤϯδχΞࢹ
ΤϯδχΞͷνʔϜ։ൃεΩϧײΛίϯτϩʔϧ͢Δదͳಓ۩Λ͏ࣗͷੜ׆Λେࣄʹ͢Δ
എܠͷڞ༗
ϙΠϯταʔϏεͷϞόΠϧΞϓϦΛ࡞Δ
࣌ܥྻ20163݄ : ࣮ϑΣʔζ͕༷ͩॻ͕ͳ͍20166݄ : Ұ࣍ϦϦʔε20169݄ : جװγεςϜͷೖΕସ͑201612݄ : ೋ࣍ϦϦʔεݱࡏ : อक
νʔϜߏ͓٬༷ϓϩδΣΫτϚωʔδϟʔσβΠφʔiOSΤϯδχΞɺAndroidΤϯδχΞCMSΤϯδχΞϞόΠϧAPIΤϯδχΞˎ
ײͷίϯτϩʔϧ
Why?ࣗͱνʔϜϝϯόʔҧ͏ߟ͑ํҧ͏ ʮΏͣΕͳ͍ͷʯҧ͏ΈΜͳͰҰ৺ಉମཧ ͔͠͠ݱ࣮ແײ͕ੜ·ΕΔײύϑΥʔϚϯεʹӨڹ͢Δ
Why?ࣗͱνʔϜϝϯόʔҧ͏ߟ͑ํҧ͏ΈΜͳͰҰ৺ಉମ ͱ͍͏Θ͚ʹ͍͔ͳ͍ײ͕ੜ·ΕΔײύϑΥʔϚϯεʹӨڹ͢ΔνʔϜͰੜ͡ΔײΛࣗͷ੍ޚԼʹ͓͘शಘɾ࿉Մೳͳٕज़
ײͷίϯτϩʔϧTipsଚܟ͔Β࢝ΊΔ൱ఆܗΛճආ͢Δఆ࣌Ͱୀࣾ͢Δ
ଚܟ͔Β͡ΊΔόά͕ग़ͨΔ͖λεΫ͕ऴΘ͍ͬͯͳ͍ϦϦʔεʹؒʹ߹Θͳ͍ॳظͷޙઌߟ͑ͳ͍࣮ʹΑΔٕज़తෛ࠴͕ਏ͍
ଚܟ͔Β͡ΊΔόά͕ग़ͨΔ͖λεΫ͕ऴΘ͍ͬͯͳ͍ϦϦʔεʹؒʹ߹Θͳ͍ॳظͷޙઌߟ͑ͳ͍࣮ʹΑΔٕज़తෛ࠴͕ਏ͍୭ͷʂνʔϜͷͰ͢Θͨ͠ͷͰ͋Γ·͢
҈͞ΕͨΛͲ͏ͨ͢ʁஞҰࣄऀʹͳͬͯରԠ͢ΔͷແཧϦεϖΫτۦಈίϛϡχέʔγϣϯͰɺඈͼަ͏ձʹΔײΛ৺Α͍ͷʹ͢ΔײͱΔ͖͜ͱ͕ྑ͍ҙຯͰΓ͞Εɺ͔͠Δ͖༏ઌͰରॲ͞ΕΔ
ϦεϖΫτۦಈʹͨ͠ྫόά͕ग़͕ͨࣗ࣌͠ͷঢ়گͰ͍ͬͯͨΒɺͬͱͻͲ͍͜ͱʹͳ͍ͬͯͨͩΖ͏ͳɻ̋̋͞Μ͔ͩΒ͜ͷఔͰࡁΜͩΜͩɻॳظϦϦʔεͷλΠτͳεέδϡʔϧͷதͰ̋̋͞Μ͕ͤͯ͘͞Ε͓͔ͨ͛Ͱɺ։ൃඅ༻͕Β͑ͨͷͩ͠ɺࠓ͍ͯ͠ΔΜͩɻٕज़తෛ࠴͕͋Δ
൱ఆܗΛճආ͢Δ؆୯ͳͰɺߠఆΑΓ൱ఆͷ΄͏͕ҙຯ͕͘ͳΔࠨӈΛ֬ೝ͠·͠ΐ͏ඈͼग़͢ͳʂԣஅาಓͰͷ҆શ֬อҰࢭ·Γ·͠ΐ͏
൱ఆܗΛճආ͢Δ؆୯ͳͰɺߠఆΑΓ൱ఆͷ΄͏͕ҙຯ͕͘ͳΔࠨӈΛ֬ೝ͠·͠ΐ͏ඈͼग़͢ͳʂԣஅาಓͰͷ҆શ֬อҰࢭ·Γ·͠ΐ͏ਓؒͷӡಈਆܦ൱ఆܗͷ໋ྩΛͱʹಈ͔ͤͳ͍ʢض͋͛ήʔϜʣݸʑਓͷͰม͕Δղऍͷ༨͕ൃੜ͢Δ
൱ఆܗΛճආ͠ҙਤΛ໌֬ʹϝϯόʔʹ൱ఆܗΛͬͯ͠·͏߹ɺࣗͱͯ͠Ͳ͏͢Ε͍͍͔Θ͔͍ͬͯͳ͍͜ͱ͕ଟ͍ྫ: όάΛग़͢ͳɺϦϦʔεʹΕΔͳɺ͓٬͞ΜΛࠔΒͤΔͳ…݁Ռɺࣗͷҙਤͱ૬खͷΞτϓοτʹͣΕ͕ੜ͡ɺ͓ޓ͍ͷϞϠϞϠʹͭͳ͕Δ
൱ఆܗΛճආ͠ҙਤΛ໌֬ʹϝϯόʔʹ൱ఆܗΛͬͯ͠·͏߹ɺࣗͱͯ͠Ͳ͏͢Ε͍͍͔Θ͔͍ͬͯͳ͍͜ͱ͕ଟ͍ྫ: όάΛग़͢ͳɺϦϦʔεʹΕΔͳɺ͓٬͞ΜΛࠔΒͤΔͳ…݁Ռɺࣗͷҙਤͱ૬खͷΞτϓοτʹͣΕ͕ੜ͡ɺ͓ޓ͍ͷϞϠϞϠʹͭͳ͕Δ൱ఆܗͷϝοηʔδ͕ग़ͯདྷ͖ͨΒ૬ޓνΣοΫͯ͠۩ମԽ͠·͠ΐ
൱ఆܗมྫɹ൱ఆܗ ߠఆܗ མͪண͍ͯߟ͑ΔͱόάΛग़͢ͳ ᘳʹ͠Ζ͔͜͜Β͞Βʹ࣭Λ্͛ΔͨΊʹɺԿ͕ඞཁʁΠέͯͳ͍ΑͶ φ͘͠Α͏ͬͱϞμϯʹ͍ͨ͠ɻͦΕͰ͓ಘʹͳΔ͜ͱͱ͍͑…๊͑ࠐΉͳΑ ૬ஊ͠Α͏Α͍͍ͬͨԿΛ๊͍͑ͯͯɺͳΜͰ๊͑ࠐΉͷͩΖ͏ʁϦεΫΛڪΕΔͳ ϦεΫແࢹ͠ΖνʔϜΛϦεΫ͔Βղ์͢ΔͨΊʹɺԶԿΛ͢ΔʁײతʹͳΔͳ ײΛࡴͤ͜ͷਓɺ͍·ɺ͜ΜͳʹౖͬͯΔͷͳΜͰͩΖ͏ʁ
ఆ࣌Ͱୀࣾ͢Δײͱؔ͋Γ·͢ʁ => ͋Γ·͘͢·Ͱۀ͢Δͱɿ͔ͤͬ͘Զ͕ۀͯ͠ਐΊͨͷʹखΓ͔ΑͳΜͰԶ͓ͦ͘·ͰͬͯΔͷʹ͍͋ͭͷ΄͏͕1࣌ؒ͘ؼΔΜͩ͋ʔ͋ࡢ4͔࣌ؒ͠৸ͯͳ͍Θʔ
ఆ࣌Ͱୀࣾ͢Δఆ࣌Ͱୀࣾ͢Δश׳ͩͱɿ खΓʁ·͋ࠓ͘Β͍ۀ͢Δ͔ ٿ؍ઓͷͨΊୀࣾͰ͔͢ʁ͍͍Ͱ͢Ͷ☺ 7࣌ؒ৸ͨ͠ମௐྑ͍
ఆ࣌Ͱୀࣾ͢Δఆ࣌Ͱୀࣾ͢Δश׳ͩͱɿ खΓʁ·͋ࠓ͘Β͍ۀ͢Δ͔ ٿ؍ઓͷͨΊୀࣾͰ͔͢ʁ͍͍Ͱ͢Ͷ☺ 7࣌ؒ৸ͨ͠ମௐྑ͍ࡉ͔͍ͱ͜Ζͷϝϯλϧϔϧε͕ͥΜͥΜ͕͍ͪ·͢ɻ߹ࢉ͢Δͱ͔ͳΓͷࠩͰ͢ɻۀʮ࠷ऴखஈʯʹ͍ͨ͠
Ͳ͏͙Λ ͔ͭ͏
Why?νʔϜߟ͑Λ͑ΔͨΊʹຊޠ͚ͩͰΓͳ͍ͱ͖͕͋ΔಛʹΞϓϦΤϯδχΞ - αʔόαΠυΤϯδχΞ ͷΑ͏ʹϨΠϠ͕ҟͳΔϝϯόʔؒਤσʔλߏͰදݱ͠Α͏ͱ͢ΔϑΥʔϚοτ͕ΒΒͰϝϯςͰ͖ͳ͍Խ͢Δ͠ݟΒΕͳ͘ͳΔ͠ϝϯς͞Εͳ͘ͳΔ
νʔϜߟ͑Λ͑ΔͨΊʹຊޠ͚ͩͰΓͳ͍ͱ͖͕͋ΔಛʹΞϓϦΤϯδχΞ - αʔόαΠυΤϯδχΞ ͷΑ͏ʹϨΠϠ͕ҟͳΔϝϯόʔؒਤσʔλߏͰදݱ͠Α͏ͱ͢ΔϑΥʔϚοτ͕ΒΒͰϝϯςͰ͖ͳ͍Խ͢Δ͠ݟΒΕͳ͘ͳΔ͠ϝϯς͞Εͳ͘ͳΔWhy?ΠϯλʔϑΣʔεΛ౷Ұ͢ΔతͰಓ۩Λ͏
దͳಓ۩Λ͏PlantUMLAPI BlueprintCharles※ϞόΠϧΞϓϦ։ൃલఏ
దͳಓ۩Λ͏PlantUMLAPI BlueprintCharles
PlantUMLओʹγʔέϯεਤͱΫϥεਤγʔέϯεਤɿ༷ͷղऍͷͨΊʹ͏ΫϥεਤɿιϑτΣΞઃܭͷཧղͷॿ͚ʹ͢Δ
γʔέϯεਤϑϩϯτଆϝϯόʔϚωʔδϟʔʹݟͯΒ͏ͷʹ࠷దϒϥοΫϘοΫεʹͳΓ͕ͪͳόοΫΤϯυଆͷॲཧͷྲྀΕΛ໌֬ʹ͢Δ
ΫϥεਤPRͷ͓ͱʹGitHubͷPRͰݟΔdiffͲ͏ͯ͠ύοέʔδߏ͕ϑϥοτʹͳΔϨϏϡΞʔͷॿ͚ʹͳΔ
ΫϥεਤPRͷ͓ͱʹGitHubͷPRͰݟΔdiffͲ͏ͯ͠ύοέʔδߏ͕ϑϥοτʹͳΔϨϏϡΞʔͷॿ͚ʹͳΔγʔέϯεਤΫϥεਤͷ࡞ʹPlantUMLΛ͏Α͏ʹ͢ΕࣗવͱϑΥʔϚοτͷϧʔϧΛ౷ҰͰ͖Δ༷ͷදݱͰ࡞ਤ͢Δೳྗ͕ʹͭ͘
API BlueprintAPI ༷ॻ࡞πʔϧMarkdown֦ுͰهࡌՄೳϑϩϯτϝϯόʔͱͷAPIͷ༷ௐAPI Blueprint υΩϡϝϯτͷ issue Pull Request Ͱߦ͏
API BlueprintAPI ༷ॻ࡞πʔϧMarkdown֦ுͰهࡌՄೳϑϩϯτϝϯόʔͱͷAPIͷ༷ௐAPI Blueprint υΩϡϝϯτͷ issue Pull Request Ͱߦ͏࠷৽ͷI/F༷Λڞ௨ೝࣝͷͱϝϯςʮݴͬͨʯʮݴΘͳ͍ʯΛഉআͰ͖ΔAPI༷ͷ࡞ํ๏͕ʹͭ͘
GitHubͰͷཧ͕ՄೳPlantUMLAPI BlueprintςΩετϕʔεͱ͍͏͜ͱιʔείʔυͱͯ͠ཧՄೳGitHubͰυΩϡϝϯτཧɺهमਖ਼issue,Pull Request, tags ͱ͍ͬͨΤίγεςϜ͕ͦͷ··ద༻Մೳ
CharlesMac OS Ͱར༻Ͱ͖Δ Proxy Server ͷπʔϧϞόΠϧΞϓϦ͔Βͷ௨৴ΛडͰ͖Δ։ൃதͷҙਤ͠ͳ͍ϦΫΤετ༰ʹ͍ͭͯઆ໌ͨ͠Γɺෆ͍ͯ͠ΔϨεϙϯεใʹ͍ͭͯٞ͢Δࡍʹ༗༻ʢ૬ख͕୭Ͱʣ
CharlesϦΫΤετɾϨεϙϯεରԠϔομɺϘσΟͳͲHTTPSOK
։ൃதӡ༻தI/Fͷ֬ೝൃੜΞϓϦը໘ʹσʔλ͕දࣔ͞Εͳ͍ͷͰ͕͢ɺϨεϙϯεͷܗͬͯ߹ͬͯ·͢ʁͲΜͳϦΫΤετૹͬͯ·͢ʁαʔόʔଆͷΞϓϦέʔγϣϯϩάݟ͍͚ͯͨͩ·ͤΜ͔ʁϩάಛఆ͢ΔͷͰձһ൪߸ڭ͍͑ͯͩ͘͞ɻ֬ೝͳΜͰ͕͢ϦΫΤετਖ਼ৗʹૹΒΕͯ·͢ΑͶ
։ൃதӡ༻தI/Fͷ֬ೝൃੜΞϓϦը໘ʹσʔλ͕දࣔ͞Εͳ͍ͷͰ͕͢ɺϨεϙϯεͷܗͬͯ߹ͬͯ·͢ʁͲΜͳϦΫΤετૹͬͯ·͢ʁαʔόʔଆͷΞϓϦέʔγϣϯϩάݟ͍͚ͯͨͩ·ͤΜ͔ʁϩάಛఆ͢ΔͷͰձһ൪߸ڭ͍͑ͯͩ͘͞ɻ֬ೝͳΜͰ͕͢ϦΫΤετਖ਼ৗʹૹΒΕͯ·͢ΑͶProxy Tools ͍·͠ΐ͏αʔόʔαΠυΞϓϦͷσόοάʹ͑·͢
ੜ׆͍ͩ͡ʹ
Why?৺ͷ݈߁ঢ়ଶύϑΥʔϚϯεʹ݁͢Δاۀʹॴଐ͍ͯ͠ΔҎ্ɺձࣾʹɺνʔϜʹߩݙ͢Δ͜ͱͱͯେࣄ͕ͩɺτοϓϓϥΠΦϦςΟࣗͰ͋Δ͜ͱΛΕͳ͍Α͏ʹ͢ΔࣗͷϨϕϧ্͕͕ΕνʔϜͷϨϕϧ্͕Δ
ࣗͷੜ׆Λେࣄʹ͢Δ༗څٳՋΛͱΔேϥϯɺδϜɺΧϑΣ࡞ۀࣄΛੜ׆ͷαϒλεΫʹ͢Δ
༗څٳՋΛͱΔ3݄ʹάΞϜ͍͖ͬͯ·ָ͔ͨͬͨ͠͠Ͱ͢
༗څٳՋΛͱΔ3݄ʹάΞϜ͍͖ͬͯ·ָ͔ͨͬͨ͠͠Ͱ͢ओ࡞༻ɿ৺ͷϦϑϨογϡ෭࡞༻ɿݖརΛߦ͢ΔΫηΛ͚ͭΔ
ேϥϯɺδϜɺΧϑΣ࡞ۀ
ேϥϯɺδϜɺΧϑΣ࡞ۀओ࡞༻ɿମྗྗUP෭࡞༻ɿࣗͷͨΊͷ࣌ؒΛઃఆ͢Δ
ࣄΛੜ׆ͷαϒλεΫʹ͢ΔQ. ͋ͳͨͷੜ׆ͱࣄͷؔʁੜ׆ ࣄ ੜ׆ ࣄࣄੜ׆ੜ׆ࣄ
ࣄΛੜ׆ͷαϒλεΫʹ͢ΔQ. ͋ͳͨͷੜ׆ͱࣄͷؔʁੜ׆ ࣄ ੜ׆ ࣄࣄੜ׆ੜ׆ࣄ͜Εʹ͠Α͏ʂ
ࣄΛੜ׆ͷαϒλεΫʹ͢ΔQ. ͋ͳͨͷੜ׆ͱࣄͷؔʁੜ׆ ࣄ ੜ׆ ࣄࣄੜ׆ੜ׆ࣄ͜Ε͕͍͍ͱࢥ͍·͢ओ࡞༻ɿ͍ͨͣΒͳࣄͷ༏ઌ্ঢΛࢭ෭࡞༻ɿٳΉ͜ͱɺ༡Ϳ͜ͱʹશྗΛ͛Δ
·ͱΊ
ײίϯτϩʔϧ ಓ۩Λ͏ ੜ׆Λେࣄʹଚܟ͔Β࢝ΊΔ PlantUML ༗څٳՋΛͱΔ൱ఆܗΛճආ͢Δ API BlueprintேϥϯδϜՋΧϑΣఆ࣌ͰؼΔ Charlesੜ׆λεΫ└ ࣄ
ײίϯτϩʔϧ ಓ۩Λ͏ ੜ׆Λେࣄʹଚܟ͔Β࢝ΊΔ PlantUML ༗څٳՋΛͱΔ൱ఆܗΛճආ͢Δ API BlueprintேϥϯδϜՋΧϑΣఆ࣌ͰؼΔ Charlesੜ׆λεΫ└ ࣄ͙࣮͢ફͰ͖ͦ͏ͳͷ͔Β“࡞ઓ”ʹऔΓೖΕͯΈ͍ͯͩ͘͞ʂΓ͍ͨ͜ͱΛͭͭ͠νʔϜྗUPʂ
ࢀߟPlantUML http://plantuml.com/API Blueprint | API Blueprint https://apiblueprint.org/Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy/ HTTPS & SSL Proxy / Reverse Proxy https://www.charlesproxy.com/