はじめに
GitHub Actionsは、ソフトウェアの自動化を支援する強力なCI/CDツールです。
これにより、リポジトリ内でコードが更新されるたびにビルドやテストが自動的に行われ、開発の効率が向上します。
本記事では、Pythonを用いたGitHub Actionsのワークフローを構成し、テストが自動で実行されるプロセスを備忘録としてまとめます。
知識整理
GitHub Actionsとは?
GitHub Actionsは、GitHub上でコードのビルドやテスト、デプロイなどのタスクを自動化するためのCI/CDプラットフォームです。
引用画像:https://blog.studysapuri.jp/entry/2024/07/09/101443
GitHubリポジトリにワークフローファイルを設定するだけで、プルリクエストやプッシュ時に指定されたアクションがトリガーされ、ワークフローが実行されます。
これにより、手作業で行っていた一連の作業を自動化し、開発スピードと効率を向上させることができます。
CI/CDとは?
CI(Continuous Integration)は、コードの変更をリポジトリに継続的に統合し、バグやエラーの早期発見を目指すプロセスです。
引用画像:https://codezine.jp/article/detail/11083
CD(Continuous DeploymentまたはContinuous Delivery)は、CIでテストされたコードを自動的にデプロイするプロセスを指し、迅速なリリースを実現します。
ディレクトリ構成
Pythonを使ったGitHub Actionsワークフローのディレクトリ構成は、以下の通りです。
/<プロジェクトルートディレクトリ>
├── .github
│ └── workflows
│ └── python-app.yml # GitHub Actionsのワークフローファイル
├── main.py # Pythonスクリプト
├── test_main.py # テストコード
├── requirements.txt # 依存ライブラリ
└── README.md # プロジェクトの概要(任意)
今回は、README.md
は任意のため、作成していません。必要に応じて作成してください。
ハンズオン: PythonでGitHub Actionsを構成する
以下の手順で、GitHub Actionsを用いたPythonの自動テストワークフローを作成します。
Step 1: GitHubリポジトリを作成する
GitHubにログインし、新しいリポジトリを作成します。
リポジトリ名と説明を入力し、「Create repository」をクリックします。
Step 2: GitHub Actions ワークフローファイルを作成する
作成したリポジトリのトップページで、「Actions」タブに移動します。
「Set up a workflow yourself」をクリックし、新しいYAMLファイルの編集画面を開きます。
python-app.yml
という名前で、以下の内容を入力します
name: Python Application CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run Tests
run: |
pytest
このワークフローファイルは、リポジトリにプッシュやプルリクエストがあるたびにPython環境をセットアップし、テストを実行します。
Step 3: Pythonコードとテストファイルを作成する
ここでは、main.py ファイルを作成し、シンプルな関数を追加します。
def add(x, y):
return x + y
if __name__ == "__main__":
print(add(3, 5))
次に、作成した関数のテストを記述します。
from main import add
def test_add():
assert add(3, 5) == 8
assert add(-1, 1) == 0
最後に、依存関係を記述した requirements.txt ファイルを作成します。
pytest
Step 4: 変更をコミットし、GitHubにプッシュする
ターミナルを開き、以下のコマンドを実行して変更をコミットし、リポジトリにプッシュします。
git add .
git commit -m "Add Python script and test"
git push origin main
これにより、リポジトリが更新され、GitHub Actionsがトリガーされます。
GitHub Actionsの実行を確認する
GitHubのリポジトリに戻り、「Actions」タブをクリックします。更新が反映されている場合、以下のような画面が表示されます。
ワークフローが成功すると、ステータスとして緑色のチェックマークが表示されます。
「Run Tests」ステップでテストが実行され、すべてのテストがパスしていることを確認してください。
ワークフローが問題なく完了していれば、GitHub ActionsによるPythonテストの自動化が成功です。
============================= test session starts ==============================
platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0
rootdir: /home/runner/work/GitHub-Actions/GitHub-Actions
collected 1 item
test_main.py . [100%]
============================== 1 passed in 0.01s ==============================
1件のテストが実行され、すべて成功 (1 passed) していることが示されています。
まとめ
初めてGitHub Actionsを触った時はどれが何をしているかさっぱりわからなかったのですが、記事としてアウトプットすることで仕組みが理解できました。
次回のITスクールのハッカソンで、GitHub Actionsを活用し、リポジトリへのコード更新時に自動でビルドやテストが行われるようにしたいと考えています。
Pythonのテスト自動化ワークフローを設定し、開発効率向上を目指します。
参考文献