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

はてなブログ作成から投稿までをGitHub Actionsで自動化する

M-Yamashita
November 02, 2022

はてなブログ作成から投稿までをGitHub Actionsで自動化する

【LT満員御礼!】自動化大好きエンジニアLT会 - vol.9の登壇資料です。
https://rakus.connpass.com/event/259685/

M-Yamashita

November 02, 2022
Tweet

More Decks by M-Yamashita

Other Decks in Programming

Transcript

  1. 2022-11-02 ࣗಈԽେ޷͖ΤϯδχΞLTձ - vol.9
    ͸ͯͳϒϩά࡞੒͔Β౤ߘ·ͰΛ
    GitHub ActionsͰࣗಈԽ͢Δ
    M-Yamashita

    View Slide

  2. • ࢁԼ խਓ

    • όοΫΤϯυΤϯδχΞ

    • ॴଐ: גࣜձࣾΞΠΩϡʔϒυγεςϜζ

    • GitHub Actions ͕޷͖

    • GitHub: @M-Yamashita01

    • Twitter: @M_Yamashii
    ࣗݾ঺հ

    View Slide

  3. • ຖ݄ͷৼΓฦΓΛ͸ͯͳϒϩάʹࣥචத
    എܠ

    View Slide

  4. ϒϩά࡞੒ͷաఔͰຖճൃੜ͢Δ୯७࡞ۀ

    View Slide

  5. ੵ΋ΔετϨε

    View Slide

  6. • ৽ن౤ߘ࣌͸ɺաڈͷϒϩάͷ߲໨Λίϐϖͯ͠৽͘͠จষΛهࡌ

    • VSCode্ͰจষΛtextlintͰνΣοΫ͠ɺ͸ͯͳϒϩάʹసه

    • VSCodeͱ͸ͯͳϒϩάͷߦ͖དྷ͕ਏ͍
    ࠔͬͨ͜ͱ

    View Slide

  7. Ͳ͏ͳͬͨΒخ͍͠ʁ

    View Slide

  8. Ͳ͏ͳͬͨΒخ͍͠ʁ
    • จষΛॻ͘πʔϧ͸VSCode͚ͩʹ͍ͨ͠

    • ͸ͯͳϒϩάΛ৮ΒͣʹVSCodeͱGitHubͰԼॻ͖͔Βެ։·Ͱ׬͍݁ͤͨ͞

    • ։ൃͱಉ͡Α͏ʹGitHub্ͷϒϥϯν࡞੒΍Pull RequestͰ͸ͯͳϒϩάͷ

    ࡞੒ɺߋ৽Λ͍ͨ͠

    View Slide

  9. ԿΛ૊Έ߹ΘͤΔ͔ʁ

    View Slide

  10. GitHubͷΠϕϯττϦΨʔʹ͸

    GitHub Actions͕૬ੑ͕ྑ͍

    View Slide

  11. ໰୊͸

    ͸ͯͳϒϩάͷૢ࡞

    View Slide

  12. ͸ͯͳϒϩάAtomPub
    https://developer.hatena.ne.jp/ja/documents/blog/apis/atom

    View Slide

  13. ͸ͯͳϒϩάAtomPub
    ϒϩάͷࢀরɺ࡞੒ɺެ։ɺ࡟আΛ

    REST APIͰՄೳ

    View Slide

  14. ͜ͷREST APIΛ࢖͏OSS͸ͳ͍͔ʁ

    View Slide

  15. blogsync

    View Slide

  16. • ͸ͯͳBlog༻ͷCLIΫϥΠΞϯτ
    blogsync
    https://github.com/x-motemen/blogsync

    View Slide

  17. ࢖͑ͦ͏ʂ

    View Slide

  18. ϫʔΫϑϩʔΛ࡞ΔͨΊʹ

    blogsyncͷ࢓༷Λཧղ͢Δ

    View Slide

  19. ཧղ͢Δ࢓༷͸

    ϒϩάͷϑΥʔϚοτɺ౤ߘํ๏ɺߋ৽ํ๏ͷ3ͭ

    View Slide

  20. ϒϩάͷϑΥʔϚοτ

    View Slide

  21. blogsyncͷ࢓༷ʢϒϩάͷϑΥʔϚοτʣ

    View Slide

  22. ϒϩάͷ౤ߘํ๏

    View Slide

  23. blogsyncͷ࢓༷ʢϒϩάͷ౤ߘʣ

    View Slide

  24. blogsyncͷ࢓༷ʢϒϩάͷ౤ߘʣ

    View Slide

  25. • ΤϯτϦ౤ߘ͸ඪ४ೖྗ͔Β΋ड͚औΕΔ

    • Լॻ͖ͷςϯϓϨʔτΛdraft.mdͱ͓ͯ͘͜͠ͱͰɺҎԼίϚϯυͰ؆୯ʹϒ
    ϩάΛ࡞੒Ͱ͖Δ

    • $ blogsync post --draft xxx.hatenablog.com < draft.md
    blogsyncͷ࢓༷ʢϒϩάͷ౤ߘʣ

    View Slide

  26. • blogsync post ίϚϯυΛ࣮ߦ͢ΔͱɺҎԼϑΝΠϧύεʹԼॻ͖ϒϩά͕

    ग़དྷ্͕Δ

    • project_root/xxx.hatenablog.com/entry/yyyy/mm/dd/hhmmss.md

    • ྫɿ2022/01/02 03:04:05ʹίϚϯυΛ࣮ߦͨ͠৔߹ͷϒϩάͷϑΝΠϧύε

    • project_root/xxx.hatenablog.com/entry/2022/01/02/030405.md
    blogsyncͷ࢓༷ʢϒϩάͷ౤ߘʣ

    View Slide

  27. ϒϩάͷߋ৽ํ๏

    View Slide

  28. blogsyncͷ࢓༷ʢϒϩάͷߋ৽ʣ

    View Slide

  29. • PushίϚϯυͰ͸ͯͳϒϩάͷԼॻ͖Λߋ৽Ͱ͖Δ

    • ͨͩ͠ߋ৽ޙͷهࣄ͸جຊతʹ৽͘͠࡞੒͞Εͯ͠·͏
    blogsyncͷ࢓༷ʢϒϩάͷߋ৽ʣ

    View Slide

  30. Ͳ͏͍͏͜ͱʁ

    View Slide

  31. • ϒϩάͷϑΝΠϧύε

    • project_root/xxx.hatenablog.com/entry/2022/01/02/030405.md

    • ͜ͷϒϩάΛฤू͠ɺཌ೔blogsync push͢Δͱɺಉ͡಺༰Λ࣋ͭ৽͍͠ϒϩ
    ά͕ग़དྷ্͕Δ

    • project_root/xxx.hatenablog.com/entry/2022/01/02/030405.md

    • project_root/xxx.hatenablog.com/entry/2022/01/03/040506.md
    blogsyncͷ࢓༷ʢϒϩάͷߋ৽ʣ

    View Slide

  32. ϫʔΫϑϩʔΛ࡞Δ্Ͱ

    ஌͓ͬͯ͘΂͖blogsyncͷ࢓༷͸͜͜·Ͱ

    View Slide

  33. ϫʔΫϑϩʔΛ࡞Δ

    View Slide

  34. ϫʔΫϑϩʔ
    • ࠔͬͨ͜ͱ΍ཧ૝ܗΛݩʹɺҎԼ3ͭͷϫʔΫϑϩʔΛ࡞੒

    • ϒϥϯν࡞੒࣌ʹ͸ͯͳϒϩάͷԼॻ͖Λ࡞੒

    • Pull Request࣌ʹ͸ͯͳϒϩά্ͷԼॻ͖Λߋ৽

    • ϥϕϧઃఆ࣌ʹϒϩάΛެ։

    View Slide

  35. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ

    View Slide

  36. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ
    1.Create branch 2.Event trigger 3. Create blog
    4. Get blog
    5. Commit blog
    GitHub
    Actions

    View Slide

  37. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ

    View Slide

  38. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ

    View Slide

  39. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ

    View Slide

  40. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ

    View Slide

  41. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ

    View Slide

  42. ͸ͯͳϒϩάͷԼॻ͖࡞੒ ϫʔΫϑϩʔ

    View Slide

  43. ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ

    View Slide

  44. ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ
    1.Push blog 2.Pull Request 3. Update blog
    GitHub
    Actions

    View Slide

  45. ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ

    View Slide

  46. ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ

    View Slide

  47. ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ

    View Slide

  48. ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ

    View Slide

  49. ৽نϒϩά͕࡞੒͞ΕΔ͕
    ίϛοτ͠ͳ͍
    ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ

    View Slide

  50. ৽نϒϩά͕࡞੒͞ΕΔ͕
    ίϛοτ͠ͳ͍
    ͸ͯͳϒϩάͷԼॻ͖ߋ৽ ϫʔΫϑϩʔ
    →ࣥචऀ͕ಉ͡ϑΝΠϧύ
    εͷϒϩάͰฤू͠ଓ͚Β
    ΕΔΑ͏ʹ͢ΔͨΊ


    View Slide

  51. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  52. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ
    3. Update blog
    1.Approve label 2.Event trigger
    4. Get blog
    5.Replace and

    Commit blog
    GitHub
    Actions

    View Slide

  53. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  54. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  55. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  56. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  57. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  58. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  59. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ
    ɾgitͷཤྺΛอ࣋Ͱ͖Δ


    ɾϒϩάެ։೔ͱGitHub্
    ͷϒϩάͷ೔࣌ͷϑΝΠϧ
    ύε͕Ұக͢Δ

    View Slide

  60. ͸ͯͳϒϩάͷެ։ ϫʔΫϑϩʔ

    View Slide

  61. ੍ݶࣄ߲
    • GitHub্ͷԼॻ͖ϒϩάʹΞοϓϩʔυͨ͠ը૾Λɺ͸ͯͳϒϩά΁ެ։Ͱ
    ͖ͳ͍

    • ͸ͯͳϒϩά্Ͱ௚઀ฤूͨ͠৔߹ɺGitHub্ͷϒϩάͱϚοϐϯάͰ͖ͳ
    ͍

    View Slide

  62. ·ͱΊ
    • GitHub ActionsͱblogsyncΛ࢖༻ͯ͠ɺ͸ͯͳϒϩάͷهࣄ࡞੒ɺߋ৽ɺެ։
    ΛࣗಈԽͨ͠

    • ੍ݶࣄ߲͸͋Δ΋ͷͷɺ୯७Խ࡞ۀΛޮ཰ԽͰ͖ͨ

    View Slide

  63. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide