7月 142014
 

こんにちは。ファガイです。
今回、VoiceText Web APIをPHPから実行するライブラリを制作致しましたので紹介します。

概要

PHP-VoiceText – GitHub

ちょっと前にはてブで結構ブクマ数があったの気になってました。
あんまり気にしてなかったんですがphpのライブラリが作られていないことと、他の言語でライブラリ化されてたこともあり、ちょっと作ってみようかなと思った次第です。

GitHubにプッシュするまでに大体掛かった時間は2日。実際夜に作業してたので、1日くらいで作りました。

使用方法

利用ですが、packagistに登録したのでcomposerでのインストールが可能です。

requireパラメータに以下を追加します。

"fagai/voicetext" : "dev-master"

その後にcomposer updateですね。

ソース自体は非常に簡易なので、PHPをそこそこやってる人なら何も気にせず読めるかと思います。

<?php

use Fagai\VoiceText\VoiceText;

$voice = new VoiceText('<your api key>');
$voice->speaker('hikari')
      ->emotion('happiness')
      ->emotion_level(2)
      ->pitch(150)
      ->speed(120)
      ->volume(150)
      ->text('今日も一日がんばるぞい!');

$binaryData = $voice->get();

こんな感じにすればOKです。apiキーは公式サイトから取得しましょ。

ライブラリ作る上で色々勉強になったこと

はっきり言うと、composerでライブラリ作ったことなかったし、GitHubにしっかり上げたこともなかったし、packagistにも登録してなかったので内心不安でしたね。。。

Voice Text APIのPHPでの使用方法は以下のサイトで詳しく紹介されていたのでライブラリを作るにはうってつけでした・・・!
VoiceText Web APIをPHPから使ってみる – Wood-Roots.blog

なるほどcurlを使うのねーって思いました。以前ソーシャルゲームの会社に勤めてた頃にcurlは少し触ってたのでそれほど気になりませんでしたね。

で、composerでどうやってライブラリ作るのん?

って思ったわけですが以前laravel使ってpsr-0でいじいじしてたのでcomposer自体の設定は何となく知ってました。
今回、psr-0で最初組んでいたのですがよくわからなくなりもう少し楽にフォルダ構成組めないかなーって思ってlaravelの中身見てたらworkbenchのcomposer.jsonを見てpsr-4というものがあることを知りました。

laravel/framework/src/Illuminate/Workbench

ComposerでPSR-4仕様のオートロードを設定する – menue技術ブログ

指定したフォルダ以下をその名前空間から指定すれば良いだけって良いですねっ。(実際はpsr-0を元にしてるので基本準拠する必要がありますが)

今回は、Exceptionを用意したかったのでExceptions.phpというファイルを作り、classmapに別途記述しています。

"autoload":{
    "classmap": [
        "src/Exceptions.php"
    ],
    "psr-4" : {
        "Fagai\\VoiceText\\" : "src/"
    }
}

こんな感じですね。
ここで気をつけるべき点は、psr-4でkeyを指定する際には最後に\\を付けなきゃいけなかったことくらいでしょうか。

最後に付けなかったら動いてくれなかったと思います。

あとは全体的に他のライブラリのcomposer.jsonを実際に確認して他のサイトで意味を調べたりしました。

特にcomposer.jsonを参考に見てたのは認証パッケージであるSentryですね。これはphpunitのxml作る時やフォルダ構成等を考える時にも役にたちました。
cartalyst/sentry

初めてPHPUnitを書く

実はユニットテストって書いたこと無かったのです。(ちょくちょく本に載ってたものを書くことは有りましたが)
ソーシャルゲームを以前開発してたわけですが、殆ど手でデバッグしてデバッガーさんにバグ探してもらうって感じでした。

フォルダ構成はSentryを参考にしたのでtestsディレクトリを置いてユニットテストしました。

以前やろうとして、pearでphpunitは入れていたのですがphpstormがクラス認識してくれないので開発中だけcomposerにphpunitをrequireするように記述してましたねw

今回は、コードカバレッジ率とか気にせずに書いたのでテスト少ないです。でもこれを書くことでライブラリをしっかりテスト出来たのでやって良かったなーと思いました。
特に最初の頃はExceptionが無いよ無いよって怒られましたw

Packagistに登録する

実は最初はPackagistに登録せずにrepositories指定で取得を確認してたのです。

Packagist自体は知っていたのですが、あれってちゃんとしたライブラリしか登録出来ないんでしょ?って思ってたんです。

普通に無料でアカウント作れて、簡単に接続出来たので驚きでしたね・・・。(接続してから少ししないとcomposerでは取得できないみたいです)

参考にしたのは、
これと、

ComposerでインストールできるライブラリをPackagistで公開する手順

これです。

Composerの使い方を調べたメモ(2) GitHubのリポジトリをPackagistに登録してcomposerでインストール

まとめ

今回は非常に良い経験になったかなと思います。
ライブラリ公開するの怖いなーって思ってたのですが以外とやってみると楽しかったです。

今後はlaravel用にserviceproviderの追加とtravis ciでテストが自動化できればなーと思いました。

Pocket

 Posted by at 3:41 PM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*