こんにちは!独学プログラマー&ライターのつぶらやです。
yamlはヤムルと読みます。
このファイルをphpで使用する方法がわからない
そもそもyamlを使用したら何がいいのかわからない
そんな悩みを持って、このページにたどり着いた方に向けてこの記事を書きました。
ymalは何者なのか
ymalは何が出来るのか
どうやってphpで使えるのか
そんな事を解説していきます。
yamlってそもそもなんですか?
yamlとは
yamlとはずばり、構造化データの表現記法です!
はい、よくわかりませんね。私はわかりませんでした。
まずは実際のyamlファイルを見てみましょう。
users: - nickname:さかもとさん age:25
usersという項目の下に、nickname(名前)とage(年齢)という項目がぶら下がっています。
そしてその中身は「さかもとさん」、「25」のようにデータが入っています。
これが構造化データです。
構造化データはプログラムなどで利用する時にとても利用しやすいです。
構造化データ化されていない文字列として以下のような日本語が渡された場合を考えてみます。
ユーザーの名前はさかもとさん、年齢は25歳
これではプログラムはデータをどのように扱ってよいかわかりません。
そして、yamlファイルの用途としては、例のようなデータの保存・やりとり、設定ファイルに使用したりします。
xmlとどう違うの?
同じような構造化データの表現記法として、xmlがあります。
以下がxmlでの表現です。
<users> <user> <nickname>さかもとさん</nickname> <age>25</age> </user>
人間が見たときにyamlの方がxmlより認識しやすいと言われています。
たしかに、xmlより、yamlの方が理解しやすいと思いました。
phpでyamlを使う(php関数以外編)
何となく、yamlについてイメージがついてきましたでしょうか。
実際にyamlを使用する場合としては、
・yamlファイルを作成して自分が作成しているphpのプログラムに取り入れる
・開発中にこれを使用して欲しいと指定されたりする
のような場合があると思います。
その時、そのままyamlファイルを読み込んでもphp側ではうまく認識されません。
では、どうすればよいのか。
ここでは、spycとsymfonyを使用する2つの方法を紹介します。
※spyc・・・phpで書かれたyamlの解析のためのプログラムです。
※symfony・・・phpのフレームワークの一種。フレームワークはより効率よく開発ができる機能のかたまりのようなもの。
spycをインストールして使用する方法
spycを以下サイトからダウンロード
https://code.google.com/archive/p/spyc/downloads
ダウンロードしたzipを解凍すると、spyc.phpや他のファイルが出来ますが、spyc.phpのみをサーバーに上げます。
yamlファイルの準備
以下の様なyamlファイル(yamlfile.yaml)を用意します。
user: age: 8
phpファイルの準備
以下の内容のphpファイルを準備します。
<?php require_once("★/spyc.php"); // ★の部分にはspyc.phpを置いたパスを入れます class spycTest { function testSpyc(){ $yaml_output= spyc_load_file("☆");// ☆の部分にはyamlファイルがあるパスを入れます var_dump($yaml_output); // 結果を出力します。 } } ?>
phpの実行
3で準備したphpファイルを実行した結果が以下です。
array(1) { ["user"]=> array(1) { ["age"]=> int(1) "8" } }
symfony/yamlパッケージを使用する方法
symfony/yamlパッケージのインストール
composerという、必要なもの(ライブラリ)の名前を指定すると自動的にインストールをしてくれるphpの機能を使って、phpを動かしているサーバーにインストールをします。
※symfony(フレームワーク)を使用していれば以下のインストールは必要ありません。
インストールをしたいフォルダに移動をして以下のコマンドを叩きます。
composer require symfony/yaml
yamlファイルの準備
同じフォルダの中に、以下の様なyamlファイル(yamlfile.yaml)を用意します。
user: age: 8
phpファイルの準備
同じフォルダの中に、以下の様なphpファイルを用意します。
<?php use SymfonyComponentYamlYaml; require "vendor/autoload.php"; class symfonyTest { function testsymfony(){ $yaml_file = file_get_contents("yamlfile.yaml"); // 読み込むyamlファイルを指定します。 $yaml_output = Yaml::parse($yaml_file); var_dump($yaml_output); // 結果を出力します。 } } ?>
phpファイルの実行
3で準備したphpファイルを実行した結果が以下です。
array(1) { ["user"]=> array(1) { ["age"]=> int(1) "8" } }
phpのオブジェクトに変換できました。
これでphp内で使用することが出来るようになりました。
phpでyamlを使う(php関数編)
最後に、phpのyaml用の関数の紹介です。
これは、本来ならphpでyamlを使用するための3つ目の方法なのです。
ただ、yaml拡張モジュールの使用や制約がある且つ、全項目の2つの方が手軽なため最後に簡易的な紹介とさせていただきます。
興味のある方は、ネットで検索すると色々と出てきますので確認してみてください。
[su_table]
yaml_parse_file() | ()内にyamlファイルのパスを指定するとパース(解析)をかけてくれます。 |
yaml_parse_url() | ()内にyamlファイルのurlを指定するとパース(解析)をかけてくれます。 |
yaml_emit() | ()内に配列などでデータを渡せば、yaml形式の値が返ってきます。 |
[/su_table]
まとめ
今回はphpのyamlについて解説してみました。
いかがだったでしょうか。
難しいプログラムやデータなどは、最小限の量に減らして動かしたりするとわかりやすい場合もあります。
覚えることは多いですが、一つずつ理解していきましょう。
それでは、また。