おうちにAPIを生やすお話.pdf

Bbf2a0e77c98104ac16ef6d0098c1385?s=47 yagi2
August 03, 2018
190

 おうちにAPIを生やすお話.pdf

Bbf2a0e77c98104ac16ef6d0098c1385?s=128

yagi2

August 03, 2018
Tweet

Transcript

  1. ͓͏ͪʹAPIΛੜ΍͓͢࿩ 2018/08/03 Kyoto.LT #21 γʔαʔגࣜձࣾ Itsuki AOYAGI (@yagi2)

  2. ࣗݾ঺հ • ੨༄ थʢItsuki AOYAGI) • ΍͗ʹ͍ʢ@yagi2, @yaginierʣ • γʔαʔגࣜձࣾ

    • AndroidΞϓϦΤϯδχΞ • ͓͏͕ͪେ޷͖
  3. ࣗݾ঺հ • ੨༄ थʢItsuki AOYAGI) • ΍͗ʹ͍ʢ@yagi2, @yaginierʣ • γʔαʔגࣜձࣾ

    • AndroidΞϓϦΤϯδχΞ • ͓͏͕ͪେ޷͖
  4. ࠷ۙ͸؆୯ʹ͓͏ͪͱITΛܨ͛ΒΕΔ ɾGoogle Home ɾAmazon Alexa ɾHomePod ……

  5. ࠷ۙ͸؆୯ʹ͓͏ͪͱITΛܨ͛ΒΕΔ ɾGoogle Home ɾAmazon Alexa ɾHomePod …… ͕ɺҙ֎ͱͰ͖Δ͜ͱ͸ݶΒΕ͍ͯΔ……

  6. σϑΥϧτͰແ͍ػೳΛ΍Δʹ͸ • ࣗ෼ͰΞΫγϣϯ΍εΩϧΛ࢖͏ • ൺֱత؆୯ʹ௥ՃͰ͖Δ͕ॊೈੑ͸ऑ͍ • IFTTTΛ࢖ͬͯWebhook͍ͯ͠Ζ͍Ζ΍Δ • Webhook͢ΔͷͰՄೳੑ͸ແݶେ͕ͩ༻ҙ͢Δ΋ͷ΋ଟ͍

  7. σϑΥϧτͰແ͍ػೳΛ΍Δʹ͸ • ࣗ෼ͰΞΫγϣϯ΍εΩϧΛ࢖͏ • ൺֱత؆୯ʹ௥ՃͰ͖Δ͕ॊೈੑ͸ऑ͍ • IFTTTΛ࢖ͬͯWebhook͍ͯ͠Ζ͍Ζ΍Δ • Webhook͢ΔͷͰՄೳੑ͸ແݶେ͕ͩ༻ҙ͢Δ΋ͷ΋ଟ͍

  8. ͓͏ͪAPI

  9. APIʢAPlication Interfaceʣ ஌ͬͯΔਓ

  10. API࢖ͬͨ͜ͱ͋Δਓ

  11. API࡞ͬͨ͜ͱ͋Δਓ

  12. ࣗ୐ʹAPIαʔό͕͋Δਓ

  13. ͓͏ͪAPI • ࣗ୐ͷ͋Ε͜ΕΛHTTP(S)ܦ༝Ͱ͋Ε͜ΕͰ͖ ΔΑ͏ʹ͢Δ΍ͭ • ͓͏ͪͷঢ়ଶʢGETʣ • Ոిͷૢ࡞ʢPOSTʣ

  14. ԿΛ࣮ݱ͍͔ͨ͠ • PCͷిݯΛೖΕ͍ͨʢWake on LANʣ • ΠϯλʔωοτϥδΦͷૢ࡞Λ͍ͨ͠ • ΤΞίϯ౳ͷՈిͷૢ࡞Λ͍ͨ͠ •

    ෦԰ͷԹ౓ͱ͔औΓ͍ͨ
  15. ࠓճ͸ेീ൪ͷKotlinͰAPIΛ࡞Δ

  16. KotlinͰͷAPI • બ୒ࢶ͸͍Ζ͍Ζ͋ΔʢͳʹͤJavaͷࢿ࢈͕࢖͑ΔͷͰʣ • SpringBootવΓ…… • KotlinͱSpring BootΛ࢖ͬͯαΫοͱୟ͚ΔAPIΛ࡞Δ • ͔͠͠KotlinͰ΍Γ͍ͨ

    • ͷͰKtorͱ͍͏ϑϨʔϜϫʔΫΛ࢖͏
  17. Ktor • ΊͬͪΌബ͍WebΞϓϦͷϑϨʔϜϫʔΫ ( https://github.com/ktorio/ktor ) • ඇಉظॲཧ΋͍͍ײ͡ʹͳ͍ͬͯΔ • KotlinͷCoroutinesͱ͍͏ػೳ

    fun main(args: Array<String>) { embeddedServer(Netty, 8080) { routing { get("/") { call.respondText("Hello, world!", ContentType.Text.Html) } } }.start(wait = true) }
  18. KtorͰͷAPI • https://github.com/yagi2/Kaya • Private Repository • ͱ͸͍࣮͑૷͸ࠓճͷຊ࣭తͳ෦෼Ͱ͸ͳ͍ͷͰলུ • KtorͰ͓͏ͪAPIΛϦϓϨʔεͨ͠࿩

    - Speaker Deck
  19. ͯ͞API͸׬੒ͨ͠

  20. ͳͥAPIΛ࡞ͬͨͷ͔ • Application Interface • ͭ·ΓAPIΛ༻ҙ͢Ε͹͍ΖΜͳͱ͜Ζ͔Β࢖͑Δ • Web,εϚϗ,HomeܥσόΠε

  21. ࠓճͷߏ੒ • API • Kotlin+KtorΛRaspberryPi্Ͱಈ͔͢ʢࣗ୐಺ʣ • ΫϥΠΞϯτ • Webϒϥ΢βʢૉHTMLʣ •

    AndroidΞϓϦʢेീ൪ʣ • Google Home miniʢࣗ୐಺ʣ ※DDNSΛ࢖ͬͯࣗ୐֎͔Β΋APIʹΞΫηεՄೳ
  22. ྑ͍఺ • ͓͏ͪͷ͋Ε͜Εʹର͢ΔೖྗͷΠϯλʔϑΣʔε͕૿͑ͨ • εϚϗࣾձͳݱ୅ʹͽͬͨΓ • ೖྗΠϯλʔϑΣʔε͕ଟ͍ʹӽͨ͜͠ͱ͸ͳ͍࠷ߴ • ͳΜͳΒcurlͰՈిૢ࡞Ͱ͖Δ •

    ͓͏ͪͷ͋Ε͜ΕΛҰݩ؅ཧͰ͖Δͷ͸ྑ͍ • APIΛ࡞Δೳྗ͸ؒҧ͍ͳ্͕͘Δ
  23. ྑ͘ͳ͍఺ • ͳΜ͔RasPi͕ࢮΜͩΓϓϩηε͕ࢮΜͩΓ͢Δ • MackerelͰࢮ׆؂ࢹ͍ͯ͠Δ • ঢ়ଶΛRasPiʹ΋ͨͤ͗͢Δͱࠓ౓͸ਖ਼نͷϦϞίϯ͔Βૢ࡞ Λͨ͘͠ͳ͘ͳΔ • APIΛհ͞ͳ͍ͷͰঢ়ଶ؅ཧ͕໘౗ʹͳΔ

  24. ࠓޙ΍Γ͍ͨ͜ͱ • ࠓ͸RESTfulAPIͳͷͰGraphQLʹͨ͠Γ͍ͨ͠ɻ • WebUI࡞Γ͍ͨ • Թ౓ͱ͔֎෦ͷՈిૢ࡞ɺऔಘʹ͍ΖΜͳόΠφϦ͕ґଘͯ͠ ΔͷͰDockerͱ͔ͰυΧυΧ͍ͨ͠

  25. ࣮ࡍʹى͖ͨා͍࿩

  26. ͦͷ̍ ͳΜ͔͍Ζ͍Ζ഑ઢͯͨ͠ΒLED͕ ম͖͖Εͨ

  27. ిؾͷษڧΛ͔ͬ͠Γ͠·͠ΐ͏

  28. ͦͷ̎ ͳΜ͔উखʹPC͕෇͍ͨΓϥδΦ ͕෇͍ͨΓ͢Δոحݱ৅

  29. https://twitter.com/rombulow/status/990684453734203392

  30. Կ͕ى͖ͨͷ͔ • GETͰτάϧͳϦΫΤετΛ࣮૷͢Δ • ςϨϏʹGET → ిݯONͳΒOFF OFFͳΒON • Chromeͷ৽نλϒ։͍ͨͱ͖ͷ࠷ۙ։͍ͨϖʔδʹAPI࢖

    ͏ϖʔδ͕͋ΔͱGET͕ϦΫΤετ͞ΕΔ
  31. HTTPΛཧղͤΑ HTTPͷGET͸ႈ౳ʹ͢Δ΂͖Ͱ ͋ͬͯɺ෭࡞༻Λ΋ͨͤΔͱ Googleͱ͔ͷBOTͱ͔ͷΫϩʔϥ ͕͓Ոʹ৵ೖͯ͘͠Δ

  32. ͱ͸͍͑ΊͪΌΜ͜ศརͩ͠ ݱ୅Google Homeͱ͔͋ΔͷͰ ΈΜͳ΍Ζ͏ ͓ΘΓ