GitHub Actions でリストを含む JSON ファイルを作成する

GitHub Actions でリストを含む JSON ファイルを作成する

2024.07.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、製造ビジネステクノロジー部の若槻です。

今回は、GitHub Actions でリストを含む JSON ファイルを作成する処理を実装する機会があったので、使用したスクリプトおよび試行錯誤内容を共有します。

確認してみた

はじめに結論

結論としては、次のようなスクリプトでリストを含む JSON ファイルを作成できました。

配列が含まれる JSON ファイルを新規作成する場合

配列が含まれる JSON ファイルを jq コマンドを使って新規作成する場合は、以下のようなスクリプトになります。

# orgs フィールドに配列が含まれる JSON ファイルを新規作成
echo -e '{"orgs": ["組織A", "組織B"]}' | jq > sample1.json

次のような JSON ファイルが作成されます。

cat sample1.json
{
  "orgs": [
    "組織A",
    "組織B"
  ]
}

既存の JSON ファイルに配列を含むフィールドを追加する場合

配列を含むフィールドを既存の JSON ファイルに jq コマンドを使って追加する場合は、以下のようなスクリプトになります。

# user フィールドが追加された既存の JSON ファイルに orgs フィールドを追加
jq --raw-output '{"user": .user, "orgs": ["組織C", "組織D"]}' sample2.json > tmp.json
mv tmp.json sample2.json

次のような JSON ファイルが作成されます。

cat sample
{
  "user": "hoge",
  "orgs": [
    "組織C",
    "組織D"
  ]
}

GitHub Actions で動作確認

先ほどのコマンドを GitHub Actions ワークフロー上で使用して動作確認してみます。

.github/workflows/manual-test.yml
name: Add JSON file test

on: workflow_dispatch

jobs:
  create_json:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      # sample1: 配列を含む新規の JSON ファイルを新規作成
      - name: Create sample1.json
        run: |
          echo -e '{"orgs": ["組織A", "組織B"]}' | jq > sample1.json

      # sample1: 作成した JSON ファイルを確認
      - name: sample1.json output
        run: cat sample1.json

      # sample2: 既存のフィールドを持つ JSON ファイルを作成
      - name: Create sample2.json
        run: |
          echo -e '{ "user": "hoge" }' | jq > sample2.json

      # sample2: 既存の JSON ファイルの orgs フィールドを配列で更新
      - name: Update orgs sample2.json
        run: |
          jq --raw-output '{"user": .user, "orgs": ["組織C", "組織D"]}' sample2.json > tmp.json
          mv tmp.json sample2.json

      # sample2: 作成した JSON ファイルを確認
      - name: sample2.json output
        run: cat sample2.json

期待通りに JSON ファイルが作成されました。良さそうですね。

試行錯誤

jossef/action-set-json-field アクションを使った場合、配列が文字列として出力される

jossef/action-set-json-field アクションを使うと、GitHub Actions で JSON ファイルへのフィールドの更新を簡単な記述で実装することができます。

https://github.com/jossef/action-set-json-field

当初はこのアクションを下記のように使おうとしました。

# 中略
- name: Update orgs config.json
  uses: jossef/action-set-json-field@v2.2
  with:
    file: sample.json
    field: orgs
    value: '["組織A","組織B"]'

しかし次のように配列が文字列として出力されてしまいました。

sample.json
{
  "orgs": "[\"組織A\",\"組織B\"]"
}

このように jossef/action-set-json-field アクションではフィールドの値によっては対応できない場合があるので注意が必要です。

--raw-output オプションを使わない場合、配列が文字列として出力される

jq コマンドの --raw-output オプションは -r とも記載でき、jq による変換結果を RAW 出力させることができ、冒頭のスクリプトでも使用しています。

https://jqlang.github.io/jq/manual/

よって --raw-output オプションを使わない場合は、前項の試行錯誤と同様に、次のように配列が文字列として出力されてしまいます。

{
  "orgs": "[\"組織A\",\"組織B\"]"
}

オプションの付け忘れが無いように注意しましょう。

おわりに

GitHub Actions ででリストを含む JSON ファイルを作成する処理を実装する機会があったので、使用したスクリプトおよび試行錯誤内容を共有します。

GitHub で何らかのコンフィグファイルを管理するために JSON ファイルの作成や更新を GitHub Actions で効率化したい場面は多いと思うので、そのような場合に参考にしてみてください。

以上

この記事をシェアする

関連記事