ToolDeck

CSV to YAML

CSV データを YAML オブジェクト配列に変換

サンプルを試す

CSV 入力

YAML 出力

ローカルで実行 · シークレットの貼り付けも安全
YAML 出力がここに表示されます…

CSVからYAMLへの変換とは?

CSVからYAMLへの変換は、カンマ区切りの表形式データをYAML(YAML Ain't Markup Language)形式に変換する処理です。CSVファイルの各行がYAMLシーケンスの1エントリになり、各列ヘッダーがYAMLマッピングのキーに対応します。出力はインデントベースの人間可読なドキュメントで、設定ツールやデータパイプラインが追加のスキーマファイルなしに直接解析できます。

YAMLは2001年に初めて提案され、現在の仕様(YAML 1.2)は2009年に確定しました。KubernetesマニフェストのデフォルトフォーマットであるほかDocker ComposeファイルやAnsibleプレイブック、GitHub Actionsワークフロー、多くのCI/CDシステムで標準の設定フォーマットとして採用されています。ソースデータがスプレッドシートやデータベースエクスポートに存在する場合、CSVをYAMLに変換することが、設定エントリ・シードデータフィクスチャ・これらのシステム向けテスト入力を生成する最速の方法です。

正確なCSV to YAMLコンバーターは、RFC 4180の解析ルール(カンマや改行を含むクォートフィールド、エスケープされたダブルクォート、さまざまな区切り文字)を処理しなければなりません。YAML側では、真偽値に見える文字列(yes、no、true、false)や数値、nullはYAMLパーサーが意図しない型に変換するのを防ぐためクォートする必要があります。また、YAML 1.2がデフォルトエンコーディングとしてUTF-8を必須とするため、コンバーターはUnicodeコンテンツを扱い、有効なUTF-8出力を生成する必要があります。

CSV to YAMLコンバーターを使う理由

スプレッドシートデータから手作業でYAMLを書くのは面倒でミスが起きやすい作業です。インデントのずれやクォートされていない特殊文字が1つあるだけで無効なYAMLになり、設定のデプロイやデータインポートが壊れます。このコンバーターはCSVフィールドを解析し、ヘッダーをキーにマッピングして、適切なインデントと正しいクォートのYAML出力を生成します。

ブラウザ上で即時変換
CSVデータを貼り付けるかアップロードするだけで、有効なYAML出力がすぐに得られます。CLIツールのインストール、ライブラリのインポート、ビルドステップは不要です。
🔒
データのプライバシーを守る
解析と変換はすべてJavaScriptを使ってブラウザ内で実行されます。CSVデータがマシンの外に出ることはなく、サーバーに送信されたり保存されたりログに記録されたりすることはありません。
🎯
正しくフォーマットされたYAMLを生成
出力は適切なインデントを使用し、真偽値や数値と誤解されうる文字列をクォートし、あらゆるリンターやスキーマバリデーターに通る有効なYAML 1.2を生成します。
📋
あらゆるCSV方言に対応
カンマ・セミコロン・タブ・パイプを区切り文字として自動検出します。RFC 4180のクォートルール(エスケープされたダブルクォート・複数行フィールド・BOM付きUTF-8ファイル)もサポートしています。

CSV to YAML変換のユースケース

KubernetesとDocker Composeの設定
設定値のスプレッドシートから環境変数ブロック・ConfigMapデータセクション・Docker Composeサービス定義を生成できます。YAML出力をマニフェストファイルに直接貼り付けて使用できます。
Ansibleプレイブックデータ
ホスト・ロール・変数のCSVインベントリをYAML形式の変数ファイル(group_vars、host_vars)に変換することで、Ansibleがカスタム解析プラグインなしにネイティブで読み込めます。
CI/CDパイプライン設定
ビルドマトリクスエントリ・環境変数・デプロイターゲットのスプレッドシートをGitHub Actions・GitLab CI・CircleCI用のYAML設定ブロックに変換できます。繰り返しのマトリクス定義を手作業で入力する必要がなくなります。
データベースシードフィクスチャ
Rails・DjangoなどのフレームワークはテストフィクスチャとシードデータにYAMLを使用します。CSVのデータベースエクスポートをYAMLフィクスチャファイルに変換することで、ORMがテストデータベースに直接ロードできます。
データパイプラインの変換
YAML入力を受け付けるETLパイプラインは、JSONの中間ステップなしに変換済みCSVデータを取り込めます。dbt・Dagster・PrefectはパイプラインのデプロイとYAML設定をネイティブで扱います。
YAML構文の学習
YAMLに不慣れな学生や開発者は、見慣れたCSVデータを貼り付けることで表の行がシーケンスとマッピングにどう変換されるかを確認できます。入力と出力を比較することでインデントのルール・キーと値の構文・型の扱いが明確になります。

CSV to YAMLマッピングリファレンス

CSVファイルの各構造要素はYAMLに対応する要素があります。

CSVの概念YAMLの対応要素詳細
CSV fileYAML documentThe entire file becomes a YAML sequence (array) of mappings
Header rowMapping keysEach column header becomes a key in every mapping entry
Data rowSequence item (- ...)Each row becomes one mapping item in the top-level array
Cell valueScalar valueStrings, numbers, and booleans are inferred by YAML parsers
Empty cellnull or empty stringRendered as null, ~, or an empty value depending on the tool
Comma delimiterIndentation + colonCSV delimiters are replaced by YAML key: value structure

CSVとYAMLの比較

CSVは型情報や階層構造を持たないフラットな区切り文字フォーマットです。YAMLはインデントでネストを表現し、複数のデータ型をサポートし、コメントも書けるJSONのスーパーセットです。どちらを選ぶかはダウンストリームのツールが何を期待するかによります。

CSV
プレーンテキストで1行1レコード。すべての値は文字列。階層・ネスト・コメントは不可。ファイルサイズは最小限。スプレッドシート・データベース・コマンドラインツールで広くサポートされています。RFC 4180で定義。列の順序と型について合意したシステム間の大量の表形式データ転送に最適です。
YAML
文字列・整数・浮動小数点数・真偽値・null・日付・シーケンス(配列)・マッピング(オブジェクト)をネイティブにサポートするインデントベースのフォーマット。#を使ったインラインコメントが可能。Kubernetes・Docker Compose・Ansible・GitHub ActionsおよびほとんどのモダンなDevOpsツールの主要設定フォーマット。YAML 1.2はJSONのスーパーセットのため、有効なJSONはすべて有効なYAMLでもあります。

コード例

Node.js・Python・Go・CLIツールでの実践的なコード例です。いずれもCSVのヘッダー行をYAMLキーとして読み込み、各データ行をシーケンスのエントリにマッピングし、型の曖昧な値のクォートを適切に処理します。

JavaScript (Node.js)
import { parse } from 'csv-parse/sync'
import { stringify } from 'yaml'

const csv = `name,age,city
Alice,30,Berlin
Bob,25,"New York"`

const records = parse(csv, { columns: true, skip_empty_lines: true })
console.log(stringify(records))
// → - name: Alice
// →   age: "30"
// →   city: Berlin
// → - name: Bob
// →   age: "25"
// →   city: New York

// Vanilla JS (no dependencies)
function csvToYaml(csv) {
  const [headerLine, ...dataLines] = csv.trim().split('\n')
  const headers = headerLine.split(',')
  return dataLines.map(line => {
    const values = line.split(',')
    return headers.map((h, i) => `  ${h}: ${values[i] || ''}`).join('\n')
  }).map(block => `- ${block.trimStart()}`).join('\n')
}
Python
import csv, io, yaml

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,New York"""

reader = csv.DictReader(io.StringIO(csv_string))
data = list(reader)

# default_flow_style=False produces block-style YAML
print(yaml.dump(data, default_flow_style=False, sort_keys=False))
# → - age: '30'
# →   city: Berlin
# →   name: Alice
# → - age: '25'
# →   city: New York
# →   name: Bob

# Preserve insertion order with sort_keys=False (Python 3.7+)
# To type-cast numbers: data = [{k: int(v) if v.isdigit() else v ...}]
Go
package main

import (
	"encoding/csv"
	"fmt"
	"gopkg.in/yaml.v3"
	"strings"
)

func main() {
	input := "name,age,city
Alice,30,Berlin
Bob,25,New York"
	r := csv.NewReader(strings.NewReader(input))
	records, _ := r.ReadAll()
	headers := records[0]

	var data []map[string]string
	for _, row := range records[1:] {
		entry := make(map[string]string)
		for i, h := range headers {
			entry[h] = row[i]
		}
		data = append(data, entry)
	}

	out, _ := yaml.Marshal(data)
	fmt.Println(string(out))
	// → - age: "30"
	// →   city: Berlin
	// →   name: Alice
	// → - age: "25"
	// →   city: New York
	// →   name: Bob
}
CLI (yq / Miller)
# Using yq (https://github.com/mikefarah/yq)
# yq reads CSV with --input-format=csv
yq --input-format=csv --output-format=yaml '.' data.csv

# Using Miller (mlr) — converts between CSV, JSON, YAML, and more
mlr --icsv --oyaml cat data.csv

# Python one-liner for quick conversion
python3 -c "
import csv, sys, yaml
data = list(csv.DictReader(sys.stdin))
print(yaml.dump(data, default_flow_style=False, sort_keys=False))
" < data.csv

よくある質問

CSVからYAMLへの変換はどのように行われますか?
コンバーターは最初の行を列ヘッダーとして読み込みます。以降の各行がYAMLマッピング(キーと値のオブジェクト)になり、すべてのマッピングがYAMLシーケンス(配列)に収められます。結果は各キーがヘッダーに由来し、各値がセルの内容に由来するオブジェクトのリストになります。
CSVに「true」「yes」「null」などの値がある場合はどうなりますか?
YAMLパーサーは裸のtrue・false・yes・no・nullを文字列ではなく型付き値として解釈します。コンバーターはこれらの値をクォートすることで出力でも文字列のまま保持します。たとえば「yes」を含むCSVセルはYAML出力では'"yes"'になり、設定ツールが真偽値として解釈するのを防ぎます。
YAMLをCSVに逆変換できますか?
YAMLがフラットなマッピングのシーケンス(スカラー値を持つオブジェクトの配列)である限り可能です。深くネストされたマップや混在した型を持つYAML構造はCSVの行として整然と表現できません。フラットな構造であれば、yq・Miller(mlr)・Pythonのyamlとcsvモジュールなどのツールで逆変換できます。
CSVからYAMLへの変換とCSVからJSONへの変換の違いは何ですか?
どちらもフラットなCSV入力から構造化データを生成します。JSONは厳格なクォートルールを持つ波括弧と角括弧を使います。YAMLはインデントとコロンを使い、コメントをサポートし、手作業での読み書きが容易です。ほとんどのDevOpsツール(Kubernetes・Ansible・Docker Compose)はYAMLを期待します。WebAPIやJavaScriptベースのツールの多くはJSONを期待します。
数値や日付の出力はどう処理されますか?
CSVはすべての値を文字列として扱います。YAMLパーサーはクォートされていない数値(42・3.14)やISO日付(2024-01-15)を対応する型として自動検出します。すべての値を文字列のまま保持したい場合はコンバーターですべての値をクォートできます。型推論を利用したい場合は値をクォートせず、YAMLパーサーに型解決を任せます。
大きなCSVファイルも変換できますか?
このツールはブラウザ内で完全に動作するため、パフォーマンスは使用可能なメモリとブラウザのタブ制限に依存します。数メガバイト以内のファイル(数万行)は現代のハードウェアで問題なく変換できます。非常に大きなファイル(100MB以上)にはPythonのcsvとyamlモジュール・GoのGoのencoding/csvとgopkg.in/yaml.v3・またはすべてのデータをメモリに読み込まずにストリーム処理できるMillerの使用を推奨します。
出力はYAML 1.1とYAML 1.2のどちらですか?
このツールはYAML 1.2の出力を生成します。YAML 1.1との主な違いは、1.2では「ノルウェー問題」(裸の'no'が真偽値のfalseと解釈される問題)が廃止され、JSONとの互換性が整合されたことです。ほとんどのモダンなパーサー(GoのYAML.v3・PythonのPyYAMLのsafe_load・RubyのPsych)はYAML 1.2をサポートしています。お使いのツールが1.1の互換性を必要とする場合でも、1.2は一般的な構造において後方互換性があるため、ほぼすべてのケースで正しく解析されます。