技術
Github Actionsのご紹介
2022/04/12
SHARE
TechMagicでは、ソフトウェアのチーム開発にGitHubを使用しています。GitHubを使って開発していると、以下のようなワークフローを繰り返すことがあります。
- 新しい人をcontributorとして入れる
- コミットする
- PRを立てる
- Issueを立てる
この中で例として、Issueを立てる場合のワークフローを見てみましょう。
- Issueのレベルを見る、major/minor 緊急とか
- Issueが再現可能か
- 対応担当者を割り当てる
- コードレビュー
- 問題が修正されたかチェック
- リリースノートの準備
- バージョンを上げる
- mainへマージ(ここでCICDのパイプラインを起動)
マージ -> テスト -> ビルド -> デプロイ
最初はこれらを手動で行うわけですが、定型化した作業はだんだん自動化したくなってきます。これらの作業を可能な限り自動化させるのがGitHub Actionsであります。
GitHub Actionsとは
簡単に言うと開発者のワークフローを自動化するプラットフォームです。CI/CDツールの一種だと思われがちですが、実は逆で、CI/CDはGitHub Actionsでできることの一つの機能です。つまり、アウトプットをデプロイする以外にも、幅広いワークフローの自動化ができるツールになります。
GitHub Actionsはリポジトリに何か変化があったら、それをリポジトリへのEventと呼びます。
つまり上記のワークフローの場合:
- 新しい人をcontributorとして入れる
- PRを立てる
- Issueを立てる
- マージする
などなどが当てはまります。
Eventに自動的に反応して自動的に実行するのがGitHub Actionsのワークフローです。
CI/CDパイプラインについて考える
CI/CDは最も一般的なワークフローの一つであります。
CI/CDとは?
CIとは継続的インテグレーション
継続的インテグレーション(Continuous Integration)
ソフトウェア開発において、ビルドやテストを自動化し、短期間で品質管理を行う手法になります。
CDとは継続的デリバリー(継続的デプロイ)
継続的デリバリー(Continuous Delivery)または継続的デプロイ(Continuous Deployment(継続的デプロイ)
開発者による変更をリポジトリから本番環境に自動的にリリースし、顧客がすぐに使用できるようにするというものになります。
分かり易く図で表現すると以下のイメージになります。
GitHub Actionsの使い方
GitHubのリポジトリの「Actions」の欄から、新しいworkflowの作成ができます。GitHubで様々なテンプレートも用意されているので、場合によっては自分で作る必要がなく、そのままでも使えます。
GitHub Actionsのファイルや文法を見てみましょう。
例として、コードをpushする時や、pull requestを立てる時にDjangoテスト(manage.py test)を自動的に行うCIを記述します。一般的にprojectの.githubのworkflowディレクトリーに記述します。DBはPostgreSQLを使用しています。
servicesキーワードを使って、ワークフロー内のジョブの一部であるサービスコンテナを作成できます。ここでは、サービスコンテナとしてpostgresのコンテナを指定しています。
stepキーワード以下には、実行内容を順次記述していきます。
usesキーワードでは、GitHubで事前に準備されている定義を指定します。「テストをするのも何もまずはcheckoutコマンドを使わないといけないよね!」ということなので自分でcheckoutコマンドを作るより、事前に準備・用意されているものを使いましょう。これは親切な人々がactionsパスを通して用意してくれています。@v2はバージョンを指しています。
ここを見れば一目瞭然でしょう、中にaction.ymlファイルがあります。
https://github.com/actions/checkout
同じくPythonの環境を用意してくれています。ここでは例として3.6, 3.7, 3.8のそれぞれのバージョンでテストを実行しています。名前も使うバージョンに関連付けて、動的に変化するようにしています。
action.ymlは同じくここで確認できます。
https://github.com/actions/setup-python
ここではコマンドを使用しています。Pythonの環境を整えたあとpipパッケージをインストールし、必要なrequirements.txtにあるパッケージをインストールしています。
最後にテストを走らせるための環境変数の設定やコマンドです。
その他のworkflow構文一覧はこちらを参照してください。
https://docs.github.com/ja/actions/reference/workflow-syntax-for-github-action
まとめ
Github Accountを持っていれば、簡単に試すことができます。公式ドキュメントも一通り揃えていて、一部まだ未翻訳の部分はあるものの、今後日本語ドキュメントの完成も期待できます。
今回、GitHub Actionsを使用して良いと思った点は、
- GitHub にアカウントやリポジトリがあれば、そのまま使える、新しく何かサービスに登録や設定しなくて済む(これが結構楽)
- リポジトリの設定で有効にする必要があります
- 設定が簡単、開発者にとってわかりやすい(Jenkins等、他のプロダクトにに比べて)
- ワークフローの実行時間に応じて利用料金は発生するが、仮想サーバなど管理の手間が無くてラクラク♪
一方で、実際に使う時は、プロジェクトの状況によっては、つまずくポイントも多々あると思います。一例として、Dockerを利用している開発環境でDjangoのCIを構築使用とした場合、いくつかうまくいかない例もありあました。
機会があれば今後ご紹介したいと思います。
TechMagicでは食産業の未来を創造する仲間を募集しています!
随時採用イベントも行っておりますので、ご興味のある方はぜひ下記リンクよりお申し込みください。
【採用イベント申込フォーム】
https://forms.gle/x4GePAw3eaGMRvbF7
その他、募集ポジションの確認やオフィス見学・カジュアル面談の希望など、お気軽にHPからご連絡ください!