[ハンズオン]はじめてのYAMLでGitHub Actionsを動かしてみよう!

YAMLファイルGitHub

どうも。Kenny(https://twitter.com/tsujikenzo)です。まだ生きてます。AIの進化が止まらないです。  今日は単発で「[ハンズオン]はじめてのYAMLでGitHub Actionsを動かしてみよう!」 をお送りします。

このブログは、以下の方を対象としております。

  • GitHubを使ったことがある(初級)
  • GASやJavaScriptなどのプログラミングをしたことがある(初級)
  • JSONという単語を聞いたことがある

はじめに

これから、GitHubにあるGitHubActionsという機能を使って、さまざまなプログラミングの自動化を行っていきます。

と、その前に、GitHubActionsで使われる、YAMLファイルについて、説明したいと思います。

YAMLとは?

YAML(ヤムル)は、Yet Another Markup Languageの略で、直訳すると「もう一つのマークアップ言語」という名前が付けられて、開発されてきた言語です。

これは、既存のマークアップ言語(例: XMLやHTML)の「もう一つ」という意味で、データ構造を表現するための、軽量な言語を目指していました。

しかし、開発が進む中で、YAMLはドキュメントのマークアップ(テキストにタグを追加して構造やスタイルを定義する)ではなく、純粋なデータシリアライズ(データを構造化して保存・交換する形式)に特化した方がいい、ということになりました。

これを受けて、今ではYAMLのことを、「YAML Ain’t Markup Language(YAMLはマークアップ言語ではない)」の略、と呼んだりします。(なんだか再帰的な感じですが)

YAMLの公式WEBサイトにも、YAMLは「YAML Ain’t Markup Language」の略である、とされています。

YAML Ain’t Markup Language (YAML™) revision 1.2.2

なぜマークアップ言語ではないのか?

「マークアップ言語」とは、テキスト文書の中にタグや注釈を挿入し、文書の構造(例:見出しや段落)、スタイル、リンクなどを指定するための言語です。こちらがHTMLの例です。

<!DOCTYPE html>
<html>
<head>
    <title>ページタイトル</title>
</head>
<body>
    <h1>タイトル</h1>
    <p>段落のテキスト</p>
    <a href="https://example.com">リンク</a>
    <img src="image.jpg" alt="画像">
</body>
</html>

一方で、YAMLは、「データシリアライズ言語」で、キーと値のペアリストネストされた構造をインデントベース(Pythonの記述方法と同じですね)で表現します。

name: "田中太郎"
age: 25
skills: ["Python", "JavaScript"]
address:
  city: "東京"
  prefecture: "東京都"
active: true

YAMLの主な用途は、設定ファイル(例: Docker Compose, GitHub Actions)で、データ交換や、設定の構成を管理します。YAMLは、ドキュメントのマークアップを目的とせずツリー構造のデータのみを扱うため、マークアップ言語ではない、ということです。

JSONとの違い

似たようなデータシリアライズ言語に、JSON(ジェイソン)があります。JSONは「JavaScript Object Notation」の略で、データをキーと値のペアで表現する軽量なデータ交換フォーマットです。

人間にも読みやすく、プログラムでも扱いやすい形式のため、Web APIや設定ファイルなどで広く利用されています。YAMLと同様にツリー構造のデータを表現できますが、YAMLよりも記述が厳格で、波括弧やカンマなどの記号を使います。

{
  "name": "田中太郎",
  "age": 25,
  "skills": ["Python", "JavaScript"],
  "address": {
    "city": "東京",
    "prefecture": "東京都"
  },
  "active": true,
  "salary": null
}

YAMLの基本ルール

YAMLの基本ルールは以下の通りです。

  1. インデントで階層を表現する
    • スペース2つまたは4つでネスト(階層)を表します。タブは使いません。
  2. キーと値はコロン(:)で区切る
    • 例: name: "田中太郎"
  3. リスト(配列)はハイフン(-)もしくはインライン形式(9.に記述)で表す
    • 例:skills: - Python - JavaScript
  4. ネストしたオブジェクトは、インデントで階層化する
    • – 例:address: city: "東京" prefecture: "東京都"
  5. コメントは # で記述する
    • 例: # これはコメントです
  6. 文字列はダブルクォート/シングルクォートで囲んでも囲まなくてもOK
    • ただし、特殊文字や改行を含む場合はクォートで囲みます。
  7. 複数行の文字列は | または > を使う
    • | は改行を保持、> は改行をスペースに変換します。
  8. null値は null または何も書かない
    • 例: middle_name: null または middle_name:
  9. 真偽値は true/false(小文字)で記述
    • 例: active: true
  10. インライン形式(配列やオブジェクトやリスト)も使える
    • 例: company: { name: "株式会社ABC", founded: 2020 }
    • 例: skills: ["Python", "JavaScript", "SQL"]
  11. 日付や数値もそのまま記述できる
    • 例: created_at: 2024-01-15price: 99.99
  12. 拡張子は .yml または、 .yaml
    • 例: auto-pullrequest.yml

これらのルールを守ることで、YAMLファイルを正しく記述できます。

# コメントの例
name: "田中太郎"
age: 25
is_student: false
skills: ["Python", "JavaScript", "SQL"]

# ネストしたオブジェクト
address:
  city: "東京"
  postal_code: "100-0001"
  prefecture: "東京都"

# 配列
favorite_colors:
  - "青"
  - "緑"
  - "赤"

# 複数行の文字列
description: |
  これは複数行の
  文字列の例です。
  改行が保持されます。

# インライン形式
company: { name: "株式会社ABC", founded: 2020 }

# 真偽値
active: true
verified: false

# null値
middle_name: null

# 数値
price: 99.99
quantity: 10

# 日付
created_at: 2024-01-15
updated_at: 2024-01-15T10:30:00Z

GitHubActionsで初めてのYAML体験

GitHub Actions(ぎっとはぶあくしょんず)とは、「『ファイルが更新されたら』というスイッチが入ると、自動的に『テストする』『ウェブサイトに反映する』といった作業を行ってくれる自動化装置」 です。

無料で2,000分/月まで使えるので、ノンプログラマーでも安心です。

用語解説

その自動化装置について、まず覚えておきたい単語がいくつかあります。

ワークフロー (Workflow)

自動化したい作業全体の「レシピ」。.github/workflows/ に置く .yml ファイルのことです。

イベント (Event)

ワークフローを起動する「きっかけ」。「トリガー」のようなもの。例: pushpull_request など

ジョブ (Job) & ステップ (Step)

ワークフローに書かれた具体的な「手順」。ジョブは大きな作業単位、ステップはその中の細かい処理です。

実行ログ (run log)

指示された作業を「いつ、どのように行い、結果どうだったか」を記録してくれる作業日報のようなもの。git logで見るようなコードの変更履歴(コミット)とは別の場所に記録され、リポジトリの「Actions」タブから確認できます。

図にするとこんなかんじです。

今回は、「PUSHされたら、実行ログにメッセージを出力する」という、かんたんなYAMLファイルを書いてみましょう。

ステップ1: ワークフローファイルを作成する

まず、新規リモートリポジトリを作成し、README.mdファイルを作成します。 

Add fileから、+ Create new fileをクリックします。 

ファイル名に .github/workflows/greeting.ymlと入力します。 

ステップ2: ymlファイルに指示を書いて保存する

greeting.yml に以下の内容を記述して、保存(Commit changes)します。

# ワークフローの名前
name: はじめての自動化

# ワークフローが動き出す「きっかけ」
on:
  push:

# 実行される「作業」
jobs:
  # 作業の塊に名前を付ける
  show-message:
    # 作業する場所を指定(おまじないでOK)
    runs-on: ubuntu-latest

    # 具体的な「手順」
    steps:
      # 手順に名前を付ける
      - name: "メッセージをログに出力します"
        # 実際に実行するコマンド
        run: echo "ファイルがPUSHされました!"

ステップ3: ワークフローを動かす

では、実際にワークフローを動かしてみます。「きっかけ」はファイルのPUSH(ここではファイルの保存を意味します)でしたね。

まずは、README.mdファイルに少し変更を加えて、保存(Commit changes)します。 

ここは、特に何も書かなくてOKです。

ホームに戻ると、README.mdが更新されていることが分かります。 

Actionsをクリックします。ワークフローが実行した履歴が表示されています。 

ワークフローの中には、ymlファイルで設定したJobsが表示されています。 

Jobをクリックすると、実行されたstepsが表示されています。それぞれトグルになっていますので、クリックすると展開されます。 

「ファイルがPUSHされました!」というメッセージが出力されましたね。大成功です。

まとめ

以上で、「[ハンズオン]はじめてのYAMLでGitHub Actionsを動かしてみよう!」をお届けしました。

まだ、「実行ログにメッセージを出力したからってなに?」という状態だと思います。

しかし、これが強力な、あなたの業務自動化の武器(右腕)となるのです。

次回、YAMLの応用編と、実践編を深堀していきます。お楽しみに。

参考資料

このシリーズの目次

タイトルとURLをコピーしました