FlaskアプリのテストをGitHub Actionsで自動化する方法まとめ!初心者向け解説
生徒
「Flaskアプリのテストを自動化したいのですが、どうすれば良いですか?」
先生
「GitHub Actionsを使うと、Flaskのテストを自動化して、プルリクエストやコミットのたびにテストを実行できます。」
生徒
「GitHub Actionsって聞き慣れないですが、初心者でも使えますか?」
先生
「はい、設定ファイルを書くだけで簡単に自動化できます。順を追って解説しますので安心してください。」
1. GitHub Actionsとは?
GitHub Actionsは、GitHub上で決められた作業を自動で実行してくれる仕組みです。難しそうに聞こえますが、「特定のタイミングで決まった操作を代わりにやってくれるロボット」と考えると分かりやすいです。Flaskアプリ開発では、コードを保存・共有するたびに、テストや確認作業を自動で行わせる目的でよく使われます。
たとえば、手動で毎回テストを実行する代わりに、GitHubにコードを送信した瞬間に、自動でテストが始まるように設定できます。これにより「テストを忘れていた」「動くと思っていたらエラーがあった」といったミスを防げます。
初心者でも、特別な操作は不要で、用意された設定ファイルを書くだけで使えるのが特徴です。以下は「プッシュされたら処理を実行する」という考え方をイメージするための、とても簡単なサンプルです。
on:
push:
branches: [ main ]
このように書くことで、「mainブランチにコードが送られたら何かを実行する」というルールをGitHubに伝えられます。実際のテスト内容は後ほど設定しますが、まずは「自動で動く仕組みがある」という点を理解することが大切です。
2. GitHub Actionsの設定ファイルの場所
GitHub Actionsを使うときは、リポジトリ(GitHubに置いているプロジェクト)の中に、決まった場所と名前で設定ファイルを用意します。具体的には、プロジェクトのルートに.githubフォルダを作り、その中にworkflowsフォルダを作成します。最終的に.github/workflowsという形になればOKです。
このworkflowsフォルダの中に、.ymlまたは.yamlという拡張子のファイルを置くと、GitHubが「これは自動実行の手順書だな」と判断して読み込んでくれます。ファイル名は自由ですが、例としてflask-ci.ymlのように内容が想像できる名前にしておくと管理が楽です。
イメージしやすいように、最低限の配置は次のようになります(中身は後で書き足していきます)。
your-repo/
.github/
workflows/
flask-ci.yml
つまり「どこに置くか」が一番大事で、ここさえ間違えなければGitHub Actionsは動き始めます。逆に、フォルダ名のスペルが違ったり、別の場所に置いてしまうと、設定を書いても反映されないので注意してください。
3. Flaskアプリのテスト自動化の基本設定
Flaskアプリでテストを自動化するときは、まず「テストを実行するコマンド」をGitHub Actionsに覚えさせます。ここでは初心者に定番のpytestを使う例で紹介します。ポイントは、GitHub上のまっさらな環境(Linux)に、ソースコードを取り出して、Pythonを用意して、必要なライブラリを入れてからテストを走らせる、という順番です。
以下は、プッシュやプルリクエストのタイミングでテストを動かす最小構成のサンプルです。コピペして動く形に近いので、まずはこのまま配置して試すのがおすすめです。
name: Flask CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pytest
- name: Run tests
run: |
pytest
流れをかみ砕くと、actions/checkoutでリポジトリの中身を取り出し、setup-pythonでPythonの実行環境を準備します。その後pipで依存ライブラリとpytestをインストールし、最後にpytestコマンドでテストを実行します。テストに失敗すると処理が止まり、GitHub上で「失敗した」と分かるので、見落とし防止にも役立ちます。
(参考)pytestが動く最小のテスト例
テストファイル名はtest_で始めるのが一般的です。例えばプロジェクト内にtests/test_sample.pyのようなファイルを作り、まずは「必ず通るテスト」を1つ置いて、Actionsが動くか確認するとスムーズです。
def test_sample():
assert 1 + 1 == 2
このテストが通れば、GitHub Actions側の設定とpytestの実行がひとまず成功しているサインになります。あとは、Flaskの機能に合わせてテストを少しずつ増やしていけばOKです。
4. coverage.pyを使ったテストカバレッジ測定
テストが自動で動くようになったら、次に気になるのが「ちゃんと重要な部分までテストできているか?」という点です。そこで役立つのがcoverage.pyです。coverage.pyは、テスト実行中に「どのファイルの、どの行が通ったか」を記録してくれるツールで、テストの当たり具合(テストカバレッジ)を数字で確認できます。
たとえばカバレッジが低いと、「テストを書いたつもりでも、実はほとんど動かしていないコードがある」と気づけます。逆に高いほど安心材料になりますが、まずは“未テストの場所を見つける”目的で使うのが分かりやすいです。
GitHub Actionsに組み込む場合は、テスト実行をcoverage runに置き換えるだけでOKです。以下のように追加すると、テストと同時にカバレッジの集計まで自動で行えます。
- name: Install coverage
run: pip install coverage
- name: Run tests with coverage
run: |
coverage run -m pytest
coverage report
coverage reportを実行すると、結果が文字の一覧で表示されます。ここで「どのファイルが何%テストされたか」をざっくり把握できるので、初心者でも改善ポイントを見つけやすくなります。テストを増やすと数字が上がっていくので、成長が見えるのもメリットです。
5. HTMLレポートを作成して確認する方法
coverage.pyはHTML形式のレポートも作成可能です。ブラウザで開くと、未テストの行が赤、テスト済みの行が緑で表示されるので、視覚的に確認できます。
- name: Generate HTML report
run: coverage html
GitHub ActionsのアーティファクトとしてHTMLレポートをアップロードすれば、チーム全員で確認可能です。
6. 自動化のメリット
GitHub ActionsでFlaskアプリのテストを自動化すると、次のようなメリットがあります。
- プッシュやプルリクエストのたびにテストが自動で走る
- カバレッジ測定でテスト漏れがすぐに分かる
- チーム全員が最新のテスト結果を確認できる
- 手動でのテスト実行ミスを防止できる
7. 実践のポイント
初心者の方は、まず最小限のテストコードでGitHub Actionsを動かすことから始めましょう。その後、coverage.pyでカバレッジを確認しながら、少しずつテストを増やすと無理なく自動化を習得できます。さらに、必要に応じて通知機能を設定すれば、テストが失敗した場合にSlackやメールで知らせることも可能です。
8. ポイント整理
FlaskアプリのテストをGitHub Actionsで自動化するには、.github/workflowsにYAMLファイルを作成し、pytestやcoverage.pyを組み込むのが基本です。自動化により、テストの実行漏れを防ぎ、カバレッジを可視化しながらチームで効率的に開発できます。初心者でも、順を追って設定すれば安全に自動化を始められます。