GitHub Actionsで機械学習のCI（自動テスト）を動かす方法


## この記事は

本記事では、機械学習モデルの予測スクリプトをGitHub Actionsで自動的に検証（CI）する方法を、初心者向けに丁寧に解説します。


## はじめに：CIとは何か？

機械学習モデルを作った後、

- 「新しいデータが来てもちゃんと予測できるのか？」
- 「コードが壊れていないか？」

を継続的に確認することが重要です。このような継続的チェックを **CI（Continuous Integration）** といいます。

今回はGitHubが提供している無料のCIツール **GitHub Actions** を使って、

- モデルのロード
- データの読み込み
- 予測の実行と結果確認

を **自動で実行する方法** を説明します。

---

## 本記事の対象読者

- GitHub Actionsを初めて使う方
- Pythonの機械学習スクリプトを自動でテストしたい方
- データやモデルを含めてリポジトリ内で管理・テストしたい方

---

## この記事で作成するファイル構成

今回使うファイルの構成は以下の通りです。

```bash
.
├── .github
│   └── workflows
│       └── ci-cd.yml       # GitHub Actions用の設定ファイル
└── 機械学習CICDテスト
    ├── predict.py          # 予測スクリプト
    ├── data.csv            # テスト用データ
    └── linear_model.pkl    # 学習済みモデルファイル
 1. GitHub Actionsの設定ファイルを作成する
```

---

リポジトリのルートに次のファイルを作成します。

- `.github/workflows/ci-cd.yml`

内容は以下の通りです：

```yaml
name: CI/CD Pipeline

on:
  push:
    branches: [ main, master ]
  pull_request:
    branches: [ main, master ]
  workflow_dispatch:  # 手動実行にも対応

jobs:
  run_prediction:
    runs-on: ubuntu-latest

    steps:
    - name: コードをチェックアウト
      uses: actions/checkout@v3

    - name: Python環境のセットアップ
      uses: actions/setup-python@v4
      with:
        python-version: '3.10'

    - name: 必要なライブラリのインストール
      run: |
        python -m pip install --upgrade pip
        pip install numpy pandas scikit-learn joblib
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

    - name: デバッグ用（ファイル一覧表示）
      run: |
        echo "現在のディレクトリ: $(pwd)"
        ls -la
        find . -name "*.py"
        find . -name "*.csv"

    - name: 予測スクリプトを実行
      run: |
        python 機械学習CICDテスト/predict.py

```

---

## 2. 予測スクリプトを準備する（predict.py）

ファイル：`機械学習CICDテスト/predict.py`

内容は以下の通りです（丁寧にエラー処理も書いています）：

```python
import joblib
import os
import sys
import pandas as pd

def main():
    current_dir = os.path.dirname(os.path.abspath(__file__))
    data_path = os.path.join(current_dir, 'data.csv')
    model_path = os.path.join(current_dir, 'linear_model.pkl')

    # ファイル存在チェック
    if not os.path.exists(model_path):
        print(f"エラー: モデルファイル '{model_path}' がありません！")
        sys.exit(1)

    if not os.path.exists(data_path):
        print(f"エラー: データファイル '{data_path}' がありません！")
        sys.exit(1)

    print(" モデルをロード中...")
    model = joblib.load(model_path)
    print(" データを読み込み中...")
    df = pd.read_csv(data_path)

    feature_col = 'feature' if 'feature' in df.columns else df.columns[0]
    X_new = df[[feature_col]].values

    print(f" 特徴量 '{feature_col}' を使って予測します！")

    preds = model.predict(X_new)

    print("\n 予測結果")
    print("---------------------")
    print(f"{'入力値':^10} | {'予測値':^10}")
    print("---------------------")
    for xi, yi in zip(X_new.flatten(), preds):
        print(f"{xi:10.3f} | {yi:10.3f}")
    print("---------------------")

if __name__ == '__main__':
    main()

```

---

## 3. テスト用のデータとモデルを準備する

次のファイルを `機械学習CICDテスト/` に置きます。

### data.csv

（簡単なテストデータ）

```
feature,target
1,2.1
2,4.0
3,6.05
4,8.2
5,10.1
6,12.05
7,14.2
8,16.1
9,18.0
10,20.05

```

### linear_model.pkl

- モデルファイルは事前にローカルで学習（`train.py`）し、作成してください。
- 作成方法は記事後半の補足にあります。

---

## 4. GitHubへPushして動かしてみよう！

以下を順番に行います：

1. リポジトリにファイルをコミット & プッシュ
2. GitHubの「Actions」タブを確認
3. CIワークフローの「Run prediction」ステップで予測結果が出ることを確認

成功すると、GitHub Actionsのページに以下のような結果が表示されます。

```
 予測結果
---------------------
  入力値    |   予測値
---------------------
     1.000 |      2.000
     2.000 |      4.000
     ...
---------------------

```

---

## 補足：学習用スクリプト（train.py）の例

事前にモデルを学習し、`linear_model.pkl` を作成するスクリプトです。

```python
import joblib
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

df = pd.read_csv('data.csv')
X = df[['feature']]
y = df['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

model = LinearRegression()
model.fit(X_train, y_train)

joblib.dump(model, 'linear_model.pkl')
print("モデルが保存されました。")

```

これを実行すると、`linear_model.pkl` が生成されます。

---

## まとめとポイント

- **GitHub Actions** を使うことで機械学習の予測を継続的に自動検証可能
- CI環境でモデル・データのチェックが自動化され、安心・便利
- ファイル配置やエラー時のデバッグが簡単

ぜひご自身のプロジェクトにも応用してみてください