こんな人向けの記事です
GitHub Actionsでレポジトリ上のPythonファイルを定期実行してみたい方
Actionsってどんなもの?
GitHubをはじめてみて、いろいろと機能を確認していくうちに、 Actionsというのが気になりました。
Simple workflow というのが一番基本のサンプルのようなので開いてみます。
左側には自分が作ったリポジトリのツリーが表示されています。
上部にはリポジトリ直下に .github/workflows/blank.yml in main とあります。
この場所にYamlファイルを置くことで自動化ができるようです。
Pythonスクリプトを自動実行する
今回Actionsで自動実行するのは、同じリポジトリ上に置かれたPythonファイルです。実行すると、自身のQiita記事の一覧をHTTP要求で取得して、README.md ファイルを書き換えるというもの。
ローカルで実行するならば、更新されたREADME.mdを改めてaddしてcommitしてpushするのですが、その辺りもActionsで実行させたいです。
このスクリプト自体の作成についてはこちらで記事にしたのでご覧ください。
トリガー
中身を見てみてわかるのが、「mainブランチにプッシュされるか、プルリクエストされることがトリガーになっていること。トリガーはon: で表すのですね。実行タイミングの設定です。

3つ目のworkflow_dispatch: も on: の配下にあります。これもトリガーの一つ。ワークフローディスパッチとは Actionsの中にある「Run Workflow」ボタンから実行ができるということ。Power Automateで言うところの「手動トリガー」ですね。あとで確認します。
ジョブ
on: でトリガーを定義したので、同じように jobs: で実際の動作を指示するようです。
最初の build: というのはジョブの名前なので変更可能
uns-on: ubuntu-latest は、GitHubが提供するubuntuマシン上で動作するということ。
次のsteps: 以下にGitHub上のリポジトリ上でジョブがアクセスできる場所のしていとステップの名前および実行内容を記述するようです。
このテストフローでは echo を使って文字を表示させているだけですが、echoのようにコマンドが書かれているということは、bashのコマンドを書けば良いようですね。
Yamlファイル上に処理を直接書いても良いし、スクリプトをリポジトリ上において、それを実行してもよいのでしょう。わかってきた!
Yamlファイルを保存
とりあえず害の無いワークフローですので、画面右上の「Commit Changes」をクリックしてみます。
コミットの名前を求められました。今回のテストフローはmainブランチにプッシュがトリガーになっているので、ちょっと迷いましたがmainブランチに直接コミットしました。

リポジトリの下に .github/workflows ディレクトリが作られて、先程のblank.ymlファイルが保存されているのがわかります。Yamlファイルを置くだけなので、普通のGit操作でコミットして更新できるということですね。
テストを実行してみる
保存をしたあとで、 Actionsを開いてみるとYamlファイルのなかで name: として指定していたCIの名前が表示されています。ここに Run Workflow のボタンがありました。押してみます。


buildが始まったようです。
少し待つと緑色に変わりました。
Node.js 20 は非推奨だからNode.js 24を使いなさいという警告は出ていますが、今回はechoを使っているだけなので特に問題なしです。
画面左側のBuild をクリックしてみます。
実行ログが見えました。 echo の結果が表示されているので、Yamlファイル上で name: で名前をつけた2つのジョブの中身run: に指定したコマンドがそれぞれ実行されていることが確認できました。
VS Codeでアクションを作る
VS Codeを開いて、GitHubのクルクルマークをクリックすると、先程GitHub上で作成したアクションが見えるようになりました。

ブランチを作ってYamlファイルを作る
.github/workflows フォルダの中にupdate-readme.ymlと名付けたアクション用のYamlファイルを新規作成しました。毎週月曜日に、GitHub上に配置したscripts/update-readme.py を実行するというものです。

on: がトリガーなのでcronを使ってスケジュール実行しています。

AddしてCommitしてPushした
作成したアクションYamlファイルをGitHubへPushしました。このアクションはうまく動作したらあとで共有します。

プルリクエストを出す
ブランチを作ってGitHubにプッシュしたあとに、この画面でプルリクエストを出します。
独りプルリクなのですが、この段階はお願いしている立場です。

レポジトリの管理者としてマージする
今度はプルリクエストを受けた側の立場として、依頼に答えてマージします。
面白いのが、この記事の前半でActionsのサンプルとして追加しておいた CI という名前のアクションが、mainへのプルリクエストをトリガーにして実行されているのがわかることです。 なるほど。

手動実行してみる
Actions の中に、先程マージされたUpdateReadmeというアクションが表示されているので、手動トリガーしてみます。

README.md ファイルが、確かに更新されていることが更新時間からわかります。成功!

ログをひらくと、Run python scripts/update_readme.py とあり、その下にprintでコンソール出力した内容が表示されているので、たしかにGitHub上のubuntu環境でPythonのスクリプトが実行されたことがわかります。
スクリプトによってGitHub上のubuntu環境でREADME.md を新たに作成したあと、そこからコミットしてプッシュしてます。

アクションの中身
このようになってます。name: で各処理に名前をつけていますが、run:に書いていることは、ターミナルで入力しているgitのコマンドとかbashの簡単な処理だけです。
jobs:
update-readme:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install dependencies
run: |
pip install requests python-dotenv
- name: Run script
env:
QIITA_TOKEN: ${{ secrets.QIITA_TOKEN }}
run: |
python scripts/update_readme.py
- name: Commit and push
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add README.md
if git diff --cached --quiet; then
echo "No changes"
else
git commit -m "Update README from Qiita"
git push
fi
環境変数としてシークレットを読み込み
一箇所だけ、env: という指定がされている部分だけ注意が必要です。
このアクションが動作しているのは GitHub上のubuntu環境なので、そこでQiita APIのアクセストークンを利用するための準備をしています。
env:
QIITA_TOKEN: ${{ secrets.QIITA_TOKEN }}
このsecrets.QIITA_TOKEN というのは、あらかじめ GitHub>Settings>Secrets and Variables に用意しておいたものです。コードの中には決してシークレットなどは含めず、このようなかたちで取得してくるんですね。
コストについて
Actionsのコストについてはこちらが公式な資料です。
パブリックなリポジトリでの利用は無料で、プライベートでGitHub Freeのユーザーでも1月あたり2000分までの動作は追加費用をとられないようなので、ちょっとしたスケジュール実行ならサーバを用意したりしなくてもよいのは素敵です。
実際のActionsのYamlファイル
パブリックで実行しているのはこちらです。
まとめ
手探りでGitHubのActionsの使い方を体験してみました。
- Actions自体はYamlファイルで書かれていて、ちょっとギョッとしますが、実際にはstepsの中に処理の名前をつけてログでわかりやすくしているだけで、bashのスクリプトがそのまま実行できることがわかりました
- トリガーには、プッシュやプルリクエストなどを指定するほかに、schedule: を使ってcronが使えるのは便利です
こんな人が書いてます
普段はPower Platformの管理者をしていて、Qiitaには主にPower AutomateのTipsのようなものを書いてます。ブログも書いているのでよろしかったらご覧ください!












