🍎WWDC

mzpです。 こんにちは。 念願だったWWDCに参加したので、その話を書く。

RubyKaigiと日程がかぶっていたので、仙台からサンノゼに移動して参加するなどをして大変だった。

f:id:mzp:20180629153214j:plain

🏢会場の様子

初日はキーノートを聞くための列に並ぶ。

開場は10時からだが、よい席に座るには早朝もしくは深夜から並ぶ必要がある。 ボクは8時ごろから並びだしたが、最前列の人は夜中の2時ごろから並んでいたらしい。 列に並びながらWWDC Extended Tokyo 2018の人が楽しそうにしているのをTwitterで見るのは心にくるものがある。

f:id:mzp:20180604073927j:plain

二日目からはそこまで混んでいないので、セッション開始の30分前くらいにいけばよかった。 前のほうに座ったら、スポットライトが眩しかった。

f:id:mzp:20180605084851j:plain

現地にいるので何度かラボに遊びにいった。 「xxxxという機能が動かないんだけど...」は回避策を教えてもらえたりして有用だが、「〜という機能がほしいんですよー」という話は「Radarに要望あげてね」と言われるので微妙というのを学んだ。

f:id:mzp:20180605100038j:plain

f:id:mzp:20180605100055j:plain

空き時間はラウンジでXcodeをダウンロードしたりしていた。電源とLANケーブルが生えていて便利だった。 調子にのってAppleWatchのOSを更新したら、起動しなくなって焦った。 最終日に受付で修理してもらうまで、AppleWatchが使えず不便だった。

f:id:mzp:20180606083042j:plain

🌭食事

お昼ごろにサンドイッチが配られていたので、それを食べていた。 一緒にはいっているクッキーがすごく甘い。

f:id:mzp:20180629155849p:plain

通称小田原ことOdwallaジュースはおやつの時間に提供されていた。 時間帯や日によって提供される種類が違うのでゲーム性があった。

f:id:mzp:20180607082727j:plain

夕食は知り合いと食べにいくことが多かった。「そろそろ日本食が恋しくなってきた」「せっかくアメリカにいるんだしアメリカっぽいものが食べたい」の両方を満すために、アメリカンなお寿司を食べた。

f:id:mzp:20180608185413j:plain

🍻Bash

4日目には野外でBash(懇親会?)が開催された。野外で開催されるあたり、雨と無縁の街という感じがする。

f:id:mzp:20180607191312j:plain

光る卓球台などが置いてあっておもしろい。

f:id:mzp:20180607200432j:plain

巨大ジェンガもある。

f:id:mzp:20180607200646j:plain

🐦try! Swift San Jose

最終日はWWDCには行かずに、隣の建物で開催されたtry! Swift San Joseに参加した。

f:id:mzp:20180608092953j:plain

try! Swift Tokyo 2018に参加したときの縁でメンター参加だったので、参加者の人たちがSwift/Swift関連プロジェクトにプルリクエストを送る手伝いをしていた(参考: 💫try! Swift Tokyo 2018 - みずぴー日記)。 見事プルリクエストを送る段階に辿りついたので、記念に写真を撮った。

f:id:mzp:20180608172406j:plain

👣観光: 社屋見学

せっかくサンノゼまで来たので、AppleGoogleの社屋を見にいった。

Apple

ビジターセンターで、ARバージョンのAppleParkを見る。 「昨日、バージョンアップしたばかりでたまにフリーズするんだよね」といったことを言ってて、たのしかった。

f:id:mzp:20180603114022j:plain

ビジターセンターの上からAppleParkを見たが木に埋もれてていて何も見えなかった。 正直、ただの森にしか見えない。

f:id:mzp:20180603122230j:plain

InfiniteLoopのほうの社屋も見た。1から順に回ろうかとも思ったが、暑い日だったので1を見た時点で力つきた。

f:id:mzp:20180521110015j:plain

Google

Googleの社屋も見にいった。 ここはAppleよりもさらに自然豊か。

f:id:mzp:20180521131512j:plain

ドロイド君がぽつんと立っていた。

f:id:mzp:20180521140420j:plain

うわさに聞いていたChormeカラーの自転車は売店に置いてあった。 乗って移動している社員の人も何人か見た。

f:id:mzp:20180521133544j:plain

やたらボロい建物があるなーと思ってたら「Apple R&D Lab」と書いてあっておもしろかった。 人気はなかったので使ってないと思うけど...。

f:id:mzp:20180521135155j:plain

まとめ

初めてWWDCに現地参加したが、色々な開発者と話ができてよかった。開催期間中は何度か行列に並ぶタイミングがあるが、そのときは列の前後の人と「どういうお仕事してるんですか?」みたいな話をすることになるのでたのしい。英語でしゃべるのはつらい。

また、サンノゼの気候はカラッとしていて過しやすかった。

MisocaではWWDCに参加したいエンジニアを募集しています。

recruit.misoca.jp

#RubyKaigi 2018でEightマンになってきた #misoca #eight #sansan

はいどうもー! Misoca開発チームの黒曜(@kokuyouwind)です!

先日、仙台でEightマンになってきました!

……はい。

無意味な某Tuber風のハイテンション導入でした。最近割とハマってるんですよね。

ちなみに、弊社のmzpもEightマンになって公式宣伝に加担してました。

お前ら自社の宣伝をしろって感じですが、自社ロゴ入りTシャツを着てるのでセーフということにしてください。 なお、このアイマスクについてはSansan Official BlogさんのEightアイマスクを使ってみた。で紹介されています。

そんなわけでRubyKaigi2018に行ってきました。 参加レポを書くまでがRubyKaigiなので、今回もまとめていきたいとおもいます。

🗾開催地

今回は仙台での開催ということで、Misoca社員も各地から続々と集合しました。 フルリモートの社員も多いため、こういうときは富山の人のほうが近かったりして面白いですね。

名古屋からは新幹線🚄を乗り継いで3時間くらいかかるので、前泊している人が多かったようです。 自分も前日に行って秋保温泉ホテル瑞鳳に宿泊しました。

詳細は省きますが、めちゃくちゃ良かったです。 また行きたい……

🔖ノベルティについて

今回の公式ノベルティは栞でした。

f:id:kokuyouwind:20180606143050j:plain

玉虫塗で高級感があります。定規を模しててかわいいですね。 個人的には小説・理工書問わず本をそこそこ読むので、これはありがたいです。

ちなみに、前回の公式ノベルティはしゃもじでした。 厳島神社の縁起物ということでインパクト抜群でしたね。

一方で、各社さんのノベルティも充実していました。

冒頭でEightさんのノベルティの話をしましたが、他だとリアルガチャがあったのと、どら焼きがやたら充実していたのが印象に残っています。 賞味期限ギリギリになった大量のどら焼きを食い尽くすために力を合わせたRubyist達の勇姿、涙なしには見られませんでした…

ノベルティに関してはMisocaも力を入れたものを配布しました。 以前の記事でもご紹介した、ステッカー帳とRuby入りのフロッピーディスクです!

tech.misoca.jp

tech.misoca.jp

ブースは今回なかったので、ノベルティ置き場に見本を展示して、Misoca社員が手渡しで配布していました。

f:id:kokuyouwind:20180606133650j:plain

おかげさまで好評で、いろいろな方に声をかけていただきました。

中にはMisoca社員を探されてたり、声をかけていただいたのに手持ちが尽きていたりということもあり、そのあたりはすみませんでした… 手配りしたのは今回が初めてだったので、このあたりの知見は次回に活かしたいと思います。

ちなみに、ステッカー帳は自分の分を確保して各社さんのステッカーを集めてみました。

裏面にもいくつか貼ってるので写ってない会社さんもありますが、ご容赦ください……

f:id:kokuyouwind:20180606144141j:plain

🎤セッションについて

当然ですが、RubyKaigiのメインはセッションですね。

今回もMatzの名付けの話から始まり、興味深いセッションをいろいろと聞いてきました。

なかでも今回は静的型検査を実装してみた系のセッションが多く、個人的に関心が高い分野なので面白かったです。 @soutaroさんの型定義ファイルを使った検査の話や、@mametterさんのTypeDBとType Profilerの話も公式に取り入れる方向のアプローチとして着実に進んでるなぁという感じだったのですが、Stripeで使っている型検査システム Sorbetの話が大穴という感じで凄かったです。

Webから技術デモを試せるんですが、注釈なしでもstring+symbolとかdeadcodeとかを検出できてますし、注釈の書き方も言語内DSLでわかりやすいと思います。 なにより発表の中で「すでに実用しておりスケールしている」という内容があり、ある程度実績がある、というのが強いですね。 今後オープンソースにしていきたいという話もあったので、Misocaでも取り入れられないか注視していきたいと思います。

一応補足しておくと、Sorbetは言語内DSLを使ってソースコード中に型注釈を書いていくアプローチでした。 このため型注釈を使わない方針のRuby3に入ることはまずないでしょうし、今後もしSorbetが放棄された場合はちょっとめんどくさいことになりそうな気がします。 とはいえ、質疑応答で答えていた「我々には今、ちゃんと動く型検査システムが必要なんだ」という理念は、一つのスタンスとして素晴らしいと思いました。

つい型システムで饒舌になってしまったので他のセッションの話は割愛します。 私用で3日目は出られなかったので、最後のTRICK2018が見られなかったのは残念でした……

🗾次回の開催地

発表があったみたいですが、次回開催地は福岡ですね!

f:id:kokuyouwind:20180607102248j:plain

来年、また福岡でお会いしましょう!

🏖余談

仙台に行ってきたところなんですが、月末にはHackers Champloo 2018で沖縄に行くことになりました。 沖縄の皆様、沖縄に行く皆様、よろしくおねがいします。

📢宣伝

RubyKaigiやHackers Champlooなど、Misocaでは勉強会参加費・交通費が支給されます!

Misocaでは会社のお金でRubyKaigiに行きたいエンジニアを募集しています!

RubyKaigi2018 で現存する最古の Ruby をフロッピーディスクに入れて配布します

id:mizukmb です。こんにちは。

昨日紹介した 📖ステッカー帳 に引き続き、 RubyKaigi2018 でお配りするノベルティを紹介します。

来る RubyKaigi2018 にて、 Misoca ではノベルティとして Ruby 0.49 のソースコードが入ったフロッピーディスク を配ります。

こちらの紹介と、 Ruby 0.49 のビルド方法や実際に動かしてみた内容について書きたいと思います。

フロッピーディスク 💾

f:id:mizukmb:20180528162226j:plain

外観はこんな感じで、 RubyKaigi2018 仕様のジャケットと一緒にケースに入っています。ケースは自立するので飾ることができます。かっこ良いですね。

こちらのフロッピーディスクですが、実際に読み込むことができ、中には Ruby 0.49 のソースコードが入っています。

Ruby 0.49 はこちらで公開・配布されています。 ftp://ftp.ruby-lang.org/pub/ruby/1.0/

Ruby 0.49 をビルドしてみる

実際に Ruby 0.49 をビルドします。以下の環境で試しました。

フロッピーディスクを読み込む

会社にフロッピーディスクドライブを内蔵した PC が無かったため、 Amazon で外付けドライブを購入します。

ドライバにフロッピーディスクを入れると、「ウィーン, カシャ...カシャ...」という音と共に読み込まれます。オフィスで作業していたところ、懐しさからかこの音を聞きに多くの社員が私のデスクに立ち寄ってました。

読み込みに成功すると、 ruby というディレクトリがあると思います。これが ruby 0.49 のソースコードになります。適当なローカルストレージにコピーしてください。

macOS High Sierra でビルド

UbuntuRuby 0.49 をビルドしている記事があるので、こちらを参考にしながら macOS でもビルドします。

Ruby 0.49 をビルドする

現環境ではそのままビルドできないようです。有志が公開しているパッチをあてて make できるようにします。

github.com

上記パッチは 32bit バイナリを想定されているようなので、クロスコンパイルできる gcc を用意します。

macOS に標準搭載されている llvm-gcc ではクロスコンパイルできないので非 llvmgcc をインストールします。

こちらの記事を参考に gcc-7.2.0 をインストールしました。 1

marssky99.com

gcc の make に非常に時間がかかりました (2時間半くらい) 。気長に待ちます。

その後、以下のようにパッチを当てて Ruby 0.49 を make します。

$ cd /path/to/ruby # 事前にフロッピーディスクから ruby ディレクトリを適当な場所にコピーしてください
$ curl https://raw.githubusercontent.com/charliesome/historical-rubies/master/ruby-0.49.patch -LO
$ patch -p1 < ruby-0.49.patch
$ ./configure
$ make CFLAGS="-w -Wno-return-type -m32" CC=/path/to/built/bin/gcc7.2.0 # gcc のパスは適宜変更してください
(snip)
-n Loading ruby ...
done
rm parse.c
$ ./ruby -v
ruby - version 0.49 (18 Jul 94)

18 Jul 94 というのが時代を感じますね。ちなみに94年といえば私はまだ1歳で当時の事は何も覚えていません。

Ruby 0.49 で遊ぼう

ビルドに成功したので遊んでみます。素朴な fizzbuzz を実行します。

こんな感じに書いてみました。

class FizzBuzz
  def self.call(num)
    for n in 1..num
      case 0
      when n % 15
        print('FizzBuzz')
      when n % 5
        print('Buzz')
      when n % 3
        print('Fizz')
      else
        print(n)
      end
    end
  end
end

FizzBuzz.call(15)

実行結果

$ ./ruby scripts/fizzbuzz.rb
12Buzz4FizzBuzz78BuzzFizz11Buzz1314FizzBuzz

for n in 1..num ~ end1.upto(num) とか書けそうですが動きませんでした。

$ cat upto.rb
num=10

1.upto(10) do |n|
  print(n)
end

$ ./ruby upto.rb
upto.rb:3: syntax error
upto.rb:5: syntax error

恐らく upto メソッドが無いからだと思われますが、エラーメッセージから得られる情報が少ないのでソースコードを見る必要がありそうですね。

他にもソースコードsample/ ディレクトリに、テスト用に書かれたと思われるサンプルコードがいくつかあるので、そちらも実際に動かしたり眺めたりしてみると良さそうですね。

🙌RubyKaigiで会いましょう

フロッピーディスクは RubyKaigi 2018 に参加する社員が持ち歩いてますので、声を掛けていただければお渡しします。会場やドリンクアップで弊社員とお会いした時は是非お手に取ってみてください 💾

📖ステッカー帳もご用意しましたので、そちらもよろしくお願いします。

それでは RubyKaigi 2018 で会いましょう!

One more thing

当たりフロッピーディスクがいくつかあるらしい…… 👀

f:id:mizukmb:20180529112213j:plain

お楽しみに!


  1. 執筆時点の gcc 最新バージョンは 8.1 ですが、より確実にビルドできる方法を優先し記事内のバージョンに合わせました。

📖ステッカー帳

mzpです、こんにちは。

RubyKaigi 2018で配るノベルティとしてステッカー帳を作成したので紹介する。

f:id:mzp:20180528095948j:plain

🔖ステッカーをどう使うか

RubyKaigiに限らず技術カンファレンスではステッカーを貰う機会が多い。 Misocaでもロゴステッカーをよく配っている。

f:id:hidakatsuya:20170918112611j:plain

ノートPCに貼ったり、手帳に貼ったりするが、だんだんと場所が足りなくなっていく。 そして既存のステッカーの上に新しいステッカーを貼ったり、古いのを剥したりとしていくことになる。

f:id:mzp:20180528134803j:plain

📖ステッカー帳

この問題を解決するために、ステッカーを貼るための専用の手帳を作った。

f:id:mzp:20180528100020j:plain

御朱印帳のように蛇腹折りになっているので、貼ったステッカーを一度に見られる。

f:id:mzp:20180529095914j:plain

🛠作っているときの様子

ある日、ふと思いつく。

みんなに説明するために図を書く。今みたら蛇腹の向きが、完成版と違う。

f:id:mzp:20180412093919j:plain

発注前にロゴのサイズ等を大きさを確認している。オフィスのプリンターで印刷して自分で折った。

f:id:mzp:20180528135607p:plain

「手帳渡されても分からないのでは」と指摘されて、あわててマニュアルを1ページ目に追加した。

f:id:mzp:20180528095954j:plain

🙌RubyKaigiで会いましょう

RubyKaigi中にMisocaメンバーに声を掛けてもらえば渡せると思う。たぶん、こんな感じのロゴ入りのTシャツを着ていると思う。

f:id:miho_hama:20180427094254j:plain

RubyKaigiで会いましょう!

継続的に成果を出し続けるたったひとつの冴えたやりかた

みなさんこんにちは、 @k0matatsu です。
1月にMisocaのメンバーに加わって、普段はモバイルアプリを開発しています。

アプリ開発は集中力を要するたいへんな作業ですし、一週間働き続けるとくたくたになってしまいますよね。
今回はその疲労を解消し、継続的にパフォーマンスを出していくコツを紹介します。

私は現在、鳥取県境港市にある自宅でリモートワークをしながら、必要に応じて松江にあるオフィスに出社するという働き方をしています。
そして自宅の近くには皆生温泉、オフィスの近くには玉造温泉があります。 *1 f:id:komatatsu:20180528105956j:plain この恵まれた立地とフレックスタイム制度を活かして、仕事を早めに切り上げて温泉に行き疲労を回復させるという活動を1〜2週間に1回のペースで行っています。

入浴による効果は、入浴した時間帯とは関係ないので、早めに切り上げて行く必要があるのか?と思いますよね。

夕飯後のピークタイムに公衆浴場である温泉に行ってしまうと、混雑で思い通りに入浴できず、かえってストレスを抱えてしまうリスクがあります。
サウナは満員電車のようにごった返し、一体なんの熱を浴びているのかわかりません。
狂喜しながら湯船に飛び込む子どもたちのあげる飛沫に頬を濡らすこともあるでしょう。
体を洗おうと洗い場へ向かうと、空いている場所がみつからず立ち尽くすことも......

ではここで、17時の浴場を見てみましょう。 *2 f:id:komatatsu:20180528105245j:plain

誰もいません。
これだけで、いつ温泉に行くべきかは一目瞭然ですね。

温泉には日帰り入浴専門の浴場と旅館やホテルの浴場がありますが、私のオススメは後者です。
旅館やホテルの浴場は主に宿泊客をメインターゲットとしていますが、一般向けに日帰り入浴客を受け入れている場所もあります。
この情報は探さないと出てこないうえ、殆どの場合で日帰り入浴専門の浴場に比べると少し価格が高く設定されています。
ですがそのぶん接客やお風呂のレベルも高いため、必然的に満足感も高くなります。
高いと言ってもせいぜい数千円ですので、宿泊するのに比べればどうということはありません。
せっかくなので普段とは違う非日常を味わうことで、しっかり気持ちをリフレッシュしていきましょう。

浴場によってはタオルの貸出がない場合があります。
普段から車に着替えやタオルを積んでおくことで、何も考えずにただ温泉に行けば入浴できる状態を作っておくと良いでしょう。

このように、定期的に温泉に浸かって心身ともにリフレッシュすることで、より良いプロダクトを作りユーザーに価値を届け続けることができます。
どんなに優れたプロダクトも、継続的に価値を発揮するには定期的なアップデートが必要です。
そのためにはその作り手である我々が、絶えず成果を出し続ける必要があります。

かの有名なアルキメデスも、入浴中にアルキメデスの原理のヒントを得たと言われています。
古代ギリシアより連綿と続く入浴文化、大切にしていきたいですね。

Misocaでは温泉地に住みながらRailsやモバイルアプリ開発の仕事に就くことができます。

www.wantedly.com

最適なワークライフバランスで、最高のプロダクトを開発しませんか?

*1:写真は松江観光協会さんからお借りしました。いつもありがとうございます。

*2:写真は玉造グランドホテル 長生閣さんからお借りしました。いつもありがとうございます。

宮城県出身者が勧める仙台のおすすめの店

こんにちは、mzpです。 そろそろRubyKaigi 2018の交通手段を探しはじめました。

今日は宮城県出身のよんたに書いてもらった仙台駅周辺のオススメのお店を紹介したいと思います。

あいさつ

こんにちは。 Misoca社の社員ではないよんたです。 RubyKaigi 2018が近づいていますね。 今年は宮城県仙台市の国際センターで行われるそうです。 そこで今回は、宮城県出身の私が、仙台駅周辺のオススメのお店を紹介します。

ランチにおすすめの店

利休

www.rikyu-gyutan.co.jp

全国各地に店舗出典している大手の牛タン屋です。 仙台駅の3Fや東京駅にすら店舗があります。 それでも、宮城県内のチェーンの中では一番のオススメです。

街中のいたるところにあるため、駅から少し離れた空いている店舗がオススメです チェーンですが、店舗によって少しずつ違いがあるのもおもしろいです。 お土産用に南蛮味噌やスモーク牛タンなども取り揃えています。

f:id:keita44_f4:20180413214446j:plain

味・太助

www.aji-tasuke.co.jp

仙台の繁華街である国分町にあるお店。 仙台牛タン発祥のお店を引き継いでいる店舗です。 元祖の味わいをぜひ1度は味わってほしいものです。 すぐ隣に分店である旨味・太助もあります。

うまい鮨勘

sushikan.co.jp

宮城県を中心に店舗を展開するお寿司屋さんです。 あまり気負いせず気軽に入れて、リーズナブルでおいしいお寿司が食べれるのが魅力です。 仙台駅周辺にも何店舗かあります。

東家

www.adumaya.com

仙台市場の地下にひっそりと構える小さめのお店。 上質な魚介類をお値打ち価格でいただけます。 特にランチメニューの海鮮丼類がおすすめです。 もちろん、夜もおいしい地酒とおいしいお魚がいただけます。

北京餃子

www.forus.co.jp

仙台の学生が通うローカルグルメです。 何よりも、その量と安さに驚かされます。 ラーメン・チャーハン・餃子がすべて1人前ずつ付いてくるセットなんてのもあります。

こむらさきグループ 天下一品ラーメン

goodnews-21.com

ご存知、全国チェーンの天下一品ラーメンです。 ただ、仙台はこむらさきグループが運営しており、一味違うものになっています。 仙台駅前すぐのアーケード街にあるため、アクセスも良いです。 オススメは仙台にしかない土鍋で食べる「天下一品土鍋チーズ」です。

餃子の王将

ご存知、全国チェーン店の餃子の大将です。 ただ、東北初店舗ということもあり、内装がひじょうにキレイです。 私が居た頃には赤いふかふかの絨毯が敷いてありました。 味は普通の王将です。

おやつにおすすめの店

ひょうたん揚げ

www.abekama.biz

仙台でのおやつの定番です。 仙台駅2Fと、アーケード街の阿部蒲鉾の店先でいただけます。 かまぼこをアメリカンドッグの生地で包んだスナックで、ケチャップをかけて食べます。 おこぼれを頂戴に鳩が集まるのも風物詩です。

f:id:keita44_f4:20180413200650j:plain

ずんだ茶寮

zundasaryo.com

宮城県といえばずんだ*1です。 地元ではあんこと同じような使い方をし、様々なスイーツにも使われています。 オススメは仙台駅の1Fと3Fにあるカフェスペース付きのずんだ茶寮です。 定番のずんだ餅から、ずんだあんみつ、ずんだシェイク、ずんだケーキなどが揃っています。 3Fのお店は仙台駅新幹線改札横にあるので、帰る前にちょっと寄っていけるのも魅力です。

f:id:keita44_f4:20180413214556j:plain

うす皮たい焼き 鯛きち

taiankichijitsu.com

仙台といえばたい焼き!というわけではないですが、ここは駅前すぐにあり仙台民がつい食べてしまうたい焼きです。 駅前やアーケード街をぶらぶら歩くついでに、ふとおやつに食べるのはいかがでしょうか。 オススメはずんだあんと生クリームが入ったずんだホイップです。

f:id:keita44_f4:20180413214608j:plain

夜におすすめの店

居酒屋 周平

www.shu-hei.com

仙台で確かに美味いものを揃えるお店です。 仕入れによって日替わりのお魚や、地野菜料理、牛タン料理など、選ぶのが困るほどうまいものが揃っています。 オススメは席に持ってきてから目の前で炙ってくれる、炙りしめ鯖。

仙台駅から地下鉄で1駅のところに1号店と2号店、仙台駅の裏に3号店があります。 4~6号店はちょっと風変わりとなっています。 どれも席はあまり多くないので、ぜひとも予約がおすすめです。

f:id:keita44_f4:20180413214625j:plain

伊達路

r.gnavi.co.jp

日本酒に拘るならぜひともここ。 店長の小沼さんのチョイスで、ちょっと変わってますが確実においしい地酒を揃えています。 席についたら、ぜひとも店長に注文するお酒を相談させてもらうべきお店です。

f:id:keita44_f4:20180413214645j:plain

和醸良酒 ○たけ

www.sake-marutake.com

全国のおいしい日本酒ならここ。 酒蔵出身の店主さんが、全国のうまい日本酒を揃えています。 ときには酒蔵から蔵人が訪れていることも。 駅からはちょっと離れていますが、名店です。

いろり酒場 たら福

宮城の美味いものと宮城の美味い酒を取り揃えるお店。 名前の通り店中央に囲炉裏があり、注文するとそこで焼いてきて出てきます。 仙台駅から近く、ふらっと入れる位置なのも良いです。 オススメはお店オリジナルの味噌がついた、厚揚げです。

写真は囲炉裏で焼いた、ネギ肉巻き。

f:id:keita44_f4:20180413214818j:plain

炭焼きジュッコ

www.s-faction.com

中華料理と炭火焼きがメインという不思議な組み合わせのお店です。 私が行ったときはお通しがおでんでした。 しかし、和中の両方ともに味は確かなお店です。 日本酒もかなりの種類を取り揃えており、中華に合う日本酒まであります。 ぜひ中華料理と日本酒を試してほしいです。

f:id:keita44_f4:20180413214830j:plain

バルぷらっと

https://www.facebook.com/sendaiplat/www.facebook.com

仙台駅の1Fにある小さなバルです。 松島町の酒屋さんであるむとう屋さんが携わっており、宮城県のお酒の品揃えがたいへん良いです。 季節物の限定酒も多数揃っており、注文量も選べるのが嬉しいです。 料理は日本酒に合うおつまみメニューが中心です。 駅内にあるので、旅の行きや帰りの時間つぶしにふらっと入れます。 明るいうちからでもオススメできるお店です。

f:id:keita44_f4:20180413213822j:plain

かき小屋飛梅

r.gnavi.co.jp

宮城といえば牡蠣です。 そこで仙台駅前にある牡蠣小屋を紹介します。 各テーブルに焼き台があり、注文した牡蠣やホタテをテーブルで焼いて食べる方式です。 牡蠣、ホヤ、金華さばと宮城のうまい魚介を揃えています。

f:id:keita44_f4:20180413213954j:plain

ちょっと遠くの店

塩竈仲卸市場

www.nakaoroshi.or.jp

仙台駅からJR仙石線で約30分の東塩釜駅から徒歩15分。 全国有数のマグロ水揚げ量を誇る宮城県最大級の魚市場です。 お土産や観光もできますが、オススメは魚市場で食べる勝手丼。 魚市場のお店で好きに買ったお刺身を、その場で白ごはんに乗せて食べられます。

塩釜のお寿司

塩竈仲卸市場がある塩釜市はお寿司の名店も数多くあります。 私のオススメは以下の3つです。

まとめ

今回は食べ物に注目して紹介させてもらいました。 少しでもみなさんが仙台で楽しい日々を過ごせればと思います。

*1:枝豆またはそら豆をペースト状にすり潰したもの

ビジュアルリグレッションテストを導入して見た目の変化に気づける様にする

こんにちは、 @lulu_ulul です。普段は鳥取からフルリモートで勤務しています。

Misoca では年に数回全員でオフィスに集まる日がありまして、先日久々に鳥取から名古屋オフィスに行き楽しんで来ました。

その時にメンバーに「あれ、髪染めました?」と聞いたのですが、「いや、染めたの結構前ですよ…」と返されてしまいました。。。

Zoom 等のカメラ越しだと色味の変化に気づきにくいのもあるのですが、私の様な目diff 性能が低い人間には細かな差を認識するのは難しいですね。

違いの分かる男になりたいです。


目視でデザインの変化を確認・検知するのがつらい…

日々のライブラリのアップデートや新機能をリリースする際に意図しない箇所のデザインに影響が出ていないか心配になりますよね。 また、CSS の整理やコンポーネントリファクタリング等を行う際にも、影響が出る懸念やその確認作業の大変さから中々踏み出せない事もあると思います。

自動テストにより機能面での振る舞いやコンポーネントの有無の検証はしていますが、関心の無い領域も含め視覚的な面での振る舞いまで記述し検証・保守する事は難しいです。

また テスト環境と本番環境とでどうしても差異が存在するため振る舞いが変わってくる可能性があります。 かといって目diff による検出を続けるのは時間的にも精度的にも厳しいです。

実際にデザイン崩れが起きた事例

冬頃に CSS の build を高速化するために libsass の導入を行ったのですが、その際に一部のモーダルウィンドウの表示位置がおかしくなってしまい、一部のユーザの方にご迷惑をおかけすることになってしまいました。

勿論その時も目視による確認作業は行っていたのですが、ファーストビューに存在しないモーダルなのもあって見落としてしまったのが原因でした。


前述の問題点の解消と上記の様な不具合の再発を防止するために、 Misoca でも開発生産性向上の一環としてビジュアルリグレッションテストの導入を始めました!

ビジュアルリグレッションテスト

視覚的な回帰テストの名の通り、スクリーンショット等を撮影しておき前後で差分が出ていないか検証するテストです。

テスティングフレームワークとして BackstopJS や LOKI 等いくつかあるのですが、 今回は以下の理由から reg-suit を選びました。

f:id:lulu-ulul:20180426140702p:plain

reg-suit

  • プラグインにより以下の機能が簡単に使える
    • コミットログベースでの比較対象の自動選定 も 文字列ベースでの比較対象の指定 の両方に対応
    • S3への画像・レポートのアップロード
    • GitHub の PR や Slack への自動コメント・通知が行える
  • 画像群を比較しレポート作成するまでが責務のため 画像群生成の部分の自由度が高い
  • レポート画面が見やすく画像ファイル名ベースのインクリメンタルサーチが行える
  • x-img-diff-js を利用した際の差分検出・表示が良さそう

reg-suit

Jenkins にJob を設定し、以下の2つを行える様にしました。

  • 本番環境上で定期的に前回成功ビルドとの差分を検出するテスト
    • ユーザが目にする環境に差分が出ないかの検出が目的
    • Jenkins の build 番号を使った文字列で reg-simple-keygen-plugin によるテストを実行
  • ステージング環境上で各ブランチ毎に master ブランチの最新実行結果との差分を検出するテスト
    • シナリオの開発・変更時用
    • ステージング環境を対象にしているので、リリース前に確認したい影響範囲の大きそうな場合にも使用可能
    • git の コミットログから比較対象を自動選定する reg-keygen-git-hash-plugin によりテストを実行

f:id:lulu-ulul:20180426112044p:plain

また、reg-notify-github-pluginreg-notify-slack-plugin を使えば以下の様に GitHub の PR や Slack へもいい感じに通知してくれます。

f:id:lulu-ulul:20180426114920p:plainf:id:lulu-ulul:20180426115429p:plain
GitHub や Slack への通知イメージ

Capybara-screenshot による画像の撮影

実は Misoca には Rubyist がたくさんいますので、RSpec で Capybara に慣れ親しんだエンジニアが多いです。

そこで Capybara + capybara-screenshotにより各画面への移動や画面操作を行い適宜スクリーンショットを撮影する様にしました。

コード的にも一連の操作が分かりやすく書けるのと、JavaScript の実行もできるので Capybara DSL で詰まった時に力技で回避できるのも良いですね。

苦労した所

スクリーンショットベースでの比較になるため、描画してから撮影されるまでの時間で表示が変わるアニメーションする要素が天敵です。

スタイルによるアニメーションも当然なのですが、 テキストボックスのキャレットも点滅するため差分が生じてしまいます。 ピクセル数や画面内の面積比率で閾値を設定する事もできるのですが、これらを解消して閾値をより低めに設定しておきたい所です。

そこでスクリーンショットの撮影前や適宜 execute_script で以下の処理を行う様にしました。

  • キャレットを非表示するために caretColortransparent に変更
  • headtransition-property / transform / animation を無効にする style タグを追加

検出結果のサンプル

この様な形式でレポートが作成され、差分があった画像は前後の画像と差分画像が出力されます。

f:id:lulu-ulul:20180427123603p:plain

差分をオーバーレイした画像とは別に、差分のあった領域を囲って表示してくれるので確認しやすくなっています。

f:id:lulu-ulul:20180427120941p:plain

この様に目視での判別が難しい細かな差分も検出されます

f:id:lulu-ulul:20180427124957p:plainf:id:lulu-ulul:20180427104446p:plain
目視では判別の難しい差分

まとめ

以上の方針でビジュアルテストが平日に実行される様にできました。

プロジェクトの期間もあったのでスコープから外したのですが、以下にも対応してもっと安心して開発していける様にしたいですね。

  • 現在は headless chrome のみでのテストなので、デザイン崩れが起きやすい他のブラウザでの実行もサポートする
  • CI / 開発環境でもテストできる様にする

Misocaでは安心してリリース / リファクタリングできる開発環境の構築に興味のあるエンジニアを募集しています!