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
97
IaCを意識したCLI開発のエッセンス
〇〇をファイルで宣言的に管理
したい。そのようなツールを開発
するときは少しコツが必要です。
po3rin
November 20, 2020
Tweet
Share
More Decks by po3rin
See All by po3rin
M3におけるCI/CDパイプラインを新鮮に保つ仕組み
po3rin
0
360
Go Templateを使った フロントエンド開発を採用した 経緯と所感
po3rin
1
340
検索基盤移行時の思考
po3rin
0
4.3k
Go1.19で採用された Pattern-defeating Quicksort の紹介
po3rin
7
6.1k
Elasticsearchを負荷から守るesguard
po3rin
0
300
Sudachi×Elasticsearchへの移行と医療検索システム精度改善
po3rin
1
920
eskeeperを使ったファイル定義によるindex管理
po3rin
2
510
M3 情報検索/推薦論文輪読会 ~SIGIR祭~ (SIGIR2021: Session 6D – IR Models)
po3rin
0
130
Handling Temporal Query for Health Search with ja-timex
po3rin
3
350
Other Decks in Programming
See All in Programming
WindowInsetsだってテストしたい
ryunen344
1
190
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
4
880
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
260
Java on Azure で LangGraph!
kohei3110
0
170
Gleamという選択肢
comamoca
6
760
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.2k
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
790
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
170
Webからモバイルへ Vue.js × Capacitor 活用事例
naokihaba
0
760
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
390
FormFlow - Build Stunning Multistep Forms
yceruto
1
190
GoのGenericsによるslice操作との付き合い方
syumai
3
680
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Balancing Empowerment & Direction
lara
1
350
The Pragmatic Product Professional
lauravandoore
35
6.7k
Designing for Performance
lara
609
69k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
A Modern Web Designer's Workflow
chriscoyier
693
190k
A Tale of Four Properties
chriscoyier
160
23k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Done Done
chrislema
184
16k
Speed Design
sergeychernyshev
31
1k
Rails Girls Zürich Keynote
gr2m
94
14k
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