Dasel v3 を使用したデータ変換
<when_to_use>
以下の場合にこのスキルを有効にします:
- 設定ファイル(YAML、TOML、JSON、XML、HCL、INI)の値を変更する場合
- データ形式間の変換(JSONからYAML、TOMLからJSONなど)を行う場合
- 配列要素(価格、バージョン、フラグなど)をバッチ更新する場合
- データ構造の追加、削除、再形成を行う場合
- オブジェクトのマージや既存データからの新しい構造の構築を行う場合
</when_to_use>
安全ルール
出力を同じ入力ファイルにリダイレクトしないでください。 これにより、dasel がファイルを読み取る前にファイルが切り詰められ、データが失われます:
# 誤り — 入力を破壊
cat config.yaml | dasel -i yaml --root 'port = 9090' > config.yaml
# 正しい — 一時ファイルに書き込み、その後名前変更
cat config.yaml | dasel -i yaml --root 'port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
上書きする前に必ず確認してください。 最初に変換出力をプレビューし、その後リダイレクトします:
# プレビュー
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# 適用
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
コア修正構文
Dasel v3 では、put および delete サブコマンドは存在しません。すべての変更は、--root を使用した代入式で行われ、完全なドキュメントが出力されます。
値の設定
# 1つのフィールドを変更して完全なドキュメントを出力
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# 数値、真偽値、文字列の代入
echo '{"count": 1}' | dasel -i json --root 'count = 42'
echo '{"enabled": false}' | dasel -i json --root 'enabled = true'
echo '{"name": "old"}' | dasel -i json --root 'name = "new"'
ネストされた値の設定
cat config.yaml | dasel -i yaml --root 'database.connection.host = "db.example.com"'
cat config.yaml | dasel -i yaml --root 'database.connection.port = 5432'
インプレース変更(安全なパターン)
# 単一フィールドの更新
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml
# 複数フィールド — セミコロンで連鎖
cat config.yaml | dasel -i yaml --root 'server.port = 9090; server.host = "0.0.0.0"' > config_tmp.yaml && mv config_tmp.yaml config.yaml
フォーマット変換
異なる入出力形式フラグを指定して dasel にパイプします:
# JSONからYAMLへ
cat data.json | dasel -i json -o yaml > data.yaml
# YAMLからTOMLへ
cat config.yaml | dasel -i yaml -o toml > config.toml
# JSONからXMLへ
cat data.json | dasel -i json -o xml > data.xml
# TOMLからJSONへ
cat config.toml | dasel -i toml -o json > config.json
# CSVからJSONへ
cat data.csv | dasel -i csv -o json > data.json
配列操作
配列への追加
# 配列の末尾に要素を追加
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# 出力: [1, 2, 3, 4]
# 配列にオブジェクトを追加
cat data.json | dasel -i json --root 'items = [$root.items..., {"name": "new", "value": 42}]'
each によるバッチ更新
# すべての価格を1.1倍にする(10%増加)
cat data.json | dasel -i json --root 'items.each(price = price * 1.1)'
# すべての要素にフラグを設定
cat data.json | dasel -i json --root 'users.each(active = true)'
# すべての値をインクリメント
echo '[1,2,3]' | dasel -i json --root 'each($this = $this + 1)'
フィルター後の変換
# アクティブなユーザーのみを取得し、名前を抽出
cat data.json | dasel -i json 'users.filter(active == true).map(name)'
オブジェクト操作
スプレッドによるマージ
# 既存のオブジェクトに新しいキーを追加
cat base.json | dasel -i json --root '{ $root..., "newKey": "value" }'
# 2つのオブジェクトをマージ
cat base.json | dasel -i json --root '{ $root..., "extra": true, "version": 2 }'
再構築によるフィールド削除
v3 には delete コマンドがないため、必要なキーのみを含む新しいオブジェクトを構築してフィールドを削除します:
# "name" と "email" のみを保持し、それ以外は削除
echo '{"name":"a","email":"b","password":"c"}' | dasel -i json --root '{ name, email }'
再構築によるフィールド名変更
echo '{"old_name": "value"}' | dasel -i json --root '{ "new_name": old_name }'
複数ステップの変換
複雑な操作には変数代入とセミコロンを使用します:
# 中間結果を変数に格納し、変換を実行
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
# 複数の変数
cat data.json | dasel -i json '$a = items.filter(price > 100); $b = $a.map(name); $b'
条件付き変換
# 条件に基づいて値を設定
cat data.json | dasel -i json --root 'if(count > 5) { status = "many" } else { status = "few" }'
変換パターン
詳細なユースケース別変換パターン(設定更新、バッチ処理、フォーマット移行、データ再形成、エラーハンドリング)については、変換パターン を参照してください。
リファレンス
- Dasel v3 ドキュメント(2026-02-19 取得)
- Dasel スプレッド演算子(2026-02-19 取得)
- Dasel each() 関数(2026-02-19 取得)
- Dasel filter() 関数(2026-02-19 取得)
- Dasel CHANGELOG(2026-02-19 取得)