58
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RubyでYAMLファイルをloadするもう1つの便利な方法

Last updated at Posted at 2015-12-14

先日の投稿Hashクラスを拡張したHashieというクラスを見ていきましたが、実はこのHashieは他にも様々な機能があります。今回の投稿ではYAMLファイルをloadしたオブジェクトをいい感じにしてくれる(Hashのキー名でアクセサーを定義してくれる)機能があることがドキュメントに記載されていたので、実際に試してみようと思います。

準備

事前に適当なYAMLファイルを用意します。
今回はrailsにcommitされている.travis.ymlを検証対象とすることにしました。

以下のように、wgetsample.ymlとして保存します。

$ wget https://raw.githubusercontent.com/rails/rails/master/.travis.yml -O _snippets/sample.yml

以下がsample.ymlの内容です。


language: ruby
sudo: false
script: 'ci/travis.rb'
before_install:
  - gem install bundler
  - "rm ${BUNDLE_GEMFILE}.lock"
  - curl -L https://github.com/kr/beanstalkd/archive/v1.10.tar.gz | tar xz -C /tmp
  - cd /tmp/beanstalkd-1.10/
  - make
  - ./beanstalkd &
  - cd $TRAVIS_BUILD_DIR
  # 以下省略

普通にYAMLファイルをloadする

普通にYAMLファイルをloadするには、Rubyの標準ライブラリYAMLを使用することになるかと思います。

require 'yaml'

yaml = YAML.load_file("_snippets/sample.yml")

yaml.class # => Hash

yaml["language"] # => "ruby"

yaml.language
# => NoMethodError: undefined method `language' for #<Hash:0x007fd97d6def08>

上述のように、loadしたYAMLファイルはHashオブジェクトになります。そしてキーを指定して値を取り出せます。
当然ながら、キーをアクセサ(上述の例でいうと、languageメソッド)として呼んでも誰もそのようなメソッドは定義してくれてはいないのでNoMethodErrorとなります。

HashieでYAMLファイルをloadする

次に、HashieでYAMLをloadし、同様にlanguageメソッドで値が取れるかを検証してみます。

require 'hashie'

yaml = Hashie::Mash.load("_snippets/sample.yml")

yaml["language"] # => "ruby"
yaml.language # => "ruby"
yaml.notifications.irc.on_success # => "change"

ご覧ください。

user-friendlyに値を取得することができました。

Hashieを使えば括弧([])やダブルクォーテーション("")の入力の手間が省略できるので、YAMLをご使用の際はHashieを是非検討してみてください。

最後に

大変お忙しい中、私の投稿を最後まで読んで頂き有難うございました😊

現在、Udemyというオンライン学習プラットフォームでGraphQLReactが学べるコースを公開しており、有り難いことに大変ご好評頂いております。

下記のリンクからだと95%オフの価格で購入できますので、もしご興味がありましたらご覧頂けると大変嬉しいです😊

それでは今日も皆様にとってハッピーなハッキングライフを!!!😋

Dive into Hacking!!!🤩

はむ

58
48
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?