Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2017_RubyWorld-Conf_Tamashii

Adef5a4afb805d7179e41c28f023b8eb?s=47 david_5xruby
November 01, 2017

 2017_RubyWorld-Conf_Tamashii

http://2017.rubyworld-conf.org/ja/program/

近年、ハードウェアの進化により、本来通信機能持っていない、例えばセンサー、 マイクやスピーカーなどが声を出して、話し始めたりするのです。これらによっ て、いろいろな IoT デバイスが生まれ始めました!
弊社、株式会社ファイブルビーは Ruby 大好きエンジニア集団で構成しておりま すが、今までの Ruby コミュニティの中で、Gem ライブラリの中に IoT デバイ スを統合できるものを見つけることができず、悔しい気持ちを抱いておりまし た!
そこから、だったら自らから作れば!という思いに至りまして、Ruby で IoT 統 合のフレームワーク -Tamashiiを作成し、現在オープンソースとして公開して おります。(https://github.com/5xRuby)
Tamashii は CRuby で開発された IoT のフレームワークです。現在は Raspberry Pi の IoT デバイスを中心に、使い手は任意の通信インターフェスを定義すれば、 Tamashii フレームワークを使用することができます。
この Tamashii フレームワークを使うことによって、Rails で ActiveRecord を使 用して、データベースのインターフェースを使うような感覚で、IoT デバイスを 簡単に動かすことが可能になるのです。
そして、Tamashii 自体は Rack-based のフレームワークで作られているので、 Rack-based のアプリとの互換性があります。つまり、今すぐ Rails アプリの中に Tamashii を使うことができます。
開発者にとって、もう一つ嬉しいことは新しい IoT デバイスが出た時、Tamashii フレームワークで定義されるスペックのとおりに Ruby のクラスを実装すれば、 IoT デバイスがすぐ Tamashii フレームワークと接続して使用することができま
す。
2016 年の台湾 RubyConf で、実際に 17 台の Raspberry Pi デバイスを設置し、 300 名参加者に非接触 IC カードを配り、参加者が今どのセッションに参加して いるのかを Tamashii の Rails アプリでリアルタイムで把握することができまし た!
そして、会場のスポンサー様もミス無く参加者の情報を入手できて、かつ手間も 減らせることができたので、参加者も会場スポンサー様も喜ぶサービスを提供 することができました!
デモビデオ:https://youtu.be/wzbAUzC_vi8

Adef5a4afb805d7179e41c28f023b8eb?s=128

david_5xruby

November 01, 2017
Tweet

Other Decks in Programming

Transcript

  1. 3VCZͱ*P5Λ΋ͬͱ؆୯ʹ͢Δ 5BNBTIJJ஀ੜͷ࿩ גࣜձࣾϑΝΠϒϧϏʔ ިɹେҒ 3VCZ8PSME$POGFSFODF

  2. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ 5BNBTIJJ։ൃͷ࿩ ࣮ࡍͷӡ༻ ՝୊ ΞδΣϯμ

  3. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ 5BNBTIJJ։ൃͷ࿩ ࣮ࡍͷӡ༻ ՝୊ ΞδΣϯμ

  4. ިɹେҒ ί΢ɹμΠΠ PS%BWJE ୆࿷ग़਎ ೥དྷ೔ ೥3VCZΤϯδχΞ ೥גࣜձࣾϑΝΠϒϧϏʔ XIPBNJ

  5. גࣜձࣾϑΝΠϒϧϏʔ ୆࿷Ͱ3VCZେ޷͖ͳ্هਓ͕࡞ͬͨձࣾͷ೔ຊ๏ਓ ೥݄ɺ೔ຊ๏ਓΛ্ཱͪ͛·ͨ͠ʂ 38$εϐʔΧʔ 38$εϐʔΧʔ 38$εϐʔΧʔ

  6. डୗ։ൃ ίϯαϧςΟϯά 3VCZڭҭ ձࣾۀ຿

  7. ձࣾཧ೦ ։ൃऀ اۀ ίϛϡχςΟ Y3VCZ ࢓ࣄͷ૿Ճ ίϛϡχςΟ΁ͷࢧԉ ߴ඼࣭ͳϓϩάϥϜͷఏڙ ։ ൃ

    ऀ ΁ ͷ ࢦ ಋ Π ϕ ϯ τ ιϦϡʔγϣϯ
  8. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ 5BNBTIJJ։ൃͷ࿩ ࣮ࡍͷӡ༻ ՝୊ ΞδΣϯμ

  9. *P5ͱ͸ʁ

  10. –wikipedia *P5 *OUFSOFUPG5IJOH ͱ͸ɺ೔ຊޠʹ ༁͢ͱlϞϊͷΠϯλʔωοτzͰɺύιί ϯ΍ϓϦϯλʔɺαʔόʔҎ֎ͷ༷ʑͳʮϞ ϊʢ෺ʣʯʢྫɿྫྷଂݿͳͲʣ͕Πϯλʔ ωοτʹ઀ଓ͞Εɺ৘ใަ׵͢Δ͜ͱʹ ΑΓ૬ޓʹ੍ޚ͢Δ࢓૊ΈͰ͢ɻ

  11. ʢલ೥౓ൺ༧ଌʣ

  12. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ 5BNBTIJJ։ൃͷ࿩ ࣮ࡍͷӡ༻ ՝୊ ΞδΣϯμ

  13. 5BNBTIJJͬͯͳΜͰ͔͢ʁ

  14. *P5σόΠεͱ΢ΣϒΞϓϦΛ؆୯ʹ ౷߹͢ΔͨΊʹ࡞ΒΕͨSVCZͷΦʔ ϓϯιʔεͰ͢ 5BNBTIJJͱ͸

  15. ໊લ͸ͳͥ5BNBTIJJͳͷ͔ʁ

  16. 5BNBTIJJ͸ ԿΛղܾ͍ͨ͠ͷ͔ʁ

  17. 3VCZݴޠΛ࢖༻ͯ͠ϋʔυ΢ΣΞͷίϯτϩʔ ϧΛ΋ͬͱ୯७Խʢ؆୯Խʣ͍ͨ͠ ։ൃऀ͕ϏδωεϩδοΫͷ։ൃʹूதͯ͠ཉ ͍͠ 3VCZͷ*P5ΤίγεςϜΛ࡞Γ͍ͨ 8IBUUP4PMWF

  18. ϒβʔɿԻΛग़͢ -$%ɿςΩετΛදࣔ͢Δ 3'*%ϦʔμʔɿΧʔυσʔλΛಡΈࠐΉ )JHIMFWFM"1* buzzer = Buzzer.new buzzer.beep(3) #=> Beep,

    Beep, Beep! display = Lcd.new display.print(“Ruby World Conference 2017!") reader = RfidReader.new if data = reader.read puts "Card data: #{data}" end
  19. %FWJDF8SBQQFS [0x49, 0x4d, 0x49, 0x19, 0x1d, 0x19].each do |byte| i2c_write_byte(byte)

    end # => "A" LCDͰ”A”ͱ͍͏จࣈΛදࣔ͢Δ HFNJD
  20. %FWJDF8SBQQFS module Lcd class Lcm1602I2C < Base def print(message) #

    Lots of tedious stuff end end end Lcd::Lcm1602I2C.new.print("A")
  21. ٕज़ͷ࿩ IUUQSVCZLBJHJPSHQSFTFOUBUJPOTMDUTFOHIUNM 5BNBTIJJ$SFBUF3BJMT*P5BQQMJDBUJPOTNPSFFBTJMZ )FOSZ5TFOH 3VCZ,BJHJ

  22. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ 5BNBTIJJ։ൃͷ࿩ ࣮ࡍͷӡ༻ ՝୊ ΞδΣϯμ

  23. Ұ൪࠷ॳ͸

  24. ໨ͷલͷ໰୊Λղܾ͍ͨ͠ 3VCZͰ༡ͼ͍ͨ ߩݙ͍ͨ͠ չ͍͠ؾ࣋ͪ

  25. ೥݄ɺ೔

  26. None
  27. None
  28. None
  29. ϥζϕϦʔύΠ 3BTQCFSSZ1J.PEFM# $16()[#SPBEDPN#$.CJU 3".(# 8JSFMFTT-"/ #MVFUPPUI QJOFYUFOEFE(1*0 64#QPSUT )%.*

  30. 3'*%Ϧʔμʔ .'3$1" 3'*%Ϧʔμʔ .)[

  31. ϥζϕϦʔύΠ 3'*%Ϧʔμʔ ϥζϕϦʔύΠ 3'*%Ϧʔμʔ ϒβʔ

  32. ໊ࡳͷޙΖͰ3'*%ϥϕϧΛ෇͚Δ ηογϣϯೖΔલʹσόΠεʹλον͢Δ ࢀՃऀͷڵຯ͋Δηογϣϯ͕Θ͔Δ ϥζϕϦʔύΠ 3'*%Ϧʔμʔ

  33. Demo video

  34. None
  35. ͨͩɺҰͭ໰୊఺͕͋Γɺ͜ͷγεςϜ ͸ʮPythonʯͷݴޠͰ࡞ΒΕͨ΋ͷͰ ͢ɻ RubyΤϯδχΞͱͯ͠͸ չ͍͠Ͱ͢Ͷ

  36. ೥݄ͷ͋Δ೔ ͏ͪͷࣾ௕ͱ৽ೖࣾһ)FOSZ͕ ͜ͷΑ͏ͳձ࿩͕͋Γ·ͨ͠

  37. ࠓ೥ ೥ ݄SVCZDPOGUBJXBOͷձ৔ͰSVCZ ͷίʔυͰ͜ͷσόΠεΛಈ͔ͯ͘͠Εʂ ͸͍ʜʜ෼͔Γ·ͨ͠ʂ )FOSZʂ͜ͷσόΠε͸ڈ೥  SVCZDPOGUBJXBO ͷࢀՃऀొ࿥σόΠεͰ͢ʂ ͓͓ʂ໘ന͍Ͱ͢Ͷʂ

  38. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ ͳͥ5BNBTIJJΛ࡞Γ͍ͨ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ ࣮ࡍͷӡ༻ ՝୊ ΞδΣϯμ

  39. ̏ϲ݄ޙɺ೥݄

  40. ೥ͷ3VCZ$POG5BJXBOͱಉ͡ػೳͷ SVCZόʔδϣϯ͕ग़དྷ·ͨ͠ʂ Ұ୅໨

  41. ύϑΥʔϚϯε͕ѱ͔ͬͨ 3'*%ݕग़ʹ͸ඵҎ্͔͔ͬͯ͠·ͬͨ ໰୊఺

  42. Check-in Server (Manager) Agent σʔλ ίϚϯυ ྫɿSFCPPU TUPQ

  43. Agent Check-in Server (Manager) 9WGC IFBEMFTT

  44. ೥݄d݄

  45. Agent Check-in Server (Manager)

  46. ೥݄ 3VCZ$POG5BJXBO

  47. ϥζϕϦʔύΠ 3'*%Ϧʔμʔ ϒβʔ

  48. ձ৔ͰσόΠεݸ ਓͷࢀՃऀ ແࣄʜʜʜʜ ೋ୅໨

  49. ࠓ೥ ೥ ͷ୆࿷SVCZDPOGձ৔ͰSVCZͷίʔυ Ͱ͜ͷσόΠεΛಈ͔ͯ͘͠Εʂ ೥݄ͷ͋Δ೔

  50. σόΠεΛίϯτϩʔϧ͢ΔͨΊɺطଘͷHFN Λ࢖͏ඞཁ͕͋Δ σόΠε͕αʔόͱࣗಈతʹ࠶઀ଓ͕Ͱ͖ͳ͍ ίʔυ͕ϞδϡʔϧԽ͞Ε͍ͯͳ͍ ໰୊఺

  51. ೥݄ʙ

  52. SBJMTґଘͷ໰୊Λվળ͍ͨ͠ ίʔυΛϞδϡʔϧԽ͍ͨ͠ ৽͍͠σόΠεΛ΋ͬͱ؆୯ʹ௥Ճ͍ͨ͠ վળ͍ͨ͜͠ͱ

  53. SBJMTBDUJPO@DBCMFͷ࢖༻Λ΍ΊΔ αʔόͱσόΠεଆͷXFCTPDLFU௨৴͸ࣗલͰ ࣮૷͢ΔUBNBTIJJ SBLFCBTFEͷ΢ΣϒϑϨʔϜϫʔΫͰ͋Ε ͹ɺ࢖͑·͢ʂ SBJMTґଘͷ໰୊

  54. UBNBTIJJαʔόଆͷXFCTPDLFU௨৴ϥΠϒϥϦʔ UBNBTIJJDMJFOUσόΠεଆͷXFCTPDLFU௨৴ϥΠ ϒϥϦʔ UBNBTIJJDPNNPOڞ௨ϥΠϒϥϦʔ UBNBTIJJNBOBHFSαʔόଆ࢖ΘΕΔϥΠϒϥϦʔ UBNBTIJJBHFOUσόΠεଆ࢖ΘΕΔϥΠϒϥϦʔ (FN

  55. ϞδϡʔϧԽ͢Δ͜ͱʹΑͬͯɺUBNBTIJJ BHFOUͷHFNΛ࢖͑͹ɺ࠷௿ݶͷ*P5σό Πεଆ࣮૷͕ऴΘΓɺৄ͘͠ఆ͍ٛͨ͠෦ ෼͚࣮ͩ૷͢Ε͹׬ྃͰ͢ɻ σόΠε௥ՃΛ؆୯ʹ͢Δ

  56. https://tamashii.io/

  57. IUUQTHJUIVCDPNUBNBTIJJJP

  58. IUUQTHJUIVCDPNUBNBTIJJJPUBNBTIJJBHFOUUSFFNBTUFSMJCUBNBTIJJBHFOUEFWJDF

  59. ೥݄չ͍͠ؾ࣋ͪ ೥݄3VCZͰ༡ͼ͍ͨ ೥݄໨ͷલͷ໰୊վળ͍ͨ͠ ೥݄ߩݙ͍ͨ͠ ·ͱΊ

  60. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ ͳͥ5BNBTIJJΛ࡞Γ͍ͨ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ ࣮ྫ঺հ ՝୊ ΞδΣϯμ

  61. UBNBTIJJDMPDLJO

  62. IUUQQBOGFTUQBONFEJBBTJB

  63. ࣗݾ঺հ *P5ʹ͍ͭͯ 5BNBTIJJͱ͸ʁ ͳͥ5BNBTIJJΛ࡞Γ͍ͨ 5BNBTIJJͷ͖͔͚ͬ͸ԿͰ͔͢ʁ ࣮ྫ঺հ ՝୊ ΞδΣϯμ

  64. ΋ͬͱ෯޿͍*P5σόΠεΛαϙʔτ͢Δ *P5ͱ͸͍͑ɺ·ͩϥζϕϦʔύΠ͚ͩͷ͜ͱࢼͨ͠ͷͰɺ͜ Ε͔Β΋ͬͱϋʔυ΢ΣΞͷεϖοΫ͕௿͍σόΠεΛࢼ͞ ͳ͍ͱ σόΠεଆ͸DSVCZʹΑΔ࣮૷Ͱ͕͢ɺNSVCZʹ͍ͨ͠ ίϯϑΟΪϡϨʔγϣϯΛ΋ͬͱ؆୯ʹ͍ͨ͠ ϦϑΝΫλϦϯάςετΧόϨοδ *O'VUVSF

  65. ͝੩ௌɺ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

  66. 5BJXBO3VCZ$POGFSFODF IUUQTSVCZDPOGUX