「C Sharpの基礎 - YAML」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
25行目: 25行目:
<br>
<br>
YAMLは柔軟性が高いため、様々なデータ形式に対応できるが、セキュリティ上の懸念から、信頼できないソースからのYAMLデータを扱う場合は注意が必要である。<br>
YAMLは柔軟性が高いため、様々なデータ形式に対応できるが、セキュリティ上の懸念から、信頼できないソースからのYAMLデータを扱う場合は注意が必要である。<br>
<br><br>
== YAMLファイルの構造 ==
YAMLファイルは、階層的なデータ構造を表現するのに適しており、様々な要素を組み合わせて複雑なデータを表現することができる。<br>
<br>
YAMLファイルの構造は、インデントとコロン (:) を使用して表現される。<br>
これにより、人間にとって読みやすく、また機械的な解析も容易になっている。<br>
<br>
==== スカラー値 ====
文字列や数値等の単一の値を表す。<br>
<syntaxhighlight lang="yaml">
name: John Doe
age: 30
is_student: false
</syntaxhighlight>
<br>
==== マッピング (オブジェクト) ====
キーと値のペアを使用して、関連するデータをグループ化する。<br>
<syntaxhighlight lang="yaml">
person:
  name: Jane Smith
  age: 28
  occupation: Engineer
</syntaxhighlight>
<br>
==== シーケンス (配列) ====
ダッシュ (<code>-</code>) を使用してリストを表現する。<br>
<syntaxhighlight lang="yaml">
fruits:
  - apple
  - banana
  - orange
</syntaxhighlight>
<br>
==== 組み合わせ ====
上記セクションの要素を組み合わせて、より複雑な構造を作成することができる。<br>
<syntaxhighlight lang="yaml">
company:
  name: Tech Solutions Inc.
  founded: 2010
  employees:
    - name: Alice Johnson
      position: CEO
      skills:
        - leadership
        - strategic planning
    - name: Bob Williams
      position: CTO
      skills:
        - programming
        - system architecture
  offices:
    headquarters:
      address: 123 Main St, Techville
      phone: 555-1234
    branch:
      address: 456 Innovation Ave, Codetown
      phone: 555-5678
</syntaxhighlight>
<br>
==== データの再利用 ====
YAMLファイルでは、アンカー (<code>&</code>) と エイリアス (<code>*</code>) を使用して、データの再利用が可能である。<br>
<br>
以下の例では、defaultsで定義された値がdevelopmentとproductionに継承され、必要に応じて上書きしている。<br>
<syntaxhighlight lang="yaml">
defaults: &defaults
  timeout: 30
  retries: 3
development:
  <<: *defaults
  server: dev.example.com
production:
  <<: *defaults
  server: prod.example.com
  timeout: 60
</syntaxhighlight>
<br>
==== 複数のドキュメントを1つのYAMLファイルに含める ====
複数のYAMLファイルを1つのYAMLファイルに含めることも可能である。<br>
ドキュメントの区切りには、<code>---</code>を使用する。<br>
<br>
<syntaxhighlight lang="yaml">
---
# Document 1
name: First Configuration
...
---
# Document 2
name: Second Configuration
...
</syntaxhighlight>
<br><br>
<br><br>


== YamlDotNetライブラリ ==
== YamlDotNetライブラリ ==
==== YamlDotNetライブラリとは ====
YamlDotNetライブラリは、開発者にとってYAMLファイルを処理を簡単にする強力なツールである。<br>
このライブラリを使用することにより、YAMLファイルの読み書きやYAMLデータとC#オブジェクト間の変換が容易になる。<br>
<br>
高性能な設計により、YamlDotNetライブラリは大規模なYAMLファイルも効率的に処理できる。<br>
また、柔軟性も兼ね備えており、様々なYAML形式に対応している。<br>
C#の静的型付けのメリットを活かして、データを強く型付けされたオブジェクトに変換する機能も提供している。<br>
<br>
YamlDotNetの基本的な使用方法は比較的簡単であり、シリアライザ / デシリアライザを構築して、YAMLとC#オブジェクト間の変換を行う。<br>
<br>
例えば、YAMLガイルからC#オブジェクトへのデシリアライズは、DeserializerBuilderを使用して行う。<br>
逆に、C#オブジェクトからYAMLファイルへのシリアライズにはSerializerBuilderを使用する。<br>
また、これらのビルダーを使用することで、変換プロセスをカスタマイズすることも可能である。<br>
<br>
YamlDotNetライブラリは複雑なデータ構造も扱うことができる。<br>
ネストされたオブジェクト、リスト、ディクショナリ等を含むクラスも適切に変換できるため、多様なデータモデルに対応できる。<br>
<br>
高度なカスタマイズも本ライブラリの特徴の1つである。<br>
カスタムタグの処理、特定のプロパティの無視、別名の使用等が可能であり、これらは属性やカスタムコンバータを通じて実現できる。<br>
<br>
セキュリティ面では、YamlDotNetライブラリはデフォルトで安全なデシリアライズを行う。<br>
ただし、信頼できないソースからのYAMLファイルを扱う場合は、追加のセキュリティ対策を検討することを推奨する。<br>
<br>
YamlDotNetライブラリは活発に開発が続けられており、最新のYAML仕様にも対応している。<br>
また、充実したドキュメントとサンプルコードが提供されているため、開発者は迅速に学習・実装を進めることができる。<br>
<br>
YamlDotNetライブラリを使用することで、開発者はYAMLを効率的に扱い、設定ファイルの管理やデータ交換等、様々なシナリオで活用することができる。<br>
<br>
<u>YamlDotNetライブラリのライセンスは、MITライセンスに準拠している。</u><br>
<br>
* YamlDotNetライブラリのGithub
*: https://github.com/aaubry/YamlDotNet/wiki
<br>
==== YamlDotNetライブラリのインストール ====
RiderまたはVisual StudioからNuGetを使用して、YamlDotNetライブラリをインストールする。<br>
* Riderの場合
*# プロジェクトを開く。
*# [ツール]メインメニュー - [Nuget] - [ソリューション の Nuget パッケージを管理] (または、[<プロジェクト名> の Nuget パッケージを管理])を選択する。
*# メイン画面下部にある[パッケージ]タブから <u>YamlDotNet</u> と入力して検索する。
*# メイン画面下部の右にある[+]ボタンを押下して、YamlDotNetライブラリをインストールする。
*: <br>
* Visual Studioの場合
*# プロジェクトを開く。
*# NuGetパッケージマネージャーを開く。
*#* [ツール]メインメニュー - [NuGetパッケージマネージャー]を選択して、[ソリューションのNuGetパッケージの管理]を選択する。
*#* または、ソリューションエクスプローラーでプロジェクトを右クリックして、コンテキストメニューから[NuGetパッケージの管理]を選択する。
*# YamlDotNetライブラリを検索する。
*#: NuGetパッケージマネージャーの検索ボックスに <u>YamlDotNet</u> と入力して検索する。
*# YamlDotNetライブラリのインストール
*#: 検索結果からYamlDotNetライブラリを選択して、[インストール]ボタンを押下する。
*# インストールの確認ダイアログが表示されるので、[OK]ボタンを押下してインストールを完了する。
*# 参照の確認
*#: インストールが完了した後、プロジェクトの参照にYamlDotNetライブラリが追加されていることを確認する。
*: <br>
* パッケージマネージャーコンソールからインストールする場合
*# プロジェクトを開く。
*# [表示]メインメニュー - [その他のウィンドウ] - [パッケージマネージャーコンソール]を選択して、パッケージマネージャーコンソールを開く。
*# パッケージマネージャーコンソールから、YamlDotNetライブラリをダウンロードしてインストールする。
*#: <code>Install-Package YamlDotNet</code>
*# ソリューションエクスプローラーのプロジェクトの参照において、YamlDotNetライブラリが追加されていることを確認する。
*: <br>
* <code>dotnet</code>コマンドを使用する場合
*# ターミナルを開く。
*# プロジェクトのルートディレクトリに移動する。
*# YamlDotNetライブラリをインストールする。
*#: 最新の安定版をインストールする場合
*#: <code>dotnet add package YamlDotNet</code>
*#: <br>
*#: バージョンを指定してインストールする場合
*#: <code>dotnet add package YamlDotNet --version <バージョン></code>
*#: <br>
*: <u>※注意</u>
*: <u>プロジェクトがGit等のバージョン管理システムを使用している場合、これらの変更がトラッキングされることを確認すること。</u>
*: <u>プロジェクトを再ビルドして、新しく追加されたパッケージが正しく統合されていることを確認することを推奨する。</u>
<br>
プロジェクトにおいて、YamlDotNetライブラリを使用する場合は、ソースコードファイルの先頭にusingステートメントを追加する。<br>
これにより、名前空間を使用することで、YAMLのシリアライズ / デシリアライズに関する主要な機能にアクセスすることができる。<br>
<syntaxhighlight lang="c#">
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
</syntaxhighlight>
<br>
また、大きなサイズなYAMLファイルを扱う場合は、ストリーミング処理を使用することを推奨する。<br>
<br>
==== YAMLファイルの読み込み ====
==== YAMLファイルの読み込み ====
以下の例では、YamlDotNetライブラリを使用して、YAMLファイルを読み込んでいる。<br>
以下の例では、YamlDotNetライブラリを使用して、YAMLファイルを読み込んでいる。<br>

2024年9月19日 (木) 00:40時点における版

概要

YAML (YAML Ain't Markup Language) は、人間にとって読み書きし易いデータシリアライゼーション形式である。

C#でYAMLファイルを扱う場合は、一般的には、サードパーティ製ライブラリであるYamlDotNetライブラリ等を使用する。

YAMLファイルの基本構造は、キーと値のペアで構成されている。
これは階層構造を持つことができ、インデントを使用して表現する。

 name: John Doe
 age: 30
 address:
   street: 123 Main St
   city: Anytown


YAMLのメリットとして、JSONやXMLと比べて冗長性が低く、より直感的な記述が可能である。
また、コメントを含められるため、設定ファイルとして使用する場合に説明を加えやすいという特徴がある。

C#でYAMLファイルを使用する一般的なケースとしては、
アプリケーション設定の管理、データのシリアライゼーション / デシリアライゼーション、構造化されたデータの保存等が挙げられる。

YAMLの使用する場合は、インデントに注意が必要である。
スペースの数が正確でない場合は、意図しない構造になる可能性がある。
また、複雑なデータ構造を扱う場合は、カスタムクラスを定義してデシリアライズすると、より型安全なコードを記述することができる。

YAMLは柔軟性が高いため、様々なデータ形式に対応できるが、セキュリティ上の懸念から、信頼できないソースからのYAMLデータを扱う場合は注意が必要である。


YAMLファイルの構造

YAMLファイルは、階層的なデータ構造を表現するのに適しており、様々な要素を組み合わせて複雑なデータを表現することができる。

YAMLファイルの構造は、インデントとコロン (:) を使用して表現される。
これにより、人間にとって読みやすく、また機械的な解析も容易になっている。

スカラー値

文字列や数値等の単一の値を表す。

 name: John Doe
 age: 30
 is_student: false


マッピング (オブジェクト)

キーと値のペアを使用して、関連するデータをグループ化する。

 person:
   name: Jane Smith
   age: 28
   occupation: Engineer


シーケンス (配列)

ダッシュ (-) を使用してリストを表現する。

 fruits:
   - apple
   - banana
   - orange


組み合わせ

上記セクションの要素を組み合わせて、より複雑な構造を作成することができる。

 company:
   name: Tech Solutions Inc.
   founded: 2010
   employees:
     - name: Alice Johnson
       position: CEO
       skills:
         - leadership
         - strategic planning
     - name: Bob Williams
       position: CTO
       skills:
         - programming
         - system architecture
   offices:
     headquarters:
       address: 123 Main St, Techville
       phone: 555-1234
     branch:
       address: 456 Innovation Ave, Codetown
       phone: 555-5678


データの再利用

YAMLファイルでは、アンカー (&) と エイリアス (*) を使用して、データの再利用が可能である。

以下の例では、defaultsで定義された値がdevelopmentとproductionに継承され、必要に応じて上書きしている。

 defaults: &defaults
   timeout: 30
   retries: 3
 
 development:
   <<: *defaults
   server: dev.example.com
 
 production:
   <<: *defaults
   server: prod.example.com
   timeout: 60


複数のドキュメントを1つのYAMLファイルに含める

複数のYAMLファイルを1つのYAMLファイルに含めることも可能である。
ドキュメントの区切りには、---を使用する。

 ---
 # Document 1
 name: First Configuration
 ...
 
 ---
 # Document 2
 name: Second Configuration
 ...



YamlDotNetライブラリ

YamlDotNetライブラリとは

YamlDotNetライブラリは、開発者にとってYAMLファイルを処理を簡単にする強力なツールである。
このライブラリを使用することにより、YAMLファイルの読み書きやYAMLデータとC#オブジェクト間の変換が容易になる。

高性能な設計により、YamlDotNetライブラリは大規模なYAMLファイルも効率的に処理できる。
また、柔軟性も兼ね備えており、様々なYAML形式に対応している。
C#の静的型付けのメリットを活かして、データを強く型付けされたオブジェクトに変換する機能も提供している。

YamlDotNetの基本的な使用方法は比較的簡単であり、シリアライザ / デシリアライザを構築して、YAMLとC#オブジェクト間の変換を行う。

例えば、YAMLガイルからC#オブジェクトへのデシリアライズは、DeserializerBuilderを使用して行う。
逆に、C#オブジェクトからYAMLファイルへのシリアライズにはSerializerBuilderを使用する。
また、これらのビルダーを使用することで、変換プロセスをカスタマイズすることも可能である。

YamlDotNetライブラリは複雑なデータ構造も扱うことができる。
ネストされたオブジェクト、リスト、ディクショナリ等を含むクラスも適切に変換できるため、多様なデータモデルに対応できる。

高度なカスタマイズも本ライブラリの特徴の1つである。
カスタムタグの処理、特定のプロパティの無視、別名の使用等が可能であり、これらは属性やカスタムコンバータを通じて実現できる。

セキュリティ面では、YamlDotNetライブラリはデフォルトで安全なデシリアライズを行う。
ただし、信頼できないソースからのYAMLファイルを扱う場合は、追加のセキュリティ対策を検討することを推奨する。

YamlDotNetライブラリは活発に開発が続けられており、最新のYAML仕様にも対応している。
また、充実したドキュメントとサンプルコードが提供されているため、開発者は迅速に学習・実装を進めることができる。

YamlDotNetライブラリを使用することで、開発者はYAMLを効率的に扱い、設定ファイルの管理やデータ交換等、様々なシナリオで活用することができる。

YamlDotNetライブラリのライセンスは、MITライセンスに準拠している。


YamlDotNetライブラリのインストール

RiderまたはVisual StudioからNuGetを使用して、YamlDotNetライブラリをインストールする。

  • Riderの場合
    1. プロジェクトを開く。
    2. [ツール]メインメニュー - [Nuget] - [ソリューション の Nuget パッケージを管理] (または、[<プロジェクト名> の Nuget パッケージを管理])を選択する。
    3. メイン画面下部にある[パッケージ]タブから YamlDotNet と入力して検索する。
    4. メイン画面下部の右にある[+]ボタンを押下して、YamlDotNetライブラリをインストールする。

  • Visual Studioの場合
    1. プロジェクトを開く。
    2. NuGetパッケージマネージャーを開く。
      • [ツール]メインメニュー - [NuGetパッケージマネージャー]を選択して、[ソリューションのNuGetパッケージの管理]を選択する。
      • または、ソリューションエクスプローラーでプロジェクトを右クリックして、コンテキストメニューから[NuGetパッケージの管理]を選択する。
    3. YamlDotNetライブラリを検索する。
      NuGetパッケージマネージャーの検索ボックスに YamlDotNet と入力して検索する。
    4. YamlDotNetライブラリのインストール
      検索結果からYamlDotNetライブラリを選択して、[インストール]ボタンを押下する。
    5. インストールの確認ダイアログが表示されるので、[OK]ボタンを押下してインストールを完了する。
    6. 参照の確認
      インストールが完了した後、プロジェクトの参照にYamlDotNetライブラリが追加されていることを確認する。

  • パッケージマネージャーコンソールからインストールする場合
    1. プロジェクトを開く。
    2. [表示]メインメニュー - [その他のウィンドウ] - [パッケージマネージャーコンソール]を選択して、パッケージマネージャーコンソールを開く。
    3. パッケージマネージャーコンソールから、YamlDotNetライブラリをダウンロードしてインストールする。
      Install-Package YamlDotNet
    4. ソリューションエクスプローラーのプロジェクトの参照において、YamlDotNetライブラリが追加されていることを確認する。

  • dotnetコマンドを使用する場合
    1. ターミナルを開く。
    2. プロジェクトのルートディレクトリに移動する。
    3. YamlDotNetライブラリをインストールする。
      最新の安定版をインストールする場合
      dotnet add package YamlDotNet

      バージョンを指定してインストールする場合
      dotnet add package YamlDotNet --version <バージョン>

    ※注意
    プロジェクトがGit等のバージョン管理システムを使用している場合、これらの変更がトラッキングされることを確認すること。
    プロジェクトを再ビルドして、新しく追加されたパッケージが正しく統合されていることを確認することを推奨する。


プロジェクトにおいて、YamlDotNetライブラリを使用する場合は、ソースコードファイルの先頭にusingステートメントを追加する。
これにより、名前空間を使用することで、YAMLのシリアライズ / デシリアライズに関する主要な機能にアクセスすることができる。

 using YamlDotNet.Serialization;
 using YamlDotNet.Serialization.NamingConventions;


また、大きなサイズなYAMLファイルを扱う場合は、ストリーミング処理を使用することを推奨する。

YAMLファイルの読み込み

以下の例では、YamlDotNetライブラリを使用して、YAMLファイルを読み込んでいる。

 var deserializer = new DeserializerBuilder().Build();
 var yaml         = File.ReadAllText("config.yaml");
 var result       = deserializer.Deserialize<Dictionary<string, object>>(yaml);