みなさん、こんにちは。タスクの自動化に目を向けている周です。
仕事の自動化が進んでいる今、Web開発においては「CI/CD」といい、定期テストの自動化、本番環境への反映タスクの自動化ができるツールも多く出てきています。
ソースコードの管理ができる「Github」が提供する「Github Actions」もその中の一つです。
今回はこの「Github Actions」を使って定期テストのソースを動かしてみました。
Github Actionsでタスクを実行してもらうため、どのような条件、そしてどのような環境で、何のタスクを実行するかをワークフローの設定ファイルで教えてあげる必要があります。
以下のように .github
フォルダの中に workflows
フォルダを作成し、中に設定ファイルの main.yml
を作成します。
1 2 3 |
.github └ workflows └ main.yml // ワークフローの設定ファイル |
下記はワークフローの設定ファイルの設定例となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// .github/workflows/main.yml # ワークフロー名 name: workflow_name # ワークフローの実行タイミング on: schedule: # 定期実行する時間 毎時0分に実行 - cron: '0 * * * *' # ワークフローの詳細 jobs: build: # Ubuntuの最新版環境内で処理を実行することを指定 runs-on: ubuntu-latest # 実行する処理&コマンド指定 steps: - uses: # Github actions 公式でハンドルされるアクション actions/checkout@v4 - name: Set up Python 3.8.18 uses: actions/setup-python@v3 with: python-version: 3.8.18 - name: Install dependencies run: | # pip更新 python -m pip install --upgrade pip # packageインストール pip install urllib3 pip install requests pip install python-dotenv # pip install beautifulsoup4 - name: Run script run: | python index.py |
では、ワークフローの設定ファイルの構造を詳しく見ていきましょう。
まず最初に、ワークフローの名前を入力します。
1 2 |
# ワークフロー名 name: workflow_name<!-- notionvc: e8018b21-da65-48f0-94c4-b7de51d41439 --> |
つぎにワークフローの実行タイミングを定義します。
例では、cronを使って毎時0分に実行するように設定しています。
なお、標準時間との差のため、設定した時間とズレが発生してしまいます。
cronは、設定したように定期的に実行することができるOSシステムの備え付けのジョブ管理ツールです。
1 2 3 4 5 |
# ワークフローの実行タイミング on: schedule: # 定期実行する時間 毎時0分に実行 - cron: '0 * * * *'<!-- notionvc: 76a2bb93-6644-4259-8847-afd912f611ad --> |
また、下記のようにpull_requestイベントを使うと、マージされたタイミングでワークフローを実行することができます。
1 2 3 4 |
# ワークフローの実行タイミング on: pull_request: branchs: [main]<!-- notionvc: 7ae0296b-39a2-4548-86e1-2f87ef81f875 --> |
仮想環境のOSシステムの定義となります。今回は最新のOS環境で処理を実行するように指定しています。
1 2 3 4 5 |
# ワークフローの詳細 jobs: build: # Ubuntuの最新OS環境で処理を実行することを指定 runs-on: ubuntu-latest<!-- notionvc: 3d4cd72c-4857-4950-86fb-3af9fd6dd189 --> |
つぎは処理の実行をハンドルするアクションのバージョンを選びます。
2024年6月現在は、 actions/checkout@v4
が最新バージョンとなります。
また、リリース情報は下記のURLから確認することができます。
https://github.com/actions/checkout/releases
1 2 3 4 5 |
# 実行する処理&コマンド指定 steps: - uses: # Github actions 公式でハンドルされるアクション actions/checkout@v4<!-- notionvc: 1bcf9db4-b8df-4647-adf9-49701c694b38 --> |
今回実行する処理で使うプログラミング言語と、必要なライブラリを定義します。
今回はPython、Pythonのパッケージを管理するpip、そして必要なパッケージを指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 |
- name: Set up Python 3.8.18 uses: actions/setup-python@v3 with: python-version: 3.8.18 - name: Install dependencies run: | # pip更新 python -m pip install --upgrade pip # packageインストール pip install urllib3 pip install requests pip install python-dotenv<!-- notionvc: d6aea1e6-ecd3-4f36-bd62-baa2d4b3cb07 --> |
最後に実行するプログラムを記述しているファイルを指定します。
1 2 3 |
- name: Run script run: | python index.py<!-- notionvc: 34b3f61c-5d21-4e78-9913-e18fd4925e7e --> |
ワークフローの設定ファイルを記述し、mainブランチにマージしたタイミングでタスクの実行が始まります。
タスクの実行が成功したかどうかをGithubのリポジトリページの「Action」タブから確認することができます。
実行する履歴をクリックすると、さらに実行するステップの詳細を確認できます。
失敗した場合もこちらからどのステップで止まってしまったかを調べることができます。
実行するワークフローのプログラムで利用するデータベース情報やAPIキーなどの秘密情報もリポジトリごとに登録することができます。
まずは、下記のようにリポジトリのセッティングタブから、Github Actions用のシークレット変数を設定します。
そして、設定したシークレット変数をプログラム上で使えるように、ワークフローの設定ファイルで環境変数の設定をします。
jobs
の上に下記のように追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// .github/workflows/main.yml # 環境変数 env: # Google API名 GOOGLE_API_NAME: spreadsheets # Google APIキー GOOGLE_API_KEY: ${{secrets.GOOGLE_API_KEY}} # スプレットシートID SPREADSHEET_ID: ${{secrets.SPREADSHEET_ID}} # シート名 SHEET_NAME: maintenance # ChatWork APIキー CHATWORK_API_KEY: ${{secrets.CHATWORK_API_KEY}} # ChatWork 部屋ID 保守案件 動作状況のお知らせ CHATWORK_ROOM_ID: ${{secrets.CHATWORK_ROOM_ID}}<!-- notionvc: df411d1b-6a85-4ecd-8c30-d2b3079d3860 --> |
Pythonの場合、設定ファイルで追記した変数は、下記のように呼び出すことができます。
1 2 |
// index.py gooleApiKey = os.getenv('GOOGLE_API_KEY')<!-- notionvc: 058469be-fd3c-4a41-9e13-16cf9867a6a3 --> |
Github Actionsでは月2000分以内の場合、フリープランで利用することができます。
しかし、2000分を超える場合、従量課金で請求が発生してしまいます。
フリープランだけで利用したい場合は、2000分を超えないように上限を設定する必要があります。
Githubの課金の詳細について、下記の公式ドキュメントをご参照ください。
https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions#about-spending-limits
定期的な動作チェックや、マージされたタイミングでサーバーへの反映など、そのようなタスクを自動化できる「Github Actions」の使い方の紹介でした。
自動化ツールの活用によって、今まで手動で実行しないといけないタスクも、時短でできるようになりました。これからもいろんな業務で活用できたらと思っています。