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
83
IaCを意識したCLI開発のエッセンス
〇〇をファイルで宣言的に管理
したい。そのようなツールを開発
するときは少しコツが必要です。
po3rin
November 20, 2020
Tweet
Share
More Decks by po3rin
See All by po3rin
M3におけるCI/CDパイプラインを新鮮に保つ仕組み
po3rin
0
310
Go Templateを使った フロントエンド開発を採用した 経緯と所感
po3rin
1
310
検索基盤移行時の思考
po3rin
0
4.2k
Go1.19で採用された Pattern-defeating Quicksort の紹介
po3rin
7
5.8k
Elasticsearchを負荷から守るesguard
po3rin
0
260
Sudachi×Elasticsearchへの移行と医療検索システム精度改善
po3rin
1
860
eskeeperを使ったファイル定義によるindex管理
po3rin
2
480
M3 情報検索/推薦論文輪読会 ~SIGIR祭~ (SIGIR2021: Session 6D – IR Models)
po3rin
0
99
Handling Temporal Query for Health Search with ja-timex
po3rin
3
320
Other Decks in Programming
See All in Programming
AIプログラミング雑キャッチアップ
yuheinakasaka
18
4.3k
たのしいSocketのしくみ / Socket Under a Microscope
coe401_
8
1.3k
コードを読んで理解するko build
bells17
1
110
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
150
技術を改善し続ける
gumioji
0
120
もう僕は OpenAPI を書きたくない
sgash708
5
1.9k
Jakarta EE meets AI
ivargrimstad
0
390
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
150
Jasprが凄い話
hyshu
0
160
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
300
PRレビューのお供にDanger
stoticdev
1
230
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
230
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Being A Developer After 40
akosma
89
590k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
10
510
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
370
GraphQLとの向き合い方2022年版
quramy
44
14k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
How to train your dragon (web standard)
notwaldorf
91
5.9k
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