Gunosy Tech Blog

Gunosyの開発メンバーが知見を共有するブログです。

新米エンジニアがRubyKaigiに行ってきました

どうも、新米エンジニアの広告技術部サンドバーグと新卒エンジニアの星です!

今回はじめてのRuby会議とあって、会議での情報量に圧倒されつつも自分がおもしろかった話をいくつかピックアップしてきました。

会場は京都

いつもは東京なのですが、今年の会場は京都でした。

f:id:cou_z:20170617173935p:plain

国際会館という自然に囲まれた場所でした。

f:id:cou_z:20170617173940p:plain

Keynoteはやっぱりこの人

最初はやっぱりMatzさん 僕も含め会場の全員がRuby3の話を期待していた通りメインはRuby3の話でした。今回は特に「型」の話が中心でした。

f:id:cou_z:20170617173957p:plain

MatzさんはRubyの今後の型が未来を示す新しいものになれば良いという話をしてくれましたが、我々Rubyistも Rubyがそういった他のプログラミング言語の先駆けになるようなものになってくれると嬉しいですね。

www.youtube.com

Ruby3: Sasadaさんの新しいconcurrency model

いきなりconcurrency modelの話に入っちゃいますが、今回のRubyKaigiはconcurrencyがとてもHOTなトピックでした。

Sasadaさん的にはConcurrencyを話すことにおいて, 言語のトレードオフ, 「パフォーマンス」vs「安全性・楽さ」が存在すると強調していました。Ruby3を考える中で、パフォーマンスを上げるために重要になっているconcurrencyを既存のRubyに当てはめると、あまりにもRubyが「楽」なためmulti-threadに対応しづらいと言うことでした。

Rubyのいいところでもあるmutableなオブジェクトはある意味制限がなく「楽」だが、そのせいでレースコンディション、デッドロック・ライブロックなどの問題が自ずと出てきてしまいます。ただ、「パフォーマンス」を追求するためにそれらをなくしてしまうとRubyではなくなってしまう!

そこで新たなコンセプト「Guild」が登場!

そもそもすべてのオブジェクトを対象に安全性を確認するのではなく、一スレッド単位でオブジェクトを保持すれば良いという、一階層上に行った考え。Guild同士はマルチスレッドを前提として作り、Guild内はそもそもマルチスレッドを許可せず、Guild間でオブジェクトを渡す際はそもそもオブジェクトを新しいGuildに受け渡すか、オブジェクトをimmutableな形式で読ませるかのどちらか。Guild内であれば以前と変わらず自由にmutableなオブジェクトがつかえ、マルチスレッドに対応する必要があるのであれば、スレッド単位でオブジェクトを保証する。

ふむ、、

コンセプト自体は思い浮かぶが実際に自分が使うところがいまいち想像できなかった内容でしたが、聞くだけでワクワクする内容でした!Ruby3の 3x faster を実現するには必要な拡張化かもしれませんし、そもそも multi-threadのプロセスに対応するには既存のRubyだと問題が発生しやすいと言うのも事実。

会議内では実際にSasadaさんがGuild間のコミュニケーションを可能にするためのメソッドなど具体的なところまで話していましたが、サマリとしてはこんなところです。

Sasadaさんプレゼン資料

Modern Black Mages Fighting in the Real World

こんな興味をそそられるタイトルの発表はTreasureDataのTagomorisさん

www.slideshare.net

過去の遺産と戦いながら色々な辛い話を、Rubyの黒魔術メタプログラミングで乗り越えたという内容でした。

弊社のシステムにもレガシーと呼ばれるものはあります。もちろんそのシステムがあったからこそ今の弊社があるのですが、メンテしづらいのも事実です。 それを必死に改善しつつ、新しい機能も加えるという仕事は尽きないものです。ただそういった環境だからこそ多くの学びがあったりします。

Railsを使っているとSQLを意識外において開発してしまうことがあります。 ActiveRecordは非常に強力で便利なライブラリですが、ActiveRecordが作るSQLを意識せずに開発することは危険です。 なぜなら、最適化されていないSQLを作ってしまう可能性があるからです。 そういったことを学べたのも、膨大なデータを扱うサービス開発に携われたからだと思っています。

SciRuby

続いては、MrknさんのSciRubyのお話。

speakerdeck.com

最近、機械学習すごく流行ってますよね。ただ、機械学習で用いられるプログラミング言語といったらPythonがほとんどだと思います。 そこで、Mrknさんを中心としてSciRubyという、Pythonで使える機械学習ライブラリをRubyでも使えるようにしようといった活動です。 もちろん弊社の分析チームでもPythonを使っています。しかし、我こそはRubyで分析したいんだという方がいらっしゃれば弊社でぜひ実現してみてください(笑)

DDD

もう一人個人的に注目した人が 2日目にいたスピーカー、Chis Arcandさん。

彼が話していたのはRuby3・Rubyというよりは、コーディング自体の話で、聞けば聞くほど実際に試したくなる内容でした。

その名も、「TDD」ではなく「DDD」

Delete Driven Development

内容自体は複雑なものではなく、ざっくり言うと「死んでるコードを積極敵に消そう!」でした。彼いわく、多くの死んでいるコードは「後々役に立つかも」メソッドや「このスペシャルケースのためだけ」メソッドの積み重で、基本的には探す手順も消す手順も大体決まっているということでした。コードを追加するだけでなく、なるべくレポジトリをクリーンに保ち、時にはコードを減らすだけのプルリクを出すのも良いのだと!

実際のコードの削除手順をざっくり説明すると、不必要なパターンをもつコードを探すためにコードを言語のようにパースし、消す条件に当てはまるメソッドをバンバン消していこうとことです。そして、このためだけに Arcandさんが不要コード削除用のgem 「debride」を用意してくれました。

ArcandさんのDebride

「debride」自体すごいライトに作られていてまだまだ未完成の状態ですが、すぐに導入でき、チューニングや拡張を前提に作られています。

そこで、実際の仕事に取り入れて試してみました!

Gemをインストールして指定ディレクトリーを選択・実効!

ドォーンといくつかメソッドが早速でてきましたが、なかなか消せるコードが出てこない… メソッドの中身を見ていくと「スペシャルケース」がいくつかあったが、なかなか削除に踏みきれないコードが多かったです。

f:id:cou_z:20170617174319p:plain

振り返ると「debride」に何か問題があったわけでもなく、単純にデフォルトの状態での「debride」をつかっても、明らかに消せるコードしか拾ってきてくらないことがわかりました。そもそも消す基準のコードは個人やチームでチューニングする必要があると思いますし、より高度なコード解析は「debride」のようなライトなgemではできないのだろうと考えました。

ただ「debride」を実際に使ってみて不要なコードや、コードの質のメトリックスを自動的に可視化してくれるツールがどれだけ仕事に貢献できるか考えさせられました。 「debride」を気に、ほかのツールをもっと積極敵に取り込み、無駄なコードをじゃんじゃんなくしていきたい気持ちが高まります!

speakerdeck.com

最後に…GunosyでRuby/Railsを一緒にやりませんか?

今回大きなRubyイベントの参加できて色々と学びがありました! f:id:cou_z:20170617174354p:plain 視野がまだまだ狭いことに気づいたのと、Rubyエンジニアでもいろんなタイプの人がいると実感できた気がします。 Rubyistの中には言語理論の変革から、文法的に正しい流れるようなコードを目指す人と様々ですし、より多くの違うRubyの形を見ていきたいと強く思いました。

GunosyではまだまだRubyを書く人が少ないですが、Rubyを活用して開発ができる環境がいっぱいあります!いろんな思想を持ったRubyistが集まればいいなーっと思うので、興味あったら是非Gunosyを見てみてください!

Gunosy - エンジニア募集

Gunosyエンジニアの他の活動はここで見れるよ!

Blog - Gunosiru

Blog - Gunosyデータ分析ブログ

Facebook - 株式会社Gunosy

connpass - Gunosy Development Div.

Qiita organizations - Gunosy Inc.

GunosyBeerBash#6 を開催しました

f:id:cou_z:20170617175151p:plain

こんにちは! 広報のおだんみつです。今日は、6月22日(水)に開催した勉強会【CyberZ×Gunosy】広告事業の最新開発事例とビールの会【AWS, Go, アドテク】の様子をレポートします。

GunosyBeerBash とは

Gunosyのエンジニアが主催する勉強会です。毎回テーマを設けて、親しい会社さんと共同で運営しています。 今回は、広告技術を展開しているCyberZさんのご協力で、広告事業の最新開発事例を発表しました。

2人のアドエンジニアが発表した

Gunosyからは、開発本部広告技術部の印南と會田の2名が登壇しました。広告技術部は「グノシー」に配信される広告のサーバを開発・運用するチームです。

1. 高速な広告配信サーバの作り方のコツ

www.slideshare.net

質問

Q: Gunosy広告サーバのリプレースは何人で進められましたか?

3-4人です。

Q: Ad Serverは何の言語で書かれていますか?

APIサーバがGo言語、バッチサーバがPythonで書かれています。

Q: Gunosyのアドチームとインフラチームとの協業の仕方について教えて下さい。

アドチームで実現したいことがある時にインフラチームに気軽に相談する形で進めています。進め方は、こちらでインフラの草案を持って行って懸念点がないかを確認したり、ゼロベースでインフラチームとディスカッションするケースも多いです。アドは特殊なドメインですので、インフラチームと要求性能やビジネスニーズなどを共有しつつ、理解に相違がでないように両チームが気をつけて進めています。

Q: Redisはon EC2で管理されていますか?

現在はElastiCacheで動かしています。以前はon EC2で管理していましたが、Full Managedな方が運用が楽ですし、例え一時的に停止したとしても配信に即時影響があるようなデータを入れないようにして運用しています。

コメント

非常に多くの方に来て頂き、広告という分野に対する興味や関心の高さを感じました。想定よりも広告業界の方が多かったため、より具体的な話をしても良かったかもしれません。広告配信に関する技術が、この業界全体により浸透していくように微力ながら努力していきたいと思っています。

2. HTTPプロキシによるゼロダウンタイムなアドサーバー移行

www.slideshare.net

コメント

今回はGo言語製のHTTPプロキシを用いて広告配信サーバをリプレースしたことについて発表させていただきました。結果的にゼロダウンタイムな移行に成功しました。関さんに今回の登壇依頼をされたときは、もっと人数が少ないと思っていたので、発表した時は大変緊張しました。 拙い発表でしたが、最後はオチで笑って頂けたので大変良かったです。

80人くらい参加してくれた

今までに開催した GunosyBeerBash で参加者数が50人を超えたのは初めてでした。CyberAgentさんの広いセミナールームをお借りできたおかげです。 connpassの申し込み人数も100人定員に対して137人の申し込みがあり、予想以上の盛況ぶりにわくわくでした。

かつサンド&ビールが好評だった

「勉強会がはじまる時間って仕事終わりでおなか空いてるよね」と運営メンバーから意見があり、まい泉のかつサンド&ビールを受付で配りました。

一口サイズのサンドイッチが3つ入っていて、ほとんどの方が完食。懇親会は別途ケータリングを用意したんですが、皆さんしっかり食べてくれました。 GunosyBeerBashの定番に決定です。イベント担当の方、受付時のかつサンド提供をぜひ試してみてくださいね!

次回に参加したくなった

参加してくれた方のツイートです。ゲストからも社員からも、毎回こんなコメントがもらえる勉強会をやっていきたいですね。次回も運営がんばります!!

Gunosyエンジニアの他の活動はここで見れるよ!

connpass - Gunosy Development Div.

Qiita organizations - Gunosy Inc.

Facebook - 株式会社Gunosy

Gunosy初のBeer Bash!開催報告

f:id:cou_z:20170617180112p:plain

Gunosyで開催しているBeer Bash!について

12月に、「エムスリー x Gunosy Beer bash!(Gunosy.beer#1)」と題して、Gunosyオフィスで初開催となる“Beer Bash”を開催しました。

Beer Bashとは、エンジニア同士ビール片手に交流を深めつつ、技術について発表やトークをする勉強会×交流会のようなイベントです。

f:id:cou_z:20170617180127p:plain

今回はGunosy開発本部長・渡邊の個人的な付き合いがきっかけとなり、医療分野でインターネットを活用したサービスを展開するエムスリーさんとGunosyの、2社合同開催が実現しました。

おかげさまで募集告知後、即日満席! のべ参加者は50人近くと、想像以上の盛況となりました。

当日のようす

会場はGunosyオフィス。 普段はこんなフリースペースが・・

f:id:cou_z:20170617180849p:plain

こんな形に勉強会スペースに。

f:id:cou_z:20170617180907j:plain

イベントは、エムスリーとGunosyからそれぞれ、フリーテーマでLTバトルを行いました。

ここでは、弊社から参戦した勇士たちのスライドをご紹介します。

Gunosyからの一人目は・・ 若きCTO松本の登場です。

PipelineDB 3分クッキング Gunosy @y_matsuwitter

f:id:cou_z:20170617180928j:plain

次はWebエンジニアの登場。

4 Simple Rules for Ruby Gunosy @ericturnerdev

slides.com

3人目はアドエンジニア。

広告配信サーバーのデータ周りの話 Gunosy @satoshi03 

speakerdeck.com f:id:cou_z:20170617181046j:plain

4人目、Goエンジニア。

さくっとGAE/GoでAPIを作って本番環境にリリースする Gunosy @k_yokomi

speakerdeck.com

最後に、Webエンジニア!

JSON Schemaでバックエンドエンジニアとフロントエンドエンジニアがコラボする Gunosy @toshimaru_e Webエンジニア登場!

speakerdeck.com

最後は飛び込みでLTに参加いただいた方が、3名もいらっしゃいました! その後、会場では、ビールを片手に盛り上がりました。

20種類以上のビールが!

f:id:cou_z:20170617181143j:plain

会場にはなんと20種類以上のビールが。 和やかな雰囲気で楽しめました。

今回お越しいただいた皆様、そして快く合同開催してくださったエムスリー社の皆様、本当にありがとうございました。

今後も随時“Gunosy Beer Bash”など有意義なイベントを開催していきたいと思います。 どうぞ宜しくお願い致します!

▼今後のイベント情報

GunosyDM研究会 #100 100回記念ビアバッシュ(2016年2月4日19時〜) 隔週で行っているデータマイニング勉強会も今回で100回目。記念してGunosy Beer Bash!の第二回目として、機械学習についての発表と交流会を行います。

▼今回開催したイベント告知情報(過去情報です)

http://gunosy-beer.connpass.com/event/22825/presentation/

▼イベントなどGunosyの情報を随時更新中です

Gunosy企業Facebookアカウントはこちら(フォローするとタイムラインで情報を受け取れます) https://www.facebook.com/gunosyteam/

インプリメントドリブンなUIデザイナー・UX指向なエンジニアのユニコーンな集い - Gunosy UI Design Study

f:id:cou_z:20170617181346p:plain

ユニコーンな集いについて

こんにちはー。入社したらなぜかデザインチームだったGunosyのkimukoです。

なぜかというのは、エンジニア歴としてサーバーサイドだったので、ただwantedlyで応募したときは、なんとなくやりたいことがデザインチームの応募だったわけです。

所属なんてタグづけみたいなもんですよ!

去りし、2015/8/7にGunosyで ”とあるmeetup” を開催しました。

Gunosyのデザインチームは、デザインだけやるひとが一人もいなくて、実装もディレクションも数値分析も運用していて、そんな輩が昨今話題の?ユニコーンについて考察して情報交換をしましょう、という会を開かせていただいたわけです。

ユニコーンとは

ユニコーンとは、日本では奥田民生ひきいるバンドメンバーが一般的で、「すばらしい日々」はやっぱり名曲ですね!

www.youtube.com

ちなみに、世界的には空想上の一角獣とされています。

wikipedia ユニコーン

エンジニア界隈でユニコーンといわれるようになったのは、また聴きですが、

UIデザイナーがインプリメント(実装)まで担当したり、エンジニアがUXを考える Unicorn とよばれる職域を超えてサービスデザインに関わる人。

ということで、あれもこれもできるエンジニアなんてまぼろしーということだそうです。

まぼろしーな人たちの光と影

そんなまぼろしーな人たちが、実際のところどうなのとメリットデメリットを、UXについての考察もふまえたりとかしてざっくばらんに共有した会となりました。

テーマは、

デザイナーによるインプリメントとエンジニアによるUX指向

イベントサービスのconnpassの引用で、

昨今、海外でもUIデザイナーがインプリメント(実装)まで担当したり、エンジニアがUXを考える Unicorn とよばれる職域を超えてサービスデザインに関わる人が増えています。 GunosyでもUIデザイナーがObjective-CやReact.jsでViewのプロトタイピングからそのまま実装を行ったり、Railsを書きながらSEOの数値分析を行って施策を立てたりしています。

今回は、そんなデザイナーがインプリメントまで行うということや、逆にエンジニアがUIデザインやインタラクションのディテールやUXを考えることについて、メリットやどうすればそのようになれるのか実例を踏まえながらお話と情報交換ができればと思っています。

となっていて、

パネラーは弊社4人と@matsumos@ushisantoasobuの6人で、お越しいただいた方々とカツサンドとビールを飲みながらお話ししました。

speakerdeck.com

(ushisantoasobuってネーミングセンスが斜め上ですね!)

発表資料をご紹介します。ぜひ拝見いただいて新しい気づきがあれば幸いです! (※発表順)

実装する デザイナー:弊社iOS 担当の場合 by hiroaki mori

speakerdeck.com

UIデザイナーを取り巻く様々な設計 / Intrinsic meaning of UI Design by Tsuyoshi Higuchi

speakerdeck.com

Gunosy UI Design Study #1 LT ユニコーン11人に聞きました by Keiichiro Matsumoto

speakerdeck.com

小さな会社(チーム)で クールなアプリをつくる方法 by ushisantoasobu

www.slideshare.net

作るのにデザイナーもエンジニアもない by Kohei Asai

speakerdeck.com

matsumosさん、ushisantoasobuさん、ご来場のみなさま、ありがとうございました!

ウシサントアソボウ…

なんか癒されるぞ!

WWDC Afterparty Roppongiを開催しました

こんにちは。Gunosy開発本部iOSチームの川邉です。

2015/06/19に弊社にてWWDC Afterparty Roppongiを開催しました。

f:id:cou_z:20170617181919j:plain

Appleが年に一度開催するWWDCにて得た知見を共有するMeetupでした。 開始前からピザを食べ、ビールを飲み、わいわいとした勉強会となりました。

内容も様々でかつ、WWDC開催直後の週末だったこともあり気づきのある内容が多かったです。 もやっとしていた部分がクリアになったとの感想もあり、主催して良かったと思える会でした。

Apple Watch meetupの発表内容

  • @ktsukago:LLDB Tips6選
  • mnat44:Core Spotlightさわってみた
  • @taketo1024:Obj-C → Swift 自動変換の野望
  • @TachibanaKaoru:Contents Blocker on iOS9
  • @adachi_c:iOS9の新API、CoreSpotlight、Searchについて
  • @akio0911:storyboard referenceとUI testingについて
  • @_mpon:Mechanism for Asynchronous UI Testing
  • @jeffsuke:UIStackView and Autolayout
  • @shu223:iOS 9 の新機能 Core Image 編
  • @kitasuke:How to make workout app for watchOS 2

*以下スライドを発見できたもののみ選んで紹介しています。

Obj-C → Swift 自動変換の野望

www.slideshare.net

@taketo1024さんの発表。Obj-Cで作った資産をSwiftで使いたいというモチベーションで、自動変換ツールを作ったとのこと。全部自動で変換するのではなく、煩わしい部分を解決するために作ったとのこと。

https://github.com/yahoojapan/objc2swift

Contents Blocker on iOS9

www.slideshare.net

ウェブビューに表示する項目を自動的に制限出来る機能。当初心配していた、任意の全てのコンテンツが簡単にブロックされるのではという不安を解消してくれました。

UIStackView and Autolayout

www.slideshare.net

私の発表です。UIStackViewはAuto Layoutの優先度の理解や利用を促進するという話でした。

iOS 9 の新機能 Core Image 編

www.slideshare.net

Apple Watch Meetupでも登壇頂いた@shu223さんの発表です。毎年確実にCore Imageは進化しているというお話です。

http://d.hatena.ne.jp/shu223/20150622/1434924215

How to make workout app for watchOS 2

www.slideshare.net

@kitasukeさんの、HealthKitをWatchOS2上で使うまでの気付きがまとまっています。

まとめ

WWDC開催直後ということもあり、自らがカバー出来なかった内容も聞けて、各自の理解を元に議論もできた勉強会でした。 iOS9が正式リリースになる頃に、どんな機能を製品に入れたのかまた集まってみたいものです。