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

Continuous Documentation - CI/CDパイプラインを活用した文書化技...

Continuous Documentation - CI/CDパイプラインを活用した文書化技術 - / Pepabo Tech Conference #16

Ken’ichiro Oyama

September 28, 2021
Tweet

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. 2 ࣗݾ঺հ ٕज़෦ɹٕज़ج൫νʔϜ 2018೥ த్ೖࣾ খࢁ ݈Ұ࿠ Ken’ichiro Oyama গ࣮͠༻తͰখ͞ͳOSSΛॻ͘ͷ͕झຯɻ

    ʢ࠷ۙྗΛೖΕ͍ͯΔOSS͸ https://github.com/k1LoW/octocov ͱ͍͏ओʹ GitHub ActionsͰಈ͔͢ίʔυϝτϦΫεϨϙʔτج൫ʣ • GitHub : k1LoW • Twitter : @k1LoW
  2. υΩϡϝϯτͱ͸ 6 ։ൃऀ͕ɺ஌ࣝθϩͷঢ়ଶ͔ΒγεςϜΛཧղ͠։ൃΛ։࢝͢Δ·Ͱͷ࣌ؒ΍ίετΛɺ ຊൃදͰ͸ʮ։ൃ։࢝·ͰͷΦʔόʔϔουʯͱݺͿʢʮΦϯϘʔσΟϯάͷίετʯͱ ͍ͬͨํ͕Ұൠత͔΋ʣ • ։ൃऀ͕γεςϜΛཧղ͍ͨ͠ͱ͖ • ։ൃऀ͕৽ͨʹγεςϜ։ൃʹࢀՃͨ͠ͱ͖ •

    ΋͘͠͸։ൃऀ͕ࣗ෼ͷ୲౰Ҏ֎ͷߏ੒ཁૉ΍ػೳΛཧղ͍ͨ͠ͱ͖ • γεςϜͰར༻͍ͯ͠Δٕज़ελοΫʹे෼ͳ஌ݟ͕͋ͬͨͱͯ͠΋ɺ࣮͸։ൃ։ ࢝·Ͱʹ͸खؒͱ͕͔͔࣌ؒΔ ։ൃ։࢝·ͰͷΦʔόʔϔου
  3. υΩϡϝϯτͱ͸ 7 ৽ن։ൃͷ৔߹ɺ࣮ࡍʹ։ൃΛ։࢝͢Δ·Ͱʹࠨ ਤʹ͋ΔΑ͏ͳෳ਺ͷϨΠϠʔʹ͍ͭͯݕ౼Λ͢ Δ • ๨ΕΒΕ͕͕ͪͩɺ్த͔Β։ൃʹJOIN͢ Δ৔߹΋ɺ৽ن։ൃ࣌ͱಉ͡਺ͷϨΠϠʔ ͷཧղ͕ඞཁʹͳΔ •

    ҧ͏ͷ͸ʮ͢Ͱʹ͋Δ΋ͷΛཧղ͢Δඞཁ ͕͋Δʯͱ͍͏͜ͱ͚ͩ ͲͷΑ͏ͳαʔϏε͔ ͲͷΑ͏ͳΞʔΩςΫνϟ͔ ͲͷΑ͏ʹσʔλΛอ࣋͢Δ͔ ʢʹͲͷΑ͏ͳςʔϒϧઃܭ͔ʣ ͲͷΑ͏ͳ։ൃ؀ڥ͔ ʢຊ൪؀ڥɾ։ൃ؀ڥʣ ͲͷΑ͏ͳίʔυ͔ ։ൃ αʔϏεཧղϨΠϠʔ ΞʔΩςΫνϟཧղϨΠϠʔ σʔλετΞཧղϨΠϠʔ ։ൃ؀ڥཧղϨΠϠʔ ίʔυཧղϨΠϠʔ ։ൃ։࢝·ͰͷΦʔόʔϔου
  4. υΩϡϝϯτͱ͸ 11 • υΩϡϝϯτΛӡ༻͢Δ໨త → ։ൃ։࢝·ͰͷΦʔόʔϔουΛ࡟ݮ͢ΔͨΊ • ࡟ݮ͢ΔͨΊʹ͸γεςϜͷཧղΛॿ͚Δ͜ͱ͕Ͱ͖ͳ͍ͱ͍͚ͳ͍ • υΩϡϝϯτ͸͍ͭଘࡏ͢Δ΂͖͔

    → ཧղͯ͠΋Β͍͍ͨγεςϜ͕ଘࡏ͍ͯ͠Δͱ͖ • ܧଓతʹؒҧ͍ͷͳ͍े෼ͳυΩϡϝϯτ͕ଘࡏ͠ଓ͚Δඞཁ͕͋Δ • ※৽ن։ൃલͷʢઃܭͳͲͷʣυΩϡϝϯτ͸ຊൃදͷείʔϓ͔Β֎͢ ຊൃදʹ͓͚Δ”υΩϡϝϯτ" ʮܧଓతʹʯʮγεςϜͷཧղΛॿ͚ΔʯυΩϡϝϯτ͕ඞཁ
  5. γεςϜͱυΩϡϝϯτͷဃ཭ 14 • γεςϜͱͷဃ཭͕͋ΔυΩϡϝϯτͰγεςϜΛཧղ͢ΔͱɺؒҧͬͨཧղͰ։ൃ ʹೖͬͯ͠·͏ • ࣮͸ؔ࿈͕૿͍͑ͯͯؾܰʹ੾Γ཭ͤͳ͘ͳ͍ͬͯͨΠϯελϯε • ࣮͸ߟྀ͠ͳ͍ͱ͍͚ͳ͍͜ͱ͕มΘ͍ܾͬͯͨࡁػೳ •

    ࣮͸૿͍͑ͯͨόον • ։ൃऀ͕ͦͷဃ཭ʹؾͮ͘ͷ͕஗͚Ε͹஗͍΄Ͳ։ൃʹ͓͚ΔϚΠφε͕େ͖͘ͳΔ • γεςϜཧղͷ΍Γͳ͓͠🔥 • ίʔυͷॻ͖௚͠🔥 🔥 • ؒҧͬͨཧղͷ··ϦϦʔεɺޙʹো֐🔥 🔥 🔥 🔥 🔥 🔥 γεςϜͱυΩϡϝϯτͷဃ཭͕͋Δͱ
  6. γεςϜͱυΩϡϝϯτͷဃ཭Λͳ͘͢Ξϓϩʔν 20 • ຊൃදʹ͓͚ΔʮΞϊςʔγϣϯʯͱ͸ɺʮγεςϜʹର͢Δ։ൃऀͷཧղɾΠϝʔ δΛߏ଄Խσʔλʹϝλ৘ใͱͯ͠௥Ճ͢Δʯͱ͍͏ҙຯ • PHPDocͳͲͰ͸ɺίϝϯτΛιʔείʔυʹ • ιʔείʔυͷʮߏ଄ʹԊͬͨܗͰʯ •

    ͔ͭʮܾΊΒΕͨϑΥʔϚοτʹैͬͯʯ ௥Ճ͢Δ͜ͱͰɺॳΊͯ࠷ऴతͳυΩϡϝϯτʹ൓ө͞ΕΔ→Ξϊςʔγϣϯ ্هҎ֎ͷίϝϯτ͸υΩϡϝϯτ͔Β͸ແࢹ͞ΕΔ→ΞϊςʔγϣϯͰ͸ͳ͍ Ξϊςʔγϣϯ
  7. γεςϜͱυΩϡϝϯτͷဃ཭Λͳ͘͢Ξϓϩʔν 24 • γεςϜͱυΩϡϝϯτͷဃ཭Λͳͨ͘͢ΊʹɺγεςϜͷมԽͱ࿈ಈ͍ͯ͠Δߏ଄Խ σʔλΛυΩϡϝϯτੜ੒ʹ׆༻͢Δ • ʮγεςϜ͔Βߏ଄ԽσʔλΛநग़͢Δʯʮߏ଄Խσʔλ͔ΒγεςϜΛ࡞ΔʯͲͪ ΒͰ΋ྑ͍ • ιʔείʔυ΍ɺIaCͷίʔυͱ͍ͬͨίʔυ͚ͩͰͳ͘ɺ෼ࢄτϨʔγϯά΍Service

    DiscoveryɺService Mapͱ͍ͬͨ࢓૊ΈͰಘΒΕͨάϥϑ΋γεςϜͷมԽͱ࿈ಈͨ͠ߏ ଄Խσʔλͱݴ͑Δ • ߏ଄Խσʔλ͔ΒυΩϡϝϯτͷ਽ܗΛੜ੒͠ɺΞϊςʔγϣϯʹγεςϜͷཧղʹඞཁ ͳઆ໌Λ݀ຒΊ͍ͯ͘͠Πϝʔδ • ॏཁͳͷ͸Ξϊςʔγϣϯͷ݀ຒΊ·Ͱͯ͠ॳΊͯγεςϜͷཧղΛॿ͚ΔυΩϡϝ ϯτʹͳΔͱ͍͏͜ͱ ߏ଄ԽσʔλΛ׆༻ͨ͠υΩϡϝϯςʔγϣϯ
  8. ܧଓతυΩϡϝϯςʔγϣϯ 30 • CIϑϨϯυϦͳσʔλϕʔευΩϡϝϯτੜ੒ πʔϧ • https://github.com/k1LoW/tbls • PostgreSQL, MySQLͳͲͷRDBMS͚ͩͰ

    ͳ͘ɺBigQuery΍Amazon DynamoDB, Cloud Spannerͱ͍ͬͨσʔλιʔεʹ΋ ରԠ • υΩϡϝϯτΛॆ࣮ͤ͞Δػೳͱͯ͠ϝλ σʔλΛΞϊςʔγϣϯ͢Δ͜ͱ͕Մೳ • ςʔϒϧɺΧϥϜͳͲͷίϝϯτ෇༩͚ͩ Ͱͳ͘λάɺϦϨʔγϣϯͳͲ tbls
  9. ܧଓతυΩϡϝϯςʔγϣϯ 34 • https://github.com/k1LoW/ndiag • ओʹΠϯϑϥͷϋΠϨϕϧΞʔΩςΫ νϟͷυΩϡϝϯτΛੜ੒͢Δ໨తͰ։ ൃ • YAML͔Βʮߏ੒ਤΛੜ੒͢ΔʯͰ΋

    ʮυΩϡϝϯτΛੜ੒͢ΔʯͰ΋ͳ͘
 ʮෳ਺ͷ੾ΓޱͰߏ੒ਤΛؚΉΩϡϝϯ τͷ਽ܗΛ࡞Δʯͱ͍͏ಛ௃Λ࣋ͭ • ֤ߏ੒ཁૉ΍άϧʔϓʹΞϊςʔγϣϯ Λॻ͘͜ͱͰυΩϡϝϯτͱͯ͠੒ཱ͞ ͤΔ ndiag
  10. ܧଓతυΩϡϝϯςʔγϣϯ 35 • γεςϜͱυΩϡϝϯτͷؔ࿈෦෼͸ ʮߏ଄ԽσʔλΛநग़͢ΔʯͰ͸ͳ ͘ɺൺֱػೳ·Ͱ • ୯७ʹɺର৅ͱ͍ͯ͠ΔγεςϜ ͕ඇৗʹෳࡶͰ͔ͭଟذʹΘͨ ΔͨΊ

    • ౰વndiagͷೖྗ͸YAMLͳͷͰɺγε ςϜ͔Β৘ใΛߏ଄ԽσʔλΛநग़͢ ΔεΫϦϓτ͕࡞ΕΕ͹ɺͦΕΛ ndiagͷೖྗʹ͢Δ͜ͱ͕Մೳ ndiag
  11. ·ͱΊ 37 • ։ൃ։࢝·ͰͷΦʔόʔϔουͷ࡟ݮͷͨΊʹ͸ʮܧଓతʹʯʮγεςϜͷཧղΛ ॿ͚ΔʯυΩϡϝϯτ͕ඞཁ • ʮܧଓతʹɺؒҧ͍ͷͳ͍े෼ͳυΩϡϝϯτΛଘࡏ͠ଓ͚ͤ͞Δʯͱ͸ʮγες Ϝ͕มԽͯ͠΋γεςϜͱυΩϡϝϯτͷဃ཭Λେ͖͘͠ͳ͍ʯͱ͍͏͜ͱ • γεςϜͷมԽͱ࿈ಈͨ͠ߏ଄ԽσʔλΛ࢖ͬͯυΩϡϝϯτͷ਽ܗΛੜ੒͢Δ͜

    ͱͰɺγεςϜͷมԽ͕υΩϡϝϯτʹ൓ө͞ΕΔ࢓૊ΈΛߏஙͰ͖Δ • ্هͷ࢓૊ΈΛιϑτ΢ΣΞʹΑΓࣗಈԽɺ͞ΒʹCI/CDͷ࢓૊ΈʹࡌͤΔ͜ͱͰɺ γεςϜͱυΩϡϝϯτͷဃ཭ΛݶΓͳ͘ܧଓతʹখ͘͞อͭ͜ͱ͕ՄೳʹͳΔ ·ͱΊ
  12. ·ͱΊ 38 • γεςϜͷมԽͱ࿈ಈͨ͠ߏ଄ԽσʔλΛ࢖ͬͯυΩϡϝϯτͷ਽ܗ͸γεςϜͷมԽʹ ௥ै͢ΔΑ͏ʹͳͬͨɻ • ݱঢ়ɺͦΕΒʹ෇༩͢ΔΞϊςʔγϣϯʢ։ൃऀ͕ॻ͘આ໌จষʣΛͲ͏ܧଓతʹॻ͍ͯ ΋Β͏͔͕՝୊ • ΞϓϦέʔγϣϯͷιʔείʔυͱಉ͡Α͏ͳΞϓϩʔνͱͯ͠ɺΧόϨοδͷܭଌ

    ΍ΧόϨοδύʔηϯςʔδʹΑͬͯCIΛFailͤ͞Δ࢓૊ΈͳͲ͕ߟ͑ΒΕΔ • tbls΋ndiag΋υΩϡϝϯτͷΧόϨοδ͸ܭଌͰ͖ΔΑ͏ʹͳ͍ͬͯΔ • ΑΓϞνϕʔγϣϯΛ΋ͬͯॻ͍ͯ΋Β͏࢓૊Έ΍ɺΑΓॻ͖΍͘͢ͳΔ࢓૊Έ΋ߟ͑ͯ ͍͖͍ͨ • ࠶ܝ: ηΩϡϦςΟ෼໺ʹ͓͚ΔDevSecOps΍ηΩϡϦςΟγϑτϨϑτɺ Developer-First Securityͱಉ͡ ࠓޙͷ՝୊