GameWith Engineering Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

try! Swift Tokyo 2018 でブース出展を行いました #tryswiftconf

おはようございます。エンジニア 兼 技術広報の @serima です。

2018 年 3 月 1 日(木), 2 日(金) にベルサール新宿で try! Swift 2018 が開催され、国内外から約 30 名の講演者を含め 700〜800 名の参加者が集いました。*1

今回、GameWith はゴールドスポンサーとして協賛させていただき、ブース出展を行いました。

tech.gamewith.co.jp

運営の Twitter (@tryswiftconf) では開催日までカウントダウンが行われており、GameWith ロゴと Riko のかわいいコラボレーション画像を作ってくださっていたり...

*1:参加者数は公式に発表されたものではありません

続きを読む

GameWith もくもく会 #1 を開催しました

こんにちは!エンジニア 兼 技術広報の @serima です。

昨日、2 月 22 日 (木) に GameWith 主催で初のもくもく会を開催しました!

雪混じりの雨が降るという悪天候でキャンセル続出を懸念していましたが、そんな心配をよそに参加者の方々が続々と…!

会場諸注意などの最後に、「初開催なので不手際などご容赦ください」というエクスキューズも忘れずに行いました…

その直後「さて、もくもくしますか」と言ったところ、参加者の方々から「最初に自己紹介と今日何やるかは言ったほうがいいですよ!」と温かいフォローをしていただきたいへん助かったりしました。(ありがとうございました)

今回は取り組むテーマをフリーに設定したこともあり、各人さまざまなテーマに取り組んでらっしゃいました。

  • Swift のチュートリアルを行なってみる
  • 個人で開発されているアプリの機能改修
  • TensorFlow を使ってディープラーニングの勉強
  • Android Wear の背景にカスタマイズ画像を表示する
  • 落合陽一の「日本再興戦略」を読む
続きを読む

DroidKaigi 2018に参加してきました

はじめまして。decoy0318です。

普段はGameWithアプリのサーバサイドエンジニアとして主にAPIの設計や実装を担当しています。 昔の職場で一時Androidアプリを担当していたこともあったことから、それ以来サーバサイドだけではなくクライアントサイドにも大変興味があります。

今回、弊社でDroidKaigi 2018にスポンサードを行い、スポンサー枠でチケットを頂いたので、初めて参加してきました。 (私を含めて弊社より2名参加させて頂きました。)

tech.gamewith.co.jp

DroidKaigiはエンジニアが主役のAndroidカンファレンスで、2015年の初開催から毎年行われており、今年の会場は去年と同じく「ベルサール新宿グランド」でした。

f:id:decoy0318:20180214185416j:plain

続きを読む

リリース前ゲームのレコメンドを検証してみた

GameWith エンジニアの @skagawa です。開発部の部長をしています。他には、騎空士、マスター、新人スタッフのお仕事もしています。

GameWithでは「リリース通知」というゲームがリリースされたことをユーザーにメールとおしらせ通知で知らせるサービスを提供しています。

ゲームタイトルは日々発表されているため、ユーザーが自分好みのゲームを見つけることが難しくなっています。
その課題を解決するため、GameWithでは「ゲームレビュー」でのゲーム情報の発信とは別に、

  • リリース通知対象タイトルのピックアップ
  • 登録数ランキング

というユーザーが新しいゲームを見つけられるためのコンテンツを用意しています。

ピックアップされるゲームタイトルは多腕バンディット(アルゴリズムはThompson sampling)を活用し、 新しく発表されたゲームタイトルの露出機会を設けつつ、ピックアップ枠経由での登録が多いゲームタイトルが最適に表示されるようにしています。

今後はよりユーザーが興味のあるであろうゲームタイトルをおすすめできるよう、レコメンド形式でのゲームピックアップの検証を進めています。
まだ実際のサービスとはなっていませんが、今回は検証中の仕組みを使ったゲームレコメンドを紹介します。

続きを読む

YAPC::Okinawa 2018 ONNASON にスポンサーとして協賛します

GameWith は YAPC::Okinawa 2018 ONNASON にゴールドスポンサーとして協賛します。

弊社では今のところ Perl 言語を多く使っていませんが(一部では使っています!)、弊社メイン言語である PHP と並んで、これまでインターネットの世界で多く採用され、その歴史を支えてきた言語であり、強くリスペクトしています。

イベント概要については、以下をご覧ください。

イベント概要

f:id:serimaryo:20180123120520p:plain

イベント名 : YAPC::Okinawa 2018 ONNASON

概要 : YAPCはYet Another Perl Conferenceの略で、一般社団法人 JPAが主催する、Perlを軸としたITに関わる全ての人のためのカンファレンスです。

日時 : 2018 年 3 月 3 日(土)

会場 : 沖縄科学技術大学院大学 OIST

公式 HP : http://yapcjapan.org/2018okinawa/

yapcjapan.org

Google オフィスで GCP ハンズオンを開催していただきました

こんにちは。エンジニア兼技術広報の @serima です。 GameWith では外部から講師をお招きして勉強会を行うということを定期的に行っています。

今回はなんと Google 様による GCP のハンズオン込みの勉強会でした。 GameWith のエンジニア陣が Google のオフィスに招待され、さらにランチまでご馳走になってしまうという展開になり、とてもありがたく、美味しい勉強会となりました。

同じビルにオフィスがあるため、すぐに到着できるだろうという目論見でしたが、思っていた入口から入れずタイムロスしてしまいました…申し訳ありません!

無事に合流し、早速会議室にご案内していただいたのですが、各所に遊び心が垣間見える素敵なオフィスでした。

Google Cloud Platform ガイダンス

まずは双方でご挨拶、簡単に自己紹介を済ませたあと、GCP の概要をご説明頂きました。

  • 開発者はインフラから解き放たれて、アプリケーションに集中できるようにする
  • 地球規模 (Planet Scale) のインフラを目指す
  • 2015 年頃から技術を公開して世界のエンジニアにイノベーションを起こしてもらうのを狙うようになった = Philosophyの 180 度変更
  • GCP のネットワークは AWS と大きく異なる
    • 自社でネットワークを持っているので、リージョンを跨いでの構築がしやすいのが AWS との違い
    • 後発のため、プライスリーダー戦略をとっているが、「個人開発者もエンタープライズも等しく Public Cloud を利用できるべき」という Philosophy でフラットに対応を行っている
  • プレウォーミング不要
  • 単一の IP Anycast で最適なリージョンに振り分けを行ってくれる
  • 全て自社の専用線を引いているため、遅くならない。YouTube は海外から配信している
  • GAE はデプロイからの立ち上がりが早い
    • Go はとにかく早い
    • 言語ごとの比較だと Go > Python, PHP >> Java
  • 他社事例
    • 導入するまではやり方に慣れるという意味で大変だったが、リリース後にインフラに関して何もしなくて良くなった
    • インフラのやり方を忘れてしまった by 中の人
  • ライブマイグレーション = 計画停止なし
    • IaaS の再起動祭りがなくなる
    • 切り替わりはあるが、ログを見ないと気づかないレベルで高速。
  • リザーブドインスタンスのようなものはあるが、インスタンス単位ではなくコアとメモリ単位で購入できる
    • x 年後に「このマシンじゃ非力で使えない」や「ビジネス要件的にそのときに必要なインスタンスタイプとマッチしない」ということがないように
    • マシンが利用状況に合ってないとアラートが出る(オーバースペックな場合など)
    • ユーザーから「これ出していいの?(Google さん損じゃない?)」と言われてしまう
  • 質問
    • ライブマイグレーションに関して、ハードウェア障害の時はどうなるか?
      • 計画停電と同様に、自動で対応されるが、計画停止時よりは長くなってしまう。

Google の内部で運用されていた環境をサービスという形で外に出していくという方針に切り替わったのはかなり大きいな、と感じました。 尋常ではないトラフィックをプラネットスケールで受けている実績が既にありますので、非常に安心感があります。 また、印象的だったのは、カスタマが何か能動的にアクションせずとも、請求時に自動で利用料金が割り引かれたり、オーバースペックだった場合にアラートを出してくれるなどの対応です。 リザーブドインスタンスなどの前払いでインスタンスタイプを予約する契約については、一定のリスクがあることについてこちらで言及しており、納得感があります。

午前の部はここで終了し、ランチにお誘いいただきました!

Break time

f:id:serimaryo:20171228132228j:plain

レストランに向かう途中のカフェスペースからの眺め。Google の次の渋谷オフィスが見えました!

f:id:serimaryo:20180105173116j:plain

Reserved のプレートに GameWith と入っており、おもてなし力の高さに感動しました…

f:id:serimaryo:20171228124013j:plain

いただきます!

弊社の開発チームやシステム構成、デプロイ体制をはじめ、Google 社での開発やオフィスについて、ざっくばらんにお話しました。 (カレーが美味しいという噂を耳にしたので頂いたのですが、本当に美味しかったです…!)

ランチのあとは、カフェスペースでコーヒーやお菓子をいただき、リラックスしたムードでハンズオン開始!

Google App Engine ハンズオン

シンプルな Python アプリケーションを各々構築し、App Engine を利用してインターネットに公開してみるという内容でした。

弊社のアーキテクチャにおいて、アプリケーションサーバのオートスケーリングをより最適化したいと常に考えており、折角の機会ということで GAE のスケーリングについて学びたいというリクエストをしておりました。

f:id:serimaryo:20180105172706j:plain

  • Google Cloud Shell
    • ブラウザから直接クラウドリソースにアクセスできるシェル
    • dashboard の右上のアイコンからログインできる
  • StackDriver
    • 監視、ログ、デバッグ、パフォーマンス、エラーレポート
  • リアルタイムデバッグ
    • 本番環境で stack trace を実現できる
  • バージョンコントロール
    • 任意のバージョンを 100% → 30%, 30%, 40% のような形で割合指定で露出できる
    • ファイアーウォール機能も最近つくようになった
      • ので、全世界に公開せず開発環境でバージョン切り替えて試したりもしやすくなった
      • この機能は以前から各方面から要望があったので、非常にホット
  • インスタンスのオートスケーリング
    • 完全オート、上限ありオート、マニュアルがある
    • automatic_scaling: 細かいトラフィックを大量にさばく
  • basic_scaling: 最大のインスタンス数を事前に設定
  • manual_scaling: 手動でインスタンスの数を決める
  • アクセスが落ち着いた後にどのくらいの速さでインスタンスを減らすかも設定で調整できる
    • 特に Go だと即時インスタンスが立ち上がるので、アクセスが少なくなったらすぐ台数を減らす設定にしておくとよい

エンドポイントに対して定期的に curl しながら、トラフィック分割設定で割合を切り替える瞬間の video です。

Hello World! が 100 %稼働している状態から、Hello Google! のバージョンを 30 %にしている場面。

Hello Google! が 30 %稼働している状態から、Hello Google! のバージョンを 100 %にしている場面。

GUI からワンクリックで、かつ瞬時に切り替わりを体感でき非常に興奮しました。ロールバックについても同様で、すぐに切り戻すことが可能です。

GUI から様々なことが簡単にでき、便利さを実感しました。 なかでも本番のコードに直接 Break point を設定して、ユーザが次にそこを通ったタイミングで stack trace を追えるというのは本当にすごいな…と思いました。

環境要因(主にデータ起因)で、なかなかローカル環境で再現が難しいバグなどもこれを使えれば特定がかなり容易にできるようになります。(現在は PHP は非対応とのことでした)

BigQuery のデモ

弊社ではすでに BigQuery を使用していますが、さらに使いこなしていきたいという思いから今回は事前にリクエストしていました。

  • Google は大量のデータがあったのでビッグデータは昔からやってた
  • Google が使ってよかったものが論文で外に出てオープンソースになったり GCP で提供されたりしてる
    • MapReduce + GFS => Apache Hadoop => Cloud DataProc
    • Dremel => Apache Drill => BigQuery
    • FlumeJava, MillWheel, Dataflow => Apache Beam / DataflowSDK => Cloud Dataflow
  • Dataflow = Apache Beam というプログラミングパラダイムのマネージドな実行環境
    • DataProc、AWS EMR と比較すると立ち上げが高速
  • データ分析系サービス一覧
    • BigQuery
    • DataProc
    • Dataflow
    • Datalab
    • Data Studio
    • Dataprep
  • BigQuery は DWH
  • fluentd から streaming insert で BigQuery に流せる
  • デモ
    • 生成したログを fluentd へ流して、BigQuery に streaming insert するデモ
    • ログ生成で使った gem パッケージ:
    • streaming insert したデータはリアルタイムで BigQuery の WebUI の preview には反映されない(少しラグがある)
    • streaming insert は有料なので、使い分けるのがベストプラクティス
      • 即時性を求められるデータ: streaming insert
      • 即時性を求められないデータ: 日次のバッチなどで対応
  • デモ 2
    • Dataprep
      • Dataflow の GUI コードビルダーのようなもの
      • 裏で使われる Dataflow に料金が発生し、Dataprep の使用自体は無料
      • 任意のデータソース(国が発行するフォーマットが揃っていない CSV など)を GUI で整形して BigQuery に流せる

Dataprep / Dataflow はとても革命的だな…と感じました。

今までだといったんデータソースをダウンロードしてきて、ローカルでデータを整形して再度 BigQuery に入れるということをしていましたが、その手間がゼロになると思うと胸熱です。

定形作業が一切不要になりますし、しかもそれが GUI で操作できるので、プログラマ以外の方にも使ってもらえるという点で、用途が一気に拡がりそうです。

デモをしていただいた後、社内のカフェにもご案内頂いたのですが、 レストランとはまた別の場所にあり、最早ここにないものはないのでは…と思いました。

自由にドリンクをオーダーして良いとのことで、弊社メンバー皆コーヒーを頂いてしまいました。ありがとうございます!

f:id:serimaryo:20180105173703j:plain

帰り際、Google カレンダーを模したリアルな Google カレンダーを頂いてしまいました!

非常に可愛く、早速愛用しています!

f:id:serimaryo:20171228152355j:plain

まとめ

Google の内部で培った知見を外部に公開し、社外でのイノベーションを狙っていくという Philosophy に感銘を受けました。 また、エンタープライズも個人開発者も等しく扱うというスタンスは、ある意味とても Google らしく、いちデベロッパとして好感でした。

「巨人の肩に乗る」というメタファがありますが、ユーザに対して真に価値を届けるために、ビジネスのコア以外を積極的にアウトソースしていく事は、限られたリソースを有効に活用する手段だと思います。

適切な箇所で GCP を利用することで、より早く、より良いサービスをユーザに提供することができるように、検討と実験を経てプロダクションで運用できるように推進していきたいと思います。

あらかじめリクエストしていた内容をハンズオンに盛り込んで頂いたことで、非常に身のある濃い時間となりました。 Google の皆様、本当にありがとうございました!

f:id:serimaryo:20180105172847j:plain

エンジニアブログ ブログプラットフォーム/CMS 別まとめ

エンジニア兼技術広報となりました @serima です。

GameWith では去年の 12 月から技術ブログを始めました。

その際、検討事項として

  • タイトルは何が良いか
  • URL は何が良いか
  • どこのブログプラットフォームを使うのがよいか

等が挙がりました。

他社のエンジニアブログとそのブログプラットフォームと CMS について調査したので、せっかくなので共有します。

ブログプラットフォーム観点でまとめられているものは、自分が探した限りでは見当たりませんでしたので、何かの参考になればと思います。

拾いきれていないものもありますが、他意はありませんのでご容赦ください!(こっそり教えてください…)

なお、すべて順不同です。

日本国内

はてなブログ

会社名 タイトル URL
ガイアックス Gaiax Engineers' Blog http://gaiax.hatenablog.com/
コネヒト コネヒト開発者ブログ http://tech.connehito.com/
クックパッド クックパッド開発者ブログ http://techlife.cookpad.com/
BASE BASE開発チームブログ http://devblog.thebase.in/
はてな Hatena Developer Blog http://developer.hatenastaff.com/
VASILY VASILY DEVELOPERS BLOG http://tech.vasily.jp/
メルカリ Mercari Engineering Blog http://tech.mercari.com/
Fablic inFablic | Fablic, inc. Developer's Blog. http://in.fablic.co.jp/
UZABASE UZABASE Tech Blog http://tech.uzabase.com/
KAYAC KAYAC engineers' blog http://techblog.kayac.com/
pixiv pixiv inside http://inside.pixiv.net/
Cybozu Cybozu Inside Out | サイボウズエンジニアのブログ http://blog.cybozu.io/
Gunosy Gunosy テックブログ http://tech.gunosy.io/
mixi mixi engineer blog http://alpha.mixi.co.jp/
クラウドワークス クラウドワークス エンジニアブログ http://engineer.crowdworks.jp/
dely dely engineering blog http://tech.dely.jp/
ぐるなび ぐるなびをちょっと良くするエンジニアブログ http://developers.gnavi.co.jp/
Chatwork ChatWork Creator's Note http://creators-note.chatwork.com/

WordPress

会社名 タイトル URL
Cygames Cygames Engineers' Blog http://tech.cygames.co.jp/
クラスメソッド Developers.IO http://dev.classmethod.jp/
MoneyForward Engineers' Blog | マネーフォワード エンジニアブログ https://moneyforward.com/engineers_blog/
GREE GREE Engineers' Blog http://labs.gree.jp/blog/
DMM.com ラボ ツチノコブログ http://tsuchinoko.dmmlabs.com/
VOYAGE GROUP VOYAGE GROUP techlog http://techlog.voyagegroup.com/
ランサーズ ランサーズ(Lancers)エンジニアブログ https://engineer.blog.lancers.jp/

Medium

会社名 タイトル URL
FiNC FiNC Engineering Blog https://medium.com/finc-engineering
Eureka Eureka Engineering https://medium.com/eureka-engineering

自前・不明

会社名 タイトル URL
CyberAgent CyberAgent Developers Blog | サイバーエージェント デベロッパーズブログ https://developers.cyberagent.co.jp/blog/
SmartNews SmartNews Engineering Blog https://developer.smartnews.com/blog/
Google Japan Google Developers Japan https://developers-jp.googleblog.com/
LINE LINE Engineering Blog https://engineering.linecorp.com/ja/blog
dwango dwango エンジニア ブロマガ http://ch.nicovideo.jp/dwango-engineer/blomaga
DeNA DeNA Engineers' Blog [ Technology of DeNA ] http://developers.mobage.jp/blog/
Yahoo! Japan Yahoo! JAPAN Tech Blog https://techblog.yahoo.co.jp/

海外

会社名 タイトル URL プラットフォーム
Slack Several People Are Coding https://slack.engineering/ Medium
Pinterest Pinterest Engineering https://medium.com/@Pinterest_Engineering Medium
Instagram Instagram Engineering https://engineering.instagram.com/ Medium
Spotify Spotify's Engineering and Technology Blog https://labs.spotify.com/ ワードプレス
Uber Uber Engineering Blog https://eng.uber.com/ ワードプレス
Facebook Engineering Blog https://code.facebook.com/posts/ 自前
Twitter Engineering https://blog.twitter.com/engineering 自前
GitHub GitHub Engineering | The Blog of the GitHub Engineering Team https://githubengineering.com/ 自前

(Slack のブログタイトルが「Several People Are Coding」というのが洒落がきいていて個人的にはとても好きです...)

まとめ

日本国内だとはてなブログ、海外だと Medium を利用している会社が多い印象です。

ちょうど調査をしている頃に、はてなブログの SSL 化へのマイルストーンが公開されたこともあり、弊社でははてなブログを利用することとしました。

エンジニアブログの界隈はすでに大いに盛り上がっておりますが、新参者の GameWith も引き続きコツコツと頑張ってまいりたいと思います。