LINQインスパイアなGinqというPHPライブラリが素晴らしい

こんにちは。オガリア開発チームの粂です。

今回はLINQインスパイアなGinqというPHPライブラリを紹介します。
そもそも、このライブラリを知ったきっかけはたまたま見つけた以下のスライドでして、
http://akanehara.info/phpcon/ginq/#/

ぜひ使ってみたくなり、まずは内部向けの管理ツールから導入してみたところ、想像していた以上に便利でした。
ただ、便利でもあるにもかかわらずGinqで検索しても関連する記事があまり出てこないので、本記事でこのライブラリについて紹介していきたいと思います。

Ginqとは? 

作者のページより概要を抜粋します。
https://github.com/akanehara/ginq

===
Ginq はPHPの配列やイテレータを統一的に(そのうえ楽しく!)操作するための DSL です。
Ginq は LINQ to Object にインスパイアされましたが、クローンではありません。PHPの配列やイテレータの事情にできるだけ寄り添ってデザインされています。
Ginq の多くの機能は、その結果を実際に取り出すまで処理を実行しません。この 遅延実行 という性質は、さまざまなメリットをもたらしてくれます。
===

このライブラリのおかげで、LINQ to Objects がPHPの世界でも使えるようになります。
ちなみに LINQ to Objects 自体の入門としては以下のエントリをおすすめします。

よくあるコーディングパターンと LINQ to Objects の対応付け
http://bleis-tift.hatenablog.com/entry/20110210/1297310411

冒頭で紹介したスライドと、GitHubリポジトリのテストコードを見れば、ひととおりの基本的な使い方は理解できるようになっています。

Ginqを利用するメリット

Ginqを使うことによって、素のPHPで書くよりも宣言的に書けるので、大部分の手続き的な実装を排除することができます。
その結果、チーム内でコーディング規約によってガチガチに縛らなくても書き方を統一させることが比較的容易になりソースコードのレビュアーの負担も減りますし、宣言的に書けることで必然的にソースコードも短く簡潔になるため、リーダビリティも確実に向上すると思います。

さらにGinq自体がIDEフレンドリーであることも大きいです。私の場合、Netbeansを使ってPHP開発をしていますが、Ctrl+Spaceでストレス無くメソッドをつないでいくことができます。PhpStorm等の他のIDEでも同様だと思います。
なお、Ginqを使う場合、操作対象のデータは連想配列であるほうがコードの見通しも良くなりますし、何かと便利です(配列も操作できますが)。
よって、JSON ⇒ JSONを読み込み連想配列に ⇒ 連想配列をGinqで操作 ⇒ 連想配列をJSONとして保存 ⇒ JSON という流れを作るのがよいかと思います。
例えば、JSONとしてHTTPリクエストを受け取り、JSONとしてHTTPレスポンスを返すAPIを作るという場合などを指します。

弊社ではそれほどヘビーに使っているわけではなく、本当に基本的な機能のみ使っていますが、導入のメリットは十分にあったと思っています。

本記事を読んで興味を持たれた方は一度触ってみてはいかがでしょうか?

最後までお読みいただきありがとうございました!

Pocket