Slide 1

Slide 1 text

NervesͰ֦ுੑͷߴ͍IoTσόΠεΛ࡞Δ ܀ྛ ݈ଠ࿠ʢGMOϖύϘגࣜձࣾɺ๺཮ઌ୺Պֶٕज़େֶӃେֶʣ ϥΠτχϯάτʔΫ@K-Ruby #25ʢ2020೥11݄26೔ʣ 1

Slide 2

Slide 2 text

܀ྛ ݈ଠ࿠ a.k.a. ͋ΜͪΆ https://kentarokuribayashi.com GMOϖύϘגࣜձࣾऔక໾CTO Ұൠࣾஂ๏ਓ೔ຊCTOڠձཧࣄ ๺཮ઌ୺Պֶٕज़େֶӃେֶʢJAISTʣത࢜ લظ՝ఔࡏֶதͷࣾձਓֶੜͰ΋͋Δ IoTηΩϡϦςΟؔ࿈Λݚڀ͢Δͭ΋Γ ࣗݾ঺հ 2

Slide 3

Slide 3 text

- NervesΛ༻͍ͯRaspberry PiͰLEDΛνΧνΧͤ͞ΔʢLνΧʣ - ElixirͷGenServerͱ͍͏࢓૊ΈΛ࢖֦ͬͯுՄೳͳઃܭΛ͢Δ - PhoenixΛ༻͍ͯWeb APIܦ༝ͰLEDΛνΧνΧͤ͞Δʢ΢ΣϒνΧʣ - ΢ΣϒνΧΛෳ਺σόΠεؒͷ௨৴ʹΑ࣮ͬͯݱ͢Δల๬Λड़΂Δ ίʔυͷৄࡉΑΓ΋ʮElixirͱNervesͩͱ͜Μͳ͜ͱ͕؆୯ʹͰ͖͍ͯ͢͝ʂʯ ͱ͍͏࿩Λ͠·͢ʢίʔυ͸GitHubʹΞοϓͯ͠ΔͷͰɺৄࡉ͸ͦͪΒΛࢀর ͍ͯͩ͘͠͞ʣɻ ͜ͷLTͰ࿩͢͜ͱ 3

Slide 4

Slide 4 text

- ϓϥοτϑΥʔϜ - ϓϩηεͱݺ͹ΕΔܰྔεϨουʹΑΓɺεέʔϥϏϦςΟ͕ߴ͍ - ϓϩηεΛ؂ࢹ͠ো֐࣌ʹࣗಈ෮چͰ͖ΔͨΊɺ଱ো֐ੑ͕ߴ͍ - ݴޠ - ؔ਺ܕݴޠͰ͋Γɺ؆ܿͰϝϯςφϯεੑͷߴ͍ίʔυΛॻ͚Δ - ڧྗͳύλʔϯϚονϯάػೳɺϚΫϩʹΑΔݴޠͷ֦ுੑΛ༗͢Δ - πʔϧ - ϏϧυπʔϧͷMix΍ύοέʔδϚωʔδϟʔͷHex౳ͷπʔϧ͕ॆ࣮ - Erlang VM্Ͱಈͨ͘ΊɺErlangͷར఺ɾࢿ࢈Λ׆༻Ͱ͖Δ Elixirͷಛ௃ ग़ॴ: The Elixir programming language ΑΓචऀ͕·ͱΊͨ 4

Slide 5

Slide 5 text

- ElixirͰIoTσόΠεΛ։ൃ͢ΔͨΊͷศརͳ͘͠ΈҰࣜΛఏڙ - ϓϥοτϑΥʔϜ: BEAMʢErlang VMʣΛϒʔτ͢ΔϛχϚϧͳLinuxϑΝʔϜ ΢ΣΞΛఏڙ - ϑϨʔϜϫʔΫ: ElixirͰIoTσόΠεΛૉૣ͘։ൃ͢ΔͨΊͷϥΠϒϥϦ܈Λఏڙ - πʔϧνΣΠϯ: ϑΝʔϜ΢ΣΞΛϏϧυͨ͠ΓσϓϩΠͨ͠Γ͢ΔͨΊͷCLI πʔϧΛఏڙ - ͦͷଞ: ϑΝʔϜ΢ΣΞΛOTA͢ΔͨΊͷNervesHubͱ͍͏ج൫Λఏڙʢݸਓత ʹ͸͜͜΁ͷڵຯ͔ΒNervesʹϋϚΓ࢝Ίͨʣ Nervesͱ͸ ग़ॴ: Nerves PlatformɺGetting Started — nerves v1.7.0 ΑΓචऀ͕·ͱΊͨ 5

Slide 6

Slide 6 text

ී௨ͷLνΧ ී௨ͷLνΧ 6

Slide 7

Slide 7 text

- લϖʔδͷίʔυͰ͸ɺϕλʹϧʔϓΛճͯ͠νΧνΧ͍ͤͯ͞Δ - LνΧΛ࣮૷͢Δ෦෼Λଞͷػೳͱͭͳ͍͛ͨͱࢥͬͨΒͲ͏͢Δʁ - Web API͔ΒLνΧΛݺͼग़͍ͨ͠ʢࠓճ΍ͬͨ͜ͱͱͯ͠࿩͢಺༰ʣ - ෳ਺σόΠεʹεέʔϧΞ΢τ͍ͨ͠ʢࠓޙͷల๬ͱͯ͠࿩͢಺༰ʣ - ElixirʹΑΔϓϩάϥϛϯάͰ͸ɺଟ਺ͷϓϩηεؒͷϝοηʔδϯά ύογϯάʹΑͬͯઃܭ͢Δ - ϋʔυ΢ΣΞͷૢ࡞ͱɺૢ࡞ґཔϦΫΤετͷॲཧͱΛΘ͚ͯઃܭ͢Δ LνΧΛ࠶ઃܭ͢Δ 7

Slide 8

Slide 8 text

LνΧͷॲཧΛߏ੒͢Δϓϩηε܈ Supervisor Worker Led supervise WorkerͱLedϓϩηεΛ supervise͠ɺϓϩηε͕མ ͪͨΒ্ཱͪ͛௚͢ɻ LEDΛΦϯɾΦϑͨ͠Γɺ ఺໓ͤͨ͞Γ͢ΔೖΓޱΛ ఏڙ͢Δϓϩηεɻ಺෦Ͱ ϧʔϓॲཧ΋୲͍ͬͯΔɻ ҎԼͷϝοηʔδʹԠ౴͢ Δɻ :turn_on :turn_off :start_blinking :stop_blinking LEDͷૢ࡞Λఏڙ͢Δϓϩη εɻҎԼͷϝοηʔδʹԠ౴ ͢Δɻ :turn_on :turn_off 8 Message

Slide 9

Slide 9 text

- 1. ΫϥΠΞϯτϓϩηε͔ΒϝοηʔδΛड͚औΓɺ2. ͳΜΒ͔ͷॲཧΛ͠ ͯɺ3. ݁ՌΛฦ͢ͱ͍͏ʮαʔόʔϓϩηεͷ͋Δ͋ΔύλʔϯʯΛఆٛ - αʔόʔϓϩηε͸εςʔτϑϧͰ͋Δʢ಺෦ঢ়ଶΛ͍࣋ͬͯΔʣ - ۩ମతʹ͸ɺJavaͰ͍͏InterfaceͷΑ͏ͳ࢓૊ΈͰ͋ΔBehaviourʹΑ࣮ͬͯݱ ͍ͯ͠Δ - ΫϥΠΞϯτ͔Βͷಉظɾඇಉظݺͼग़͠ͷͲͪΒʹ΋ରԠ͍ͯ͠Δ - Supervisorͷ؂ࢹԼʹஔ͘ͱɺαʔόʔϓϩηε͕ࢮΜͰ΋ࣗಈతʹ࠶ىಈ͞Ε ΔΑ͏ʹͰ͖Δ GenServer 9

Slide 10

Slide 10 text

- ͲͪΒ΋GenServerΛ༻͍࣮ͯ૷͞Εͨϓϩηε - Workerϓϩηε - ֎෦ϓϩηεʢREPL΍Web APIͳͲʣ͔Βͷɺϋʔυ΢ΣΞʢ͜͜Ͱ͸LEDʣͷૢ࡞Λ ґཔ͢ΔϦΫΤετΛड͚෇͚Δ - LEDΛνΧνΧͤ͞ΔͨΊͷϧʔϓॲཧ΋୲͏ʢվળͷ༨஍͋Γ※ʣ - Ledϓϩηε - Workerϓϩηε͔ΒΈΔͱαʔόʔϓϩηεʹ͋ͨΔ - ϋʔυ΢ΣΞ΁ͷૢ࡞Λ୲͏ɻ۩ମతʹ͸ɺRaspberry PiͷGPIOܦ༝ͰLEDΛૢ࡞͢Δ WorkerͱLed ※ ʮ͸͡ΊͯNerves(6) GPIOೖྗͷΤοδΛ࢖ͬͯΠϕϯτυϦϒϯͳϘλνΧΛ͢Δʯࢀরɻ 10

Slide 11

Slide 11 text

ElixirͷREPLʢIExʣ͔ΒLνΧ͢Δ start_blinkingͰLνΧ։ ࢝ stop_blinkingͰLνΧऴྃ ʢ໨͕௧͘ͳΔͷͰ……ʣ νΧνΧ͍ͯ͠Δʂ 11

Slide 12

Slide 12 text

ίʔυ͸ kentaro/nerves_webchika Ͱʂ 12

Slide 13

Slide 13 text

- ࣍͸ɺWebʢAPIʣܦ༝ͰLνΧ=ʮ΢ΣϒνΧʯʢ※ʣ͍ͨ͠ - Web APIͷ࣮૷͸ɺElixirͷσϑΝΫτελϯμʔυͳWAFͰ͋Δ PhoenixΛ༻͍Δ - ࣮૷ʹࡍͯ͠͸ɺطʹݟͨLνΧΛߏ੒͢Δϓϩηε܈΁ͷϝοηʔδ ύογϯά͚ͩͰ࣮ݱ͢Δ - ͭ·ΓɺWeb APIଆͰϋʔυ΢ΣΞͷૢ࡞Λ୲͏࣮૷ʹґଘ͠ͳ͍Α͏ ʹ͢Δ Web͔ΒLνΧʢ΢ΣϒνΧʣ͍ͨ͠ ※ ʮElixir_Nervesೖ໳ʂݎ࿚ͳIoT EdgeσόΠεϓϩάϥϛϯάΛ͓खܰʹʙNervesͰͭ͘Δ΢ΣϒνΧʙʯ͕ൃ঵ʁ 13

Slide 14

Slide 14 text

΢ΣϒνΧͷॲཧΛߏ੒͢Δϓϩηε܈ Supervisor Worker Led supervise HTTP௨৴ ϝοηʔδૹ৴ 14 Ϣʔβ͔ΒͷWebܦ༝Ͱ ͷૢ࡞ϦΫΤετΛड͚ ෇͚ΔAPIΛఏڙ Web API

Slide 15

Slide 15 text

Web APIͷίʔυ͸ʢ࣮࣭ʣ͜Ε͚ͩ nerves.local/led/... - start_blinking - stop_blinking - turn_on - turn_off WorkerʹϝοηʔδΛૹΔ 15

Slide 16

Slide 16 text

ίʔυ͸ kentaro/nerves_webchika Ͱʂ 16

Slide 17

Slide 17 text

- ϑΝʔϜ΢ΣΞͷىಈ࣌ʹࣗಈͰLνΧ΋࢝·ΔΑ͏ʹ͠ͳ͔ͬͨͷ͸ɺ։ൃ࣌ʹ໨͕ νΧνΧ௧͘ͳΔ͔Β - WorkerɺLed౳ͷϓϩηε͸ΞϓϦέʔγϣϯىಈ࣌ʹࣗಈతʹىಈ - ৄ͘͠͸ίʔυΛࢀরͷ͜ͱ - ࠓճ͸1୆ͷRaspberry Pi্ͰɺWeb APIΛؚΉશͯͷϓϩηεΛ࣮ߦ͕ͨ͠ɺෳ਺୆ʹ ΋༰қʹεέʔϧΞ΢τͰ͖Δʢ※ʣ - ܭࢉϦιʔεΛେྔʹফඅͨ͠ΓɺI/Oͷ਺͕ଟ͔ͬͨΓ͢ΔΑ͏ͳσόΠεΛ࡞Δ৔߹ʹศ ར - ͞ΒʹϝοηʔδΛPub/SubͰ΍ΓͱΓ͢ΔͱΑΓૄ݁߹ʹͳ͍͍ͬͯײ͡ ิ଍ͱٞ࿦ ※ ۩ମతʹ͸ʮ͸͡ΊͯNerves(8) ୯ҰϗετͰಈ͘γεςϜΛෳ਺ϗετʹ෼ࢄ͢ΔʯΛࢀরͷ͜ͱ 17

Slide 18

Slide 18 text

ෳ਺୆ͷ෺ཧϊʔυʹ֦ு͞Εͨϓϩηε܈ Supervisor Worker Led supervise Ϣʔβ͔ΒͷWebܦ༝Ͱ ͷૢ࡞ϦΫΤετΛड͚ ෇͚ΔAPIΛఏڙ Web API HTTP௨৴ ϝοηʔδૹ৴ 18 ϊʔυ 1 ϊʔυ 2

Slide 19

Slide 19 text

- NervesΛ༻͍ͯRaspberry PiͰLEDΛνΧνΧͤͨ͞ʢLνΧʣ - ElixirͷGenServerͱ͍͏࢓૊ΈΛ࢖֦ͬͯுՄೳͳઃܭΛͨ͠ - PhoenixΛ༻͍ͯWeb APIܦ༝ͰLEDΛνΧνΧͤͨ͞ʢ΢ΣϒνΧʣ - ΢ΣϒνΧΛෳ਺σόΠεؒͷ௨৴ʹΑ࣮ͬͯݱ͢Δల๬Λड़΂ͨ ElixirͱNervesͰIoTσόΠεΛ࡞Δͷ͸ϚδͰେ͖ͳՄೳੑΛײ͡Δɻ ·ͱΊ 19