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
IaCを意識したCLI開発のエッセンス
Search
po3rin
November 20, 2020
Programming
0
100
IaCを意識したCLI開発のエッセンス
〇〇をファイルで宣言的に管理
したい。そのようなツールを開発
するときは少しコツが必要です。
po3rin
November 20, 2020
Tweet
Share
More Decks by po3rin
See All by po3rin
自作LLM Native GORM Pluginで実現する AI Agentバックテスト基盤構築
po3rin
2
270
麻雀点数計算問題生成タスクから学ぶ Single Agentの限界と Agentic Workflowの底力
po3rin
5
2.1k
LLMOpsのパフォーマンスを支える技術と現場で実践した改善
po3rin
8
1.1k
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
4
2.4k
M3におけるCI/CDパイプラインを新鮮に保つ仕組み
po3rin
0
380
Go Templateを使った フロントエンド開発を採用した 経緯と所感
po3rin
1
360
検索基盤移行時の思考
po3rin
0
4.3k
Go1.19で採用された Pattern-defeating Quicksort の紹介
po3rin
7
6.2k
Elasticsearchを負荷から守るesguard
po3rin
0
310
Other Decks in Programming
See All in Programming
CSC509 Lecture 04
javiergs
PRO
0
300
Breaking Up with Big ViewModels — Without Breaking Your Architecture (droidcon Berlin 2025)
steliosf
PRO
1
350
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
180
Advance Your Career with Open Source
ivargrimstad
0
380
iOSアプリの信頼性を向上させる取り組み/ios-app-improve-reliability
shino8rayu9
0
160
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
4.6k
CSC509 Lecture 02
javiergs
PRO
0
410
私はどうやって技術力を上げたのか
yusukebe
43
17k
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
23
12k
CSC305 Lecture 04
javiergs
PRO
0
260
実践AIチャットボットUI実装入門
syumai
7
2.5k
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
380
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
A better future with KSS
kneath
239
17k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
BBQ
matthewcrist
89
9.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
610
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Being A Developer After 40
akosma
91
590k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
The Cost Of JavaScript in 2023
addyosmani
53
9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
580
Agile that works and the tools we love
rasmusluckow
331
21k
Transcript
IaCを意識した CLI開発のエッセンス 〇〇をファイルで宣言的に管理 したい。そのようなツールを開発 するときは少しコツが必要です。 冪等性を担保するCLIについて考えよう
தଜ߂ ΤϜεϦʔͷ"*ɾػցֶशνʔϜͰݕࡧج൫ पΓΛ୲͍ͯ͠Δɻ(P͕͖ɻ ֤छΞΧϯτQPSJOͰͬͯ·͢ɻ )*SPNV/BLBNVSB
ΤϜεϦʔͰ&MBTUJDTFBSDIΛར༻͍ͯ͠Δ͕ɺੵۃతʹ ݕࡧվળ͍ͯ͠ΔͷͰɺ*OEFYʢ؆୯ʹ͍͏ͱσʔλߏ ͷมߋ͕සൟʹൃੜ͠ɺཧͮ͠Β͍ঢ়گͩͬͨɻ ՝ *446&
ݕࡧج൫νʔϜͰJOEFYͷ৽ن࡞BMJBTΓସ͑Ͱ ରԠ͍ͯ͠ΔŇ৽͍͠JOEFYʹରͯ͠࠶σʔλೖΛߦ͏ ӡ༻ 01&3"5*0/ OFXTW OFXTW /FXTBMJBT 3FRVFTU 0MEJOEFY /FXJOEFY
4XJUDIJOEFY
ӡ༻ 01&3"5*0/ 3FRVFTU %FQMPZ+PC खಈΩοΫͳϝϯςφϯε+PCͷʑ DSFBUFJOEFYDSFBUFBMJBTTXJUDIJOEFY
՝ *446& ࠓɺBMJBTʹඥ͍ͮͯΔJOEFYͷόʔδϣϯͬͯԿ͚ͩͬʁʁ JOEFYೖΕସ͑ɺ࡞ͷͨͼʹࢸΔͱ͜Ζʹൃੜ͢Δ%J⒎ JOEFY࡞εΫϦϓτͷJOEFY໊Λม͑ΔͷΕͯͨɻɻ ͬͯͳ͍JOEFY͕์ஔ͞ΕͯΔɻɻ ႈੑΛ࣋ͬͨૢ࡞ʹ͍ͨ͠ɻɻ
*B$ͱΠϯϑϥΛએݴతʹཧ͢ΔࣄͰιϑτΣΞ։ൃϓϩηεΛΠ ϯϑϥͷΦʔτϝʔγϣϯʹੜ͔͢Ξϓϩʔνɻ͜ΕΛ্ख͘Ӭଓϛυϧ ΣΞͰ͋Δ&MBTUJDTFBSDIʹ*B$ͷϝϦοτΛద༻Ͱ͖ͳ͍͔ ɾهड़తͳΞϓϩʔνʹΑΔႈੑ୲อ ɾఆٛϑΝΠϧʹΑΔόʔδϣϯཧ ɾܧଓςετγεςϜɺϓϩηε *B$ *OGSBTUSVDUVSFBTDPEF
ႈੑΛอͪͳ͕ΒఆٛϑΝΠϧͰ &MBTUJDTFBSDI*OEFYBMJBTΛએݴత ʹཧͯ͘͠ΕΔΛ࡞ͬͨ FTLFFQFS &MBTUJDTFBSDI*OEFYLFFQFS
͜ͷΑ͏ʹఆٛϑΝΠϧͰ&MBTUJDTFBSDIͷ ঢ়ଶΛએݴͰ͖ΔɻӬଓϨΠϠʔͳͷͰૢ ࡞XSJUFPOMZʹࠓߜ͍ͬͯΔɻͭ·Γ ݱࡏͷ࣮શͳ*B$Λଥڠ͢ΔࣄͰσʔ λΛޡͬͯফ͢ϦεΫΛආ͚͍ͯΔɻ FTLFFQFS &MBTUJDTFBSDI*OEFYLFFQFS
ΦϥΠϦʔͷʰ*OGSBTUSVDUVSFBT$PEFʱ ͷதͰ*B$πʔϧ͕͖࣋ͭػೳʹ͍ͭͯͷه ड़͕͋Δɻ͔͜͜Β͜ͷຊΛࢀߟʹ FTLFFQFSͰҙࣝͨ͠*B$πʔϧ࡞ͷϓϥ ΫςΟεΛհ͍ͯ͘͠ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF
ཁ݅ίϚϯυϥΠϯπʔϧͷແਓϞʔυ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ଞͷπʔϧͱ߹Θ͍͍ͤͯ͢Α͏ʹೖྗΛऔΓग़ͤΔ͜ͱ͕ॏ ཁɻFTLFFQFSͰඪ४ೖྗͳͲ͔ΒใΛऔΓग़ͤΔΑ͏ʹ͢ Δɻ·ͨతͳλΠϐϯάΛཁٻ͠ͳ͍ͱ͍͚ͳ͍Πϯλʔ ϑΣʔεഉআͰ͖ΔΑ͏ʹ͢Δɻ
ཁ݅ઃఆͷ֎ࡏԽ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ෮Մೳੑͷ୲อɻ·ͨطଘͷςΩε τϑΥʔϚοτͰ͋Ε͋ΒΏΔط πʔϧͰಡΈॻ͖Ͱ͖Δɻ·ͨɺόʔ δϣϯཧͰ͖Δɻ
ཁ݅ແਓ࣮ߦͷαϙʔτ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ແਓ࣮ߦίϚϯυͱͯࣗ͠ಈͰ࣮ߦͰ͖Δ͚ͩͰෆेɻਓ͕ؒؔ༩͠ ͳͯ͘ߴ͍৴པੑͰ࣮ߦͰ͖Δ͜ͱ͕ॏཁɻͦ͜ͰԼهͷཁૉ͕ඞཁɻ ɾႈੑ ɾࣄલνΣοΫ ɾࣄޙνΣοΫ ɾʹݟ͑ΔܗͰͷࣦഊ ɾύϥϝʔλԽ
ཁ݅ແਓ࣮ߦͷαϙʔτ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF FTLFFQFSͰႈੑɺࣄલνΣοΫɺ ࣄޙνΣοΫɺʹݟ͑ΔܗͰͷࣦഊͱ ͍͏ཁ݅Λ࣮͍ͯ͠Δɻ͜ΕʹΑΓ ʮΦʔτϝʔγϣϯڪාʯΛݮΒ͢ɻ
*B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF FTLFFQFSͰԼهͷεςʔδʹׂ͞ΕΔ ઃఆϑΝΠϧͷόϦσʔγϣϯ ඥͮ͘NBQQJOHpMFଘࡏ͢Δ͔ ඞਢϑΟʔϧυຬͨ͞Ε͍ͯΔ͔ ࣄલνΣοΫ JOEFY͕࣮ࡍʹ࡞ΕΔ͔ Ұ࣌తͳJOEFYΛ࣮ࡍʹ࡞
BMJBTͱʹඥͮ͘JOEFYଘࡏ͢Δͷ͔ ࣮ߦεςʔδ ࣮ࡍʹఆٛϑΝΠϧͷঢ়ଶΛಉظͤ͞Δ ࣄޙνΣοΫ ఆٛϑΝΠϧʹ͋ΔJOEFYBMJBT͕࡞ΒΕ͔ͨ
*B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ઃఆϑΝΠϧͷόϦσʔγϣϯ ඥͮ͘NBQQJOHpMFଘࡏ͢Δ͔ ඞਢϑΟʔϧυຬͨ͞Ε͍ͯΔ͔ ࣄલνΣοΫ JOEFY͕࣮ࡍʹ࡞ΕΔ͔ Ұ࣌తͳJOEFYΛ࣮ࡍʹ࡞ BMJBTͱʹඥͮ͘JOEFYଘࡏ͢Δͷ͔
ςετϐϥϛουΛߟྀ͠ɺTUBHFͷதͰίετͷ͍ͷ͔ΒνΣοΫ
݁Ռ $06$-64*0/ *B$Λҙࣝͨ͠$-*Ͱແਓ࣮ߦͷ৴པੑΛ্͛Δ͜ͱɺ ଞͷπʔϧεΫϦϓτͱ߹Θͤͯ͑ΔΑ͏ʹ͓ͯ͘͠ͱ (PPEɻ JOEFYཧ༻ͷLT+PCɺγΣϧεΫϦϓτͳͲΛେআɻ ӡ༻͕͔ͳΓγϯϓϧʹͳͬͨͣɻຊ൪ಋೖ͔Β͕ઙ͍ ͷͰࠓޙͷFTLFFQFSͷ׆༂Λ؍͍ͯ͘͠ɻ
ը૾ར༻ݩ 8FCWFDUPSDSFBUFECZTUPSJFTXXXGSFFQJLDPN IUUQTXXXGSFFQJLDPNWFDUPSTXFC