Slide 1

Slide 1 text

ΦϛΧϨΛࢧ͑ΔνʔϜ։ൃ ~ ϓϩμΫτΛࢧ͑ΔจԽ ~ 2019-01-26 PHPΧϯϑΝϨϯεઋ୆2019 1

Slide 2

Slide 2 text

஫ҙࣄ߲ • εϥΠυ͸ެ։͠·͢ɻ • ࣭໰ͱ͔͝ࢦఠͱ͔ॾʑͷϑΟʔυόοΫ͕͍͟͝·ͨ͠Β #phpconsen ΁ ͓ئ͍க͠·͢ɻ 2

Slide 3

Slide 3 text

͓͠ͳ͕͖ 1. ࣗݾ঺հ 2. ΦϛΧϨͷจԽ 3. จԽΛΑΓྑ͘͢Δҝͷऔ૊ 4. ·ͱΊ 3

Slide 4

Slide 4 text

1. ࣗݾ঺հ • ߴڮ Ұٍ • Ԭࢁࡏॅ • גࣜձࣾΦϛΧϨ WebΤϯδχΞ • ೔ຊPostgreSQLϢʔβʔձ தࠃࢧ෦௕ • ڇλϯห౰ɾɾ޷͖... 4

Slide 5

Slide 5 text

גࣜձࣾΦϛΧϨ શࠃ35,000݅ͷࠗ׆ύʔςΟΛ ܝࡌͨ͠ϙʔλϧαΠτ 30ສਓڧͷձһͷํʑʹ͝ར༻௖͍ͯ ͍·͢ɻ ࠗ׆ͱݴ͑͹ΦϛΧϨʂ \\ ݁ࠗ͸͍͍ͧʂʂ // 5

Slide 6

Slide 6 text

ʮΦϛΧϨΛࢧ͑ΔνʔϜ։ൃʯ • 2018೥5݄ʹΦϛΧϨʹJOIN • લ৬ͷจԽͱͷҧ͍ • νʔϜ։ൃΛΑΓ΍Γ΍͘͢͢Δҝͷऔ૊ ...Λ ϓϨΠϠʔͷ؍఺ ͔Β 6

Slide 7

Slide 7 text

Ϛωʔδϟʔ໨ઢͷ࿩ ฐࣾCTO ીࠜ(@soudai1025) ͕ PHPΧϯϑΝϨϯεͰطʹ͓࿩Λ ͓ͯ͠Γ·͢ɻ ڵຯ͕͋Δํ͸ͪ͜ΒΛͲ͏ͧɻ https://speakerdeck.com/soudai/ proper-problem 7

Slide 8

Slide 8 text

2. ΦϛΧϨͷจԽ 8

Slide 9

Slide 9 text

Ϛωʔδϟʔ໨ઢͷ࿩Λཁ໿ • ྑ͍૊৫͸ྑ͍จԽΛɺྑ͍จԽ͸ྑ͍νʔϜΛɺ ྑ͍νʔϜ͸ྑ͍αʔϏεΛ࡞ΕΔɻ • ద੾ͳ໰୊Λఏڙ͠ɺͦͷνϟϨϯδΛධՁ͢ΔࣄͰ ਓ͸ҭͪɺͦΕ͸૊৫ΛҭͯΔɻ ΊͬͪΌ͍͍࿩ͳͷͰੋඇݟͯ΄͍͠ɻ 9

Slide 10

Slide 10 text

ΦϛΧϨͷݱঢ় • ౦ژɾԬࢁͷ2ڌ఺Ͱ։ൃΛߦ͍ͬͯΔɻ • ΤϯδχΞ෦ୂ͸౦ژ໊̑ɺԬࢁ3໊ͷܭ8ਓ • ͦͷଞ αϙʔτରԠ΍ϚʔέςΟϯάΛ୲౰͢Δ CRT͕10໊લޙ • ͍ΘΏΔελʔτΞοϓاۀ 10

Slide 11

Slide 11 text

ΦϛΧϨͷݱঢ় • νϟοτπʔϧ͸ Slackɻ • ଞڌ఺ؒͰ࢓ࣄΛͯ͠ΔͷͰجຊతʹςΩετϕʔεͰ ίϛϡχέʔγϣϯΛ͢Δɻ • ྡʹډͯ΋ɺجຊతʹ͸νϟοτͰ࿩͢ɻ • ձٞ౳͸SlackͷϏσΦձٞ SlackίʔϧͰߦ͏ɻ 11

Slide 12

Slide 12 text

ͦΜͳձࣾʹೖࣾͨ͠ 12

Slide 13

Slide 13 text

ͦ͜ʹ͸7೥༨Γͷظؒ αʔϏεΛࢧ͑ଓ͚͖ͯͨจԽ͕͋ͬͨ 13

Slide 14

Slide 14 text

લ৬ͷจԽΛܰ͘঺հ 14

Slide 15

Slide 15 text

લ৬ͷจԽ • ࣗࣾαʔϏε࡞੒ͷձࣾ • ࣾһ͸100໊ఔɺେ൒͸ӦۀͰ։ൃ෦ୂ͸30໊ɻ (಺20໊͘Β͍͕ςελʔ) • جຊతʹ্௕͔Βͷτοϓμ΢ϯܗࣜͰҙࢥܾఆ • ݄ΠνͰϦϦʔεεέδϡʔϧ͕૊·ΕΔɻ • ࢓༷มߋ౳΋਺िؒ୯ҐͰଞ෦ॺͱଧͪ߹Θܾͤͯఆɻ 15

Slide 16

Slide 16 text

લ৬ͱͷൺֱ • ϦϦʔεαΠΫϧͷҧ͍ɻ • ίϛϡχέʔγϣϯͷ׆ൃ͞ɻ • ϑΟδϏϦػೳͷνϟϨϯδɻ • ݸਓͷࡋྔͷଟ͞ɻ 16

Slide 17

Slide 17 text

ϦϦʔεαΠΫϧͷҧ͍ • ϦϦʔεͷ଎౓͕ͱͯ΋଎͍ɻ • 1ϓϧϦΫɺ1ϦϦʔεͷܗࣜͷҝ Ϛʔδ͞Ε࣍ୈଈϦϦʔεͱͳͬͯΔɻ • ̍೔ʹ਺10ػೳ͕ϦϦʔε͞ΕΔࣄ΋͋Δɻ • ϦϦʔε͕ߴ଎ͳҝɺҙࢥܾఆ͕ඇৗʹ଎͍ɻ 17

Slide 18

Slide 18 text

ίϛϡχέʔγϣϯͷ׆ൃ͞ɻ • ίϛϡχέʔγϣϯ͸SlackͰ͓͜ͳΕΔ͕ SlackͰͷձ࿩͕ඇৗʹ׆ൃʹߦΘΕ͍ͯΔɻ • ύʔτφʔ͞Μᐌ͘ʮνϟοτͷྲྀ଎͕଎͍Ͷʯ ๻໨ઢɿTwitterͱ͔ʹൺ΂Δͱશવ஗͍ɻ 18

Slide 19

Slide 19 text

ίϛϡχέʔγϣϯͷ׆ൃ͞ɻ • ʮ׆ൃʯͰ͋Δࣄͱ͍͏ఆٛ͸தʑந৅తͰ͸͋Δ͕ɺ ΤϯδχΞͷ෼ใ͕ඇৗʹ༗ޮʹ࢖ΘΕ͍ͯΔɻ ͱ͍͏఺ͩͱࢥͬͯΔɻ • ʮXXXXػೳ͕ग़དྷͨʯͬͯ෼ใʹॻ͘ͱ ֆจࣈͰϦΞΫγϣϯͯ͘͠ΕͨΓ ·ͨ͸৭ΜͳίϝϯτΛ͘ΕΔɻ • ʮXXXXͬͯ಺༰ͰࠔͬͯΔʯͬͯᄁ͘ͱ ͦΕ͸͜Μͳײ͡Ͱղܾ͢Δͷ͕ྑ͍ΑɺͱΞυόΠεΛ͘ΕΔɻ 19

Slide 20

Slide 20 text

ϑΟδϏϦػೳͷνϟϨϯδɻ • ϑΟδϏϦ(࣮ݧత)ͳػೳͷνϟϨϯδ͕ ඇৗʹଟ͘ߦΘΕͯΔɻ (໪࿦ɺWebαʔϏεͷ੒௕ʹ͸͔ܽͤͳ͍࿩͔΋͠Εͳ͍) • ֤ΤϯδχΞʹ਺ࣈΛݟΔश׳Ͱ͋ͬͨΓ ϑΟδϏϦػೳΛ୔ࢁߦ͍ͬͯΔͷͰ ඇৗʹҙݟΛग़͠΍͍͢؀ڥʹͳ͍ͬͯΔɻ 20

Slide 21

Slide 21 text

ݸਓͷࡋྔͷଟ͞ • ͜ͷลΓ͸Ϛωʔδϟʔ໨ઢͷ࿩ͰCTO͕࿩Λ͍͕ͯͨ͠ɺ ֤ΤϯδχΞ΁ͷࡋྔ͕ඇৗʹଟׂ͘Γ౰ͯΒΕͯΔɻ • ࡋྔͷௐ੔ʹ͍ͭͯ͸݄Ұͷ1on1Ͱ͋ͬͨΓͰ λεΫͷཻ౓Λௐ੔͠ͳ͕Β੒௕͍͚ͯ͠Δ౔୆͕͋Δɻ 21

Slide 22

Slide 22 text

ΦϛΧϨͷจԽΛࢧ͑Δ΋ͷ 22

Slide 23

Slide 23 text

ίϛϡχέʔγϣϯͷ׆ൃ͞ • ʮ৽ػೳ͕ϦϦʔε͞ΕͨʂʯʹϦΞΫγϣϯ͕΋Β͑Δɻ ※ ͦΕ΋ΤϯδχΞ͚ͩͰͳ͘ ϏδωεαΠυ͔Β΋ɻ => "ঝೝཉٻ"͕ຬͨ͞ΕΔɻ • ʮXXXX্͕ख͍͔͘ͳ͍ɻʯ࣌ʹΞυόΠε͕΋Β͑Δɻ => "૬ஊ΁ͷϋʔυϧ"͕Լ͕Δɻ 23

Slide 24

Slide 24 text

৺ཧత҆શੑ͕ҭͭ 24

Slide 25

Slide 25 text

৺ཧత҆શੑͱ͸ https://speakerdeck.com/cobasparxxx/xin-li-de-an-quan-xing-falseyu-tefang 25

Slide 26

Slide 26 text

৺ཧత҆શੑͱ͸ "৺ཧత҆શੑͱ͸ɺରਓؔ܎ʹ͓͍ͯϦεΫ͋ΔߦಈΛऔͬͨ ࣌ͷޮՌʹର͢Δݸਓͷೝ஌ͷ࢓ํɺͭ·Γʮແ஌ɺແೳɺω ΨςΟϒɺअຐͩͱࢥΘΕΔՄೳੑͷ͋ΔߦಈΛͯ͠΋ɺ͜ͷ νʔϜͳΒେৎ෉ͩʯͱ৴͡ΒΕΔ͔Ͳ͏͔Λҙຯ͠·͢ɻ" -- ৺ཧత҆શੑͷҭͯํ https://speakerdeck.com/cobasparxxx/xin-li-de-an-quan-xing-falseyu-tefang 26

Slide 27

Slide 27 text

ΦϛΧϨͷจԽ ৺ཧత҆શੑͷߴ͍νʔϜ࡞Γ͕ߦΘΕ͍ͯΔɻ • ৺ཧత҆શੑͷߴ͞ʹΑͬͯ ϓϨΠϠʔ͔Β૊৫΁ͷϘτϜΞοϓ͕ ߦ͍΍͍͢จԽ͕͋Δɻ • ͦΕ͸ྑ͍૊৫Λ࡞Δ͠αʔϏεͷ੒௕Λࢧ͍͑ͯ͘ ྑ͍νʔϜΛ࡞͍ͬͯ͘ɻ 27

Slide 28

Slide 28 text

ΦϛΧϨͷจԽΛࢧ͑Δ "ٕज़" 28

Slide 29

Slide 29 text

ʮ໰୊͸ٕज़ͱ࢓૊ΈͰղܾ͍ͯ͘͠ʯ 29

Slide 30

Slide 30 text

৺ཧత҆શੑΛҭͯΔ "ٕज़" 30

Slide 31

Slide 31 text

Slackͷbotͱֆจࣈ 31

Slide 32

Slide 32 text

Slackͷձ࿩bot Slackͷֆจࣈ 32

Slide 33

Slide 33 text

ձ࿩Bot • hubot Ͱ࣮૷͞Ε͍ͯΔɻ • ౤ߘͨ͠จࣈྻʹରԠ͢ΔจࣈྻΛฦͯ͘͠ΕΔɻ "u => řőőő" ͱܾ·Γ͖ͬͨจݴͷύλʔϯɺ "otu => śŨŜƀŧŒƃ or ͓ർΕ༷Ͱͨͬ͠" ͱ ෳ਺ύλʔϯ͔ΒϥϯμϜͰฦͯ͘͠ΕΔύλʔϯɺ ͭ͘͏ => ͜ΕͰ΋ҿΉ͕ྑ͍ ͬͯϋΠϘʔϧͷը૾Λ ฦͯ͘͠ΕͨΓͱ͔ɻ 33

Slide 34

Slide 34 text

ձ࿩BotͷԸܙ • ࠷୹1จࣈͰେ͖ͳϦΞΫγϣϯ͕ग़དྷΔɻ ੝Γ্͕ͬͯΔΑ͏ʹݟ͑Δɻ • ύλʔϯ͕ແ਺ʹ͋ΔͷͰ͍ͭ΋৽઱ɻ • ֆจࣈ΋ಉ༷ 34

Slide 35

Slide 35 text

hubotʹ͍ͭͯ • ຊମ͸JavaScriptɺ ΤϯδχΞͳΒ୭Ͱ΋৮ΕΔ৔ॴͰ؅ཧ͞ΕͯΔͷͰ ࣗ༝ʹฤूग़དྷΔɻ • ֆจࣈ΋ಉ͡Ͱ୭Ͱ΋ࣗ༝ʹֆจࣈͷ௥Ճ͕ग़དྷΔɻ => ࣗ෼͕௥Ճͨ͠΋ͷΛ࢖ͬͯ͘ΕΔͷͰঝೝཉٻͷϧʔϓ 35

Slide 36

Slide 36 text

ΦϛΧϨͷจԽ • ίϛϡχέʔγϣϯͷ׆ൃ͞ʹΑͬͯ ৺ཧత҆શੑ͕୲อ͞Εɺݸʑͷϝϯόʔ͸ ΑΓྑ͍૊৫Λ࡞Δҝʹಈ͖΍͍͢ɻ • ࿩޷͖͕ू·͍ͬͯΔͷͰ͸ແͯ͘ hubot΍ֆจࣈͳͲͷίϛϡχέʔγϣϯ͕ ׆ൃʹͳΔΑ͏ͳٕज़ʹΑͬͯ׆ൃ͞Λ࡞Γ্͛ͯΔɻ 36

Slide 37

Slide 37 text

ΦϛΧϨ࠷ߴ 37

Slide 38

Slide 38 text

ͱ͸͍͑ɺ՝୊΋͋Δ 38

Slide 39

Slide 39 text

ΦϛΧϨͷ՝୊ • ଎౓ʹରͯ͠ϨϏϡʔ͕ண͍ͯͳͯ͘ ϨϏϡʔ଴ͪͷ··ϓϧϦΫΤετ͕࢒ͬͯ͠·͍ͬͯͨɻ • ػೳΛͲΜͲΜϦϦʔε͍ͯ͘͠ࣄͰ όάʹؾ෇͖͖Εͳ͍ࣄ͕͋Δɻ • ਺஋ͷ෼ੳج൫ͷ࢓૊Έ͕࡞੒͞Ε͖ͬͯͳ͔ͬͨΓ͢Δɻ 39

Slide 40

Slide 40 text

ʮ໰୊͸ٕज़΍࢓૊ΈͰղܾ͢Δʯ 40

Slide 41

Slide 41 text

3. จԽΛΑΓྑ͘͢Δҝͷऔ૊ 41

Slide 42

Slide 42 text

ʮ໰୊͸ٕज़΍࢓૊ΈͰղܾ͢Δʯ ࠓͷจԽΛ࠷େݶʹ׆༻ͯ͠ νʔϜͷ໰୊Λղܾ͍ͯ͘͠ɻ • ίϛϡχέʔγϣϯ͸ Slack ΁ɻ • υΩϡϝϯτ͸ esa ΁ɻ • λεΫ͸ Backlog ΁ɻ • ਺ࣈ͸ εϓϨουγʔτ ΁ɻ 42

Slide 43

Slide 43 text

࣮ࡍʹνϟϨϯδͨ͠ࣄྫ 43

Slide 44

Slide 44 text

ίϛϡχέʔγϣϯΛΑΓԁ׈ʹ͢Δҝͷऔ૊ ൃੜ͍ͯͨ͠໰୊ • ʲ՝୊ʳ νʔϜ͕౦ژɾԬࢁʹډΔͷͰ SlackͰίϛϡχέʔγϣϯΛऔΒͳ͍ͱ ֤ڌ఺ؒͰ૬खͷ͜ͱ͕Θ͔Βͳ͍ɻ طʹܗ੒͞ΕͯͨจԽ • ίϛϡχέʔγϣϯΛԁ׈ʹ͢Δҝͷ bot ͕ಋೖ͞Εͯͨ 44

Slide 45

Slide 45 text

BotͷΧελϚΠζ΍ΧελϜֆจࣈͷ࡞੒ΛߦͬͯΈͨɻ • ʮͭ͘͏ʯ ͱ͍͏จࣈྻʹରͯ͠ ͓ञͷࣸਅΛૹͬͯΈΔΑ͏ͳbotΛ࡞ͬͯΈͨΓɾɾ(স) • ʮyoroʯ ͬͯଧͬͨΒࣾ௕ͷޱบͷ ΑΖ͘͠ѩय! ͬͯݴ༿Λग़͢Α͏ʹͯ͠ΈͨΓɻɻ(স) • ৽ೖࣾһ͕ೖ͖ͬͯͨλΠϛϯάͰͦͷਓͷ ΞΠίϯͱ͔χοΫωʔϜͷֆจࣈΛ࡞ͬͨΓɻɻ(স) 45

Slide 46

Slide 46 text

࣮ફͨ݁͠Ռ • ࡶͳίϛϡχέʔγϣϯʹ໾ཱͭΑ͏ʹͳͬͨɻ • ಉ͡ݴ༿ʹରͯ͠όϦΤʔγϣϯ͕͏·Εͨɻ 46

Slide 47

Slide 47 text

ΫϦςΟΧϧύεͱͳΔ؂ࢹ͸SlackʹूΊΔɻ ൃੜ͍ͯͨ͠໰୊ • ʲ՝୊ʳ MySQL͔ΒPostgreSQL΁ͷτϦΨʔΛ࢖ͬͨҠߦͰ τϦΨʔΤϥʔ͸ΫϦςΟΧϧύεͱͳΔͷͰɺ؂ࢹΛ͢Δඞཁ͕͋Δɻ • ϝʔϥʔΛීஈ͔Β্ཱͪ͛ͯͳ͍ͷͰɺΤϥʔ௨஌Λϝʔϧʹدͤͯ΋ݟͳ͍ɻ طʹܗ੒͞ΕͯͨจԽ • Τϥʔ৘ใ͸Slackͷ #notice νϟϯωϧʹूΊΔɻ 47

Slide 48

Slide 48 text

PostgreSQLͷτϦΨʔΤϥʔͷ؂ࢹΛSlack΁ɻ PostgreSQLͷΤϥʔϩάΛఆظతʹ؂ࢹͯ͠ Τϥʔ৘ใ͕͋ͬͨΒSlackʹ௨஌͢ΔϓϩάϥϜΛ࡞੒ͯ͠ ΫϦςΟΧϧύεͱͳΔΤϥʔΛ ૉૣ֬͘ೝग़དྷΔΑ͏ʹͨ͠ɻ \\ ͳΜͱɺPHP੡ // 48

Slide 49

Slide 49 text

࡞੒࢓༷ https://dev.classmethod.jp/cloud/aws/amazon-rds-logs-download-tips/ 49

Slide 50

Slide 50 text

ཁ໿͢Δͱ... • RDSͷϩά͸ AWS SDKͷؔ਺Λ࢖ͬͯશߦऔಘग़དྷΔɻ • ؔ਺ʹ͸औಘ։࢝ҐஔΛࢦఆग़དྷΔɻ ͭ·ΓɺطʹಡΜͩҐஔΛඈ͹ͨ͠ঢ়ଶͰॲཧग़དྷΔɻ 50

Slide 51

Slide 51 text

ඞཁͳཁ݅ • ఆظతʹSDKΛୟ͍ͯϩάΛϙʔϦϯά͢Δɻ • લճͷ෼ੳҐஔΛ͓͍֮͑ͯͯલճͷ෼ੳ෼͸ඈ͹͢ɻ • ΤϥʔΛݟ͚ͭͨ࣌ʹSlack΁௨஌͢Δɻ 51

Slide 52

Slide 52 text

ఆظతʹSDKΛୟ͘ ؂ࢹ͸MackerelʹدͤΔจԽ͕طʹ͋ͬͨͷͰ࠾༻. 52

Slide 53

Slide 53 text

ఆظతʹSDKΛୟ͘ -------------------------------------------------- [plugin.checks.೚ҙͷ໊લ] command = "php /path/to/check_rds_log.php" check_interval = 5 -------------------------------------------------- • MackerelͷઃఆʹΑͬͯɺ5෼ʹҰճࢦఆͨ͠ίϚϯυΛ࣮ ߦͯ͘͠ΕΔɻ 53

Slide 54

Slide 54 text

طʹಡΜͩ෼͸ඈ͹͢ɻ • SDKͷؔ਺ͷҾ਺ʹ Marker ͱݺ͹ΕΔɺߦͱରԠ͢Δ஋͕ ͋ͬͯɺ਺஋Ͱ؅ཧ͞Ε͍ͯΔɻ • SDKͷؔ਺ΛݺΜͩλΠϛϯάͰ ϨεϙϯεͷMakerΛ .jsonϑΝΠϧʹ֨ೲͯ͠؅ཧ͢Δࣄʹͨ͠ɻ 54

Slide 55

Slide 55 text

ΤϥʔΛݟ͚ͭͨ࣌ʹ௨஌Λඈ͹͢ɻ • MackerelͷcheckϓϥάΠϯ͸ ίϚϯυ಺ͷϓϩάϥϜͰ ҎԼͰऴྃͤ͞ΔࣄͰ ҟৗΛݕ஌ͤ͞Δࣄ͕ग़དྷ·͢ɻ exit(1) ... WARNING exit(2) ... CRITICAL • MackerelଆͷઃఆͰ WARNINGͷ࣌ͷৼΔ෣͍ͱͯ͠ Slackʹ௨஌͢Δ Λ࢓ࠐΜͰରԠɻ 55

Slide 56

Slide 56 text

PHPίϚϯυͷΤϥʔͷ൑ఆϩδοΫ • ":ERROR:" ͱ͍͏จࣈྻ͕͋Δ͔Ͳ͏͔ɻ (ײ֒ਂ͍) • :ERROR: ͕͋Ε͹1~2ߦԼΛߋʹௐࠪͯ͠ :DETAIL: ͱ͔ :CONTEXT: ͕͋Ε͹Ұॹʹरͬͯ͘Δɻ => τϦΨʔͷ໊લͱ͔ߦΛҰॹʹऔͬͯ͜ΕΔɻ 56

Slide 57

Slide 57 text

࣮ફͨ݁͠Ռ • 5෼αΠΫϧͱ͔Ͱৗʹ؂ࢹ͕ൃੜ͍ͯ͠ΔͷͰศརɻ noticeʹདྷͯͳ͍ = τϦΨʔ͕Մಈதɺͱ൑அग़དྷΔͷͰ ৺ཧతͳෆ͕҆ݮͬͨɻ • ෭࢈෺ͱͯ͠τϦΨʔͷϩάʹ ":ERROR:" ͱ͍͏จࣈΛ ࢓ࠐΉࣄͰDebugʹ໾ཱͭࣄ͕෼͔ͬͨɻ 57

Slide 58

Slide 58 text

νʔϜ։ൃΛΑΓԁ׈ʹ͢Δҝͷऔ૊ ൃੜ͍ͯͨ͠໰୊ • GithubͷΧϯόϯͰϨϏϡʔ଴ͪΛ؅ཧ͍ͯ͠Δ ͕ɺGithubͷϖʔδʹఆظతʹߦͬͯݟͳ͍ͱ͍͚ ͳ͍ɻ(SlackͰґཔ͸ͯ͠΋ྲྀΕ͕ͪ) • ͦͷ݁ՌɺϨϏϡϫʔ͕ภΔɻ طʹܗ੒͞ΕͯͨจԽ • Slack্Ͱhubot͕ಋೖ͞Ε͍ͯͯ จࣈྻʹରԠͨ͠ಈ࡞Λͤ͞Δɻ ྫɿ kintai ͱଧͭͱ ۈଵγεςϜͷ ϦϯΫ͕౤ߘ͞ΕΔɻ 58

Slide 59

Slide 59 text

νʔϜ։ൃΛΑΓԁ׈ʹ͢Δҝͷऔ૊ SlackʹbotΛಋೖͨ͠ɻ Slack ʹ ʰreviewʱ ͱ౤ߘ͢Δͱ bot ͕ GithubͷProjects͔Β ϨϏϡʔ଴ͪ ʹͳ͍ͬͯΔissue/PRΛ औಘͯ͠Ұཡͱͯ͠ग़ྗ͢Δɻ \\ ͳΜͱɺPHP੡ // 59

Slide 60

Slide 60 text

࡞੒࢓༷ Github Projects ͷ API Λୟ͍ͯऔಘ. ϦϑΝϨϯεɿ https://developer.github.com/v3/projects/ GithubυϝΠϯͰݴ͍ද͢ͱ "ΦϛΧϨ"ϓϩδΣΫτʢΧϯόϯʣͷதͷ "ϨϏϡʔґཔ"ͱ͍͏ΧϥϜ͔Β "ϓϧϦΫ"ʢΧʔυʣҰཡΛऔಘ͢Δ 60

Slide 61

Slide 61 text

Github Projects ͷ API Λୟ͍ͯऔಘ. • "ΦϛΧϨ"ϓϩδΣΫτͷproject_idΛऔಘ͢Δ • "ϨϏϡʔґཔ"ΧϥϜͷcolumn_idΛऔಘ͢Δɻ • GET /projects/columns/:column_id/cards Λୟ͘ɻ 61

Slide 62

Slide 62 text

"ΦϛΧϨ"ͷproject_idͷऔಘ มΘΒͳ͍ͷͰఆ਺Ͱ࣋ͭɻ GET /repos/:owner/:repo/projects Λୟ͘ͱ ϓϩδΣΫτͷϦετ͕ฦΔͷͰ֘౰ͷIDΛ୳͢ɻ "ϨϏϡʔґཔ"ͷcolumn_idͷऔಘ มΘΒͳ͍ͷͰఆ਺Ͱ࣋ͭɻ GET /projects/:project_id/columns Λୟ͘ͱ ϓϩδΣΫτ಺ͷΧϥϜͷϦετ͕ฦΔͷͰ֘౰ͷIDΛ୳͢ɻ 62

Slide 63

Slide 63 text

GET /projects/columns/:column_id/cards Λୟ͘ɻ :colmn_id => औಘͨ͠ϨϏϡʔґཔͷcolumn_idΛηοτɻ ΧϥϜ಺ͷΧʔυͷϦετ͕ฦΔͷͰͦΕΛऔಘ͢Δɻ ※ Ϩεϙϯεʹ͸ϓϧϦΫຊମͷURL΍λΠτϧؚ͕·Ε͍ͯͳ͍ͷͰ ඞཁͳ৔߹͸ɺϨεϙϯε಺ͷ content_urlʹରͯ͠ ࠶౓GETͰϦΫΤετΛߦ͏ɻ 1+N(Χʔυͷ਺) ճϦΫΤετ͕౤͛ΒΕΔͷͰɺ ϨϏϡʔͷཷ·Γঢ়گ΍ཁ݅ʹԠͯ͡ௐ੔͢Δɻ 63

Slide 64

Slide 64 text

࣮ફͨ݁͠Ռ • ϨϏϡʔ଴ͪͷϦετΛ Slack͔Β֬ೝग़དྷΔɻ => Θ͟Θ͟ɺGithubʹݟʹߦ͔ͳͯ͘΋ྑ͍ɻ • ϨϏϡʔ଴ͪ࢒ͷঢ়گ͕ࣗ෼ൃ৴Ͱແͯ͘΋ɺ֬ೝग़དྷΔɻ => ଞͷਓ͕reviewΛୟ͍ͨͱ͖ʹҰॹʹϨϏϡʔ͢Δɻ => ϨϏϡϫʔͷݻఆԽΛগ͠ղফɻ 64

Slide 65

Slide 65 text

KPIͳͲ਺ࣈͷूܭΛվળ͢Δऔ૊ ൃੜ͍ͯͨ͠໰୊ • ຖ೔৬ਓ͕ूܭͷSQLΛ࣮ߦͯ͠εϓϨουγʔτ΁هड़ɻ • ͦͷਓ͕ٳΜͩͱ͖ʹ ਺஋͕௥͑ͳ͍ɻ • ࿈ٳ໌͚ͷೖྗ͕ΊͪΌͪ͘Ό໘౗͍͘͞ɻ طʹܗ੒͞ΕͯͨจԽ • ຖேɾ೔ৗతʹSlackΛݟΔɻ • ਺ࣈ͸ εϓϨουγʔτʹ·ͱΊͯάϥϑԽͳͲΛߦ͍ͬͯΔɻ 65

Slide 66

Slide 66 text

KPIͳͲ਺ࣈͷूܭΛվળ͢Δऔ૊ • ूܭόονΛ࡞੒ͨ͠ɻ • Slackʹຖேɺࡢ೔ͷ਺஋Λूܭͯ͠౤ߘ͢ΔΑ͏ʹͨ͠ɻ \\ P...Python੡... // 66

Slide 67

Slide 67 text

࡞੒࢓༷ DjangoͰຖேఆࠁʹcronΛಈ͔ͯ͠ɺ ݁ՌΛSlack΁ूΊΔΑ͏ʹͨ͠ɻ ※ ࠓޙɺεϓϨουγʔτʹPost͢ΔࣄΛ૝ఆͯ͠ ҎԼͷΑ͏ͳ഑ྻΛ࡞Δͷ͸ࣙΊ·͠ΐ͏ɻ [ 0 => '2019-01-25ͷhoge஋͸99Ͱ͢ɻ', 1 => '2019-01-26ͷhoge஋͸84Ͱ͢ɻ', 2 => '2019-01-27ͷhoge஋͸101Ͱ͢ɻ' ] 67

Slide 68

Slide 68 text

࣮ફͨ݁͠Ռ • SQLΛ౎౓࣮ߦ͢Δඞཁ͕ແ͘ͳͬͨɻ • ࢦඪͷ਺஋ͷूܭํ๏΍݁Ռ͕ڞ༗஌ʹͳͬͨɻ (ूܭόονΛಡΉࣄͰ෼͔Δ) 68

Slide 69

Slide 69 text

ͪΐͬͱؤுͬͨ݁Ռ... • Slack͕Τϥʔ௨஌͕ݟΕΔͪΐͬͱศརͳπʔϧʹͳΓ • Slack͕ϨϏϡʔΛݟΕΔͪΐͬͱศརͳπʔϧʹͳΓ • Slack͕ຖேͷ਺஋Λ௥͑Δͪΐͬͱศརͳπʔϧʹͳͬͨɻ 69

Slide 70

Slide 70 text

ͪΐͬͱؤுͬͨ݁Ռ... • ࣗ෼ͷ࡞ͬͨπʔϧΛ࢖ͬͯ͘ΕΔ ΤϯυϢʔβʔʢϝϯόʔʣͱ Ұॹʹ࢓ࣄग़དྷΔ࠷ߴͷ؀ڥ͕खʹೖͬͨ(աݴ) • औΓ׶͑ͣ࡞ͬͯΈͨΒ৭ΜͳΞυόΠεΛ௖͚Δɻ • ঝೝཉٻͷຬͨ͞Ε۩߹͕΍͹͔ͬͨ 70

Slide 71

Slide 71 text

4. ·ͱΊ 71

Slide 72

Slide 72 text

ࢲͷ΍ͬͨ͜ͱ • Τϥʔ؂ࢹͷ௨஌ΛSlack΁ूΊͨɺ͚ͩɻ • ϨϏϡʔΛSlackܦ༝ͰݟΕΔΑ͏ʹͨ͠ɺ͚ͩɻ • ຖேͷSQL࣮ߦΛόονԽͨ͠ɺ͚ͩɻ 72

Slide 73

Slide 73 text

ͿͬͪΌ͚େͨ͠ࣄͯ͠ͳ͍ɾɾস 73

Slide 74

Slide 74 text

͍ͭ΋࢖ͬͯΔπʔϧΛ ͪΐͬͱศརʹ͚ͨͩ͠ 74

Slide 75

Slide 75 text

Կނ΍͔ͬͨɻ • ϝϯόʔͷҰһͷࣗ෼͕ࠔ͔ͬͯͨΒɻ • ͦͯͦ͠Ε͸ଞͷϝϯόʔʹ΋ಉ͡Α͏ʹ ࠔΓࣄͱͯ߱͠Γֻ͔ͬͯདྷΔͱࢥ͍ͬͯΔ͔Βɻ • ͦͷ໰୊ʹཱͪ޲͔͏ؾ࣋ͪͱՋ͕͚͋ͬͨͩɻ 75

Slide 76

Slide 76 text

ղܾ͢Δ໰୊ • ͦͯ͠ɺ໰୊ͷղܾ΍ͦͷ໰୊ͷղܾํ๏͸ ೔ࠒͷϝϯόʔͱͷର࿩΍ SlackͷͭͿ΍͖ͳͲ͔Βੜ·ΕΔࣄ͕ଟ͔ͬͨɻ • ΦϛΧϨͷίϛϡχέʔγϣϯจԽͷதͰͷ ͪΐͬͱͨ͠ձ࿩͔Β໰୊͸ੜ·Εͯ ؾ෇͍ͨͱ͖ʹղܾ͍͚ͯͨ͠ɻ • ຖ೔ςΩετ1ߦ͚ͩͰ΋ࡶͳίϛϡχέʔγϣϯ͢Δͷ͕ ͱͯ΋େࣄͩͱײ͡Δɻ 76

Slide 77

Slide 77 text

ղܾ͢Δͷ͕೉ͦ͠͏ɾɾ 77

Slide 78

Slide 78 text

໰୊ͱͷ޲͖߹͍ํ • ໰୊Λ100఺ຬ఺Ͱղܾ͢Δඞཁ͸ͳ͍ɻ • ࠓɺࣗ෼ͷ࣋ͬͯΔεΩϧͰղܾ͢Ε͹ྑ͍ɻ • ʮͪΐͬͱϚγʹͳͬͨʯ͸େ੒ޭɻ • ʮखΛಈ͔ͨ͠ऀ͚͕ͩੈքΛม͑Δɻʯ 78

Slide 79

Slide 79 text

໰୊ͱ޲͖߹ͬͨ݁Ռ • ࣗ෼ͷखʹΑͬͯղܾͨ͠໰୊͕͋Γ ͦΕʹΑͬͯ ͋Γ͕ͱ͏ ͕ੜ·Ε લΑΓձࣾͷࣄΛ޷͖ʹͳΔࣄ͕ग़དྷͨɻ 79

Slide 80

Slide 80 text

਎ۙʹډΔɺେখ༷ʑͳ໰୊Λղܾͨ͠ਓʹ ੋඇʮఱ࠽ʂʯͱݴ͍ͬͯ͋͛ͯͩ͘͞ 80

Slide 81

Slide 81 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 81