1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionsをはじめて使ってみる。Workflowの作成から自動コミットまで

1
Last updated at Posted at 2026-08-17

こんな人向けの記事です

GitHub Actionsでレポジトリ上のPythonファイルを定期実行してみたい方

Actionsってどんなもの?

GitHubをはじめてみて、いろいろと機能を確認していくうちに、 Actionsというのが気になりました。

Simple workflow というのが一番基本のサンプルのようなので開いてみます。

image.png

左側には自分が作ったリポジトリのツリーが表示されています。
上部にはリポジトリ直下に .github/workflows/blank.yml in main とあります。

この場所にYamlファイルを置くことで自動化ができるようです。

image.png

Pythonスクリプトを自動実行する

今回Actionsで自動実行するのは、同じリポジトリ上に置かれたPythonファイルです。実行すると、自身のQiita記事の一覧をHTTP要求で取得して、README.md ファイルを書き換えるというもの。

ローカルで実行するならば、更新されたREADME.mdを改めてaddしてcommitしてpushするのですが、その辺りもActionsで実行させたいです。

このスクリプト自体の作成についてはこちらで記事にしたのでご覧ください。

トリガー

中身を見てみてわかるのが、「mainブランチにプッシュされるか、プルリクエストされることがトリガーになっていること。トリガーはon: で表すのですね。実行タイミングの設定です。
image.png

3つ目のworkflow_dispatch: も on: の配下にあります。これもトリガーの一つ。ワークフローディスパッチとは Actionsの中にある「Run Workflow」ボタンから実行ができるということ。Power Automateで言うところの「手動トリガー」ですね。あとで確認します。

ジョブ

on: でトリガーを定義したので、同じように jobs: で実際の動作を指示するようです。

最初の build: というのはジョブの名前なので変更可能

uns-on: ubuntu-latest は、GitHubが提供するubuntuマシン上で動作するということ。
次のsteps: 以下にGitHub上のリポジトリ上でジョブがアクセスできる場所のしていとステップの名前および実行内容を記述するようです。

このテストフローでは echo を使って文字を表示させているだけですが、echoのようにコマンドが書かれているということは、bashのコマンドを書けば良いようですね。

Yamlファイル上に処理を直接書いても良いし、スクリプトをリポジトリ上において、それを実行してもよいのでしょう。わかってきた!

image.png

Yamlファイルを保存

とりあえず害の無いワークフローですので、画面右上の「Commit Changes」をクリックしてみます。

コミットの名前を求められました。今回のテストフローはmainブランチにプッシュがトリガーになっているので、ちょっと迷いましたがmainブランチに直接コミットしました。
image.png

リポジトリの下に .github/workflows ディレクトリが作られて、先程のblank.ymlファイルが保存されているのがわかります。Yamlファイルを置くだけなので、普通のGit操作でコミットして更新できるということですね。

image.png

テストを実行してみる

保存をしたあとで、 Actionsを開いてみるとYamlファイルのなかで name: として指定していたCIの名前が表示されています。ここに Run Workflow のボタンがありました。押してみます。
image.png
image.png

buildが始まったようです。

image.png

少し待つと緑色に変わりました。
Node.js 20 は非推奨だからNode.js 24を使いなさいという警告は出ていますが、今回はechoを使っているだけなので特に問題なしです。

画面左側のBuild をクリックしてみます。

image.png

実行ログが見えました。 echo の結果が表示されているので、Yamlファイル上で name: で名前をつけた2つのジョブの中身run: に指定したコマンドがそれぞれ実行されていることが確認できました。

image.png

VS Codeでアクションを作る

VS Codeを開いて、GitHubのクルクルマークをクリックすると、先程GitHub上で作成したアクションが見えるようになりました。
image.png

ブランチを作ってYamlファイルを作る

Action作成用に新しいブランチを作りました。
image.png

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

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

AddしてCommitしてPushした

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

プルリクエストを出す

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

さっき作ったブランチを選びます。
image.png

どういうアクションなのか説明を丁寧に書きます。
image.png

レポジトリの管理者としてマージする

今度はプルリクエストを受けた側の立場として、依頼に答えてマージします。

面白いのが、この記事の前半でActionsのサンプルとして追加しておいた CI という名前のアクションが、mainへのプルリクエストをトリガーにして実行されているのがわかることです。 なるほど。
image.png

手動実行してみる

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

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

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

image.png

スクリプトによってGitHub上のubuntu環境でREADME.md を新たに作成したあと、そこからコミットしてプッシュしてます。
image.png

ログは実際のアクションのステップに対応しています。
image.png

アクションの中身

このようになってます。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 に用意しておいたものです。コードの中には決してシークレットなどは含めず、このようなかたちで取得してくるんですね。

image.png

コストについて

Actionsのコストについてはこちらが公式な資料です。
パブリックなリポジトリでの利用は無料で、プライベートでGitHub Freeのユーザーでも1月あたり2000分までの動作は追加費用をとられないようなので、ちょっとしたスケジュール実行ならサーバを用意したりしなくてもよいのは素敵です。

実際のActionsのYamlファイル

パブリックで実行しているのはこちらです。

まとめ

手探りでGitHubのActionsの使い方を体験してみました。

  • Actions自体はYamlファイルで書かれていて、ちょっとギョッとしますが、実際にはstepsの中に処理の名前をつけてログでわかりやすくしているだけで、bashのスクリプトがそのまま実行できることがわかりました
  • トリガーには、プッシュやプルリクエストなどを指定するほかに、schedule: を使ってcronが使えるのは便利です

こんな人が書いてます

普段はPower Platformの管理者をしていて、Qiitaには主にPower AutomateのTipsのようなものを書いてます。ブログも書いているのでよろしかったらご覧ください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?