🔍

【GitHub Actions】PRが来たら自動でJSONスキーマを検証する

2022/07/22に公開

JSONファイルを管理するレポジトリのために、Pull Requestが来たらそのJSONファイルの構造があらかじめ規定したスキーマに一致しているかどうか検証(validate)する仕組みを用意してみます。

JSONスキーマを生成する

1から手書きすると大変なので、便利なツールに頼っていきます。

今回はquicktypeというサイトを使用しました。

左側の黒い画面に手元のJSONファイルの内容をコピーすると、それを元にいい感じのスキーマを自動生成してくれます。

右上のチェックボックスでJSON Schemaを選ぶ必要があるので注意してください。

作成したスキーマはschema.jsonとしてディレクトリに置いておきます。

Ajvのインストール

スキーマを検証するライブラリであるAjvのCLI版、ajv-cliを使います。

https://github.com/ajv-validator/ajv-cli

npm install ajv-cli

スクリプトの作成

package.jsonvalidateスクリプトを追加しておきます。

package.json
"scripts": {
    "validate": "npx ajv validate -s schema.json -d target.json"
}

ローカルで実行

試しに実行してみましょう。

npm run validate

JSONスキーマに一致していない場合は、このようにエラーが表示されるはずです。
この場合は本来必要なキーがありませんというエラーが出ています。

target.json invalid
[
  {
    instancePath: '/0/items/0',
    schemaPath: '#/definitions/Item/required',
    keyword: 'required',
    params: { missingProperty: 'name' },
    message: "must have required property 'name'"
  }
]

アクションを作る

まず.github/workflow/validate.ymlを作成し、以下の内容に編集します。

mainブランチにPull Requestが来た時にトリガーが起動し、Ubuntu上でNode.jsをセットアップ、npm ciで依存関係をクリーンインストールし、Ajvを実行するという流れになっています。

name: JSON Validate

on:
  pull_request:
    branches: [ "main" ]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: JSON Validate
      uses: actions/setup-node@v3
      with:
        node-version: 16.x
        cache: 'npm'
    - run: npm ci
    - run: npm run validate

これをプッシュすると、問題なくアクションとして認識されています。

以上で完成です。

target.jsonに変更を加えてPRを出すと、自動でアクションが実行されるようになります。

参考文献

https://hossainkhan.medium.com/use-node-js-tools-on-github-actions-ci-workflow-120fb3b4a3e1

GitHubで編集を提案

Discussion