GameWith Developer Blog

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

半年間輪読会を運営してみて #GameWith #TechWith

GameWithエンジニアのTです!

皆さん輪読会というのをご存知でしょうか?

輪読会とは複数人で1つの本を読み、内容に関する議論をしていくといったスタイルの読書会です。

GameWithでは社内勉強会の一環として輪読会を行っており、前回は「リーダブルコード」を輪読会していました!

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

  • 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)
  • 購入: 68人 クリック: 1,802回
  • この商品を含むブログ (140件) を見る

詳しくはこちらの記事をご覧ください。

tech.gamewith.co.jp

今回の輪読会

今回は「 エンジニアリング組織論への招待」を半年かけて輪読会をしました。

エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング

エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング

なぜ「 エンジニアリング組織論への招待」を選んだか

特定のプログラミング言語に関する本ではなく、GameWithのエンジニア・デザイナーが全員参加できる本というテーマで選びました。

DDDなどの開発手法を学ぶ本なども候補としてあがりましたが、社内で「 エンジニアリング組織論への招待」を実際に買って読んでいる最中の人もいたことから、今回は「 エンジニアリング組織論への招待」を選びました。

GameWithはこの1年間でエンジニア・デザイナーの数が増えてきており、チーム毎に分かれて業務を行うようになることでメンバー間の距離が遠くなり、コミュニケーションコストが増加しました。

また、各チーム内の開発で業務範囲が閉じてしまうので、他チームのエンジニア・デザイナーと交流しての業務知識・技術知識の研鑽がしにくくなってきました。

そのため、マネージャーだけでなく組織についてエンジニア・デザイナー1人1人が学ぶ必要性を感じ始めたのもこの本を選んだ一つの要因です。

輪読会のやり方

輪読会は毎週金曜日の15時から1時間実施しました。

発表者はローテーションで予め決めており、その週の発表者は輪読会の前に内容を要約して当日それを元に発表しディスカッションをする形式をとっていました。

また、ディスカッションは次の発表者が議事録を取っていました。

下記のように発表者が章ごとに要約をまとめていたので、途中参加のしやすさも心がけていました。

f:id:tiwu_gamewith:20190226121140p:plain

輪読会最終回 オープンスペーステクノロジー形式

輪読会の最終回はオープンスペーステクノロジー形式で行いました。

オープンスペーステクノロジー形式とは

各メンバーに過去に学んだテーマの中で特に最後に掘り下げて扱いたいテーマを選んでもらい、セッションを立ち上げディスカッションを行いました。

ディスカッション中は軽食も用意したのでとても盛り上がりました。

f:id:tiwu_gamewith:20190207112114j:plain

輪読会参加者の集め方

今回12,13人の参加者が集まりました。

過去にリーダブルコードの輪読会をやっていたため、その輪読会に参加していたメンバーがそのまま流れで参加したり、新規エンジニア・デザイナーにも声をかけ集めました。

みんなが興味あった本を選んだのも多くのメンバーが集まってくれた理由かもしれません。

輪読会の運営にあたり工夫したこと

前日にSlackの輪読会チャンネルで下記のようにリマインドを必ず行いました。

f:id:tiwu_gamewith:20190226131938p:plain

また、当日もリマインドを必ず行いました。

f:id:tiwu_gamewith:20190226131949p:plain

勉強会に関しては業務の一環として行って良いと許可をもらっており、それをメンバーに伝えることで参加への心理的安全性を高くしました。

また、メンバーが忙しく発表できないときは、うまくフォローをして、毎週の輪読会を途切れないようにしました。

ディスカッションの際にはファシリテーションをして、楽しい輪読会になるよう心がけました。

運営していて辛かったこと

毎回の発表者へのリマインドや、資料の進捗管理など単純なタスクではありましたが地味に手間がかかりました。

また、ディスカッション中のファシリテーションは基本的には自分が行っていましたが時には負担になることもあったため、発表者にファシリテーションを任せる方式にしてもよかったかもしれませんでした。

また、この輪読会は終了するまでに半年間かかりましたが、期間として長かった気もしました。

改善するなら or こうしておけばよかった

半年間は長い気がしたので、ディスカッションの時間を減らして、3ヶ月で終わるくらいのほうがよかったもしれません。

当初の目的としてGameWithのエンジニア・デザイナー内で輪読会という活動を広め、各人に参加してもらうことで、輪読会のナレッジ等を貯めるのも開催の意図としてあったので、もし次やるなら本のテーマを絞って人数を少なくしてもいいかもしれません(今回は12,13人いて少し多いと感じました)

また、今回は輪読会でしたが次回はハンズオン形式など輪読会以外にもエンジニアの志向に合わせた活動をしていきたいと考えています。

運営してみての感想

ディスカッションでメンバーがそれぞれいろんなエピソードや、意見を述べていて各人の考え方を知ることができて良かったです。

メンバー全員がモチベーション高いまま半年間輪読会を行えたのは良かったです。

また、エンジニアだけでなくデザイナーも参加してくれて嬉しかったです。

現在はフロントエンドに特化した輪読会なども開催されており、この輪読会という文化がエンジニア・デザイナーに浸透してきた思うので、運営した甲斐がありました!

最後に

参加していただいたエンジニア・デザイナーの皆様ありがとうございました!

GameWithは、ゲームが大好きで、新しい技術をどんどん使っていきたいという方を大募集中! Wantedly でもよいので是非お気軽にお声がけください!

www.wantedly.com

またGameWithのDeveloper向けTwitterアカウントも開設しました。
社内イベントの告知やブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!

twitter.com

GameWithアプリに動画機能をつけた話_2つのアプリの統合 #GameWith #TechWith

GameWithでiOSエンジニアをしているkyamです。

いきなりですが、最新のver2.1.0でGameWithアプリで攻略動画が見られるようになりました! 今回の記事ではGameWithアプリに攻略動画を閲覧する機能をつけた話をしています。

自分は以前Mippleという攻略動画アプリを専任で担当していましたが、プロダクトの方針転換によりMippleの機能を本体アプリに統合することになりました。
この統合の過程で、どのように開発をし、どのような知見を得たのかを共有しようと思います。

統合の背景について詳しく知りたい方はこちらの記事をどうぞ。 tech.gamewith.co.jp

実際の開発方法

1.まずは別アプリとして作る

自分はまず旧Mipple側を統合後のUIに変更し機能などを実装しました。
本体アプリ側もトップネイティブ化という大きなアップデートを実装している最中でもあったため、まずは本体側はいじらずに別個で開発しました。

ただ意識していた点はあり、本体側でどのような設計をしているか、どのようなディレクトリ構成をしているか、どのようなExtensionファイル(実装を便利にするコード群)が用意されているか、各種フレームワークは何を使っているか、SwiftLintの設定をしているかなどを予め確認しそれに合わせてコードを修正しました。

例えば画像キャッシュのライブラリとして、本体アプリではSDWebImageを使っていますがMippleではKingFisherを使っていました。 その為、Extensionのコードなどで以下のようにライブラリに依存している部分を別ライブラリにしたり、ライブラリに依存しないコード(Codableを用いるなど)に変更したりしました。

import Kingfisher

extension UIImageView {
    func download(image url: String) {
        guard let imageURL = URL(string: url) else {
            return
        }
        self.kf.setImage(with: imageURL, placeholder: nil, options: [.transition(.fade(0.3))])
    }
}

別アプリとしてまず作った理由は他にもあり、デザインを見た時にUIが独立しており既存のコードには影響を与えないように実装できるなと感じた点です。

f:id:keeetaka:20190221154907p:plain

上記は実際のアプリ画面なのですが、見て分かる通りコンテナの中の一つのUIViewControllerとして独立しています。
ですので別アプリとしてまず独立して作っても後で綺麗に丸ごとコードを移植できるなと感じました。

実際本体側のコードでは、各タブ情報のenumがあり、項目に合わせて該当するUIViewControllerを表示させる仕様だったのでバッティングせず開発することができました。 下の例だとmipple(任意のkey)情報をAPIから受け取った場合は動画用のUIViewControllerを作成するといった形です。

    func indicatorInfoProviderViewController(for page: WalkthroughPageEntity) -> IndicatorInfoProvider {
        switch page.type {
        case .web:
            // WebView表示用のViewControllerを返す
        case .mipple:
            return buildVideoListViewController()
        }
    }

    func buildVideoListViewController() -> VideoListViewController {
        // 選択されたゲームを動画一覧を表示するViewControllerに渡す
        let videoListVC = VideoListViewController(selectedGame: selectedGame)
        return videoListVC
    }

実際以下のようにMippleのディレクトリをそのまま移すだけで基本的には済みました。 (※画像は開発中のものです)

f:id:keeetaka:20190225160511p:plain

2.UIと機能を統合後にコードレビュー

上記の通り機能とUIが完成後、本体側にコードを移植しました。
その際に本体アプリを担当している2人のエンジニアにコードレビューを依頼し、既存コードの書き方に合わせているかというよりはクラッシュに繋がりそうなコードや、新規で作らなくても既存コードにあるこのメソッド(既に安全性が保証されているもの)を使いまわせるなど、品質に影響を与えないかを中心にまずチェックしてもらいました。

統合を通して得られたもの(知見)

1. 音の取り扱い

以前動画アプリを作った時も感じたのですが、iPhoneのサイレント(マナー)と消音の違いを明確に分かっている人は結構少ないです。 自分もそんなに正確に言語化できるほど把握していませんでした。

サイレント(マナー)

着信音や通知音のほか、キーボードのクリック音に影響を与える

消音(音量調節ボタンで音量が0の状態)

音楽やムービーのサウンド音量に影響を与える

基本的な前提は上記のものなのですが、マナーなのに音が鳴るだったり鳴らないだったり人によって反応は様々でした。
ですので今回のチームで出した結論としては、例えサイレントでも消音(音量が0)にしていなければ音が出る、いわゆる他の一般的な動画アプリに音の仕様を合わせる事にしました。

実装としては、AVPlayerの再生前にtry? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)を設定するだけです。

この辺りは実際のユーザーの声を聴いて再度検討したいと思います。

2. Firebaseの取り扱い

複数プロジェクトを抱えている場合、firebase list で一覧を見ることができ、今何のプロジェクトに自分のアカウントが向いているかがcurrentの印により分かるのですが、その際に firebase use <projectID> でプロジェクトを切り替えられるっていうのを知らなくて少し時間がかかった部分があります。

f:id:keeetaka:20190225180013p:plain

具体的な話をすると、以前Mippleで運用していた管理画面を今回のGameWithでも使い回したいと思い、最初以下のようにJSコードのプロジェクトの設定だけを変えていたのですが、当然ながら向き先を変えてデプロイしないとダメですよというお話です。

export default {
  apiKey: "??????????????????????????????????",
  authDomain: "???????????.firebaseapp.com",
  databaseURL: "https://?????????.firebaseio.com",
  projectId: "????????????",
  storageBucket: "????????????",
  messagingSenderId: "??????????????"
}

またこれは知らなかったのですが、firestoreにはAのプロジェクトからBのプロジェクトにデータを移す機能も備わっているようです。 firebase.google.com

今回はデータ構造が異なったため利用しなかったのですが、Firebaseのステージ環境を構築するときなどに利用できそうなのでチェックしておきます。

3. 色々なメンバーと仕事をする楽しさ

今回動画機能の統合を担当したことで、本体アプリチームのPO・デザイナー・iOSチームに加えて、Androidチームともコミュニケーションを取ることが増えました。
Androidチームも今後動画機能を統合するため、動画機能の技術的な仕様などを主に自分が説明するためです。

せっかく会社にいるのだから色々なメンバーと仕事がしてみたいなと思うタイプなので、新しいプロジェクトを担当するのは面白いです。
自分は今新規事業の動画チームやソーシャルチームのMTGにも基本的に参加しており、この1ヶ月半で関わる人が増えたなあと思いました。

今後の予定

今回の統合を通して、無事本体アプリに動画機能を移植することができました。
リリース後、約5日間が経過していますが新規で開発した動画部分でのクラッシュの件数は0でした! デバッグに協力してくれたメンバーや、クラッシュに繋がりそうな部分を指摘してくれたメンバーにも感謝します。

無事統合が終わりホッとした所もありますが、まだまだやり残したこと、やりたいことがたくさんあります。

1. やり残したこと

アプリでは攻略記事のお気に入りや閲覧した記事を履歴として残す機能があるのですが、動画版は一旦見送りました。 Realmを使ってデータを管理しているのですが、どのように記事と動画のデータを扱うかで少し議論が必要になったためです。

こちらは次のversionに含む予定なのでお楽しみに!

2. やりたいこと

アプリではElasticsearchを用いて内製した独自の記事検索システムがあるのですが、これを動画にも適用したいなと思います。
現状動画データはFirestoreで管理しており、GameWithのDBなどに動画データがあるわけではありません。 Firestoreにも外部の Algolia などを用いることにより検索の仕組みを作ることができるのですが、一回の検索で別々の場所にある二つのAPIを叩くのは流石に非効率です。

こちらは社内のエンジニアと相談し、良い形に落とし込んで実装したいなと考えています。

検索機能について知りたい方はこちらの記事をどうぞ。 tech.gamewith.co.jp

終わりに

現在弊社ではいくつかの新規事業が並行して立ち上がっています。 今回実装した動画機能も元々は新規事業としてスタートしたものです。新規開発に興味があり少しでも話を聞いて見たいと思った方は是非Wantedlyで会いに来てください!

www.wantedly.com

またGameWithのDeveloper向けTwitterアカウントも開設しました。
社内イベントの告知やブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!

twitter.com

今回の記事が少しでも多くの方の参考になれば幸いです。
ここまで読んで頂いてありがとうございました。

Elasticsearch勉強会でスピーカーとして登壇しました #GameWith #TechWith #elasticsearchjp

みなさん、 Hello World! めもりー (@m3m0r7) です 2019年の2/20(水)にElasticsearch勉強会のスピーカーとして登壇してきました。

PHPカンファレンス仙台で登壇した話と趣旨は同じなのですが、今回はElasticsearch勉強会ということもあり、Elasticsearchメインに資料をいくつか作って差し替えています。

仙台に登壇したときのエントリーはこちらです。

tech.gamewith.co.jp

仙台でお話できなかったもともとの開発のきっかけや、選んだ辞書と抱える課題、あと最近R&Dチームとして動くことになったので、そのチーム自体が抱えてる課題として検索システムが1つあるので、それをどう解決していくかなどが今回加わった内容です。

勉強会

www.meetup.com

会場

会場はRetty株式会社さんでした。Rettyさんも六本木にあり、GameWithは六本木ヒルズにオフィスがあるので最初どう行こうか迷っていて最終的にはヒルズの地下からバスが出ていたので、それに乗って現地に向かいました。 バス代は100円です。210円のイメージしかなかった…。 ちなみにPasmoタッチしたら残高不足でした。

f:id:m3m0r7:20190221112318j:plain

いろんな会社さんが入居してました。 f:id:m3m0r7:20190221112524j:plain

登壇

Rettyさんの紹介が終わったあとに、トップバッターとして発表しました。途中から暑くなって息切れ結構してしまったので呼吸をうまくできるように訓練しておきます。

今回の登壇で使用した資料はこちらです。

speakerdeck.com

バッテリーもらいました。かわいい🐹

f:id:m3m0r7:20190221113115j:plain

Rettyさんもシールを配布されていたので、自分のPCに貼りました。もはやどこの会社の人間かわからなくなってしまった…。

f:id:m3m0r7:20190221113330j:plain

感想

Elasticsearch勉強会も、PHPカンファレンスとはまた違ったコミュニティで楽しくお話させていただきました。 オーディエンスの皆様のレベルが高くて本当に助かりました。

最初の挨拶で「みなさんHello World!」って言ったら滑ったので出直してきます。

ありがとうございました。

次回

次回の登壇は PHPerKaigi というイベントで「PHPでJVMに入門する」という内容でお話します。

Laravel JP Conferenceで登壇してきました #GameWith #TechWith #laraveljpcon

はじめに

こんにちは。GameWithのエンジニアのtiwuです。

先日行われたLaravel JP Conferenceで登壇してきました。

Laravel JP Conference

conference2019.laravel.jp

Laravel JP Conferenceは2019年2月16日に開催されたPHPのフレームワークであるLaravelをメインテーマとした技術カンファレンスです。

「Laravel JP」を冠したイベントは日本で初開催とのこと。

f:id:tiwu_gamewith:20190218104444j:plain

Laravel JP ConferenceとGameWith

弊社は、「GOLD Sponsor」と「DRINK Sponsor」をさせていただきました。

f:id:tiwu_gamewith:20190218104752j:plain

当日はこのような可愛いGameWithオリジナルデザインのお水を提供させていただき、見事360本完売いたしました!ありがとうございました!

登壇

今回、「リリース直前にLumenからLaravelに移行した話」というタイトルで登壇させていただきました。

fortee.jp

聞きに来てくださった方々本当にありがとうございました!

f:id:tiwu_gamewith:20190218105350j:plain

下記が登壇時に使用した資料です。

speakerdeck.com

今回、Lumenを取り上げた発表は自分だけでしたが、会場の方に聞いてみると多くの方がLumenを使っていました。

登壇はとても緊張してしまい、ノンストップで喋り続けた結果早めに終わってしまいました・・・。

感想

最初から最後まで盛り上がっていて、暖かく楽しいカンファレンスでした。

ランチセッションでお弁当が出てきたタイミングに、ハッシュタグのランキングが一瞬1位になったり、LTのドラの音で毎回盛り上がったり、懇親会もとても楽しかったです。

実行委員会の皆様、並びに登壇者の皆様、ご来場頂いた皆様、本当にありがとうございました。

さいごに

GameWithでは登壇したいメンバーの後押しもしてくれるので、登壇に積極的に参加したい人も働きやすい環境です。興味のある方は是非、話を聞きに来てみてください!

www.wantedly.com

また、2/28(木)にもくもく会を開催します。テーマは「フロントエンド」ですので、興味のある方は是非お越しください!

gamewith.connpass.com

MangaWithを構成する技術要素 #GameWith #TechWith

こんにちは。GameWithのエンジニアのtiwuです。

今回は12月にリリースをしたMangaWithを構成する技術要素について紹介したいと思います!

MangaWithについて

MangaWithは2018年12月にリリースをしたスマホ向けWEBマンガサービスです。

f:id:tiwu_gamewith:20190205112645p:plain

MangaWithの詳細については、当社HP(https://gamewith.co.jp/2104)をご参照ください。

MangaWithを構成する技術要素

言語

まずは利用している言語から紹介したいと思います。

  • PHP
  • HTML
  • CSS
  • JavaScript

PHP

フレームワークは開発当初はLumenを利用していましたが、途中からLaravelに移行しました。

PHPは7.2、Laravelは5.7を利用しています。

移行の経緯はLaravel JP Conferenceで、「リリース直前にLumenからLaravelに移行した話」というタイトル登壇をするので見に来てください!

HTML

テンプレートエンジンとしてBladeを利用しています。

CSS

SCSSで記述しています。

Lintツールとしてstylelintを利用し、設計はFLCSSを採用しました。

JavaScript

特にフレームワーク等は利用しておらず、ES6 + webpack + Babelという構成です。

Ajaxにaxiosを、バナーのスライドにswiperを利用しています。

LintツールとしてESLintを利用して、テストはJestを利用しています。

開発環境

  • GitHub
  • docker
  • docker-compose
  • CircleCI
  • Codecov
  • SpeedCurve

GitHubへのpushをトリガーにLintやテストが実行されるようになっています。

カバレッジは Codecovで管理し、PHPUnitのテストは95%以上をキープしています。

速度の計測にSpeedCurveを利用しています(速度改善は別の記事にしたいと思います)

f:id:tiwu_gamewith:20190205184310p:plain

インフラ

MangaWithはGoogle Cloud Platformを利用しています。

  • Kubernetes Engine
  • Cloud Storage
  • Cloud Memorystore
  • Cloud SQL
  • Container Registry
  • Cloud Build
  • Cloud IAM
  • Stackdriver Monitoring
  • Stackdriver Logging
  • BigQuery
  • Elastic App Search

Kubernetes Engine

PHPとNginxでPODを分けた構成にしていますが、これは本当に負荷の高いサービス単位でスケールさせるために工夫をした点になります。

f:id:tiwu_gamewith:20190205123245p:plain

Cloud Storage

画像データ等は Cloud Storageに格納して、CDN経由で配信しています。

Cloud Memorystore

Redisの環境として利用しています。

Cloud SQL

データベースの環境として利用しています。

Container Registry

DockerイメージはContainer Registryに保存しています。

Cloud Build

CDとして利用しています。

GitHubのMergeをフックに、Dockerイメージのビルドやデータベースのマイグレーション、Kubernetes Engineへのリリースが実行されます。

f:id:tiwu_gamewith:20190205143807p:plain

Cloud IAM

権限の管理に利用しています。

Stackdriver Monitoring, Stackdriver Logging

ログの管理に利用しています。

BigQuery

Stackdriver Loggingのログを保存しています。

Elastic App Search

マンガの検索にElastic App Searchを利用しています。

最後に

いかがでしたでしょうか?MangaWithはかなりシンプルな構成になっていると思います。

MangaWithはまだリリースしたばかりですが、更に良いサービスになるよう精一杯取り組んでいきますので宜しくおねがいします!

GameWithは、ゲームが大好きで、新しい技術をどんどん使っていきたいという方を大募集中! Wantedly でもよいので是非お気軽にお声がけください!

www.wantedly.com

PHPカンファレンス 2018で大好評だったグッズはどのようにして生まれたか #GameWith #TechWith #phpcon2018 #novecon

初めまして、GameWithのデザイナーNです。

今回は、先月行われたPHPカンファレンス 2018で大好評だったグッズの制作秘話をお話したいと思います。

PHPカンファレンス 2018

PHPカンファレンス 2018は2018年12月15日(土)に大田区産業プラザ PiOで開催されました。

当日はガチャガチャを用意し、ガチャで出たレア度に応じてノベルティグッズを配布する、といったGameWithらしさを合わせたことでかなり盛り上がりました!

f:id:tiwu_gamewith:20190130112629j:plain

f:id:tiwu_gamewith:20190130112656j:plain

PHPカンファレンス 2018で配布したノベルティグッズの紹介

今回全ノベルティグッズにすっぴんちゃん(GameWith非公式キャラクター)を採用することで、統一を持たせました。

カンファレンス用のチラシ

f:id:tiwu_gamewith:20190130113539j:plain

GameWithで利用している技術等が書かれた採用用のチラシです。

文言や利用している言語など、エンジニアチームと共に作りました。

ガチャガチャ

f:id:tiwu_gamewith:20190130112602j:plain

カレンダー(New!)

f:id:tiwu_gamewith:20190130111952j:plain

200個用意しました。

バラエティに富んだすっぴんちゃんを表紙にして、賑やかで楽しそうな印象をもたせるカレンダーにしました。

卓上なのでデスクに置いて見たときに、癒やされるようなデザインにしました。

ホッカイロ(New!)

f:id:tiwu_gamewith:20190130112005j:plain

こちらも、200個用意しました。

ホッカイロに入っているチラシなので、できるだけ手元に残したくなるような心が温まる可愛いデザインにしました。

ノート(New!)

f:id:tiwu_gamewith:20190130112020p:plain

こちらも、200個用意しました。

中綴じのノートなので、安っぽく見えず、落ち着きのある高級感あふれるデザインにしました。

ノートは小さいサイズではなく、実際に業務等で使われることを考え大きめのA4を採用しました。

モバイルバッテリー

f:id:tiwu_gamewith:20181019144151j:plain

こちらは、300個程度用意しました。

スタッフ用グッズ

パーカー(New!)

プリントより刺繍のほうが可愛いのではと考え、白地のパーカーの胸元にコーポレートロゴをワンポイントでいれました。

ノベルティ・グッズ制作の流れ

11月上旬

11月上旬にエンジニアチームからデザインチームにノベルティグッズ制作の依頼が来ました。

GameWithのノベルティグッズはモバイルバッテリーとステッカーしかなく、PHPカンファレンスで新たにノベルティをグッズ配布したいという思いがありました。

今回は、自分がメイン業務と兼務しながら担当をすることになりました。

11月中旬

スタッフ着用のオリジナルパーカーの作成も、ノベルティグッズと同時に依頼をされていたため、先にパーカーのデザインから始めました。

また、当日配布するチラシのデザインもこの期間に行いました。

11月下旬

ノベルティグッズを制作するにあたり、エンジニアチームからいくつか案が出ていましたが(マグカップ、ボールペン、クリアファイル、スマホスタンドなど)、予算(約15万円)が決まっており、予算内で実用的且つ、GameWithらしさもあるノベルティを提供するために、エンジニアチームと何回も打ち合わせを行い、制作するノベルティグッズを決めました。

まずPHPカンファレンスが12月に開催されるため、実用的で単価が安いホッカイロを提案し、採用しました。

次に名刺サイズの卓上カレンダーはデスクに置いても邪魔にならず実用的で、単価も安いため採用しました。

最後にノートですが、最初はスケッチブックをノベルティとして配布を考えていましたが、PHPカンファレンスまでに納期が間に合わず、泣く泣く断念することに・・・。

そこでスケッチブックの代わりにノートをノベルティグッズとして配布することしました。

12月上旬

決定したノベルティグッズのデザインをし、発注をしました。

しかし、発注中にホッカイロの納期がPHPカンファレンス後になってしまうことが発覚!

一縷の望みをかけて、ホッカイロ業者に電話をし、なんとかPHPカンファレンスの2日前に納品していただけるよう調整を行いました!

ただ、GameWithからPHPカンファレンスの会場に発送する日には間に合わなかったので、人力で会場に運びました!笑

最後に

実は、デザイナーチームが出来たのはここ最近です。まだまだチームになって日が浅いですが、お互いに個人のアイデアや感性を尊重して働いています!是非興味を持って頂けた方は一緒に働きましょう!Wantedly でもよいので是非お気軽にお声がけください!

www.wantedly.com

PHPカンファレンス仙台 2019 にスピーカーとして登壇してきました #GameWith #TechWith

みなさん、 Hello World! めもりー (@m3m0r7) です 2019年の1/26(土)にPHPカンファレンス仙台のスピーカーとして登壇してきました。

前日入り

前日入りするため、午前中はオフィスに出て3つほどのタスクをこなし、オフィスを出発して仙台へ向かいました。 そして仙台へ到着。報連相は大事なので報告しました。

f:id:m3m0r7:20190128124857j:plain

Slackに「さすが」という謎のリアクションが…😂

ちなみに仙台駅内では牛タン通りやすし通りなるものがありました。

f:id:m3m0r7:20190128125116j:plain

全店舗制覇したいという葛藤の中、体力が限界だったということもあり、ホテルにチェックインしました。

f:id:m3m0r7:20190128125226j:plain

ホテルが綺麗すぎて、ホテルすごいって気持ちになりました。

仙台名物の牛タン

そのあとは、仙台名物の牛タン屋で牛タンを食べました🐮 おいしい! (食レポは苦手なので雰囲気だけでお願いします)

f:id:m3m0r7:20190128125543j:plain

牛タンを食べたあとに気づいたのですが、実はランチマップなるものが公開されていたようです。

登壇当日

そして、1/26当日、仙台は降雪してました。

f:id:m3m0r7:20190128130521j:plain

あいにく、PCを入れるためのカバンを持っていかなかったので積雪している中、キャリーケースを引きずり会場へ。

f:id:m3m0r7:20190128130646j:plain

登壇者受付を済ませて、登壇者控室でスライドの typo がないかとか、喋る内容を頭の中でまとめたりとかしていました。

f:id:m3m0r7:20190128130924j:plain

あまり強調はしない感じで、ネームホルダーをぶら下げ、15:15からの「開発期間2ヶ月でElasticsearchをプロダクトに使ってリリースした話」をお話させていただきました。

f:id:m3m0r7:20190128131224j:plain

聞きに来てくださった方々本当にありがとうございました ✨

どうやら部屋が満席だったようで、申し訳なかったです…!

下記が登壇時に使用した資料です。 speakerdeck.com

ちなみに、以前 Tech Blog で下記のことを書いたのが触りの話だったので、実際にどんな開発体制で、どういうツールをどのように使ったのかをメインにお話させていただきました。

tech.gamewith.co.jp

感想

緊張するというか、時間どおりに終わるかどうかのほうが懸念だったのですが、なんとか時間どおりに終わり安堵しました。 そのあとに、懇親会へ参加し多くの方々とお話できたり、発表だけではなくとても有意義な時間を過ごせたので、とてもとても濃い1日になりました。 実行委員会の皆様、並びに登壇者の皆様、ご来場頂いた皆様、本当にありがとうございました。

余談

以前PHPでJavaのバイトコードを読んでみたという話を当日に「PHPでファミコンエミュレータを作る」という内容で発表されていた長谷川さんにお話したところ、下記のようにツイートしてくださっていたので、機会があればお話するかもしれません😉

最後に

いかがでしたでしょうか?GameWith では登壇したいメンバーの後押しもしてくれるので、登壇に興味のあるかたは是非お話を聞きに来てみてください 👍

www.wantedly.com