目次

GitHubActionを利用して、静的ページジェネレータんの一部を自動でデプロイするようにした。この経験を踏まえて得られた知見をメモする。

GitHubActionで自動化を試みる

「GitHubActionを使うと自動化ができるらしい」というふんわりとした知識をもとに、まずは色々と調べてみた。 GitHubActionは、GitHubでの何かしらのイベントをwebbhookとして、起動させることができるサービスらしい。 仮想サーバーにOSを立ち上げて、何かしらの処理を実行させることができるようだ。例えば次のようなことができるみたいだ。

  • 同じリポジトリにpull requestを送る
  • issueにコメントを残す
  • cloneしてテストを実行する

もう少し深掘りする必要がありそうだ。。。

GitHubActionはCI/CDツール

GitHubActionは、CI/CDツールの一つだ。jenkinsなどに代表される通り、テストやデプロイなどを自動化する「継続的インテグレーション」を実現できる

今は、開発速度と品質が並行して求められているため、これらのツールの活用は開発において欠かせないとか。

ここで疑問になってくるのは、CI/CDツールの定義だ。 今回実現したいのは、「デプロイまでの自動化」であって、品質を担保する考え方であるCIとはまた違うのではないかと思った

というわけで・・・ChatGPTに尋ねてみた。

正確に言うと、CI(継続的インテグレーション)の本質的な要素は「コードを共有リポジトリに統合することを頻繁に行い、早期にコードの品質を確保する」ことです。そのため、CIの本質はコードの統合と品質管理にあります。

従来だと、頻繁なコミットやマージは、気苦労の多い作業だ。通常通り動いているケースに変更を加えることで、動作しなくなる可能性も秘めている。 そうやって反映されていないケースが溜まってしまい、影響が大きくなってしまう。。。というのがよくある悪循環だ。 また、新規機能の実装に比べると、テストや品質保証は時間を設けることが難しく軽視されることもある。 こういった悪循環に陥られないようにするのが、 CIツールだ。品質保証やデプロイ作業の一連の動作を自動化することで、コミットを頻繁に行える環境を作ろう、というわけだ。

ならちょっと待ってほしい。僕が今回おこなう自動化は、CIなどだろうか??

というわけでさらに深掘りしてみる

自動化ツール ⊃ CIツール

調べてみるとわかったが、CIツールとは、自動化ツールとほぼ同じ意味とされているとわかった。 CI自体が、「面倒な動作を自動化してひんしつをほしょうしよう!」という考え方であるので、細かい動作を省く自動化ツールと同一とかんがえられるのだろう。

最終的に判明したことだが、hugoの自動化によっていままで、手動で実行していたことが非常に短縮された。

コードだけでいうと以下の手順が今まで行われていた。またそもそもこのコードを実行するためには、「自宅で」かつ「パソコンを起動して」かつ「vscodeを開いて」行う必要がある。

// ユニークなファイル名を作成する
vim UNIQUE.md
// 特定のファイルパスに移動する
cp UNIQUE.md hugoApp/contents/post/UNIQUE.md
// hugoのアプリ直下に移動
cd ./hugoApp
// hugoコマンドで静的ページの作成
hugo
// 静的ページのpushまでを実行
git add ./docs
git commit -m 'doc commit'
git push
 

最低でも7工程は存在してしまう。 まあ、shellで自動化もできて、以前別のもので、 shellを叩くだけでデプロイまでかんりょうできるようなスクリプトを書いたことがある。 しかし、結果的にパソコンを起動するという手間が億劫で継続されなくなった。もちろん外出中に更新することなんてできない

それが今では次のような工程になっており、スクリプトは実行されない

  • githubで指定のリポジトリにissueとして記事を作成する
  • publishのlabelを作成する
  • 自動で反映される

これで、スマホさえあれば、どこでもissueは作成できるし、それだけでデプロイが完了する。 また、ラベルを付与する工程も、念のために状態管理をしたいからと、自分の要望で作成したものだ。 いらない場合は、最初のissueの立ち上げさえすると、デプロイまで完成する。

これは便利だ。

気づき

一度作ってみてわかったが、圧倒的に手間が減っている。僕たちが面倒だなと思う工程は、いろいろあるのだろう

  • コマンドの実行
  • テストの実行
  • 結果の確認
  • pushの実行
  • パソコンを立ち上げる

シンプルな工程のおおさだけではなく、物理的な起動の手間や、影響範囲が大きいなど精神的な要素にも左右される

コマンドをシンプルにしました!ではない。みんなに使ってもらいたいのであれば、もう二つほど深掘りする必要がありそうだ

参考にしたサイト

https://aws.amazon.com/jp/devops/continuous-integration/