Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
mruby-cliでCLIを作りたかった話
Search
tsubasa
August 04, 2017
Technology
350
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
mruby-cliでCLIを作りたかった話
社内勉強会で話したやつ
tsubasa
August 04, 2017
More Decks by tsubasa
See All by tsubasa
一年間の育休を振り返る / FFTT 20210312
tsub
0
2.4k
非同期朝会ボットを作った話 / Create serverless-daily-standup-bot
tsub
0
420
ここがつらいよECS
tsub
0
3.5k
Other Decks in Technology
See All in Technology
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
1.2k
Reactの設計論
uhyo
13
5.7k
module Synths; end
asonas
1
130
「図書館」という名前のままでいいのか -Code4Lib JAPANカンファレンス2026 アンカンファレンス報告- / Code4Lib JAPAN Conference 2026: Unconference Report
ykiyota
0
130
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
280
PfEingのアプローチで働こう
rindrics
0
200
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
110
2026-09-09 【sigma_ucj#1】Sigma を IaC 管理したい! / IaC for Sigma
civitaspo
0
100
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
660
Claude Code本って、 読む必要あるの?
oikon48
1
330
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
0
130
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
120
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
980
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Code Reviewing Like a Champion
maltzj
528
40k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
440
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
My Coaching Mixtape
mlcsv
0
310
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
480
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Leo the Paperboy
mayatellez
8
2.2k
Transcript
NSVCZDMJͰ$-*Λ ࡞Γ͔ͨͬͨ ''55 5TVCBTB5BLBZBNB
͖͔͚ͬྫͷهࣄ
IUUQTUFDISBDIPCQTJODKQIBDIJ@@
NSVCZະདྷ͋Γͦ͏
৮Γ࢝ΊͯΈΔ
NSVCZͱ w ͱʹ͔ܰ͘ྔͳ3VCZ w γϯλοΫεͳͲ3VCZͱಉ͕ͩ͡ɺػೳҰ෦͔͠αϙʔτ͍ͯ͠ͳ͍ w NHFNͱݺΕΔϥΠϒϥϦΛΈࠐΜͰ͏͜ͱ͕Ͱ͖Δ w ͪΖΜCVOEMFSͳͲͳ͘ɺΤίγεςϜ͕·ͩ·ͩශऑ w
ओͳ༻్ΈࠐΈܥͱDMJͷ։ൃ w OHY@NSVCZ )0 )BDPOJXB .*UBNBFͳͲ͕༗໊
ڥߏங $ curl -L -o mruby.zip https: //github.com/mruby/mruby/archive/1.3.0.zip $
unzip mruby.zip $ cd mruby-1.3.0 $ ruby ./minirake $ bin/mirb mirb - Embeddable Interactive Ruby Shell > puts 'Hello, world!' Hello, world!
%PDLFSJ[F͠·ͨ͠ IUUQTHJUIVCDPNUTVCEPDLFSNSVCZ
ڥߏங $ docker docker run -it tsub/mruby mirb mirb
- Embeddable Interactive Ruby Shell > puts 'Hello, world!' Hello, world! => nil
NSVCZDMJͱ w NSVCZͰDMJΛ࡞ΔͨΊͷCPJMFSQMBUF w NSVCZDMJίϚϯυͰܗΛ࡞ͬͨΒׂऴΘΓͰɺޙࣗͰ͖ʹ ΧελϚΠζ͍ͯ͘͠ w HPMBOHͷΑ͏ʹόΠφϦͰಈ͔ͤΔ w ੜͨ͠ϑΝΠϧͷதʹEPDLFSDPNQPTFؚ͕·Ε͍ͯͯΫϩεόΠφϦ
ͷϏϧυ͕؆୯
ڥߏங $ curl -L -o mruby-cli.tgz https: //github.com/hone/mruby-cli/releases/download/ v0.0.4/mruby-cli-0.0.4-x86_64-apple-darwin14.tgz
$ tar -zxvf mruby-cli.tgz $ mruby-cli --setup my-cli ॳظϑΝΠϧΛੜͨ͠ΒNSVCZDMJͷׂऴΘΓ
%PDLFSJ[F͠·ͨ͠ IUUQTHJUIVCDPNUTVCEPDLFSNSVCZDMJ
ڥߏங $ docker run -it -v $PWD:$PWD -w $PWD
tsub/mruby-cli --setup my-cli $ whalebrew install tsub/mruby-cli $ mruby-cli --setup my-cli 8IBMFCSFXΛ͏ͱͬͱΧϯλϯʢએʣ
σΟϨΫτϦߏ $ tree mycli/ mycli/ ├── Dockerfile ├── Rakefile
├── bintest │ └── my-cli.rb ├── build_config.rb ├── docker-compose.yml ├── mrbgem.rake ├── mrblib │ ├── my-cli │ │ └── version.rb │ └── my-cli.rb ├── test │ └── test_my-cli.rb └── tools └── my-cli └── my-cli.c
Ϗϧυ $ cd my-cli $ docker-compose run compile $
mruby/build/x86_64-apple-darwin14/bin/my-cli Hello World %PDLFSͰΫϩείϯύΠϧָ͕ͪΜ
४උͬͨɻ͋͞Δͧ
͕ବͬʂ
࠳ંϙΠϯτͦͷ̍ w NHFN͕͢ΜͳΓϏϧυͰ͖ͳ͍ w ॻ͍ͯ͋Δ௨ΓʹೖΕͯϏϧυʹࣦഊ͢Δ w ͦͷNHFN͕ґଘ͍ͯ͠ΔNHFN͕ϏϧυͰ͖ͳ͍͜ͱ w ΤϥʔϝοηʔδݟࣦͯഊݪҼ͕શ͘Θ͔Βͳ͍
IUUQTHJUIVCDPNNBUTVNPUPSZNSVCZIUUQSFRVFTU
$ docker-compose run compile ... rake aborted! Command failed
with status (127): [clang -g -std=gnu99 -O3 -Wall -Werror-impl ...] /home/mruby/code/mruby/tasks/mruby_build_commands.rake:31:in `_run' /home/mruby/code/mruby/tasks/mruby_build_commands.rake:36:in `rescue in _run' /home/mruby/code/mruby/tasks/mruby_build_commands.rake:32:in `_run' /home/mruby/code/mruby/tasks/mruby_build_commands.rake:88:in `run' /home/mruby/code/mruby/tasks/mruby_build_commands.rake:123:in `block (2 levels) in define_rules' Command failed with status (127): ["clang" -g -std=gnu99 -O3 -Wall -Werror-im ...] /home/mruby/code/mruby/tasks/mruby_build_commands.rake:33:in `_run' /home/mruby/code/mruby/tasks/mruby_build_commands.rake:88:in `run' /home/mruby/code/mruby/tasks/mruby_build_commands.rake:123:in `block (2 levels) in define_rules' Tasks: TOP => compile => all => /home/mruby/code/mruby/build/host/lib/libmruby.flags.mak => /home/mruby/code/mruby/build/host/lib/libmruby.a => /home/mruby/code/mruby/build/host/ mrbgems/mruby-httprequest/gem_init.o (See full trace by running task with --trace)
࠳ંϙΠϯτͦͷ̎ w BXTTELΈ͍ͨͳศརNHFNͳ͍ w ͳ͍ͷ࡞Δ w ࡞͍͚ͬͯΔҙͷ͋ΔਓʹΓ͕͍ͷ͋ΔίϛϡχςΟ
ͪͳΈʹNSVCZBXTTྫͷ͝ͱ͘ϏϧυͰ͖ͳ͍
࠳ંϙΠϯτͦͷ̏ w "84ͷ"1*ΛࣗલͰୟ͚ͳ͔ͬͨ NSVCZؔͳ͍ w BXTTELʹ͍ͭཔΓ͗ͯͯࣗ͢લͰୟ͍ͨ͜ͱͳ͔ͬͨ
host = 'https: //hogebucket.s3.amazonaws.com' HttpsClient.new.get(host) { |response| puts response.body
} <?xml version="1.0" encoding="UTF-8"?><Error><Code>HttpVersionNotSupported </ Code><Message>The HTTP version specified is not supported. </ Message><RequestId>D4E14016402FF617 </ RequestId><HostId>FqG1atM6CjvM6KDJsy7sGjCEeNs0RMmMINJ8o9MtzrFclhMPYiCzyUw5HVSwR/ VG1ecALwzspOpjjLGk3NaglQE36X8O5+wN </HostId> </Error> Α͘Θ͔Βͳ͍ΤϥʔʢϥΠϒϥϦͷ͍ͤʁʣ ͦΕͬΆ͍࣮
ͱ͍͏Θ͚Ͱແࣄ࠳ં ʢͱ͍͏͔Ϟνϕʔγϣϯ͕ਚ͖ͨʣ
ࣗͰશ෦ॻ͚ྑ͘ͳ͍ʁ
͍ɺͦ͏Ͱ͢ w 3VCZͷࣝΛ׆͔ͭͭ͠ؾָͳؾ࣋ͪͰ࢝Ί͔ͨͬͨ w ݱ࣮͘ͳ͔ͬͨ w ࣗલͰ৭ʑ࡞Δ·ͰͷϞνϕʔγϣϯࠓͳ͍ w (Pͱ͔3VTUͰαΫοͱॻ͍ͨ΄͏͕͍͍ w
8FC"1*Λୟ͘Α͏ͳ$-*͡Όͳ͚Εશ͘ͳ͘࡞ΕΔͱࢥ͏
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ Ͱͳ͘
NSVCZͱ͍͑ )BDPOJXBʢʁʣ
)BDPOJXBͱ w ϖύϘͷਓ͕ओʹ࡞ͬͯΔ w ίϯςφΤϯδϯ ଞʹ%PDLFS -9$ SLUͳͲ w
'BTU$POUBJOFSΞʔΩςΫνϟΛ࣮ݱ͢ΔͨΊͷͷ w ࣮ࡍʹ͏ϖύϘͷαʔϏεʹࡌ͍ͬͯΔ Ϋϩʔζυϕʔλ
IUUQTNDMPMJQPQKQ
-0-*101ϚωʔδυΫϥυ w ෦తʹ)BDPOJXBΛ͍ͬͯΔ w ϗετ͡Όͳͯ͘ίϯςφΛϨϯλϧͯ͘͠ΕΔ w ෛՙʹԠͯ͡ίϯςφ͕ΦʔτεέʔϧΞτ͢Δ w 8FCαʔόʔͷϦΫΤετʹԠͯ͡ίϯςφΛىಈ ͢ΔͷͰߴ
Β͍͠
'BTU$POUBJOFSΞʔΩςΫνϟ 'BTU$(*ͷϓϩηε͕ίϯςφʹͳͬͨΑ͏ͳͷ ࣄલʹ͍͔ͭ͘ͷίϯςφΛ४උ͓ͯ͘͠ ϦΫΤετ͕དྷͨΒىಈࡁΈͷίϯςφʹྲྀ͢ Ұఆ࣌ؒΞΫηε͕ͳ͚Είϯςφࣗಈతʹఀࢭ͢Δ ϦΫΤετ͕དྷͨ࣌ʹίϯςφ͕ಈ͍͍ͯͳ͚Ε৽ͨʹىಈ͢Δ
'BTU$POUBJOFSΞʔΩςΫνϟ w ύοͱΠϝʔδ͢Δͷ1BB4'BB4 w ͲͪΒ͔ͱ͍͏ͱ1BB4ͳͲΛఏڙ͢Δاۀ͚ w 'BB4ΞϓϦέʔγϣϯͷίʔυͦΕʹ߹Θͤͨͷ͕ඞཁ͕ͩɺ 'BTU$POUBJOFSࠓ·ͰͷΞϓϦέʔγϣϯΛͦͷ··ಈ͔ͤΔ
'BTU$POUBJOFSΞʔΩςΫνϟ ৄ͘͠ҎԼͷࢿྉΛࢀর w IUUQICNBUTVNPUPSKQFOUSZ w IUUQTDPEFJRKQNBHB[JOF w IUUQTTQFBLFSEFDLDPNVE[VSBIBDPOJXBBOEGVUVSFPT
ίϯςφͱ͍͑
%PDLFSͱͷॅΈ͚ w ਖ਼%PDLFSʹൺͨΒ·ͩ·ͩͰ͖Δ͜ͱগͳ͍ w ΦʔέετϨʔγϣϯπʔϧͳ͍ͷͰຊ൪ಋೖݫ͍͠ w %PDLFSpMF͡Όͳ͘NSVCZͷ%4-Ͱॻ͖͍ͨਓ͚ w ༷ʑͳϑοΫϙΠϯτʹԠͯ͡NSVCZͰҙͷॲཧΛॻ͚Δ
σϞ
ײ w 'BTU$POUBJOFSΞʔΩςΫνϟʹະདྷΛײ͡Δ w )BDPOJXBࣗମΞϓϦέʔγϣϯͷӡ༻ج൫ͱ͍͏ײ͡Ͱͳ͍ ݱ࣌Ͱ w ࠓ%PDLFSͷ͍͕ڧ͍ͷͰͦͬͪʹΛͤΔͷ͕҆ఆ
Կ͔࣭ͷ͋Δํ͍·͔͢ʁ