mrubyでクロスプラットフォームのCLIアプリを作ること

7fe945668a4fc098e886e20dea71d2ee?s=47 Zachary Scott
November 12, 2015

 mrubyでクロスプラットフォームのCLIアプリを作ること

多くの会社では、社内のコラボレーションの効率アップのために、内製のツールを利用しています。

しかし、社員の利用する環境やOSは異なることが多く、そのすべてで動作するツールを作ることは容易ではありません。

クロスプラットフォームで動作するアプリケーションはどのように作ればよいでしょうか?

最近、mrubyコアチームはこうしたエコシステムを改善しました。
クロスプラットフォームで動作するCLIアプリケーションを作るための最新ツールについて紹介します。

7fe945668a4fc098e886e20dea71d2ee?s=128

Zachary Scott

November 12, 2015
Tweet

Transcript

  1. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf Ruby World Conf

  2. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf Hello!!

  3. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf ͜Μʹͪ͸!!

  4. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf ࠓ೔͸ʁʁ

  5. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf ͩΜͩΜ

  6. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf Zachary Scott

  7. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf zzak

  8. দߐͰ @_zzak mrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf zzak

  9. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp @zzak_jp

  10. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Vermont όʔϞϯτ

  11. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  12. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ࡞ΒΕͳ͍ʔʂ

  13. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  14. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp LEGACY CODE

  15. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Open Source

  16. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  17. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mrubyձٞ

  18. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Thank you!!!

  19. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Terence Lee @hone02

  20. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  21. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  22. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Packaging Ruby Applications

  23. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby

  24. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli * Not our actual logo... *

  25. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli Cross-platform Command-line Applications

  26. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Packaging Landscape

  27. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What is packaging?

  28. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  29. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp bundler rubygems dependencies

  30. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp bundler rubygems dependencies

  31. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp bundler rubygems slug bundle install dependencies

  32. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp bundler rubygems slug bundle install dependencies

  33. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp bundler rubygems slug bundle install dependencies

  34. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp This is packaging

  35. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What else?

  36. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Shoes.rb

  37. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Shoes.rb

  38. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  39. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Shoes.rb Mac OS X Windows

  40. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Shoes.rb A Developer's Tour Through The Magic

    Packager github.com/shoes/shoes/wiki Compile Shoes and Ruby into libraries (source, dl, dyld) for linking Include common libraries (sqlite)
  41. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Shoes.rb A Developer's Tour Through The Magic

    Packager github.com/shoes/shoes/wiki Use minitar for archives (pure Ruby tar) Binject is used to create exe or dmg
  42. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Shoes.rb A Developer's Tour Through The Magic

    Packager github.com/shoes/shoes/wiki Ruby is built with shoes to provide one binary
  43. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Traveling Ruby

  44. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  45. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Traveling Ruby A Developer's Tour Through The

    Magic Packager github.com/shoes/shoes/wiki Pre-compile Ruby with many common extensions
  46. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Traveling Ruby A Developer's Tour Through The

    Magic Packager github.com/shoes/shoes/wiki Each app contains an interpreter dependencies to run
  47. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What can we learn?

  48. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What can we learn? 1. Pre-compiling is

    hard
  49. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What can we learn? 1. Pre-compiling is

    hard 2. Maintenance
  50. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What can we learn? 1. Pre-compiling is

    hard 2. Maintenance 3. Use static-linking
  51. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What are our goals?

  52. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp portability What are our goals? easy install

  53. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Let's build a Standalone Binary What are

    our goals? portability easy install
  54. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What are our goals?

  55. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What are our goals?

  56. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What are our goals?

  57. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What are our goals?

  58. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp What are our goals? 1. Standalone Binary

    2. Windows, OSX, Linux support 3. Command-line application
  59. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp How can mruby help?

  60. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Contributors zzak matz hone matz-r hsbt tshara

    kazuaki ishii
  61. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby use-case Designed to be embedded in

    other languages
  62. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby use-case Designed to be embedded in

    other languages Full bytecode-compiler
  63. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Bytecode VM

  64. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Bytecode VM

  65. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Bytecode VM ~/rwc => mruby/build/host/bin/mrbc -Bhello_rwc hello.rb

  66. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Bytecode VM

  67. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Bytecode VM $ gcc -Imruby/include hello.c \

    -o hello_rwc mruby/build/host/lib/libmruby.a $ ./hello_rwc Hello, RWC!
  68. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mrbgems

  69. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ʔ No remote server for fetch ʴ

    Use git or local paths mrbgems
  70. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ʔ No remote server for fetch ʴ

    Use git or local paths mrbgems
  71. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Need cross compiler Build cross-platform

  72. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli

  73. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli is... 1. CLI app 2. docker

    image 3. docker runtime FROM hone/mruby-cli $ mruby-cli --setup my-app docker-compose run compile
  74. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli is... 1. CLI app 2. docker

    image 3. docker runtime FROM hone/mruby-cli $ mruby-cli --setup my-app docker-compose run compile
  75. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Let's build something!

  76. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Ͳ͏͠Α͏ɻɻ

  77. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ๻ͷ೔ຊޠΛॿ͚ͯ

  78. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ษڧͨΊͷ

  79. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ຖ೔

  80. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  81. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  82. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  83. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  84. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  85. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  86. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  87. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ৼΓԾ໊ Furigana

  88. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  89. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  90. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp E_TOO_MANY_LINKS

  91. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  92. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  93. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp => nhk-easy-cli

  94. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp => nhk-easy-cli

  95. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp github.com/nhk-ruby

  96. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  97. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  98. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp It starts... with a gem

  99. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  100. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  101. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  102. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  103. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp We need two things 1. Get the

    latest news_list.json over HTTP 2. Parse the JSON into Ruby objects
  104. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-simplehttp

  105. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  106. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  107. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  108. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  109. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  110. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  111. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  112. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  113. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  114. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  115. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  116. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli

  117. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  118. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  119. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  120. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  121. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Download binary

  122. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Download binary 64bit OSX

  123. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Add to PATH

  124. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Add to PATH

  125. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Add to PATH

  126. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ~/rwc => mruby-cli --setup nhk-easy-cli

  127. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ~/rwc => mruby-cli --setup nhk-easy-cli

  128. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Host

  129. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Host

  130. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp 32-bit CrossBuild

  131. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp 32-bit CrossBuild

  132. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp 64-bit and 32-bit CrossBuild for OSX and

    Windows
  133. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  134. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  135. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mrbgem.rake

  136. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mrbgem.rake

  137. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mrbgem.rake

  138. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mrbgem.rake

  139. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ./tools/../*

  140. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp tools/../nhk-easy-cli.c

  141. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp tools/../nhk-easy-cli.c

  142. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp tools/../nhk-easy-cli.c

  143. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp tools/../nhk-easy-cli.c

  144. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp tools/../nhk-easy-cli.c

  145. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp tools/../nhk-easy-cli.c

  146. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mrblib/nhk-easy-cli.rb

  147. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Rakefile

  148. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp rake -T

  149. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp rake all

  150. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Tale of Two Tests

  151. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp rake test

  152. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp MTest

  153. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp test/test_nhk-easy-cli.rb

  154. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp MTest

  155. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Bintest

  156. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Bintest Runs in an external process using

    MRI, or CRuby.
  157. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp bintest/nhk-easy-cli.rb

  158. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  159. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp

  160. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp docker-compose.yml

  161. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp docker-compose.yml

  162. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Dockerfile

  163. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Dockerfile

  164. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli-docker

  165. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli-docker

  166. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli-docker

  167. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp mruby-cli-docker

  168. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ࣮૷

  169. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp add dependencies

  170. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp add dependencies

  171. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp interface

  172. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp interface

  173. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ARGV

  174. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp API

  175. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp #run

  176. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp #run

  177. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp #run

  178. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp #report_news

  179. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp #report_news 1. Call `report_entry` for each news

    item 2. Block IO until the user responds with "y" or "n"
  180. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp #report_entry

  181. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp #report_entry

  182. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ΍ͬͯΈͯʂ

  183. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp ~/rwc/nhk-easy-cli => docker-compose build

  184. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp => docker-compose run compile

  185. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Build Summary

  186. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Build Summary

  187. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp => ./mruby/build/x86_64-apple-darwin14/bin/nhk-easy-cli

  188. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp => ./mruby/build/x86_64-apple-darwin14/bin/nhk-easy-cli

  189. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp => ./mruby/build/x86_64-apple-darwin14/bin/nhk-easy-cli

  190. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp => ./mruby/build/x86_64-apple-darwin14/bin/nhk-easy-cli ΍ͬͨʂ

  191. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp The Future

  192. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Roadmap

  193. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Roadmap

  194. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Please try it!

  195. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Just Ask!

  196. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp Thank you!!!

  197. দߐͰmrubyͰΫϩεϓϥοτϑΥʔϜ #RubyWorldConf @zzak_jp "Ruby on Rails" by Source. Licensed under

    Fair use via Wikipedia https://en.wikipedia.org/wiki/File:Ruby_on_Rails.svg#/media/File:Ruby_on_Rails.svg Docker logo usage guidelines https://www.docker.com/brand-guidelines Docker Toolbox https://www.docker.com/docker-toolbox