yqのバージョン依存での挙動の違いまとめ:yq-v3とyq-v4の違い

yq

yqとは

jsonをCLIで編集するツールとして「jq」が有名なのだけど、
そのyaml版が「yq」であり、実態は「jq」のラッパーとして提供されている。

yqを使う目的

近年はkubernetesとかCloudFormationのマニフェスト編集でyamlの操作が不可避であり、習得が迫られる。
しかしながらyamlは編集が面倒で手作業で入力するとエラーになりやすい。
そんな時にyqを使って編集すれば少なくともバリデーションエラーで事故ることは回避できる。

現状の課題(困ったこと)

これまでyq version3系を使っていたのだけどCopilotやChatGPTはyq version2あたりのサブコマンド山盛りで回答してくる。
yqのサブコマンドをググるとバージョン不明なサンプルだらけで参考にならない。Googleは本当に役に立たなくなった。
そして最新版のyqはversion4系なのだけど、yq-v2,yq-v3,yq-v4でそれぞれCLI引数にクセがある。そのyqのバージョン違いの挙動等を中心にブログに記しておく。

安定して動くyqを探す

yqは単なるjqのラッパーなのだけど、CLIの引数がバージョンによって異なる。

  • Debian/Ubuntu系OS標準のyq

    • Debian/Ubuntu系だとaptでインストール可能。
      sudo apt install yq
      

      バージョン表記はなぜか0.0.0

  • pip(python)でインストールするyq

    • OSに依存せずpipでインストール可能
      pip install yq
      

      Python3.10系での最新バージョンはv3.4.3

  • githubのyq

    • pipの最新版yqは本当の最新版ではなく、githubのrelease版がyqの最新で挙動もかなり違う。バージョンはv4.2.0
      ※公式インストール手順(バージョンは最新版にあわせて変更すること)

      VERSION=v4.2.0 and BINARY=yq_linux_amd64
      wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - |\
      tar xz && mv ${BINARY} /usr/bin/yq
      
  • golangのyq(yq-go)

    • go言語版のyq派生版でjqに依存せずに動くがgo言語に依存する。
      ※yq-goのインストール方法

      "go install github.com/mikefarah/yq/v4@latest"
      

      バージョンはv4.44.3でなぜか本家よりもバージョンが高い

※参考※

githubのyq
https://github.com/mikefarah/yq

v3系とv4系の違い

v3系の最小限のオプション

v3系はyamlを読み込むために-yオプションが必須。

yq -y '.nodename' filename.yaml

v4系の最小限のオプション

v4系はeval処理のeオプションが必須になり、-yオプションが不要になった。

yq e '.nodename' filename.yaml

v4系でyamlを編集

v4系はyamlをjsonへ変換してからjqで編集して、結果をyaml出力する。
jsonからyamlへの変換は-Pオプションになった。

yq e filename.yaml -j|jq '.nodename.mykey |="myvalue"'|yq e -P

yq-go(v4)を使う場合の注意点

概ねyq(v4)と同じオプションで動作するのだが、
yq-go(v4)には-jオプションが無く、-o json で代用する必要がある。
逆にyq(v4)には-oオプションがない。

yq e filename.yaml -o json|jq '.nodename.mykey |="myvalue"'|yq e -P

まとめ

yq version4系はyamlパーサーが安定しているのでv3から切り替えたメリットが大きい。これまではpipでyqをインストールしていたのでyq(v3)を信用していたのだが、少し手間でもyq(v4)を導入した方がよかった。
yamlを読み込んでjsonへ変換してしまえば、安定したjqで編集ができるのでバグることも少ない。

サムネイル

Copilot Image Createrで「yq」のキーワードで画像生成させたらサムネイルのような画像になったw

出典「Copilot Image Creater」
Bing
Bing のインテリジェント検索機能により、探しているものをより簡単にすばやく見つけられるようになり、リワードも得られます。