Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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.4k
Other Decks in Technology
See All in Technology
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
180
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
130
AI Driven AI Governance
pict3
0
340
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6k
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
220
AICoEでAIネイティブ組織への進化
yukiogawa
0
170
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
2.3k
CIで使うClaude
iwatatomoya
0
250
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
1
340
SRE Next 2026 何でも屋からの脱却
bto
0
650
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.5k
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
250
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
690
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
330
Art, The Web, and Tiny UX
lynnandtonic
304
22k
WCS-LA-2024
lcolladotor
0
680
Designing for Timeless Needs
cassininazir
1
320
Design in an AI World
tapps
1
260
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
63
55k
30 Presentation Tips
portentint
PRO
1
350
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
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ͷ͍͕ڧ͍ͷͰͦͬͪʹΛͤΔͷ͕҆ఆ
Կ͔࣭ͷ͋Δํ͍·͔͢ʁ