CSV→YAMLコンバーター

YAMLは現代の設定ファイルを構成するものです:Kubernetesマニフェスト、GitHub Actionsのワークフロー、Docker Compose、Ansibleのプレイブック、Railsのフィクスチャ。このコンバーターはCSVを読み取り、各行がヘッダー行をキーとするマッピングになるYAMLのシーケンスを生成します。出力は2スペースのインデントと4レベルのインライン閾値を使い、ほとんどのエディターやリンターのスタイルに合います。

CSVがYAMLになる仕組み

  1. 1

    CSVを貼り付ける

    既定の出力の形がわかるようサンプルが事前に読み込まれています。自分のデータに置き換えてください。

  2. 2

    区切り文字を選ぶ

    既定はカンマです。タブ区切りの入力には`\t`を、ファイルが使う他の任意の1文字を入力します。

  3. 3

    ヘッダーがキーになる

    1行目がヘッダーとして扱われます。データ行は、元の列と同じ順序でそれらのキー下のマッピングになります。

  4. 4

    YAMLが安全にダンプされる

    出力はSymfony YAMLコンポーネントによって描画され、ブール値・数値・日付との曖昧さが生じる場合は値を引用符で囲みます。

出力を貼り付ける前に知っておくべきYAMLのクセ

YAMLは表面上は寛容なことで有名ですが、内部には罠が満ちています。ダンパーはそのほとんどを扱いますが、それでもデータはラウンドトリップに耐えなければなりません。

ノルウェー問題とその仲間

YAML 1.1は、裸のnoyesonofftruefalseyn(およびそれらの大文字形)をブール値として扱います。つまり、ノルウェーをNOとする国コードの列が、ひそかにfalseに変わりかねません。

元のセル 出力(引用符なし) 本来意図された意味
NO false 国のノルウェー
ON true 州のオンタリオ
123 123 数値またはID
0100 64(8進数!) 先頭ゼロのコード

ダンパーは危険な値を自動で引用符で囲みますが、出力で型が誤って見える場合は、下流でYAML 1.2のパーサーに切り替えるか、気にする値を明示的に引用符で囲んでください。

フォーマットの選択

  • 2スペースのインデント。 ほとんどのエディターで標準。yamllintのようなリンターもこれを既定とします。
  • インライン閾値4。 深くネストされた構造は4レベル目以下では1行で出力され、それより上では複数行に展開されます。より厳密なブロックが欲しければ下流で調整してください。
  • アンカーとエイリアスは生成されません。 行が繰り返されても、各行は新しいマッピングです。

出力例

- name: Alice
  age: 30
- name: Bob
  age: 25

JSONよりYAMLを選ぶとき

  • コメントや複数行の文字列が重要な、手で編集する設定。
  • Kubernetesマニフェスト、CIパイプライン、Ansibleのプレイ。
  • 機械と同じくらい人間がファイルを読むあらゆる文脈。

それ以外では、JSONのほうが厳密で解析も速いため、ワイヤーフォーマットや生成されるペイロードにはJSONを選んでください。

よくある質問

YAML 1.1は裸のNOをブール値として解釈します。コンバーターは危険な値を引用符で囲みますが、下流のパーサーがなお型を強制する場合は、出力を貼り付ける前に問題のセルを引用符で囲むか、それらをただの文字列として扱うYAML 1.2のパーサーに切り替えてください。

このコンバーターではできません。各行はフラットなマッピングになります。ネストされたYAMLには、YAMLライブラリを使う小さなスクリプトを組むか、まずJSONに変換してJSONエディターでその形を整えてください。

セルは、選んだ区切り文字を使ってstr_getcsvで解析されます。引用符付きの値は、本物のCSVパーサーと同じように、埋め込まれた区切り文字と引用符を保持します。

はい。貼り付けたCSVはサーバーに送信されます。解析とYAMLのシリアライズはサーバー側で実行され、CSVはYAML出力の生成にのみ使用され、保存されません。

関連ツール

このツールは他の言語でも利用できます