AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

【PHP】つらい配列操作と距離を置けるLINQライクなライブラリ、Ginqを使ってみた

Pocket

配列のつらさ

PHPで、以下の様な配列の詰め直しのようなコード書いたりしてると、
クラシック過ぎてあー……という気持ちになります。

例えばPythonだと、リスト内包表記というのがあり、こういう処理がもうちょっと格好良く書けます。
上記の例より単純な算数っぽい例で以下に記します。

C#など.NET Framework環境だと、LINQというさらに格好良い構文があります。
LINQが良いのは記法だけじゃないので、ちょっと本質から外れますが。
MacやLinux系 環境でも、Monoをインストールしていれば、csharpコマンドでC#のREPLが起動して、簡単に試せます。

ずるい!!

というわけで、PHPで配列(及びIteratorが実装されているオブジェクト)を格好良く処理できる以下のライブラリを使ってみました。
akanehara/ginq · GitHub

Ginqのインストール

ReadMe にあるとおり、各自のComposerでライブラリが管理されているPHP実行環境にて、
composer.jsonに以下の記述を追加し、

以下でインストールできます。

Ginqを使ったコード例

この記事の冒頭のPHPでの処理は、Ginqを使って以下の等価な処理に書き換えられます。
ついでにSplFileObject を使ってファイル操作をしてみます。

(->がエスケープされて読みづらい……)
制御構文が減った分、だいぶ印象が違います。
LINQと一緒か?と問われると、無名関数をゴリゴリ書いている分記述量が多いですが、
O/Rマッパー位のノリで配列処理が出来ました。
このくらいの処理だと、foreach でもいいじゃん感があるのは否めませんがw

一応、上記のselectとmapの様なことは、array_filter(), array_map() を作用させても得られるのですが、

array_filter() で抽出した配列の返り値をそのままarray_map() に作用させると、好みの問題ですが、なかなか渋い感じです。
さらに、
array_map() : 第1引数が無名関数で第2引数が配列
array_filter() : 第1引数が配列で第2引数が無名関数
と地味にインターフェースが異なっているのが個人的にはうざいです。
これ以上作用させたらだいぶだるい感じがします。

まとめ

他にもjoin,zip,take,takeWhile,memoize などのメソッドがあるので、色々試してみます。
細かなドキュメントはありませんが、挙動は test/GinqTest.php にあるテストを読めば分かりそうです。
データ構造が配列くらいしかない分(SPLをまともに使ってる人いますか?) 、
PHPは配列と仲良くすることから避けられないので、配列操作のつらさを軽減していきたいですね。
便利な構文が言語仕様に入っていってくれるといいですねー。

Pocket

DynamoDBの紹介と東急ハンズでの活用について

Pocket

こんにちは、井上です。

2/7に行われた、JAWS-UG KANSAI特別編 にて『DynamoDBの紹介と東急ハンズでの活用について』という内容で発表してきました。

そのスライドをアップしました。

Amazon DynamoDBの紹介と東急ハンズでの活用について

もっと、DynamoDB と Beanstalk の相性はとても良いとか、こういう部分で困ってる、とか、テクニカルな話もいろいろしたかったのですが、意外と駆け足になってしまいました。

会場で聞いてくださっていた方の中でも、DynamoDBを使っているという方は数名しかいなかったので、とっつきにくい印象があるのかなぁと思いました。

DynamoDBは、AWS内部でも各所で使われており、S3、SQSとともに、AWSを支える最も重要な基盤のひとつになっているようです。
また、東急ハンズにおいても、現在はネットストアだけではなく、MDシステム等の基幹システムにも用途を広げつつあり、ハンズを支える重要な技術になってきています。
これからも、DynamoDBに限らずAWSの仕組みなどをうまく活用しつつ、お客様に価値を届けられるよう、頑張って行きたいと思います。

最後に、JAWS-UG KANSAIのメンバーの方々、会場を提供頂いた エムオーテックス様、ありがとうございました!!

Pocket

ハンズラボが採用しているユニケージという謎テクノロジーについて 第1回

Pocket

自己紹介

はじめまして。ハンズラボの臼井です。

自己紹介を適当な箇条書きで以下に記します。

  • 目の前の業務がどうこうとかのプロジェクトよりも、テクノロジーでつらみを減らしたりワイワイしたい派
  • 強い静的型付け派
  • FBより圧倒的にTw派
  • インドア派
  • 猫派及びアルパカ派

派が多くてゲシュタルト崩壊しそうです。
以後よしなに。

はじめに

東急ハンズ/ハンズラボの開発事例については、当社代表の長谷川が各媒体にて紹介していますが、
その中でしばしば出てくる 「ユニケージ開発手法」 というものが、ハンズラボの技術の中核を占めるもののひとつになってます。
この手法の採用事例については、検索して頂ければ、ビジネス観点からはいくらかヒットするので概観は掴めます。
しかし、技術の観点からについては、USP研究所様による公式サイト、及びOSS版のリポジトリ 以外は殆ど情報が無い、というのが現状です。

ここでは、できるだけフラットな観点から、ユニケージ開発手法について主に技術的な観点から説明します。 続きを読む ハンズラボが採用しているユニケージという謎テクノロジーについて 第1回

Pocket

JAWS-UG京王線で発表してきました

Pocket

初めまして、ハンズラボの今井です。

 1月27日(火)にJAWS-UG京王線に参加しまして、発表してきた内容をブログで共有します。

以下は、発表で使ったスライドです。

質疑応答のときに、「ハンズラボさんって夜中はサーバを停止しているって言ってたけど、一時間しか停止してないんですね。」という素晴らしいツッコミをいただきました。

続きを読む JAWS-UG京王線で発表してきました

Pocket

「リーダブルコード」を読んで

Pocket

はじめまして、ハンズラボの井上です。

ハンズラボには、おじさんがひたすらお酒を飲むブログとかがあって好評?連載中なのですが、酒飲んでるだけじゃなくて一応仕事もしてるんだぞアピールとして、技術的な話題などはこちらに掲載していきたいと思います。

1回めの記事では、正月休みに読んだ、「リーダブルコード」という本について、だらだらコメントなどを書いてみたいと思います。

jpeg
まず、この本を読んで感じたのは、

プログラムは、単に、コンピュータに命令を実行させるための、命令の羅列だけではなく、開発者間のコミュニケーションの媒体としての側面もある

という点です。
もちろん、プログラムは、想定通りの仕様にそって正確に動作する必要があるのですが、その想定どおりの仕様 というのは、時と共に変化します。
また、開発者自体も、最初に作成した人から、それを運用する方、緊急の不具合対応する方など、どんどん変遷していきます。
が、その中心にあるのは、常に動いているソースコードです。
開発者は、ソースコードを通していろいろな人(仕様を決めた人や、設計した人、実際にコーディングした人)の意図を汲み取りながらメンテナンスし続けなければなりません。
子供の頃、少年野球でキャッチボールの練習の際に、

「相手のことを考えて、相手が取りやすい位置に投げてあげるんだ」

と口を酸っぱくして言われましたが、プログラミングも一緒で、常にそのコードには受け取り手がいることを意識し、受け取りやすいように書いてあげないといけないと思いました。
俺さえわかればいい、動きゃなんでもいい というコードをメンテナンスするのは辛いですからね。
続きを読む 「リーダブルコード」を読んで

Pocket