家から近い海沿いの金持ちの家やバーベキュー屋に置いてある黒色で円形のバーベキューグリルが突如として欲しくなってしまい、勢いで買ってしまった。コストコで激安販売されているというネット上の情報を目撃して行ってみたけど今は売っていないみたいで買えず、コストコの店内からヨドバシのオンラインショップで購入。翌日届いた。あいにくの雨でまだ火入れできていない。一緒にスターター(チムニーというやたら可愛い商品名)も買った。なんか火起こしが劇的に楽になるやつらしい。コストコで豆炭も大量購入しておいたのでバーベキューやるのが楽しみ。ただグリルを買うので散財してしまったのでバーベキューやるにしてもしばらくは肉なしかな…。

コストコ初めて行った。年会費は税込み4752円だった。高い。Weber のバーベキューグリルが格安で買えるという情報をネットで目にしていたのでそれ目当てで行ってみたけど売ってなかった。

うちからコストコに行くためには高速に乗らないといけない(乗らなくても行けるけど時間が二倍くらいかかるし運転疲れる)。すると毎回往復するだけで交通費がガソリン代合わせて2000円ほどかかる。多少安く食材が買えたとしても交通費を加味するとあまりコストパフォーマンスよくない。コストコでしか買えない○×が欲しいとか、IKEAのついで(同じ方角にある)に、という理由で行く分には良さそう。

コストコ、グラムあたりの価格は安いのかもしれないけど、売られている単位が巨大で高い。牛肉とかめちゃ安く買えるのかと期待して行ったけど意外と800円/100gとかするし、しかもそれが1kg単位でパック詰めされてたりするので8000円くらいして一般人には手が出せない。というかグラム800円もしたらアメリカ産じゃなくて国産の和牛が買える。高いわ。

チーズやソーセージも良いものあったけど塊が巨大で高い。とにかく安く買い物したい、というような人には向かない場所だと思った。

そもそも売り方の発想が日本向けじゃなくて、あんなに巨大なパックで食材を買うのは住宅事情的に無理。日本の小売業者は消費しやすいパッケージで消費者の需要に合わせて小口で販売してくれててありがたいなぁ、さすが日本人ならではの細やかな心配りだなぁと思えて感心した。戦争になったらコストコのような余ったり無駄がでても良いからがんがん作って戦地に届けるというやり方の方が効率よく物資が行き渡りそう。日本の小売業者のように小分けにして小さく割り振るみたいなやり方は戦地での物資不足を招きそう。やはり第二次大戦は負けるべくして負けたんだなぁと思った。

なおコストコはアメリカンエキスプレスかUCカードのコストコバージョンみたいなやつしかクレジットカード決済に使えない。なので会員登録するときにアメックスへの入会を勧められたけど年会費高いし分不相応だと思うので断った。しかしレジに並んでいるときに少し後悔した。コストコはまとめ売りしているので商品の単価が高く、大して買い物してなくてもすぐ3万円くらいになってしまう。これを現金で支払うのは自分のキャッシュフロー的には厳しい。アメックスを持てる人か現金払いも余裕でこなせるリッチマンしかコストコは楽しめない。お金持ってる人がアメリカの物量に脳みそやられて金を垂れ流す場所という感想を持った。

せめて家の近くにあるなら小洒落たオードブルやサラダ、割とうまいパンなんかを時々買いに行ったりできて便利だろうけど、離れたところに住んでいる人が高い金払って会員になり交通費かけて買い物に行くのはもったいないなと感じた。

京都であった RubyKaigi 2016 を観覧してきた。 RubyKaigi 、つくばであった 2010 がこれまでの人生での唯一の RubyKaigi で、人生二度目の観覧だった。

RubyKaigi 2010 の思い出

一度目のときは少し前に増田に上がってた勉強会ゴロ状態(受付の人と技術書を買ったジュンク堂の人と以外誰とも会話をせずに帰宅)だった。

ちなみにこのとき ESM の企業発表を見に行って、 ESM に転職したばかりの hsbt さんの姿を初めて目にした。なんか入社したばかりなのに社内ブログで暴れてて愉快、みたいな紹介のされ方だった。その後同じ会社で働くことになるとは思いもしなかった。

ESM の発表はとにかく鮮烈に印象に残ってて、ペアプロのライブコーディングだった。 ursm さんが CRM か何かの開発を実演してた。まず最初に落ちるテストコードを書いて、その後にパスするプロダクトコードを書く、というやつを初めて目にして、田舎で HTML コーダーをしつつちょっとしたプログラムを書いてた自分は衝撃を受けた。黒い画面の Vim で高速にコードを書いていく様がとにかくかっこよかった。はやくこういう感じでコード書けるようになりたい、と思ったものだった。

クックパッドの企業発表みたいのも聞きにいって、このときクックパッドもまだそんなにエンジニアの数多くなかったはずで、同じくはてなから転職してきたばかりのセコンさんが話してるのを聞いてトートバッグもらって帰った。

YAPC::Asia Tokyo 2015 の思い出

去年の夏、 YAPC で東京に行って、このときはペ社時代の知ってる人としゃべったりして無言の帰宅は避けられた。

YAPC 2015 は気がついたときには懇親会の申し込み締め切られててどこにも行けず、一人浜松町の宿泊先の近くの「とにかく安くて量が多い」と食べログにレビューが書いてある寿司屋に入って一人で寿司を食べたら寿司がねちゃっとしてて具合が悪くなったりしてた。

RubyKaigi 2016

今年も発表する側にまわったわけではないので一般ピープルである点は同じだったが、これまで話したことなかった人と話せたのがよかった。

取り分けよかったのが Fjord 社の komagata さんと話せたことだった。今後の Lokka の方針をどうするか開発者会議的なものを開催してババっと方針を決めましょう、という話をした。 Lokka 、思い入れがあるので積極的にメンテナンスに関わって今後も長く使い続けていきたい。

一日目

一日目は Kaizen Chat についてのブログ記事を公開するというタスクがあって、 Matz のキーノートとかはあまりじっくり聞けなかった。記事公開後に会社のブースで自分のシールを配布したりして公私混同してた。

今年の RubyKaigi は懇親会の枠が大きかったおかげで申し込みそびれるということにならなくてよかった。

オフィシャル懇親会で Fusic 社の k1low さんと初めてゆっくり話をした。Fukuoka.rb で顔を合わせることあっても一緒に酒飲んだりする機会なかったので RubyKaigi に来て初めてじっくり話すという感じだった。

ヒトデさんとその愉快な仲間たちの皆さんとも話して、 shikakun はオリジン弁当ばかり食べてるくせにやたら調理器具を持っていて不可解だとか、風呂蓋付きの浴室がある部屋にすんでいていけすかないという話をした。

Twitter で 8 年くらい前にハゲクラスタとしてわいわいやってた send_ さんとも再会できて、お互い帽子をかぶった状態でいまの仕事の話をしたりした。

オフィシャル懇親会のあとは、ヒトデさんオーガナイズの二次会に参加させてもらった。デンエンという物価が崩壊してる飲み屋に行ってタワーから注いで飲むビール飲みまくった。クックパッド社の著名エンジニアの皆さんと対面に座ったけど人に自慢できるような OSS とかなくて雑魚いので自己紹介に困ったが、とりあえずこういうアイコンのものですと言ってシールを見せたら「あ、なんか見たことある」という感じになったのでシール便利だった。

二日目

朝一番の Justin Searls さんのリファクタリングについての発表がとにかく面白かった。

Fearlessly Refactoring Legacy Ruby - RubyKaigi 2016

去年 YAPC で GitHub の人が話してた sicientist と似てるけど、リファクタリング前後のコードで A/B テストをする gem の紹介。新しい方のメソッドが例外投げたら rescue して古い方のメソッドを実行するというのが面白かった。本番にも安心して投入できるとのこと。

三日目

午前二番目に tkawa さんの HTTP クライアントについての発表聞いた。 HTTP クライアント乱立しててひどい、 API をラップしてリモートサーバー側のクラスを再現するような異常なクライアント多くて、 REST API とは一体何なのか状態だ、みたいな話だった。言われてみれば確かにそうかもしれない。独自の API クライアント作ることなく、 Rack が Rack Middleware を use して拡張していくみたいに、 HTTP クライアントの側でも Middleware を use していくのがよい、そこで Faraday ですよ、という話で、あ、 Faraday ってそういうことを目的にしてたんだと膝を打った。

午前中最後の Chris Arcand 氏の発表が面白かった。

Deletion Driven Development: Code to delete code! - RubyKaigi 2016

Ruby のコードを解析して呼ばれてないメソッドを調べる、という発表だった。実際に Rails プロジェクトとかで使うのは大変そうに見えたけどいまから君のプロジェクトに投入できるよ、 Rails もダイジョブみたいなことを言ってた気がするのでスライド見直したい。

最後のセッションの前、一日目のデンエン会で知古を得た pastak さん見かけたので uiureo さんを紹介してもらって話をした。 uiureo さん、初対面だけど話しやすくて好青年な感じだった。 r7kamura さんとも少ししゃべらせてもらってよかった。

飛行機の時間の都合があったのでクロージングまでは残らず、最後のキーノートの途中で離席して帰途についた。ホールを出ようとしたところで滑り込みで会場にやってきた元同僚の hisaichi551 さんと邂逅して自分のシールを何枚か雑に渡した。ゆっくり話がしたかった。

京都での開催について

京都での開催良かった。個人的には福岡からだと東京に行くよりも京都の方が近いので移動が楽で良い。首都圏からの大多数の参加者も京都に宿泊して参加するので夜通しどこかで RubyKaigi 関連の飲み会が開かれてる感じで祝祭感あった。夕方から観光したりできて海外からの参加者も満足度高いのではないかと思う。京都国際会館のインフラも素晴らしかった(施設、庭園、食事内容)。スポンサーの提供で振る舞われたお弁当おいしかった。

総合的な感想

RubyKaigi 、海外からのスピーカーの発表はどうやってよいコードを書くかとかリファクタリングとかの話が多い。日本人の発表者の人は Ruby を開発する方の話が多い。( Ruby コミッターのほとんどが日本人だから)。なので Ruby 本体の開発に興味ない人( Ruby 開発者ではなく Ruby ユーザーなプログラマー)はぽかんとすることが多いかもしれない。自分は結構ぽかんとしてた。

あと今回多いと感じたのが Concurrency についての話だった。どうやって Ruby で並行性を上げるかという話。 Thread は難しいので素人は手を出すな、ということはわかったけど Ruby 3 の Guild というので素人でも Concurrent なプログラムが書けるようになるかどうかは今ひとつわからなかったので資料を読み直したい( reuibld.fm の Episode 158 を聞くと良い復習になりそう)。 Ruby 3 に並行処理の使い勝手が向上する前に、他の言語で並行処理について学んで準備をしといた方が良さそうだと感じた。

2010年の勉強会ゴロ状態のときに比べれば、何人かの人と話したりシールを配ったりすることができて、有意義な時間を過ごすことができたと思う。ただアイコンの気持ち悪さで認知されるよりも書いたソフトウェアの知名度で認知される方がよいので、カンファレンスに行って自己紹介するときに「○×というソフトを作ってます」と言えるようになりたい。仕事だけじゃなく、オープンソース活動もやっていけるように頑張りたいな、と気持ちをあらたにした会でした。

Kaizen Chat とは

Kaizen Platform 内でユーザー同士がコミュニケーションを取ることができるサービス。

  • Kaizen Platform のユーザー
    • カスタマー
      Kaizen Platform と契約し、 A/B テストツールや Growth Hacker によるサイト改善のデザイン案を募集
    • Growth Hacker
      募集に応じてカスタマーサイトのデザインを改善するデザイン案を投稿
    • Kaizen Platform 社員
      カスタマーと Growth Hacker の間の調整役

Kaizen Platform 内のユーザーが外部のツールや電話を利用して行っていた伝言ゲーム的なコミュニケーションを置き換えて、直接コミュニケーションを取ってもらうようになることが目標。

サーバーサイド 2.5 人、フロントエンド 2 人で 2 ヶ月くらいで作った。

構成

数多く存在しているマイクロサービスの中の一つとして実装。

フロントエンド

  • React
  • 多分他にもバズワード的な仕組み・フレームワークを使ってる(後で調べて書きます)

バックエンド

  • Ruby 2.3
  • Rails 5
  • MySQL 5.7
  • Sidekiq
  • Redis
  • Pusher (SaaS)

Rails 5 で開発

Rails 5 は Release Candidate だったが利用することに。

リリース直後に Rails 5 出て将来的に Rails 4 から Rails 5 へのアップデートにリソースを割くの避けたかった。(別の Rails アプリを 3 から 4 に上げたときには大変だった…)

Rails 5 で開発して困ったこと

あんまりないが強いて挙げるとすれば以下。

  • 個人的に好きで前職の頃から使ってた gem ( モデル層のバリデーションのテスト書くのが楽になる accept_values_for ) が Rails 5 対応してなかったので Pull Request 送ったりなど
  • ActiveResorces など Rails 5 対応が遅かった gem もあったが github 直接参照して対応版がリリースされたら rubygems.org を見るように変えるなど(普通です)
  • 社内の Rails プロジェクトで共通して使ってる gem を Rails 5 対応させるなど

WebSocket は Pusher (SaaS) を利用

Pusher を使った。 ActionCable 使って自前実装するのは考えなかった。

  • Rails 5 なら ActionCable では????
    • 急なアクセス増などを考えて SaaS を使うことに
    • WebSocket に関してはインフラのことを考えなくてよくなる
    • 無理に自前実装せず、少々金がかかったとしても、外のリソースを利用できるときは SaaS を使う(社風)
      大人の事情で使えない、とかがないのがよい
  • フロントエンド側も Pusher から SDK が提供されており楽できた(はず)
Pusher との通信の詳細
  • CRUD のうち Read だけ Pusher 経由で行う
  • Pusher は Create/Update/Delete も担えるけど Rails アプリと Pusher とクライアントの間のデータの流れを一方向にしたかった

図

感想

Sidekiq 速い

  • 社内で初めて Sidekiq を導入したけど速かった
  • Thread で並行処理をするのでスレッドセーフな作りにしないといけない(利用 gem 含む)
  • capistrano-sidekiq が sidekiq 本体と機能かぶってるところがあるのがちょっと残念

マイクロサービス間の通信が課題

  • マイクロサービス間でなるべく疎結合になるように、相手のサービス側の DB を直接参照しないように頑張る(気合い)
  • スピードが遅くなってしまうところはキャッシュする

BFF 的な考え方必要

  • ActiveModelSerializers 使ってると Serializer が乱立して収集付かなくなる
  • Frontend から必要なフィールド渡してもらってそれをシュバッと返すおシャンティな API にしていきたい

今後

  • モバイルクライアントの開発
    チャットなのに携帯電話で返信できないとかダメですよね…
  • 通知の充実
    チャットなのに通知こなくて気がつけないとかダメですよね…
  • 画像ハンドリングの充実
    負荷やジョブとの戦いに突入します。

Kaizen はチャットの会社じゃないので、自分たちがチャットの機能を作ることはどんな意味があるのか、ということを考えながら機能追加していきたいですね。

なお Kaizen Chat は Kaizen Platform にアカウントをお持ちの方でしたらどなた様でも無料でご利用いただけますのでもしよかったら触ってみてください。僕にファンレターを送ることも出来ます。

また Kaizen Platform, Inc. は本日( 2016-09-08 )から開催されている RubyKaigi 2016 にブースを出しておりますので CTO (リクルート時代に chouseisan 作ってた)やエンジニアと話してみたい人、 Kaizen Platform ロゴ入り手ぬぐいが欲しい人、僕のアイコンのステッカーが欲しい人はお気軽にお越しください。

乗るしかない、このビッグウェーブに、という感じで Let's Encrypt を使って無料の証明書をゲットし、ブログを https で公開するようにした。

証明書の設定とか難しそうで敬遠してたのだけど、実際やってみると思ったより簡単だったが、いくつかはまりポイントあったので書いておきます。

自サイト内の 'http://' を 'https://' に書き換える

CSS やテンプレート内で http://hogehoge.com となっているところを //hogehoge.com に変える。本文中の画像の URL も 'https://' に書き換える。ちまちました作業。 Amazon の画像の URL も https に対応したドメインに変えないといけない。

S3 に独自ドメイン当てて使っている場合、ここも証明書がいる

画像は S3 から配信していて、独自ドメイン( resources.portalshit.net )を当てて使ってたんだけど、ブログ本体を SSL にしたのに画像配信サーバーとの通信が非 SSL なので mixed content といって怒られる。

S3 単体で独自ドメインを使って SSL 通信することはできないので、 CloudFront を経由して CloudFront に Let's Encrypt で作った証明書を登録して使う。この S3/CloudFront 用の証明書の発行・登録のプロセスが若干面倒くさい。更新のときに手順忘れてそうで心配。 Let's Encrypt プラグインを使うようにした方がよさそう。

他、 Route53 で CNAME 当てて S3 に向けていたのを CloudFront を向くように変える必要もあり。

個人ブログごときで CloudFront を使うことになるとは思わなかった。

Lokka の管理画面が SSL 通信に対応してない

やっと mixed content の警告消えて記事を書こうとしたら、なんと管理画面が SSL 非対応でブログにログインできない。 Padrino の url メソッドが protocol の指定を出来ないようだった。オーバーライドとか試してみたけどうまくいかなくて困ってたところ、 rack-ssl-enforcer という gem を発見した。こいつを RACK_ENV=production のときだけ use するようにして乗り切った。 'http://' となってるのを Rack 層でえいやっと 'https://' に書き換えてくれる。

感想

Let's Encrypt 、本当に簡単で最高便利だと思った。オレオレ証明書発行するより楽っぽい。いい世の中になったと思う。ただ有効期限が短いので更新を忘れないようにしないといけない。更新の自動化までやってしまいたい。

ウェブサーバーを Nginx から H2O に変えるのとかまでは手が回ってないので自動更新と一緒にやりたい。

ローストビーフ

最近ほとんど毎週ローストビーフ作って食べてる。近所に激安スーパーのルミエールという店があって、オーストラリア産の牛もも肉が150円/100gくらいで売ってる。めっちゃ安い。

オーストラリア産の牛肉は脂身が少なくてさしとか皆無なので普通に焼いて食べるには固すぎるけど、ローストビーフのような真ん中はレアの状態で、かつうすーくスライスして食べるのにはちょうどよい。

前もローストビーフについての記事書いてるけど(ローストビーフうまい)、最近知見がたまって味が安定してきたので改めて書いておく。

材料

  • 牛もも肉ブロック
  • こしょう
  • にんにく
  • 国産牛の牛脂(あれば)
  • 赤ワイン(あれば)

道具

大体以下がそろってるとよい。

  • パン切り包丁
  • 鉄のフライパン
  • 250℃で焼けるオーブン

手順

  1. 肉を買ってきて塩とこしょうをすり込み、スライスしたにんにくをはっつけてラップでくるんで冷蔵庫で1時間くらい寝かせる
    • 塩はちょっと引くくらい振った方がよい
  2. 冷蔵庫から取り出して鉄のフライパンを熱し、白い煙が出てくるくらいまで温まったら油をひいて一気に焼く
    • テフロンでこれやると多分すぐフライパンがダメになる
  3. 表面すべてに焼き色がついたら赤ワインかける
    • 赤ワインなければ省略してもよい
  4. ワインの水気がなくなったら火から離す
  5. オーブンに入れて 250 ℃で 16 分くらい焼く
  6. オーブンから取り出してすぐには切らずに 10 分から 20 分くらいアルミホイルにくるんで休ませる
    • すぐに切ると肉汁が出できてダメ

これで大体完成。ソースとかは作ってもよいけど、わさび醤油とかで十分うまい。テキトーな焼肉のタレでもよい。

CHANGES

前書いたやり方では下準備のときにニンニクをすりおろして肉に揉み込んでたけど、ニンニクは焦げつくのでフライパンで焼くときによくないことが判明してすり込むのやめた。スライスしてはっつけるくらいでよい。

ハーブ類もなくても良いことに気がついてやめた。畢竟するに我々は日本人なのだから、肉はわさび醤油で食べるのが一番うまい。わさび醤油で食べるときにハーブの香りは邪魔なのである。なくてよい。

また以前はオーブンを使ってなかったけど、オーブンを使わずに表面を焼くだけの作り方では中の方までなかなか火が通らず牛たたきみたいになってしまうのでオーブンを使うようになった。文明の利器は使うべきである。

番外編

バーベキューのときにローストビーフするのも良い。炭火で焼くと中の方までじんわり火が通って最高。↑の手順1のあと、バーベキューの網の上に載せて焼く。網焼きの場合は表面がちょっと焦げ気味になるくらいまで焼くとちょうど良い。いい焼き色になったらアルミホイルで包んで10分から20分くらい休ませる。赤ワインとかぶっかけなくても十分うまい。

薄切りしなければ顎が崩壊

切り分けるときにはパン切り包丁が最高。普通の包丁ではうすーく切ることが出来ない。ローストビーフのうまさは肉の薄さで構成される部分が 5 割くらいあると思う。特にオーストラリア産牛のもも肉のような赤身の中の赤身といえるような脂がほとんどない硬い肉は、薄くないと顎が疲れるだけで食べられたものではない。ローストビーフ用専用包丁もあるっぽいけど高いのでうちはイオンで買った1500円くらいのパン切り包丁使ってる。パンも切れて便利。

焼肉に行くと安いところでも一人3000円くらいは絶対かかるし、お酒飲んだら5000円とか軽く飛んでいくと思う。しかも出てくる肉は合成肉みたいなやつ。それだったら安い肉買ってきて自分で焼くのが良いと思う。とても満足感がある。

追記

記事を書いたあとに調べてみたら、肉に塩を振ってから時間をおくのはダメっぽい。肉は焼く直前に塩を振らないと水分が抜けて固くなってしまうそう。加えて焼く少し前に冷蔵庫から取り出して室温に戻さないとダメっぽい。なのでにんにくのスライスをはっつけつつ室温に戻して、塩とこしょうは焼く直前に振るのが正解だった。

福岡でダンボール捨てるの本当につらい。制度が車を持ってることが前提になってる。古紙やダンボールは通常のゴミ収集では回収してもらえず、公民館や小学校の校舎に併設されているゴミステーションまで捨てにいかなければならない。

かつて中洲で一人暮らししてた頃、ダンボール捨てるために1キロ以上歩いて捨てに行かないといけなかった(車は持ってなかった)。小さいやつならまだしも、大きな家具のダンボールゴミを捨てに行くのはめちゃくちゃつらかった。ダンボールの角で指を切ったりして、泣きながらゴミを捨てに行ってた。

福岡市、大都市圏からの移住を歓迎してるけど、ことダンボールゴミの捨て方に関しては首都圏や近畿圏のような車がなくても成り立つような生活様式ではないので注意が必要。