YAMLをRuby,Python,PHPで使ってみた

  • Pocket
  • このエントリーをはてなブックマークに追加
  • 162 follow us in feedly

まえがき

『YAML』Rubyなんかをやってるとよく見る拡張子・書き方だけど、今までなんとなくしか見ていなかったので今回はちゃんと勉強してみることに。

それにあたって適当に作ったYAMLのファイルをPHPとRubyとPythonを使って利用してみます。

開発環境

  • Ruby 1.9.3
  • Python 2.7
  • PHP 5.3

YAMLって

よく見るYAMLのファイルといえばrailsのDBを書くときの『database.yml』かなーっとおもう。こんな感じの内容のファイル

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

ようは配列の構造を定義しておいて、それを読み込むことができる。XMLやjsonを使って同じようなことができるが、YAMLだと字下げを使ったりすることで、コード量をできるだけ減らすことがきるし、すっきり簡潔な感じで読みやすい。

今回のサンプルYAMLファイル

今回は適当に、配列のものとハッシュ配列のものを用意しておいた。

- 100
- 200
- 300
- hyaku
- nihyaku
- sanbyaku
- ひゃく
- にひゃく
- さんびゃく

database:
  
  development:
    name: dvdb
    user: dvuser
    password: password

  production:
    name: prodb
    user: prouser
    password: nsjkdvbdkjdksnvk

とくにデータに意味はありません。

RubyでYAMLを使う

まずはRubyでYAMLを使ってみる。Rubyが一番簡単だと思う。おそらく標準でYAMLを使える

サンプルソース

# coding: utf-8
require "yaml"

data = YAML.load_file "./array.yml"
data.each do |d|
  p d
end

data = YAML.load_file "./hash.yml"
data["database"].each do |db|
  p db
end

実行結果

 > ruby main.rb

100
200
300
"hyaku"
"nihyaku"
"sanbyaku"
"ひゃく"
"にひゃく"
"さんびゃく"
["development", {"name"=>"dvdb", "user"=>"dvuser", "password"=>"password"}]
["production", {"name"=>"prodb", "user"=>"prouser", "password"=>"nsjkdvbdkjdksnvk"}]

PythonでYAMLを使う

Pythonの場合だと”PyYAML”とゆうライブラリを使う。今回はPipでインストールしておいた。3.10のバージョンが入ってきた

sudo pip install PyYAML

サンプルソース

#coding:UTF-8
import yaml

data = yaml.load(open('array.yml').read())
print data

data = yaml.load(open('hash.yml').read())
print data

実行結果

> python main.py

[100, 200, 300, 'hyaku', 'nihyaku', 'sanbyaku', u'\u3072\u3083\u304f', u'\u306b\u3072\u3083\u304f', u'\u3055\u3093\u3073\u3083\u304f']
{'database': {'development': {'password': 'password', 'name': 'dvdb', 'user': 'dvuser'}, 'production': {'password': 'nsjkdvbdkjdksnvk', 'name': 'prodb', 'user': 'prouser'}}}

PHPでYAMLを使う

最後にPHPで、PHPの場合は『Spyc』とゆうライブラリを使うと簡単だった。githubからクラスファイルをダウンロードしてくる

https://github.com/mustangostang/spyc

https://github.com/mustangostang/spyc

wget https://raw.github.com/mustangostang/spyc/master/Spyc.php

サンプルソース

<?php
require 'Spyc.php';
$data = Spyc::YAMLLoad("./array.yml");
print_r($data);

$data = Spyc::YAMLLoad("./hash.yml");
print_r($data);

実行結果

> php main.php

Array
(
    [0] => 100
    [1] => 200
    [2] => 300
    [3] => hyaku
    [4] => nihyaku
    [5] => sanbyaku
    [6] => ひゃく
    [7] => にひゃく
    [8] => さんびゃく
)
Array
(
    [database] => Array
        (
            [development] => Array
                (
                    [name] => dvdb
                    [user] => dvuser
                    [password] => password
                )

            [production] => Array
                (
                    [name] => prodb
                    [user] => prouser
                    [password] => nsjkdvbdkjdksnvk
                )

        )

)

おすすめ書籍

パーフェクトRuby (PERFECT SERIES 6)
Rubyサポーターズ すがわら まさのり 寺田 玄太郎 三村 益隆 近藤 宇智朗 橋立 友宏 関口 亮一
技術評論社
売り上げランキング: 9,964
プログラミング言語 Ruby
プログラミング言語 Ruby
posted with amazlet at 13.12.02
まつもと ゆきひろ David Flanagan
オライリージャパン
売り上げランキング: 114,558

関連記事

.htaccessファイルを作成して、.html拡張子でPHPを実行させる

まえがき 今回はちょっとした小ネタをメモ。 .html拡張子の静的なウ...

記事を読む

ruby.pnglogo.png

ThorでRuby製のオリジナルコマンドを作る

まえがき 今回はThorを使ってコマンドアプリを作ってみようと思いま...

記事を読む

converted 5

Rubyの軽量WEBフレームワーク『Sinatra』の入門の入門

まえがき 今回はちょっとしたつくりたいものがあったのでRubyのWE...

記事を読む

no image

CentOSにPHP5.5をインストールするメモ

まえがき 表題どおり、何かと最近Linux環境にPHP5.5をこしらえ...

記事を読む

Rubyでディレクトリを作成する

まえがき フォルダのパスを指定して、存在するディレクトリ上で新しいデ...

記事を読む

新着記事

no image

PHPでRubyのirbっぽいインタラクティブなスクリプトが実行できる「boris」

まえがき PHPでもRubyのirbみたいなことがしたくて探してみたと...

記事を読む

2015年の抱負と去年の振り返り〜よちよちWEB業界1年経験して〜

まえがき あけましておめでとうございます。今年もどうぞよろしくお願いし...

記事を読む

Java SE 7 Bronze試験(1Z0-802)を受けてきました

まえがき 以前から少し受けてみたかった試験『Java SE 7 Bro...

記事を読む

HubotでJenkinsのジョブを実行する

まえがき HubotをつかってJenkinsのジョブをじっこうしてみた...

記事を読む

no image

Hubotをforeverでデーモン化する

まえがき 今回はHubotをforeverを使ってデーモン化してみた時...

記事を読む

スポンサーリンク

  • Sorry. No data so far.

PAGE TOP ↑