Workflow 構文の基礎

LinuxBeginner
オンラインで実践に進む

はじめに

GitHub Actions は、GitHub に組み込まれたワークフロー自動化システムです。push、プルリクエスト、手動トリガーなどのリポジトリイベントに反応し、定義済みのジョブを自動的に実行します。

この自動化によって、コードのテスト、成果物のビルド、アプリケーションのデプロイなど、さまざまな DevOps タスクを実行できます。この一連の指示を ワークフロー と呼びます。

より広い意味では、ワークフローはパイプラインの定義です。リポジトリのイベントを再現可能な自動化に変換するため、毎回同じ手順を人が正しく覚えて実行する必要がありません。

この実験では、このロボットのために最初の指示書(ワークフロー)を作成します。すべてのワークフローを構成する、次の 4 つの基本要素を学びます。

  • トリガー:ロボットはいつ起動するか(例:コードを push したとき)。
  • ジョブ:ロボットはどのような主要タスクを実行するか。
  • ランナー:ロボットはどのコンピューターで作業するか。
  • ステップ:ロボットはどの具体的なコマンドを実行するか。

この実験を終えると、コードを更新するたびに挨拶を自動表示する、動作するパイプラインが完成します。

前提条件

GitHub Actions が重要なのは、現代のソフトウェア開発では、手動のクリック操作や手順の記憶ではなく、再現可能な自動化が求められているためです。

リポジトリを作成する

GitHub Actions を使い始めるには、まず GitHub 上にプロジェクトが必要です。このモジュール用に新しいリポジトリを作成します。このリポジトリは複数の実験で使用するため、命名規則に注意して作成してください。

Web ブラウザを開き、GitHub にログインします。GitHub の任意のページの右上にある + アイコンをクリックし、New repository を選択します。

「Repository name」フィールドに github-actions-basics と入力します。リポジトリを Public にすると、無料で簡単に使用できます。Add a README file チェックボックスをオンにして、ファイルを追加した状態でリポジトリを初期化します。最後に、Create repository ボタンをクリックします。

Create a new repository

プロジェクトがクラウド(GitHub)上に作成されたので、作業できるように、この環境へプロジェクトのコピーを取得します。この処理を clone と呼びます。

下のターミナルで、git clone コマンドを使用します。your-username は実際の GitHub ユーザー名に置き換えてください。

cd ~/project
git clone https://github.com/your-username/github-actions-basics.git

clone が完了すると、github-actions-basics という新しいフォルダーが表示されます。作業を始めるため、このディレクトリへ移動します。

cd ~/project/github-actions-basics

GitHub Actions には、指示書を置く場所に関する厳密なルールがあります。GitHub Actions は、.github という特定の隠しフォルダーの中にある workflows サブフォルダーだけを確認します。ワークフローファイルを別の場所に置くと、ロボットアシスタントはそのファイルを無視します。

必要なディレクトリ構造を作成します。-p オプションを指定すると、存在しない場合に親ディレクトリと子ディレクトリを一度に作成できます。

mkdir -p .github/workflows

次に、新しく作成したフォルダー内に main.yml という空のファイルを作成します。このファイルに指示を書き込みます。

touch .github/workflows/main.yml

ファイルを再帰的に一覧表示して、設定が正しいことを確認できます。.github フォルダーの中に workflows があり、その中に main.yml が表示されるはずです。

ls -R .github

トリガーを定義する

ワークフローファイルは YAML で記述します。YAML は、アウトラインでインデントを使って情報を整理するのと同じように、スペースによるインデントで情報を整理するシンプルなテキスト形式です。

すべてのワークフローには、名前とトリガーが必要です。トリガーは、ロボットが いつ 作業を開始するかを指定します。トリガーがなければ、ワークフローは実行されません。ここでは、リポジトリに新しいコードを push するたびにロボットを起動します。

このイベント駆動モデルは、CI/CD システムの主要な考え方の 1 つです。パイプラインは、誰かが手動でスクリプトを実行するのを待つのではなく、ソフトウェアのライフサイクルにおける変更に反応します。

空の main.yml ファイルを、テキストエディター nano で開きます。

nano .github/workflows/main.yml

次の内容をファイルに入力します。

name: First Workflow
on: push

name キーワードは、GitHub に表示されるワークフローのラベルを指定します。on: push の行が重要な指示です。これは「push イベントが発生したら、これを実行する」という意味です。

Ctrl+X、Y、Enter の順に押して変更を保存し、エディターを終了します。

ジョブとランナーを定義する

ロボットが いつ 起動するかを指定できたので、次は どこで 作業するかを指定します。これを ジョブ と ランナー の定義と呼びます。

ジョブ は、タスクをまとめたものです。「コードをテストする」や「アプリをデプロイする」など、複数のジョブを定義できますが、ここでは 1 つだけ作成します。

ランナー は、ジョブを実行するために GitHub が提供するサーバーです。ロボットアシスタントが作業するコンピューターだと考えてください。ここでは ubuntu-latest を使用します。これは、GitHub が最新バージョンの Ubuntu Linux を実行する新しいコンピューターを用意することを意味します。

新しいランナーを使うことは重要です。ワークフローのジョブは再現可能である必要があるためです。各実行は、以前の手動設定の残りに依存せず、クリーンな環境から開始します。

もう一度 main.yml ファイルを開きます。

nano .github/workflows/main.yml

ファイルの末尾に次の行を追加します。スペース に十分注意してください。YAML ではインデントが重要です。first-job は 2 個のスペース、runs-on は 4 個のスペースでインデントします。

jobs:
  first-job:
    runs-on: ubuntu-latest

これで、ファイル全体は次のブロックのようになります。構造が完全に一致していることを確認してください。

name: First Workflow
on: push

jobs:
  first-job:
    runs-on: ubuntu-latest

エディターで保存して終了します(Ctrl+X、Y、Enter)。

ステップを追加して push する

これで「いつ」(push 時)と「どこで」(ubuntu-latest)を指定できました。次は最も重要な「何を」を定義します。これは ステップ セクションで指定します。

ステップは、ロボットが実際に実行するコマンドです。この最初の実験では、ロボットに挨拶を表示させます。run キーワードを使って、標準的な Linux コマンドを実行します。

最後にもう一度 main.yml を開きます。

nano .github/workflows/main.yml

first-job の下に steps セクションを追加します。steps: が runs-on: と縦にそろうようにしてください。

steps:
  - name: Print greeting
    run: echo "Hello World from LabEx"

ハイフン - はリスト項目を示します。ここでは、このジョブのステップを列挙しています。

最終的なファイルは、次の内容と完全に一致する必要があります。

name: First Workflow
on: push

jobs:
  first-job:
    runs-on: ubuntu-latest
    steps:
      - name: Print greeting
        run: echo "Hello World from LabEx"

ファイルを保存してエディターを終了します。

指示書が完成したので、GitHub に送信します。ロボットが確認するのはローカルコンピューター上のコードではなく、GitHub 上にあるコードです。

標準的な Git コマンドを実行して、変更を保存してアップロードします。

git add .
git commit -m "Add my first workflow"
git push

システムから GitHub のユーザー名とパスワードを求められます。

重要:パスワード認証のサポートが廃止されたというエラーが表示された場合は、アカウントのパスワードではなく Personal Access Token(PAT) を使用する必要があります。PAT は、GitHub の Settings -> Developer settings -> Personal access tokens から生成できます。「Tokens (classic)」を選択し、repo スコープを付けて新しいトークンを生成します。パスワードを求められたら、ターミナルにそのトークンを貼り付けてください。

GitHub Token

push が成功したら、ブラウザに戻ります。リポジトリのページを開き、上部にある Actions タブを探します。

「First Workflow」という名前のワークフロー一覧が表示されるはずです。黄色の回転する円(実行中)または緑色のチェックマーク(成功)が表示されることがあります。ワークフローをクリックし、続いて first-job をクリックして詳細を表示します。「Print greeting」ステップを展開すると、ログに「Hello World from LabEx」と表示されていることを確認できます。

First Workflow

まとめ

おめでとうございます。最初の GitHub Actions ワークフローを作成し、実行できました。

この実験では、ワークフローファイルを構成する 4 つの基本要素を学びました。

  • トリガー(on):アクションをいつ開始するかを指定します。
  • ジョブ:タスクをまとめます。
  • ランナー(runs-on):サーバー環境を指定します。
  • ステップ:実行する実際のコマンドを定義します。

これで、リポジトリを監視する「ロボットアシスタント」が動作しています。次の実験では、このアシスタントにコードの自動テストなど、さらに便利な作業を実行させます。