エンジニアリンググループの滝安(@juntaki)です。 技術書典6で「エムスリーテックブック#1」を頒布してきました!ご購入いただいた方、お立ち寄りいただいた方、ありがとうございました! 執筆自体にもたくさん学びはあったのですが、単純に参加して売るというプロセスにも多くの発見がありました。「#2」に向けて知見を残すため、サークルチェック数、売れ行きなど数値で記録したものを中心に振り返ります。
続きを読むこんにちは、Androidエンジニアの星川 (id:oboenikui) です。
いよいよあと5日で令和となりますね。幸いにもAndroidではアプリ側で扱おうとしない限り和暦は使用されないので安心して改元を迎えられそうです。
(iOSにはシステム設定で和暦表示に切り替える機能があるので若干無視できなかったりします)
さて、この改元ですが、ほぼ日本国内でしか使われていないものではあるものの、OSをはじめ世界中で使われているプロダクトにも影響を与えることは皆さまご存知の通りかと思います。今回はUnicode CLDR (Common Locale Data Repository) のチケットから、どのような流れでこの改元に対応したのか、また改元に合わせてどのような変更が行われたのかを見ていきたいと思います。
続きを読む
RubyKaigi 2019に参加された方もそうでない方もお疲れ様でした。あと数日で到達するゴールデンウィークを指折り数えるowlです。
RubyKaigiでは多彩なセッションにより豊富な知見が得られた他に、Rubyist同士の交流も商店街を貸し切ってのパーティや無料屋台などのイベントによるところもあって例年にないほどの賑わいでした。
さて、そんなRubyKaigiの様子やセッションの知見をみなさんに共有するのは他の参加者による才筆へ委ねることにして、この記事では弊ブースで自分が三日間日替わりに出題していた難読Rubyコードクイズの紹介と解説をしていきます。
毎日このクイズを解きに足を運んでくださった方には感謝しております。お目汚しですが自分が考えたクイズをMatzさん始めコミッターの方にまでご覧頂けたのは光栄です。
<!-- 儀礼的でちょっと退屈な口上はここまで -->
まずRubyKaigiへ参加できなかった方にも楽しんで頂くために出題リストだけを先にお見せします。ぜひ答えを想像してから解説をお読み下さい。
原則としてどの問題もirb上で提示されたコードを実行した際に何が評価値になるかを答えます。
難易度:★☆☆
irb> !????!:!?!
=> ?
選択肢:「false」 「“?”」 「:!」 「SyntaxError」
難易度:★★★
irb> %%%%%%..%%[0].size[0]
=> ?
選択肢:「1」 「0」 「""」
(お詫び: 掲載当初は問題文がRubyKaigiで出題されたものと異なっていました)
難易度:★★☆
irb> puts = :puts
irb> puts = send(puts, puts) || puts(puts) { puts = “puts” }
irb> puts
=> ?
選択肢:「"puts"」 「:puts」 「nil」
難易度:★★☆
irb> %%%%%%%%?????:??
=> ?
選択肢:「""」 「"%"」 「"?"」 「":"」
難易度:★★★
irb> a = 0.0/0; a == a ? a : irb.quit
直後に何が発生しますか?
選択肢:「ZeroDivisionError」 「undefined local variable」 「irbが終了する」 「irbが起動する」
続きを読むエンジニアリンググループの山口です。4/18(木)〜4/20(土)に開催された「RubyKaigi 2019」に、Platinum Sponsorとして参加しました。
エムスリーのスポンサー協賛は4年目。私は初参加でしたが、参加者の方々のRuby愛を強く感じた3日間でした。
sponsor_booths[:m3].inspect # ブースの様子
エムスリーブースは5階エレベータ上がって右手の位置で展開していました。
ブースでは、特に「Rubyクイズ」が一番盛り上がりました!
続きを読むこんにちは、エンジニアリンググループの福林 (@fukubaya) です。
2019年3月に僕たちのチームが担当するスマートフォンサイトをリニューアルしました。 リニューアルに際して、せっかくなので新しい技術やフレームワークを採用したいということで、詳しいメンバーはいませんでしたがVue.jsでリニューアルすることにしました*1。 本記事では、Vue.jsがほぼ初心者だけのチームでVue.js製プロジェクトをリリースするまでに得られた知見をまとめます。 すでにバリバリ使いこなしている方には物足りないと思いますが、これからVue.jsを始める方の参考になれば幸いです。
*1:社内の別チームに事例はあったので最悪なんとかなるだろう、という目論見はありました。
エンジニアリンググループの冨岡です。
先日、以下のTypeScript用DIライブラリを公開しました。大きな特徴として、解決するために不十分な依存がある場合にコンパイルエラーになるようになっています。
このコンパイル時の型チェックの実現には、TypeScriptにおける様々な型レベルのテクニックが用いられています。泥臭い試行錯誤の結果、なかなかhackyなこともやっていて面白い(?)ので、せっかくなので解説しようと思います。
もちろん、「もっとエレガントにできるよ」というアドバイスやプルリクも大歓迎です!皆さんも、自分だったらこうするなぁ、とか思いながら楽しんでいただければと思います!
続きを読むエンジニアリンググループの冨岡です。
TypeScript向けのDIライブラリを公開したので紹介します。
Clean Architecture等の設計手法を使ってコードを書いていると、抽象に依存することが多くなってきます。
class CreateUserAccount { constructor(private userAccountRepository: UserAccountRepository) {} } const forProduction = new CreateUserAccount( new PostgreSQLUserAccountRepository( buildPostgreSQLConfig(process.env) ) ) const forTest = new CreateUserAccount(new InMemoryUserAccountRepository());
テストしやすく、また責務がはっきりわかれていて良いですよね。ただ、別の辛みもいくつかでてきます。
こういった辛みに対応するのがDIライブラリです。しかし私の調べた限りでは、既存のDIライブラリは少し大げさな印象でした。 例えばメジャーなライブラリであるInversifyJSは、decoratorをベースにしており大げさ&マジカルです。
依存先を容易に切り替えられる既存のライブラリの利点は残しつつ、以下を満たすシンプルなライブラリがほしいと思いました。
そこで作ったのがこのtypesafe-diです。
続きを読む