rubyでyamlファイルの記述を出力し確認したい時

# こんな時に便利
* ymlの設定ファイルでマージ（継承？）の記述がちゃんと書けているのか確認したい時、出力できると便利
* 後述するサンプルファイルであれば出力せずともイメージできるのですが、ネストが深いとかファイル自体がそもそも長いとかってなると出力できると便利です

# サンプルのymlファイル
```yaml:sample.yml
default: &default
  host: '10.0.0.1'
  port: 8080
  content_type: 'application/json'
  account:
    name: 'default'
    password: 'default'


test: &test
  <<: *default
  account:
    name: 'admin'
    password: 'admin'

# development環境設定はtest環境設定を使いまわす
development:
  <<: *test

staging:
  <<: *default

production:
  <<: *default

```

# コード
```yml_to_json_print.rb
require 'pp'
require 'yaml'
require 'json'
require 'optparse'


argv_options = ARGV.getopts('f:', 'file:')
file_path    = argv_options['f'] || argv_options['file']
yaml         = YAML.load_file(file_path)

puts JSON.pretty_generate(yaml)

```

# 出力結果

```
$ ruby yaml_to_json_print.rb -f sample.yml
{
  "default": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "default",
      "password": "default"
    }
  },
  "test": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "admin",
      "password": "admin"
    }
  },
  "development": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "admin",
      "password": "admin"
    }
  },
  "staging": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "default",
      "password": "default"
    }
  },
  "production": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "default",
      "password": "default"
    }
  }
}

```

# 追記
* @iyuuyaさんに教えていただいた`to_yaml`メソッドも加えてみました。JSONとお好みで。

# 追記2
* @iyuuyaさんに教えていただいた`to_yaml`メソッドを使用して確認をしていたところ、マージのしかたによっては下記のような表示になりました。
* JSON形式であれば問題無いようです。
* 本文のサンプルyamlファイル、コード、出力結果の項目をJSON一本に戻しました。
* 原因はまだ調べていません。どなたか教えて！


##### コード
```
require 'pp'
require 'yaml'
require 'json'
require 'optparse'


argv_options = ARGV.getopts('f:t:', 'file:type:')
type         = argv_options['t'] || argv_options['type']
file_path    = argv_options['f'] || argv_options['file']
yaml         = YAML.load_file(file_path)

case type
  when 'yml' || 'yaml'
    puts yaml.to_yaml
  when 'json'
    puts JSON.pretty_generate(yaml)
  else
    puts yaml.to_yaml
end
```
##### サンプルyamlファイル
```yaml:sample.yml
default: &default
  host: '10.0.0.1'
  port: 8080
  content_type: 'application/json'
  account:
    name: 'default'
    password: 'default'


test: &test
  <<: *default
  account:
    name: 'admin'
    password: 'admin'

# development環境設定はtest環境設定を使いまわす
development:
  <<: *test

staging:
  <<: *default

production:
  <<: *default

```

##### 出力結果
```
$ ruby yaml_to_json_print.rb -f sample.yml -type yml
---
default:
  host: 10.0.0.1
  port: 8080
  content_type: application/json
  account: &2
    name: default
    password: default
test:
  host: 10.0.0.1
  port: 8080
  content_type: application/json
  account: &1
    name: admin
    password: admin
development:
  host: 10.0.0.1
  port: 8080
  content_type: application/json
  account: *1
staging:
  host: 10.0.0.1
  port: 8080
  content_type: application/json
  account: *2
production:
  host: 10.0.0.1
  port: 8080
  content_type: application/json
  account: *2
```


```
$ ruby yaml_to_json_printer.rb -f sample.yml -t json
{
  "default": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "default",
      "password": "default"
    }
  },
  "test": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "admin",
      "password": "admin"
    }
  },
  "development": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "admin",
      "password": "admin"
    }
  },
  "staging": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "default",
      "password": "default"
    }
  },
  "production": {
    "host": "10.0.0.1",
    "port": 8080,
    "content_type": "application/json",
    "account": {
      "name": "default",
      "password": "default"
    }
  }
}

```