どうも。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」の略である、とされています。
なぜマークアップ言語ではないのか?
「マークアップ言語」とは、テキスト文書の中にタグや注釈を挿入し、文書の構造(例:見出しや段落)、スタイル、リンクなどを指定するための言語です。こちらが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: trueYAMLの主な用途は、設定ファイル(例: 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の基本ルールは以下の通りです。
- インデントで階層を表現する
- スペース2つまたは4つでネスト(階層)を表します。タブは使いません。
- キーと値はコロン(:)で区切る
- 例:
name: "田中太郎"
- 例:
- リスト(配列)はハイフン(-)もしくはインライン形式(9.に記述)で表す
- 例:
skills: - Python - JavaScript
- 例:
- ネストしたオブジェクトは、インデントで階層化する
- – 例:
address: city: "東京" prefecture: "東京都"
- – 例:
- コメントは # で記述する
- 例:
# これはコメントです
- 例:
- 文字列はダブルクォート/シングルクォートで囲んでも囲まなくてもOK
- ただし、特殊文字や改行を含む場合はクォートで囲みます。
- 複数行の文字列は | または > を使う
|は改行を保持、>は改行をスペースに変換します。
- null値は
nullまたは何も書かない- 例:
middle_name: nullまたはmiddle_name:
- 例:
- 真偽値は true/false(小文字)で記述
- 例:
active: true
- 例:
- インライン形式(配列やオブジェクトやリスト)も使える
- 例:
company: { name: "株式会社ABC", founded: 2020 } - 例:
skills: ["Python", "JavaScript", "SQL"]
- 例:
- 日付や数値もそのまま記述できる
- 例:
created_at: 2024-01-15,price: 99.99
- 例:
- 拡張子は .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:00ZGitHubActionsで初めてのYAML体験
GitHub Actions(ぎっとはぶあくしょんず)とは、「『ファイルが更新されたら』というスイッチが入ると、自動的に『テストする』『ウェブサイトに反映する』といった作業を行ってくれる自動化装置」 です。
無料で2,000分/月まで使えるので、ノンプログラマーでも安心です。
用語解説
その自動化装置について、まず覚えておきたい単語がいくつかあります。
ワークフロー (Workflow)
自動化したい作業全体の「レシピ」。.github/workflows/ に置く .yml ファイルのことです。
イベント (Event)
ワークフローを起動する「きっかけ」。「トリガー」のようなもの。例: push, pull_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の応用編と、実践編を深堀していきます。お楽しみに。


