ゆーすけべー日記

はてなBlogってどーなの!?

Rebuildメソッド Early 2016

いつの間にかmiyagawaさんとの間でRebuildメソッドという言葉が産まれたのでその紹介。これは決してRebuildを聴いている人向けの話じゃなくって、彼や僕みたいにPodcastをやる側の人向けのメソッドなんだけど!

以下の記事にあるように、PCやラップトップが無いような環境など状況によって、miyagawaさんは「Zoom H5」といういっかついハンディレコーダーを使っている。

Rebuildミートアップっていうオフ会みたいなイベントでの公開収録の時に実物を見て

なるほど!こうやって使うんだ。ゴツくてカッコいい!

って思った数日後には手元にその「Zoom H5」を入手してしまい、Rebuildメソッドを実践することになった次第。

f:id:kamawada:20160114092413j:plain

Rebuildメソッドを語るには「Zoom H5」の据え付けのマイクをそのまま使うのは、なんかソレ(Rebuildメソッド)っぽく無くって、H5に付いているXLR端子に外部マイクを繋ぐのがよりソレ(Rebuildメソッド)っぽい...感じがするw

だんごゆっけの平和な話を収録する時、そのように外部マイクを2本繋げてその様子をシェアしたら、miyagawaさんとこんなやりとりがあって「Rebuildメソッド」なるワードが誕生した経緯。

www.instagram.com

ちなみにwada.fmでも最近ではこんな機材構成(外部マイク+iPadからのポン出し音を外部入力)でやってるので「Rebuidメソッドの応用」。

f:id:kamawada:20151229160754j:plain

また、こうしたH5を含む機材はオフライン用の要素が強いので持ち運びをするわけだけど、その際に「amazon basics」のポーチに入れるとよりRebuildメソッド(miyagawaさんも同じポーチ使ってるっぽいからw)。

f:id:kamawada:20151229190554j:plain

最後にもう一つ。Zoom H5は取り回しを優先する際、単3電池2本で稼働させるが、それでなくっても、USBポートからの電源供給が出来る。よってAnkerとかのポータブルバッテリーを継いじゃえば電池ナシでかつ「かなり持つ」ように電源供給出来る。これもRebuildメソッドらしいw

www.instagram.com


ってことでRebuildのようにステキなPodcastを目指したい場合に、Rebuildメソッドってのがあるってことを知っておくといいと思いました。そして他にもRebuildメソッドがあるはずなので積極的に発掘?していきたいです!

ZOOM ズーム リニアPCM/ICハンディレコーダー  H5

ZOOM ズーム リニアPCM/ICハンディレコーダー H5

初めてのイギリスなう

f:id:kamawada:20160102221257j:plain

大晦日から年明け、そして今もロンドンにいる。嫁が見つけてきたHISの格安ツアーで初めてのイギリスに訪れた。

イギリスと言えば僕の若かれし頃、その自分の労力の多くを費やしたサッカー、そしてビートルズを発端とするUKロックが産まれた場所である。以前からそこがどんなところか?が気になっていた。この偉大な文化がなぜ産まれたのか?少しでもこの目で確かめたかった。


f:id:kamawada:20151231143124j:plain

ヒースロー空港に着くとSIMカードの自販機でEEというプロバイダのプリペイドSIMを30ポンドで購入。日本では先日から「IIJmio+SIMフリーiPhone6s」でモバイルを運用していたので、そのままiPhoneに挿してネットが使える。便利な世の中だ〜と思ったものの、dmm.co.jpを始めとしてエロサイトはロックがかかっていて見れない... なんてこった!クレジットカードで年齢認証すればイケるっぽいが日本のクレカだからか不可能、塞がれている。

f:id:kamawada:20160101010940j:plain

年明けの瞬間はホテルよりももっと都市部のところで花火が上がったりするらしいが、12時間のフライトで疲れていたんで、日本食のデリを購入し、日本から持ってきた「どん兵衛」で年越しそばと共に過ごす。「マズい」と誰もが言っていたイギリスの飯はとりあえず食わない。

f:id:kamawada:20160101035222j:plain

翌日の日本で言う「元旦」2016年1月1日からはロンドン観光。イギリスの日の出は8時頃と遅い。朝焼けの様子。

f:id:kamawada:20160101172912j:plain

初詣。というわけではないがウェストミンスター「寺院」に行く。ダーウィンやニュートンが収められているらしく、偉大な彼らの名前が掘られた「石」の上をズカズカと歩いて行く感じが面白かった。

f:id:kamawada:20160101184512j:plain

昼飯にいよいよ「フィッシュ・アンド・チップス」を食べる。日本でもダイニングバーみたいなところでオシャレに食べることが出来るが、本場のそれはすげータンパク。魚はデカく、ポテトは重い。それぞれカリカリして美味しいとは思うんだけど、だけど、だけども... 「下味」とかそういう概念は無いのだろうか。

f:id:kamawada:20160101212104j:plain

大通りではニューイヤーのパレードをやっていた。デカい「高円寺の阿波おどり」という感じ。なんとなく街の様子を見ると「上品な」印象を受ける。

f:id:kamawada:20160101221837j:plain

ところで、分かってはいたが、イギリスはとにかく天気が悪い。晴れ間なんて拝めない。雨が降ったりやんだり。これが日常だと考えると鬱屈とする

f:id:kamawada:20160102185318j:plain

ついでに物価の話をすると「日本と比べる」という前提ではあるが、たけ〜。コンビニ的な商店で「なるべく安く」買った500mlのペットボトル「コカ・コーラ」が1.25ポンドだった。今のレートだと「1ポンド=175円」である。またデパートに入ってた無印良品を覗くと日本の商品がそのまま陳列されていて、税込み800円の商品で「7.95ポンド」とのこと。

f:id:kamawada:20160103120704j:plain

観光地で一番興味を引いたのは「The Wallace Collection」という博物館。Wallenceさんという方の私物の美術品や骨董品が大量に展示されている。入場料は無料で物価が高いロンドンでは嬉しい。

f:id:kamawada:20160103131349j:plain

注目すべきは昔の騎士達のがたくさん展示されていること。個人でこれ所有しているってマジでWallenceさんは変態だと思う。エキシビションで、鎧の内側に着る「鎖のカブト」があったので被ってみた。重い...

f:id:kamawada:20160103145531j:plain

ロンドンで一番見てみたかった景色がSOHOという場所にある。高校生の時に友達からCDを借りてハマったUKロックの巨匠Oasis。そのアルバム「(What's The Story?) Morning Glory」のジャケットで使われている写真の場所がここ。まさにここ。なんか感動。

f:id:kamawada:20160102221421j:plain

ってことで、本日丸一日また観光で過ごしてから明日、日本への帰路へたつ。まぁなんとなく僕の好きなサッカーとロックが産まれた理由が分かった気がしないでもない。決して、天気が悪いから、飯がタンパクだから、物価が高いから「面白くない」わけではなく、非常に楽しい旅行になりつつあってよかった!

(What's The Story) Morning Glory?

(What's The Story) Morning Glory?


www.wada.fm

ひとり「iPad mini Advent Calendar 2015」コンプ版

この記事はiPad miniの活用法をAdvent Calendarっぽく「25個」紹介するというものです。

と言っても一般的に言われてるような使われ方というよりか「僕なり」のわりとハードボイルドな?Tipsになるかもしれません。その結果「iPad miniを使いこなしているつもりが周辺機器を揃えているうちにiPad破産する」可能性があるので気をつけて下さい。ではいってみましょう!

1. iPad mini 4はちょうどいいタブレット

f:id:kamawada:20151220093247j:plain

僕が持っているiPad miniは「iPad mini 4」の...

  • スペースグレイ
  • 容量は64GB
  • WiFi+Cellularモデル

です。正直こんだけ使うなら128GBにしておけば良かったなんて後悔しつつありますが、現状満足しております。iPad miniは「1」と「2」からのユーザーでTouchIDと呼ばれる指紋認証に対応する今回のiPad mini 4は既に完成された域に達している感があります。またこのCellularモデルはSIMフリーと呼ばれる端末ですので普段は「IIJmio」のSIMを挿しています。

f:id:kamawada:20151220093311j:plain

CellularモデルとWiFiオンリーの端末では微妙に見た目が違い、Cellularの場合背面の上部に黒い帯が入ることになります。

f:id:kamawada:20151220094431j:plain

ちなみに、今回の記事でiPad mini等のブツ撮りで使っているカメラは、つい最近Amazonで安くなっていたから購入したFUJIFILMのX-M1という筐体です。ブツ撮りにしては暗いですが、パンケーキの35mm換算で41mm、XF27mmというレンズを付けて撮影して、JPEG撮って出し多くの写真は加工無しでお届けします。早速散財ですね。

iPad miniは軽いし、サイズが持ち運びを考慮すると、普段使いにはちょうどいいっす。A5サイズのRHODIAのノートと比べるとこんな感じ。

f:id:kamawada:20151220095308j:plain

Android端末も実験的に使いはしますが、基本Mac、iPhoneを利用しているのでiPadはそれらとの相性の良さもありますね。

ロディア No.16 横罫 オレンジ

ロディア No.16 横罫 オレンジ

2. iOSとOSXの違いを理解する

iPadは「mini」に限らず、最近では「Pro」でもiOSが採用されています。いわゆるMac OSでは無いので、MacBookなどのモバイルブックとは出来ることが異なります。例えば僕の場合、普段の仕事では、Mac OSのOSXを使いTerminalからシェルをいじりコマンドラインベースの開発を行います。しかし、iPadなどのiOSではローカルでの開発はほぼ出来ないと考えていいでしょう。iOSでは大抵のことがアプリという概念に隠蔽され、アプリでもやれることが限られているため、比較的OSXよりもやれることが少ないと言えるかもしれません。ただ、逆に言えば「使い方に特化した」アプリがたくさん出ているので逆手に取れば

iOSの方が楽チン便利やん〜

ってケースもありますね。また、例えば同一LAN内に置かれたスピーカーに音を飛ばして流すAirPlayの対応に関してはiOSの方が優れているといえるでしょう。YouTubeの音声をAirPlayで飛ばすにはiOSの方が楽チンです。

f:id:kamawada:20151220100620j:plain

このようにiOSとOSXの違いを理解しつつiOSの利点を活用するとiPad miniも活きてくるでしょう。

3. 気軽に持ち歩く

iPad miniはこの小さなサイズから気軽に持ち歩くことが出来ます。小さなショルダーバッグに入れるので便利ですね!そもそも本体のバッテリー容量が大きいので電池切らすことは中々ないのですが、保険として、また、iPhone用としてもAnkerのモバイルバッテリーも一緒にカバンの中に入れています。PowerCoreの10400だったらiPad miniを1回以上ほどフル充電出来ますね。

4. 優秀なモバイルWiFiルータ

iOSのCellularモデルならば、MacBook etc.にとっての優秀なモバイルWiFiルータになります。Appleのアカウント設定がウマくいっている前提ですが、iPadに触れずとも簡単にMacBookからテザリング出来るのは気に入っています。

f:id:kamawada:20151220102009p:plain

このように、わざわざiPad側でテザリングONにしなくても、勝手にOSXの無線LAN設定一覧に出てくる。

5. ながらで他のことをやる

iOS9からの新機能によりiPad mini 4ではSlide OverSplit Viewといった「ながら」で出来ることが増えました。例えば「ピクチャ・イン・ピクチャ」の機能を使えば、ビデオを右下に流しながらWebブラウジングなんてことが可能です。このピクチャ・イン・ピクチャ。最初、知らず知らずに挙動してて、ビックリしましたw

f:id:kamawada:20151220102821j:plain

6. 音楽垂れ流し端末

とある音楽垂れ流しサービスSpotifyの特別招待を受けたので、まだ日本で正式にサービスを開始してないものの、僕は使える状態にあります。居間にiPhone/iPad用の簡易スタンド兼充電器を置いといて、そこでSpotifyの音楽をBluetoothやAirplayでスピーカー経由で流すというのを一時期やっておりました。もちろん音源はApple Musicとかでもいいと思います。こんなイメージです。

f:id:kamawada:20151220103325j:plain

充電スタンドはiPhone用ですがBelkinのを使ってました。

f:id:kamawada:20151220103340j:plain

後述する「ガチスタンド」に比べると倒れやすくて頼りないですが、まぁ、ライトユースなら結構便利です。

7. カバーを付ける

出先で動画をダラっと見たり、ハードウェアキーボードを使う際にApple純正のスマートカバーは使いやすいです。

f:id:kamawada:20151220104115j:plain

カバーを閉じると勝手にiPadがスリープするのがいいよね!

f:id:kamawada:20151220104152j:plain

8. 電子書籍端末

主にKindleを利用して電子書籍端末としての利用は、iPad miniのユースケースのひとつです。特にAmazonのKindle端末と比べてPDFの閲覧がしやすいので重宝します。オライリーのeBookで購入したPDFとか最適かと思います。

f:id:kamawada:20151220104529j:plain

9. 漫画ビューアー

個人的にはKindleよりもLINEマンガの方が「漫画」を読むには適していると思っています。例えば、作品をシリーズで管理出来たり、購入出来たりする点が優れてますね。僕は彼岸島をこのiPad mini+LINEマンガで一気読みしたことがあります。

f:id:kamawada:20151220105322j:plain

10. 移動中の暇つぶしの道具

特に海外へ行く時の飛行機の中でiPad miniを活躍させています。電子書籍の役割を使い「小説を読む」というのもいいですが、活字だと疲れちゃうんで、漫画か動画を中心に閲覧していますね。その際は大抵、スマートカバーを付けて、ヘッドフォンまたはイヤホンを席に持ち込む形です。

11. 飛行機の中で映画を見て泣く

2年前にUSへ行った際に、ちょうど「言の葉の庭」という45分程度の短いアニメ映画が「上映開始と共に同時有料配信開始」していたので、iTunes Storeからダウンロードして持って行きました。当然iPad miniで見たのですが、すっげーいい作品で、最後ひとりで飛行機の席に座りながら、涙タラタラ流してましたw

f:id:kamawada:20151220110536j:plain

アニメや短めの動画コンテンツをiPad miniで飛行機の中で見るってのは相性が良いですね。

12. 目的地の「地球の歩き方」を見る

地球の歩き方はついつい買ってしまいますが、リアル本だと分厚くて重たいです... そこでKindle本の地球の歩き方を購入してiPad miniで見るってのをやったらわりとよかったっすね。飛行機の最中だともう「その国につく直前」なので地球の歩き方を読む動機が高まっていていい暇つぶしになります。

13. ハードウェアキーボードを選ぶ

iPad miniのソフトウェアキーボードは正直僕には打ちにくいっす。まぁiPadをビューアーとして割り切ればいいんですが、どうしても入力したい時のためにハードウェアキーボードの紹介をしましょう。色々試したけどベストはREUDOの「3200BTi」ってやつ。

f:id:kamawada:20151220111551j:plain

分厚くて少々重いのが難点ですが、Emacs派の僕としては「controlキーがAの左側にある」唯一のモバイルキーボードとして最高です。打ち心地も優れてます。

f:id:kamawada:20151220111629j:plain

14. キーボードと組み合わせてメモ帳

こうしたハードウェアキーボードを使いつつ、Day Oneなどのアプリを使えば素早く的確にメモを取ることが出来ます。大抵の打ち合わせはこの組み合わせでOKっすね。

f:id:kamawada:20151220111818j:plain

15. 障害時対応出来るかもを実現する

Web関係のサービスを運用していると万が一の障害対応がiPad miniで出来ないかどうか?を考えてしまいます。特に上記したREUDOのキーボードがあればEmacsキーバインドを利用しやすいので快適に出来る可能性があります。で、実際、最低限の対応が出来る環境を

  • SSHクライアントアプリを利用する
  • 開発サーバをVPSで立てておく
  • VPSからVPN接続出来るようにしておく

などの対策で構築することになりました。

16. SSHクライアント

OSXでは開発環境をローカルに揃えることが出来ますが、iOSではそうとはいきません。ですが、SSHクライアントアプリを使い、予めVPSなどに立てておいた環境にログインし、そこから作業を行なうことで諸々解決します。SSHアプリには「Prompt2」を利用しています。

f:id:kamawada:20151220114011j:plain

17. コードを書けるようにする

VPSには今のところLinodeのTokyoリージョンを選んで、ホストを立てています。CentOSとかまぁ何でもいいですがLinuxディストリビューションなので当然の如く、簡単に開発出来る環境は出来ちゃいます。Unicodeの扱いがPrompt2のせいなのかiOSの限界なのか分かりませんが、バグついたり、どうしてもOSXと比べると歯がゆいところありますが、既知の簡単なバグ修正くらいならば出来ちゃいそうです。

f:id:kamawada:20151220113905j:plain

18. デプロイ出来る環境を用意する

運用しているサービスがとあるVPN内にあるので、そこへホスト上から繋げられるようにしておけばデプロイもOK!これでPCを持ち歩かずともiPad miniやiPhoneで最悪障害対応出来るぜ!っていう安心感はあります。

19. テレビ&ビデオ

うって変わってエンタメな話。nasneっていうTVレコーダーと組み合わせるとiPad miniがテレビもしくはビデオになります。具体的にはnasneをテレビ回線とLANに接続し、iPad miniにtorneというアプリを入れればOK!

f:id:kamawada:20151213184359j:plain

しばらくテレビ離れしている僕ですが、nasne+iPad miniのおかげでだいぶテレビっ子になって来ました。

nasne 1TBモデル (CECH-ZNR2J01)

nasne 1TBモデル (CECH-ZNR2J01)

20. ポン出し機

ラジオや演劇の舞台などで、とあるタイミングに合わせて音を出すことを「ポン出し」と言います。僕がやってるPodcast「wada.fm」ではジングルをリアルタイムにポン出しする必要があるのでそのためにiPad miniが超活躍しています。CueZyというアプリがマジでフィットしています。

f:id:kamawada:20151220114554j:plain

21. マイクスタンドを活用する

余っていた卓上のマイクスタンドがあったので「iKlip」という製品と合わせて、頑丈なiPad miniスタンドをつくってみました。これがデスク際に置くものとして、すっげーいい感じです。

f:id:kamawada:20151220114913j:plain

元々のマイクスタンドはaudio-technicaの「AT8652」というコンパクトながらもガッシリしたモノ。これにiPad専用のフォルダーiKlipを接続します。

f:id:kamawada:20151220114920j:plain

そしていよいよ、iPad miniを横向きに挟む。

f:id:kamawada:20151220115008j:plain

安定感抜群!

audio-technica マイクスタンド AT8652

audio-technica マイクスタンド AT8652

22. 便利なバンドスコア

最近、高校まで演ってたギターを再開しようと思って、練習開始しているんですが、バンドスコアとか欲しくなります。が、今更いちいち物理本で買うのもなんだなーと思っていたら、TabProっていうアプリを発見して驚愕しています。抽象的に言えば、集合知でつくったタブ譜なりバンスコを見れるビューアーだぜ!って感じでしょうか。つまり課金すれば延々とバンスコが見れます。日本のアーティストもいくつかありますね。スクショはレッド・ツェッペリンの天国への階段のソロ部分のギター譜を表示したところです。これとスタンドを組み合わせればギターコピーも捗ります。

f:id:kamawada:20151220120054j:plain

23. 音楽再生を歌詞表示でカラオケマシン

Musixmatchというアプリを使えば、再生している音楽の歌詞表示が出来ちゃいます。iPad miniがカラオケマシンと化します。

f:id:kamawada:20151219192344j:plain

しかもスタンドを活用すれば、デスクトップマシンの隣で音楽を流しながら「歌詞を見る」ってことが出来るのでなんかいいです。

24. デスクトップ隣の垂れ流しプレイヤー

もちろん歌詞表示だけでは無く、YouTubeやビデオなどのプレイヤーを使えばPVやライブビデオ、そしてnasneで録った映像なども垂れ流して楽しむことが出来ますね。

f:id:kamawada:20151220092418j:plain

これで仕事が捗るかどうかは知りませんが...

ちなみにAirPlayを使って音をharman/kardonの「AURA」から出してます。元々AirPlayに対応しているスピーカーです。

【国内正規品】harman/kardon AURA ワイヤレススピーカー Bluetooth対応 ブラック  HKAURAAPBLKJN

【国内正規品】harman/kardon AURA ワイヤレススピーカー Bluetooth対応 ブラック HKAURAAPBLKJN

25. Bluetoothヘッドフォンでライフチェンジ

最後のTipsは飛び道具的にBluetoothヘッドフォンを紹介します。既にこの手のヘッドフォンを持っている方はよくご存知かもしれませんが「ケーブルが無くていい」ってのはいいっすね〜 最近手に入れたBoseのSoundLinkというヘッドフォンです。

f:id:kamawada:20151220120744j:plain

主にiPhoneとの組み合わせで使っていますが、ワイヤレスなのが楽でしょうがなくて、外出する時の必需品になりました。移動中、iPad miniとの相性もいいと思います。

まとめ

以上、写真多めで僕がiPad miniをどのような役割として使っているか?試しているか?を紹介してきました。特にマイクスタンド+iKlipとの組み合わせはオススメです。また、年末年始にイギリスへ旅行に行くのでその際にもまたiPad miniが活躍してくれるでしょう!以上、iPad mini活用法のAdvent Calendarをひとりで一気にやるよく分からん試みでした。

Webサービスを支える「Perlモジュール」20選

この記事はPerl 5 Advent Calendar 2015の一貫として「先走って」書いております。

ただいま、絶賛「IVS CTO Night&Day 2015 Fall」というイベントに来ていて100名ほどのスタートアップやベンチャーのCTOさん達に囲まれています。そのイベントの事前のアンケートには「社内での主力言語はなんですか?」みたいな質問がありました。さて結果発表を画像で貼り付けますと...

f:id:kamawada:20151207200903j:plain

ちょっと見えにくいかもしれませんが「Rubyが27 PHPが20」を占める中「Perlが1」という結果です。僕Perlって書いたので「Perl主力なところってうちだけ」ですねw

まぁといってもちょっとそれは過小評価な表現で、はてなさんがScalaとPerlをどちらも主力と考えていたり「アンケートに答えなかった」というガイアックスさんもPerl企業です。このイベントに参加していない企業さんでも、Perlを使っている実力のある社名がぱっと浮かびます。ただ!そもそもアンケートの選択肢にPerlがなかったので「その他自由欄」に記載しなくてはいけなかったり、写真にある通りスライド上に「Perl 1」とあるのはちょっと寂しいのです...

前置きが長くなってきましたが「Perlぜんぜんイケてるやん」って思うし、アンケートに回答した通りBoketeのバックエンド及びフロントのWebサイトはほぼ100%Perlで書かれています。Perlが担当するアプリケーションレイヤーはすごく安定稼働です。ってことでPerlでWebサービスをつくる際に必須なCPANモジュールの中から、主にBoketeで使っているものを20個ほどピックアップしてみます。元々Perlを使っている方にとっては当たり前なモジュールかもしれませんが他言語を使ってる方が「Perlもライブラリ揃ってるやん」って思ってくれるとこれ幸いです。

ではいってみましょー

基本モジュール

1. Mouse

Perlでも素でOOPは出来るのですが、具体的なアプリケーションレベルだとこのMouseを使ってクラスをつくってます。継承、Roleの概念もあります。面白い機能の一つにlazy_buildがあります。これはアクセッサを定義する際にlazy_buildを指定すると「初めて呼ばれた際に」デフォルトの値をセットしてくれるというものです。

use Mouse;
use LWP::UserAgent;

has ua => ( is => 'ro', isa => 'LWP::UserAgent', lazy_build => 1 );

sub _build_ua {
    return LWP::UserAgent->new();
}

sub get_content {
    my ($self, $args) = @_;
    my $url = $args->{url};
    my $res = $self->ua->get($url);
    return $res->content;
}

Mouseの他にも元ネタだったり派生したものとしてMooseやMooもありますので、これらを使えばOOPは快適です。

2. Data::Validator

メソッドの引数の型を含む「チェック」に使っています。上記のコード例にあるget_contentをより厳密にしたい!なんて時はこんな感じで使います。

use Data::Validator;
...;

sub get_content {
    state $rule = Data::Validator->new(
        url => {
            isa => 'Str',
            default => 'http://yusuke.be/',
            optional => 0
        }
    )->with('Method');
    my ($self, $args) = $rule->validate(@_);
    my $url = $args->{url};
    my $res = $self->ua->get($url);
    return $res->content;
}

3. Try::Tiny

モダーンにエラーハンドリングを書けます。

try {
    die "dying message...";
} catch {
    warn "Error: $_";
};

4. Path::Tiny

モダーンにローカルファイルのパス解決をしてくれます。それに加えて、ファイルの内容を舐めるslurpや書き出すためのspewなどもあります。

use Path::Tiny;

my $file = path('foo.txt');
my $text = $file->slurp();
print $text;

Webのバックエンド

5. Mojolicious

Perlにももちろん様々なWebフレームワークがありますが、サクッとつくったりある程度の規模かつViewまで担当するって時にはこのMojoliciousを僕は使ってます。 Perlには珍しくアグレッシブに後方互換を切り捨てるという開発方針があったりするのですが、まぁそれは置いといて、このフレームワークはRubyで言うSinatraとRailsの中間みたいな感じですごく使いやすいです。

6. Plack

フレームワークを使う分には触ることはないのですが、より特化したケースやパフォーマンスを重視したい際にはPSGIの実装であるPlackを素で使います。RubyにおけるRackの立ち位置なのですが、Perlの場合だとこれから紹介するいくつかのモジュールと組み合わせることによって実用的なアプリをつくりやすいです。

7. Router::Boom

例えばですが「このパスにアクセスが来たらこうする」というディスパッチャとしてRooter::BoomをPlackなどと組み合わせています。パス/entry/100に来たリクエストをコントローラEntryshowというメソッドで処理するなんて場合はこんなコードで再現出来ます。

use Router::Boom;

my $router = Router::Boom->new();
$router->add(
    '/entry/{entry_id:[0-9]+}',
    { controller => 'Entry', method => 'show' }
);
my $dest = $router->match('/entry/100');
# => {controller => 'Entry', method => 'show', entry_id => '100' }

8. JSON::RPC

BoketeではWeb APIのフォーマットとしてJSONRPCを採用しているので使っています。アプリ内では継承して若干改造しているのですが、まぁ問題なしで使えております。

9. OAuth::Lite2

これもBoketeアプリの認証認可という点でサーバ側及びクライアント側でも利用させてもらってます。他にもOAuthの実装はあるのですが、作者が日本人の方でよく熟考して実装されている、かつ、実装もシンプルなのでオススメです。というか今回紹介しているモジュールの多くは日本人の方がメンテしてくれているので「困った時に聴ける」「開発意図が分かる」ので良いです。

10. Starlet

PSGI対応のハイパフォーマンスWebアプリケーションサーバーです。なので上記したMojoliciousやPlackで実装したアプリケーションを本番環境で動かす際に必要となります。他にも、Starman、GazelleなどPSGIに対応したサーバーソフトがあるので用途に応じて使わけるといいでしょう。Server::StarterとあわせるといわゆるGraceful Restartも出来るし、運用上Appサーバーレベルで異常が起きたことがほぼ無いので安心感あります。

Webアプリに便利

11. FormValidator::Lite

Webフォームの値を検証することに特化したライブラリです。なのでバリデーションをコントローラ層でもモデルでもどこでも自分が好きなところでやっちゃっうことが出来るでしょう。ベーシックにコントローラ部分でやる例としてMojoliciousをつかった例はこのようになります。

use Mojolicious::Lite;
use FormValidator::Lite;
FormValidator::Lite->load_constraints(qw/Japanese/);

post '/' => {
    my $c = shift;
    my $validator = FormValidator::Lite->new($c->req);
    my $res = $validator->check(
        name => [qw/NOT_NULL/],
        name_kana => [qw/NOT_NULL KATAKANA/],
        {mails => [qw/mail1 mail2/]} => ['DUPLICATION'],
    );
    if ($validator->has_error) {
        return $c->render( text => 'Not valid!' );
    }
    $c->render( text => 'Valid!' );
};

app->start;

12. HTML::FillInForm::Lite

テンプレートなどを使って描画するHTMフォームの個々の要素のそれぞれに値を充填することが出来ます。ようは「戻るボタン押したら入力したのが全部消えてる><」問題が解決出来ます。

13. HTML::Scrubber

MojoliciousのテンプレートMojo::Templateをはじめ、テンプレートエンジンには大抵HTMLエスケープ処理を容易にする、もしくは、デフォルトでエスケープされる機能がついています。が、場合によっては生HTMLをデータで持っていて、scriptタグ等除去してそのまま描画したい、なんてことがあります。その際にこのHTML::ScrubberでタグをWhite or Black List形式で指定してセーフティにしています。

DB操作

14. Teng

ガッツリしたO/R MapperもあるんですがTengは厳密にはO/R Mapperとも言えないんじゃないか!ってほど簡素なDB操作をするためのモジュール。なので勝手にJOINが走るなんてことがないです。インターフェースもシンプルで直感的なのが好きですね。

my $iter = $db->search(
    'entry',
    { category => 'podcast' },
    { order_by => { id => 'desc' } }
);
while(my $entry = $iter->next) {
    say $entry->title();
}

15. SQL::Maker

Tengは生SQLも受け付けるので、複雑なクエリを発行したい場合や条件で分岐したい時などはこのSQL::MakerでクエリをつくってからTengに渡すなんてことをしています。ようはこれ書きやすいクエリビルダーです。実はTengの内部でも利用されています。

その他

16. Imager

画像を扱う場合はGDやImageMagickのラッパーが存在するのでそれを叩けばいいのですが、このImagerの方がAPIがPerlishで使用感が良いです。

デバグとテスト

17. Devel::KYTProf

データベースやmemcachdへのクエリやHTTPのリクエスト状況などを開発しながら見ていくことは非常に重要です。その際にコード内で use Devel::KYTProfするだけで標準出力に

0.228 ms  [Cache::Memcached::Fast]  get dbs:54e98de3b9aed9064e1834e0d6ac3a636a981f9f  | Bokete::DB::Row::Boke:48

とかでちゃうの素敵です。

18. Test::mysqld

MySQLをバックエンドに持つアプリケーションをテストする際に便利すぎる。テストを走らせている間だけテンポラリーなmysqldが立ち上がります。

19. Harriet

大抵proveというコマンドで複数ファイルにわかれたテストをまとめて実行するのですが、Test::mysqldをprove中に使いまわしたりってのに使ってます。BoketeではMySQLだけではなく、MemcachedとRedisをテストの際、こいつで立ち上げてたりします。

20. Test::JSON::RPC::Autodoc

手前味噌で恐縮ですが、JSONRPCを喋るPlackアプリケーションに対してテストを簡便に記載できるだけじゃなくて、APIドキュメントもMarkdown形式で書きだしてくれるモジュールです。Ruby実装のautodocをモチベーションにしてつくりました。Boketeではこれを使って吐き出したMarkdownをGitHub上で見てもらうことで仕様の共有をしています。

まとめ

以上、実践で使用しているモジュール群から「特徴的で」かつ「これがなきゃ困るぜ!」というライブラリを20個紹介しました。Perlはグルー言語とも呼ばれこうしたCPANモジュールを組み合わせて自分達なりにアプリケーションをつくっていけるので、非常に楽しい側面があります。それぞれドキュメントへのリンクを張っているので興味があれば見てみて下され!


Perlはじめる時にオススメの2冊

初めてのPerl 第6版

初めてのPerl 第6版

続・初めてのPerl 改訂第2版

続・初めてのPerl 改訂第2版

Google BigQueryがサービスのデバグに役に立った話

GoogleがCloud Platformの一貫として提供するBigQueryというサービス。データウェアハウスともビッグデータ解析ツールとも言われていますが、今回は「サービスのデバグに便利」ということをガチの実話を交えて話してみましょう。

f:id:kamawada:20151208094923p:plain

BigQueryざっくり紹介

BigQueryはの機能をわかりやすく言うならば

億超えるようなレコードへのクエリでも10秒程度で結果を返してくれる便利なカラム型データベース

と表現出来るでしょう。特徴として以下があげられます。

  • 事前に簡単なスキーマ定義を行う
  • CSVやストリーミングでデータ挿入
  • 特化したSQLでSELECT文を発行
  • 更新系はSQL使って叩けない
  • リアルタイムで情報を取ってくるためのデータストアには向かない
  • 重たいクエリを大量に実行しなければ... 安い

Amazon Web ServicesだとRedShiftが対応するサービスなのですが、カジュアルに使える意味でBigQueryを選んでます。

アクセスログ+αを流し込む

僕が開発しているBoketeでは、Webやモバイルアプリ含む全てのサービスは必ず「JSONRPCで実装されたWebAPI」を参照することにしています。このアーキテクチャ云々に関しては、なかなか上手くいっていて、詳しく書きたいところですが、また次の機会に。

で、このアーキテクチャですと、WebAPIのアクセスを見ればクライアントソフトウェア、しいては「ユーザー」の行動を把握することにつながります。そこで僕らはBigQuery事始めとしてApache Common Log相当の情報にアプリケーション固有の簡単なユーザー情報を付加し、BigQueryにストリーミングで逐一流し込んでいます。実装を簡単の流れを説明すると

  1. WebAPIアプリがJSON形式のログファイルをローカルストレージに書き出す
  2. 上記アプリと同じホストで動かしているfluentdがログをtailして集約サーバに投げる
  3. 集約サーバのfluentdがそれを受け止めBigQueryに投げるpluginを使ってデータ挿入

という具合です。

バグの原因追求の事例

さて本題。最近あった事例で、バグの原因追求にBigQueryが役に立った件を紹介します。

一部のとある状況下、具体的に言うと、モバイルアプリの「とあるOSのとあるバージョン」で不具合が生じていました。その場合

他の環境だと動くからネイティブクライアントのバグだよね〜

と、その責任を、アプリ担当である陳さんにある時期まで委ねてたのですが、どうも解決しないらしい。ただ問題は「認証周り」で起こっている可能性が高い。そこで、一度、BigQueryの管理画面からクエリを発行。ユーザーの動向を見るとやはり「特定のOSかつバージョン」でバグってることがすぐにわかりました。

f:id:kamawada:20151208095020p:plain

ただ、これだけだと原因追求としては甘いので、急いでBigQueryのスキーマとアプリのコードを一部を変更し、今まで取れてなかった、認証用のTokenもログギングしてみました。そして上記した通り、バグを踏んでいるようなユーザーのToken一覧を取得。よくよくDBと照らし合わせると「そのToken存在しないじゃん!」ってことになりまして「ここか〜」という具合。急いで、陳さんに連絡して「有効期限の切れたTokenのリフレッシュ処理」がうまくいっているかどうか?を確認したところ「そのバージョンのみ」諸々の事情で出来てなかったことが判明。これでバグの解消につながったのです。

まとめ

このように、BigQueryは雑にデータ放り込んでおいても、あとあとの「ログ追い」が非常に楽です。SQLで条件が指定できるし、多量のレコードあろうとも10秒前後で結果は返ってくる。さらにはSQLを書けるConsoleがついてくるのでお手軽です。便利に漁れるログの保全庫としてBigQueryを使うのもありでしょう。また、こうした用途の他にも、ちょうど今、TableauやBIMEなどのBIツールと連動させたデータ分析を試しているところなので、楽しいです!

PS.

そいや、現在、Amazon Web Servicesさんがpowered byなCTO Night&Dayというイベントに来ています...


Google BigQuery

Google BigQuery

  • 作者: Jordan Tigani,Siddartha Naidu,Sky株式会社玉川竜司
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2015/03/23
  • メディア: 大型本
  • この商品を含むブログを見る

Google BigQueryではじめる自前ビッグデータ処理入門

Google BigQueryではじめる自前ビッグデータ処理入門