TDDでRSSを生成するライブラリを作成した話
こんにちは。Nonです。
前回に引き続き、TDDでRSSを作成するライブラリについて話をしてみたいと思います。
完成したもの
構造
RSS1.0に対応する余地を残しているので、SimpleRssMakerクラスの構造が少しおかしいかも。
ユースケース層も作ったけど、これいらなかったかなー。でもファイルを作成する処理をここに書きたかったので、まぁ良しとしましょう。
RSS1.0に対応していないですが、一応composerからはinstallできるようにしてる
バージョンとしては1.0.0として作成しました。
しかし、RSS1.0にはまだ対応してないです。(RSS2.0の利用のほうが多いみたいだし別にいいよね😅)
構造的に悩んだところ
ChannelをEntityにしたけどよく考えたらValueObejctなのかな?もっとシンプルな構造にすべきだったかも。DDDに固執しすぎた感ある。うーん。配列は作成したくなかったので、クラスにするのはあってるけどEntityとして定義するのは間違えた気がする。
SimpleXMLElement
をつかってRSSを作成したのは、余計なstring
とかで書かなくて済んだので良かったと思う。
RSS2エンティティの振る舞いだけで十分だったかなと思いました。
使い方
Packagistにも書いてありますが、
$simpleRssMaker = new SimpleRssMaker();
$xml = $simpleRssMaker
// Channel settings.
->setChannel('title', 'link', 'description', 'language', 'copyright', 'category', 'pubDate')
// Image settings.
->setImage('title', 'link', 'url')
// Item settings.
->addItem('title', 'link', 'description', 'author', 'category', 'datetime')
->addItem('title', 'link')
// Generate RSS2.0 string.
->rss2();
// If you have more than one article.
$simpleRssMaker = $simpleRssMaker
// Channel settings.
->setChannel('title', 'link', 'description', 'language', 'copyright', 'category', 'pubDate')
// Image settings.
->setImage('title', 'link', 'url');
foreach($items as $item) {
$simpleRssMaker = $simpleRssMaker
->addItem('title', 'link', 'description', 'author', 'category', 'datetime');
}
// Generate RSS2.0 string.
$xml = $simpleRssMaker->rss2();
こんな感じ。SimpleRssMaker
だけで全部設定できるように作成しました。
最初の頃はChannelFactoryとか作ってChannelクラスをユーザーに使用してもらおうと思ってたけど、使いにくいかなと思ってやめました。
最後に
フィード系のライブラリは他にも結構いいのがあったけど、総じてPHP5.3とかのライブラリだったので、差別化は出来てるかなと思っています。(PHP7.4以上が対象です。)
RSS1.0に対応はしたいけどAtomは別にいいかな...
ということで、しょぼいけどOSS作れてよかったと思いました。
そろそろ私も色々な人に貢献していきたいなとおもいますので、他のパッケージも作って行きたいと思います。
そのときはよしなに。
.