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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
430
ここがつらいよECS
tsub
0
3.5k
Other Decks in Technology
See All in Technology
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
110
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
590
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
150
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
370
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
0
130
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
350
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.5k
AIは「聞けば答える」から「任せると自分で進める」へ - JACTIMペナン地域部会・ペナン三水会講演
knishioka
0
110
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
140
How to Design Configuration for Rails Applications
willnet
0
440
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
130
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.9k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Paper Plane
katiecoart
PRO
5
54k
So, you think you're a good person
axbom
PRO
2
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ͷ͍͕ڧ͍ͷͰͦͬͪʹΛͤΔͷ͕҆ఆ
Կ͔࣭ͷ͋Δํ͍·͔͢ʁ