言語別 YAML用ライブラリ徹底解説

第4回 PHP編

この記事を読むのに必要な時間:およそ 5.5 分

Spyc

Spycは,PHPで実装されたYAML用ライブラリです。Pure PHPですので,拡張ライブラリがインストールできない場合には重宝します。ただし拡張ライブラリが使えるのであれば,速さの点でも機能の点でも,Syckやphp_yamlをつかうほうがよいでしょう。

Spycについて

Webサイトhttp://spyc.sourceforge.net/
ダウンロードhttp://sourceforge.net/project/
showfiles.php?group_id=141902
バージョン0.3(beta)
作者Chris Wanstrath, Vlad Andersen

インストール

インストールは,上記ページからspyc-0.3.beta.tar.gzをダウンロードして解凍し,spyc.php(PHP 4用)またはspyc.PHP 5(PHP 5用)を適切なディレクトリにコピーするだけですリスト12⁠。

リスト12 Spycのインストール

$ wget http://downloads.sourceforge.net/spyc/spyc-0.3.beta.tar.gz
$ cd spyc/
$ sudo cp spyc.php5 /usr/local/lib/php/spyc.php

使い方

Spycの基本的な使い方はリスト13のとおりです。機能としては次の2つだけであり,YAMLストリームの読み込みはできません。

Spyc::YAMLLoad($filename)
YAMLドキュメントを読み込む
Spyc::YAMLDump($data)
データをYAMLドキュメントに変換する

またSpyc::YAMLLoad()の引数にはファイル名を指定するため,YAML文字列を読み込むことはできないようです。

リスト13 Spycの使い方(ex-spyc1.php)

<?php
/// Syckを読み込む
require_once("spyc.php");

/// YAMLドキュメントファイルを読み込む
$data = Spyc::YAMLLoad("example.yaml");
var_dump($data);
/// または
///   $spyc = new Spyc();
///   $data = $spyc->load("example.yaml");

/// データをYAMLドキュメントに変換
echo Spyc::YAMLDump($data);
/// または
///   $spyc = new Spyc();
///   echo $spyc->dump($data);
?>

タグを変更する

Spycはタグをサポートしていません。

日本語の扱い

日本語は,EUCまたはUTF-8であれば特に問題はないようです。Spyc::YAMLDump()において日本語がエンコードされることもありません。

不具合

筆者が試した限りでは,以下のような不具合がありました。

Spyc::YAMLLoad()
  • スカラーへのアンカーとエイリアスが解釈できない
  • 「&m1 {A: 10}」のようにアンカーとデータを同一行に書くと解釈されない
  • 日付や日時(timestamp)が未サポート
  • 「null」「~」が未サポート
  • マッピングのマージが未サポート
  • ブロックスタイルの文字列があると無限ループになる
  • 値がない場合にnullではなく空文字列になる
  • マッピングのキーに日本語を使用すると文字化けする
  • ルート要素がフロースタイルだと解釈できない
  • フロースタイルに改行が入っていると解釈できない
Spyc::YAMLDump()
  • ルート要素がスカラーだとエラーになる
  • 配列のキーが数字であれば必ずシーケンスに変換される
  • マッピングとシーケンスが混ざって出力されることがあるリスト14

リスト14 シーケンスとマッピングが混ざった例

<?php
require_once("spyc.php");
$data = array('a', 'b'=>10, '4'=>'c');
echo Spyc::YAMLDump($data);
/// 実行結果:
///   ---
///   - a
///   b: 10
///   - c
?>

その他

Spycは,symphonyフレームワークなどで使われています。

著者プロフィール

桑田誠(くわたまこと)

プログラマー。Javaに対するLL,XMLに対するYAMLなど,複雑なことをシンプルにするような技術に興味をもつ。

URLhttp://www.kuwata-lab.com/