Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IaCを意識したCLI開発のエッセンス

po3rin
November 20, 2020

 IaCを意識したCLI開発のエッセンス

〇〇をファイルで宣言的に管理
したい。そのようなツールを開発
するときは少しコツが必要です。

po3rin

November 20, 2020
Tweet

More Decks by po3rin

Other Decks in Programming

Transcript

  1. IaCを意識した CLI開発のエッセンス 〇〇をファイルで宣言的に管理 したい。そのようなツールを開発 するときは少しコツが必要です。 冪等性を担保するCLIについて考えよう

  2. தଜ߂෢ ΤϜεϦʔͷ"*ɾػցֶशνʔϜͰݕࡧج൫ पΓΛ୲౰͍ͯ͠Δɻ(P͕޷͖ɻ ֤छΞΧ΢ϯτQPSJOͰ΍ͬͯ·͢ɻ )*SPNV/BLBNVSB

  3. ΤϜεϦʔͰ͸&MBTUJDTFBSDIΛར༻͍ͯ͠Δ͕ɺੵۃతʹ ݕࡧվળ͍ͯ͠ΔͷͰɺ*OEFYʢ؆୯ʹ͍͏ͱσʔλߏ଄ ͷมߋ͕සൟʹൃੜ͠ɺ؅ཧͮ͠Β͍ঢ়گͩͬͨɻ ՝୊ *446&

  4. ݕࡧج൫νʔϜͰ͸JOEFYͷ৽ن࡞੒BMJBT੾Γସ͑Ͱ ରԠ͍ͯ͠ΔŇ৽͍͠JOEFYʹରͯ͠࠶౓σʔλ౤ೖΛߦ͏ ӡ༻ 01&3"5*0/ OFXTW OFXTW /FXTBMJBT 3FRVFTU 0MEJOEFY /FXJOEFY

    4XJUDIJOEFY
  5. ӡ༻ 01&3"5*0/ 3FRVFTU %FQMPZ+PC खಈΩοΫͳϝϯςφϯε+PCͷ਺ʑ DSFBUFJOEFYDSFBUFBMJBTTXJUDIJOEFY

  6. ՝୊ *446& ࠓɺBMJBTʹඥ͍ͮͯΔJOEFYͷόʔδϣϯͬͯԿ͚ͩͬʁʁ JOEFYೖΕସ͑ɺ࡞੒ͷͨͼʹࢸΔͱ͜Ζʹൃੜ͢Δ%J⒎ JOEFY࡞੒εΫϦϓτͷJOEFY໊Λม͑Δͷ๨Εͯͨɻɻ ࢖ͬͯͳ͍JOEFY͕์ஔ͞ΕͯΔɻɻ ႈ౳ੑΛ࣋ͬͨૢ࡞ʹ͍ͨ͠ɻɻ

  7. *B$ͱ͸ΠϯϑϥΛએݴతʹ؅ཧ͢ΔࣄͰιϑτ΢ΣΞ։ൃϓϩηεΛΠ ϯϑϥͷΦʔτϝʔγϣϯʹੜ͔͢Ξϓϩʔνɻ͜ΕΛ্ख͘Ӭଓϛυϧ ΢ΣΞͰ͋Δ&MBTUJDTFBSDIʹ*B$ͷϝϦοτΛద༻Ͱ͖ͳ͍͔ ɾهड़తͳΞϓϩʔνʹΑΔႈ౳ੑ୲อ ɾఆٛϑΝΠϧʹΑΔόʔδϣϯ؅ཧ ɾܧଓςετγεςϜɺϓϩηε *B$ *OGSBTUSVDUVSFBTDPEF

  8. ႈ౳ੑΛอͪͳ͕ΒఆٛϑΝΠϧͰ &MBTUJDTFBSDI*OEFYBMJBTΛએݴత ʹ؅ཧͯ͘͠ΕΔΛ࡞ͬͨ FTLFFQFS &MBTUJDTFBSDI*OEFYLFFQFS

  9. ͜ͷΑ͏ʹఆٛϑΝΠϧͰ&MBTUJDTFBSDIͷ ঢ়ଶΛએݴͰ͖ΔɻӬଓϨΠϠʔͳͷͰૢ ࡞͸XSJUFPOMZʹࠓ͸ߜ͍ͬͯΔɻͭ·Γ ݱࡏͷ࣮૷͸׬શͳ*B$Λଥڠ͢ΔࣄͰσʔ λΛޡͬͯফ͢ϦεΫΛආ͚͍ͯΔɻ FTLFFQFS &MBTUJDTFBSDI*OEFYLFFQFS

  10. ΦϥΠϦʔͷʰ*OGSBTUSVDUVSFBT$PEFʱ ͷதͰ*B$πʔϧ͕࣋ͭ΂͖ػೳʹ͍ͭͯͷه ड़͕͋Δɻ͔͜͜Β͸͜ͷຊΛࢀߟʹ FTLFFQFSͰ΋ҙࣝͨ͠*B$πʔϧ࡞੒ͷϓϥ ΫςΟεΛ঺հ͍ͯ͘͠ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF

  11. ཁ݅ίϚϯυϥΠϯπʔϧͷແਓϞʔυ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ଞͷπʔϧͱ߹Θͤͯ࢖͍΍͍͢Α͏ʹೖྗΛऔΓग़ͤΔ͜ͱ͕ॏ ཁɻFTLFFQFSͰ͸ඪ४ೖྗͳͲ͔Β৘ใΛऔΓग़ͤΔΑ͏ʹ͢ Δɻ·ͨ௚઀తͳλΠϐϯάΛཁٻ͠ͳ͍ͱ͍͚ͳ͍Πϯλʔ ϑΣʔε͸ഉআͰ͖ΔΑ͏ʹ͢Δɻ

  12. ཁ݅ઃఆͷ֎ࡏԽ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ൓෮Մೳੑͷ୲อɻ·ͨطଘͷςΩε τϑΥʔϚοτͰ͋Ε͹͋ΒΏΔط੒ πʔϧͰಡΈॻ͖Ͱ͖Δɻ·ͨɺόʔ δϣϯ؅ཧ΋Ͱ͖Δɻ

  13. ཁ݅ແਓ࣮ߦͷαϙʔτ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ແਓ࣮ߦ͸ίϚϯυͱͯࣗ͠ಈͰ࣮ߦͰ͖Δ͚ͩͰ͸ෆे෼ɻਓ͕ؒؔ༩͠ ͳͯ͘΋ߴ͍৴པੑͰ࣮ߦͰ͖Δ͜ͱ͕ॏཁɻͦ͜ͰԼهͷཁૉ͕ඞཁɻ ɾႈ౳ੑ ɾࣄલνΣοΫ ɾࣄޙνΣοΫ ɾ໨ʹݟ͑ΔܗͰͷࣦഊ ɾύϥϝʔλԽ

  14. ཁ݅ແਓ࣮ߦͷαϙʔτ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF FTLFFQFSͰ͸ႈ౳ੑɺࣄલνΣοΫɺ ࣄޙνΣοΫɺ໨ʹݟ͑ΔܗͰͷࣦഊͱ ͍͏ཁ݅Λ࣮૷͍ͯ͠Δɻ͜ΕʹΑΓ ʮΦʔτϝʔγϣϯڪා঱ʯΛݮΒ͢ɻ

  15. *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF FTLFFQFSͰ͸Լهͷεςʔδʹ෼ׂ͞ΕΔ ઃఆϑΝΠϧͷόϦσʔγϣϯ ඥͮ͘NBQQJOHpMF͸ଘࡏ͢Δ͔ ඞਢϑΟʔϧυ͸ຬͨ͞Ε͍ͯΔ͔ ࣄલνΣοΫ JOEFY͕࣮ࡍʹ࡞ΕΔ͔ Ұ࣌తͳJOEFYΛ࣮ࡍʹ࡞੒ 

    BMJBTͱʹඥͮ͘JOEFY͸ଘࡏ͢Δͷ͔ ࣮ߦεςʔδ ࣮ࡍʹఆٛϑΝΠϧͷঢ়ଶΛಉظͤ͞Δ ࣄޙνΣοΫ ఆٛϑΝΠϧʹ͋ΔJOEFY΍BMJBT͕࡞ΒΕ͔ͨ
  16. *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ઃఆϑΝΠϧͷόϦσʔγϣϯ ඥͮ͘NBQQJOHpMF͸ଘࡏ͢Δ͔ ඞਢϑΟʔϧυ͸ຬͨ͞Ε͍ͯΔ͔ ࣄલνΣοΫ JOEFY͕࣮ࡍʹ࡞ΕΔ͔ Ұ࣌తͳJOEFYΛ࣮ࡍʹ࡞੒  BMJBTͱʹඥͮ͘JOEFY͸ଘࡏ͢Δͷ͔

    ςετϐϥϛουΛߟྀ͠ɺTUBHFͷதͰ΋ίετͷ௿͍΋ͷ͔ΒνΣοΫ
  17. ݁Ռ $06$-64*0/ *B$Λҙࣝͨ͠$-*Ͱ͸ແਓ࣮ߦͷ৴པੑΛ্͛Δ͜ͱ΍ɺ ଞͷπʔϧ΍εΫϦϓτͱ߹Θͤͯ࢖͑ΔΑ͏ʹ͓ͯ͘͠ͱ (PPEɻ JOEFY؅ཧ༻ͷLT+PCɺγΣϧεΫϦϓτͳͲΛେ૟আɻ ӡ༻͕͔ͳΓγϯϓϧʹͳͬͨ͸ͣɻຊ൪ಋೖ͔Β೔͕ઙ͍ ͷͰࠓޙͷFTLFFQFSͷ׆༂Λ؍࡯͍ͯ͘͠ɻ

  18. ը૾ར༻ݩ 8FCWFDUPSDSFBUFECZTUPSJFTXXXGSFFQJLDPN IUUQTXXXGSFFQJLDPNWFDUPSTXFC