八発白中

技術ブログ、改め雑記

Day 23: Psychiq

これは fukamachi products advent calendar 2016 の23日目の記事です。

今日はPsychiqについて話します。

はてなでの経験

僕の経歴の中ではてなで働いていた時期はあまりOSS活動もせず、Common Lispを書いていませんでした。仕事がPerlということも理由の一つでしょう。

けれど直接的ではないにせよはてなでの経験は少なからず僕の活動には影響を与えています。Webアプリケーションのサーバーサイドからフロントエンドまで担当でき、どのようにWebアプリケーションを構成し運用するかを学ぶことができました。どこがボトルネックになりやすいのか、長期的に運用する上でどういう面が問題になるのかなどの生きた知見が得られました。

はてなではWebフレームワークから作ることもそう珍しいことではなく、その経験はCaveman2の開発にも活かせたり。

その過程でCommon Lispに足りないものもありました。それがメッセージキューでした。

メッセージキュー

メッセージキューはアプリケーションで実行に時間がかかりそうだが同期的にやらなくてもいいものを他のプロセスやスレッドに投げて非同期で実行できるミドルウェアです。

はてなではTheSchwartzを使っていました。サムネイル画像を作ったり動画の変換、通知やその他バッチ処理を走らせたりするのに使われていました。

最近だとAmazon SQSとか使ってるところが多いんでしょうか。

必ずしもすべてのアプリケーションで必要なわけではないですが、必要になったときにCommon Lispになければ導入が困難になるかもしれません。

Lesque

そこで2014年の1月に作ったのが「Lesque」です。

これはRubyのResqueを元に作ったメッセージキューでした。作ったタイミングとしてははてなを退職する少し前くらいで、それから新しいWebサービスを作るのに必要だと見越しての開発でした。

blog.8arrow.org

Psychiq

さて、Lesqueを使ったはいいものの当初の予定とはかなり違って、使う機会のないまま日は経ちました。

そして2年後、とうとうLesqueを使えるかもな、というタイミングで見てみると、そのコードは古いですしCommon Lispの環境にもついていけておらず継続して開発するのもためらわれるものでした。この2年でRoswellがスタンダードになったにも関わらずRoswellスクリプトが提供されていなかったり、Travis CIでのテストが行われていなかったり。

メッセージキューの世界でも世代交代がありました。Sidekiqという新しいプレイヤーが現れました。Resqueのプリフォークスタイルではなく、スレッドを使うため高速に動作し、シンプルなアーキテクチャであるということが売りのようです。

そこで新たにSidekiqをCommon Lispに移植することにしました。それが「Psychiq」でした。

blog.8arrow.org

落語Bot

とはいえPsychiqもそれからしばらく使うことはなかったんですけど、先日とうとう使う機会がありました。

11月の末にLINE Botの「落語Bot」をリリースしました。これは落語の定席や落語家のスケジュール検索ができるLINE Botです。現在、その落語会情報のクローリング部分にPsychiqを使っています。

Psychiqを使ってみてJonathanのバグを見つけたりCL-DBIの問題を見つけたりとかありましたが今のところ順調に動いています。

おわりに

PsychiqはGitHubで公開されており、現在のStar数は16です。

明日のアドベントカレンダーは24日目のMitoについてです。お楽しみに。