
GitHub ActionsでHello, World!を出力してみた
こんにちは!製造ビジネステクノロジー部の小林です。
エンジニア1年目の時にCI/CDという概念を知り、「なんかかっこいい!」と感じたのを今でも覚えています。
これまでの業務では、Jenkins、AWS CodePipeline、GitHub ActionsなどのCI/CDツールを使ってきましたが、最近は主にGitHub Actionsを中心に使用しています。
今回は、GitHub Actionsの基礎を深く理解するために、ワークフローの基本概念を確認しながら、シンプルに「Hello, World」を出力する基本的なワークフローを作成してみました!
GitHub Actions とは
GitHub ActionsはGitHubが提供する汎用的なワークフローエンジンです。GitHubの各機能と連携できます。
GitHub Actions を使うと、リポジトリ内でのイベント(プッシュ、プルリクエストなど)をトリガーにして自動的にワークフローを実行できます。
ワークフローとは
コードのプッシュやプルリクエストなどの特定のイベントをきっかけに、自動的に実行される一連の処理手順を指します。処理の中では下記のようなことを実行したりします。
- コード品質チェック(スペルミス、型定義、フォーマット)
- コードのビルドとテスト(単体テスト、結合テスト)
- デプロイ(本番環境や開発環境への自動リリース)
- 通知の送信(Slack、メールなどへの自動通知)
ワークフローファイルとは
GitHub Actionsをはじめるには、YAMLファイルをリポジトリに追加します。このYAMLファイルをワークフローファイルと呼びます。ワークフローファイルには下記のような規約があります。
- ファイルの拡張子は、「.yml」または「.yaml」
- YAMLファイルは「.github/workflows」ディレクトリ直下に配置する
- ファイル名は任意で指定できる
Hello, World!を出力するワークフローファイルを作成してみる
GitHub Actionsが実行された時のワークフロー実行ログに、Hello, World!を出力するワークフローファイルを作成してみました。
リポジトリのルートに「.github/workflows」ディレクトリを作成し、その中に「hello-world.yml」というファイル名でワークフローファイルを保存します。
# ワークフローの名前を定義する。GitHub Actionsタブでこの名前が表示される
name: Hello World
# ワークフローのトリガーとなるイベントを指定する
on:
# すべてのブランチへのプッシュ時に実行
push:
# GitHub上から手動で実行する
workflow_dispatch:
# 実行するジョブを定義
jobs:
# ジョブ名を定義(任意の名前を付けられる)
say-hello:
# ジョブを実行する仮想環境を指定する
runs-on: ubuntu-latest
# ジョブ内で実行する一連のステップを定義する
steps:
# リポジトリのコードをチェックアウトするアクション
- name: Checkout code
uses: actions/checkout@v3
# シェルコマンドを実行するステップ(ここでHello, World!を出力する)
- name: Hello
run: echo "Hello, World!"
このワークフローは、コードのプッシュまたは手動実行時に起動し、「Hello, World!」というメッセージを出力します。
GitHub Actionsの構成要素
イベント
イベントは、ワークフローの実行をトリガーする起点です。
on:
push:
workflow_dispatch:
下記のように、複数のイベントを指定することもできます。
- push: コードがリポジトリにプッシュされたとき
- pull_request: プルリクエストが作成、更新されたとき
- workflow_dispatch: 手動でワークフローを実行するとき
- schedule: 定期的にワークフローを実行するとき(cron式で指定)
上記のワークフローでは、push、workflow_dispatchの2つのイベントをトリガーとして設定しています。
ジョブ
ジョブは、ワークフローの実行単位です。複数のジョブを定義することができ、各ジョブを区別できるようにIDを指定します。
jobs:
say-hello:
上記のワークフローでは、say-helloという名前の1つのジョブを定義しています。また、ジョブID単位でランナーを指定します。
ランナー
ランナーは、ワークフローのジョブを実行する環境です。
runs-on: ubuntu-latest
GitHub Actionsでは以下のような様々な環境を指定でき、runs-onキーへ記述します。
- ubuntu-latest: 最新のUbuntu環境
- windows-latest: 最新のWindows環境
- macos-latest: 最新のmacOS環境
上記のワークフローでは、ubuntu-latestを指定しています。
ステップ
ステップは、ワークフローにおける処理の最小単位です。
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Hello
run: echo "Hello, World!"
ステップは複数定義でき、シェルコマンドとアクションを使用できます。上記のワークフローでは、2つのステップがあります。
- Checkout code: リポジトリのコードをチェックアウトするアクション
- Hello: "Hello, World!"というメッセージを出力するシェルコマンド
usesキー
usesキーではアクションを呼び出します。アクションはGitHub Actionsにおけるモジュールの一種で、パラメーターを指定することもできます。
uses: actions/checkout@v3
上記のワークフローでは、actions/checkout@v3(リポジトリのコードをGitHub Actionsランナー(実行環境)にクローンする)アクションを呼び出しています。これは、ワークフロー内の後続のステップがリポジトリのファイルにアクセスできるようにするために必要なアクションです。
runキー
runキーではシェルコマンドを実行できます。
run: echo "Hello, World!"
上記のワークフローではHello, World!を出力しています。
動作確認
作成したワークフローファイルを実際に実行してみましょう。
今回は下記の2通りの動作確認をしてみます。
- リポジトリへのコードのプッシュ
- GitHubコンソールからの手動実行
1. リポジトリへのコードのプッシュ時
コードをプッシュすると、自動的にワークフローが起動します。
touch test.ts
git add .
git commit -m 'テストファイル作成'
git push origin main
GitHubリポジトリの「Actions」タブを開くと、実行中または完了したワークフローが表示されます。ワークフロー名をクリックすると、実行ログで「Hello, World!」の出力を確認できます。
ワークフローファイルで定義したジョブ「say-hello」が実行され、その中のステップ(コードのチェックアウトや「Hello」ステップなど)がすべて正常に完了したことを示しています。
ワークフロー実行ログにHello, World!が出力されていることを確認できました!
2. GitHubコンソールから手動実行
- GitHubリポジトリの「Actions」タブに移動
- 左側のサイドバーから「Hello World Workflow」を選択します
- 「Run workflow」ボタンをクリックします
- mainブランチを選択し、「Run workflow」を押すと手動でワークフローが実行されます。
実行結果のログで「Hello, World!」の出力を確認できます。
おわりに
今回はGitHub Actionsを実行して、ワークフローファイル実行ログにHello, World!を出力してみました。
GitHub Actionsの核となる概念である「イベント」「ジョブ」「ランナー」「ステップ」について理解を深めることができました!この記事が、GitHub Actionsの学習を始めた方の参考となれば幸いです。