エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

エムスリーは JJUG CCC 2019 Spring にゴールド&ブーススポンサーとして協賛します & CTOが登壇します

こんにちは、マルチデバイスチーム エンジニアの金丸 (@maru333) です。

来たる 5/18(土)、ベルサール新宿グランドにてJJUG CCC 2019 Springが開催されます。

昨年( *1 )に引き続き、エムスリーはゴールド&ブーススポンサーとして、本イベントの開催を後押しさせて頂きます。
当日は弊社の Java エンジニアも参加し、ブース出展もする予定です。 ブースではUSB Type-C アダプタやマスクなどの弊社ノベルティを配ったり、Javaクイズなどの出し物も企画してますので、是非お立ち寄りください!
エムスリーのサービスや開発についても、気になる点があれば何でも質問していただければと思います。

JJUG CCCとは

JJUG CCCとは、日本最大のJavaコミュニティである日本Javaユーザーグループ(Japan Java User Group = JJUG)による国内最大のJavaコミュニティイベントです。 CCCとは、Cross Community Conferenceの略 です。

続きを読む

数値で振り返る技術書典6とエムスリーテックブック

f:id:juntaki1:20190421095524j:plain

エンジニアリンググループの滝安(@juntaki)です。 技術書典6で「エムスリーテックブック#1」を頒布してきました!ご購入いただいた方、お立ち寄りいただいた方、ありがとうございました! 執筆自体にもたくさん学びはあったのですが、単純に参加して売るというプロセスにも多くの発見がありました。「#2」に向けて知見を残すため、サークルチェック数、売れ行きなど数値で記録したものを中心に振り返ります。

続きを読む

世界のシステムに令和が反映されるまで

こんにちは、Androidエンジニアの星川 (id:oboenikui) です。

いよいよあと5日で令和となりますね。幸いにもAndroidではアプリ側で扱おうとしない限り和暦は使用されないので安心して改元を迎えられそうです。
(iOSにはシステム設定で和暦表示に切り替える機能があるので若干無視できなかったりします)

さて、この改元ですが、ほぼ日本国内でしか使われていないものではあるものの、OSをはじめ世界中で使われているプロダクトにも影響を与えることは皆さまご存知の通りかと思います。今回はUnicode CLDR (Common Locale Data Repository) のチケットから、どのような流れでこの改元に対応したのか、また改元に合わせてどのような変更が行われたのかを見ていきたいと思います。

f:id:oboenikui:20190425120244p:plain
By 内閣官房内閣広報室 - 首相官邸ホームページ, CC 表示 4.0, Link

続きを読む

難読Rubyコードクイズ問題と解説 in RubyKaigi 2019

f:id:owl-m3:20190423134156p:plain

RubyKaigi 2019に参加された方もそうでない方もお疲れ様でした。あと数日で到達するゴールデンウィークを指折り数えるowlです。

RubyKaigiでは多彩なセッションにより豊富な知見が得られた他に、Rubyist同士の交流も商店街を貸し切ってのパーティや無料屋台などのイベントによるところもあって例年にないほどの賑わいでした。

さて、そんなRubyKaigiの様子やセッションの知見をみなさんに共有するのは他の参加者による才筆へ委ねることにして、この記事では弊ブースで自分が三日間日替わりに出題していた難読Rubyコードクイズの紹介と解説をしていきます。

毎日このクイズを解きに足を運んでくださった方には感謝しております。お目汚しですが自分が考えたクイズをMatzさん始めコミッターの方にまでご覧頂けたのは光栄です。

<!-- 儀礼的でちょっと退屈な口上はここまで -->

出題

まずRubyKaigiへ参加できなかった方にも楽しんで頂くために出題リストだけを先にお見せします。ぜひ答えを想像してから解説をお読み下さい。

原則としてどの問題もirb上で提示されたコードを実行した際に何が評価値になるかを答えます。

Day1 - 1

難易度:★☆☆


irb> !????!:!?!
=> ?

選択肢:「false」 「“?”」 「:!」 「SyntaxError」

Day2 - 1

難易度:★★★


irb> %%%%%%..%%[0].size[0]
=> ?

選択肢:「1」 「0」 「""」

(お詫び: 掲載当初は問題文がRubyKaigiで出題されたものと異なっていました)

Day3 - 1

難易度:★★☆


irb> puts = :puts
irb> puts = send(puts, puts) || puts(puts) { puts = “puts” }
irb> puts
=> ?

選択肢:「"puts"」 「:puts」 「nil」

Day3 - 2

難易度:★★☆


irb> %%%%%%%%?????:??
=> ?

選択肢:「""」 「"%"」 「"?"」 「":"」

Day3 - 3

難易度:★★★


irb> a = 0.0/0; a == a ? a : irb.quit
直後に何が発生しますか?

選択肢:「ZeroDivisionError」 「undefined local variable」 「irbが終了する」 「irbが起動する」

続きを読む

「RubyKaigi 2019」にPlatinum Sponsorとして参加しました!(ブース・セッションレポート)

エンジニアリンググループの山口です。4/18(木)〜4/20(土)に開催された「RubyKaigi 2019」に、Platinum Sponsorとして参加しました。

エムスリーのスポンサー協賛は4年目。私は初参加でしたが、参加者の方々のRuby愛を強く感じた3日間でした。

sponsor_booths[:m3].inspect # ブースの様子

エムスリーブースは5階エレベータ上がって右手の位置で展開していました。

f:id:t-yamag:20190423161509j:plain
エムスリーブースの様子

ブースでは、特に「Rubyクイズ」が一番盛り上がりました!

続きを読む

Vue.jsほぼ初心者だけのチームで既存サービスのリニューアルをやってみて得られた知見

こんにちは、エンジニアリンググループの福林 (@fukubaya) です。

2019年3月に僕たちのチームが担当するスマートフォンサイトをリニューアルしました。 リニューアルに際して、せっかくなので新しい技術やフレームワークを採用したいということで、詳しいメンバーはいませんでしたがVue.jsでリニューアルすることにしました*1。 本記事では、Vue.jsがほぼ初心者だけのチームでVue.js製プロジェクトをリリースするまでに得られた知見をまとめます。 すでにバリバリ使いこなしている方には物足りないと思いますが、これからVue.jsを始める方の参考になれば幸いです。

f:id:fukubaya:20190422214132j:plain
黒部宇奈月温泉駅は富山県黒部市にある北陸新幹線の駅。本文には特に関係ありません。

*1:社内の別チームに事例はあったので最悪なんとかなるだろう、という目論見はありました。

続きを読む

TypeScriptの型でなんかすごくがんばる

エンジニアリンググループの冨岡です。

先日、以下のTypeScript用DIライブラリを公開しました。大きな特徴として、解決するために不十分な依存がある場合にコンパイルエラーになるようになっています。

github.com

www.m3tech.blog

このコンパイル時の型チェックの実現には、TypeScriptにおける様々な型レベルのテクニックが用いられています。泥臭い試行錯誤の結果、なかなかhackyなこともやっていて面白い(?)ので、せっかくなので解説しようと思います。

もちろん、「もっとエレガントにできるよ」というアドバイスやプルリクも大歓迎です!皆さんも、自分だったらこうするなぁ、とか思いながら楽しんでいただければと思います!

続きを読む