diff --git a/README.md b/README.md index 4add848..f459ca1 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,147 @@ -

+# 提供サービス +GameWith 日本語版 -# GameWith Engineer Recruitment Repository -[![reviewdog](https://github.com/GameWith/recruitment/actions/workflows/reviewdog.yml/badge.svg)](https://github.com/GameWith/recruitment/actions/workflows/reviewdog.yml) [![License: CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](http://creativecommons.org/licenses/by-sa/4.0/) -GameWith のエンジニア採用応募者向けの公開情報をまとめたリポジトリです。 +iOS アプリ +GameWith 英語版 -## 現在募集中の職種 +AIM練習ソフト -- [サーバサイドエンジニア](https://hrmos.co/pages/gamewith/jobs/1744966383630356502) - -ご応募の際は必ず募集要項の内容をご確認ください。 - -カジュアル面談ご希望の方は [こちらの Wantedly ページ](https://www.wantedly.com/projects/606408) からお申し込みください。 - -## 採用技術 +# GameWithの開発スタイル +## 技術スタック・ツール +サーバサイド言語として、主にPHPとGoを採用しています。 +GameWithはFuelPHPというフレームワークを利用して開発されていますが、適切な粒度でのサービス分割、新規実装部分はGo+Vue.jsにて実装するケースも増えています。 +最近ではスマホアプリや一部のwebにflutter を取り入れています。 +### GameWith - サーバサイド:PHP, Go, (Python, Node.js) - フロントエンド:TypeScript, ES6, jQuery, Vue.js, Web Components, LESS... -- ネイティブアプリ:Swift, RxSwift, Kotlin, kotlinx.coroutines, ExoPlayer +- クライアントサイド: Swift, Kotlin, Flutter (Dart), Unity (C#) - データベース:MySQL, Aurora, DocumentDB, DynamoDB - システムモニタリング:New Relic, Firebase Performance Monitoring - 分析基盤:BigQuery, Google Analytics 4, Google Data Studio -- インフラ - - AWS(ALB, ECS Fargate, ElastiCache, S3, Lambda, CloudFront...) - - GCP(Firebase, Cloud Firestore, Cloud Functions, Vision AI...) - - Akamai(Image and Video Manager, Adaptive Media Delivery...) - -以下に[stackshare](https://stackshare.io/gamewith-inc/gamewith)から採用スタックを画像で引用しています。 -
-

- -

-
+- テスト:Autify +### インフラ +- AWS(ALB, ECS Fargate, ElastiCache, S3, Lambda, CloudFront...) +- GCP(Firebase, Cloud Firestore, Cloud Functions, Vision AI...) +- Akamai(Image and Video Manager, Adaptive Media Delivery...) +- Terraform +### AIM練習ソフト +- クライアントサイド: Unity (C#) +- サーバサイド:Go +- データベース:Aurora MySQL +- インフラ: + - AWS(ALB, ECS Fargate, S3, Lambda, CloudFront...) + - GS2(GameServiceService)主にユーザー管理系に利用 + - GameWithを構成する周辺システムについて + +GameWithはさまざまなマイクロサービスや独自ライブラリなどで構成されています。 +より良いサービスをユーザーに提供するためにシステムも日々進化しています。 +数が多いので一部を抜粋して紹介します。 + +### GameWithDesignSystem + +GameWith Developer Blog 「GameWithのリプレイスについて vol.2」 より +### 記事下コメントシステム +GameWithの各種記事に書き込みできるコメントを管理するシステムです。 +バックエンドはgolang、フロントエンドはGameWithDesignSystem(Vue.js/TypeScript)を利用しています。 +会員登録せずとも書き込みができる仕様になっているため、トラフィックの多いGameWithでもユーザーが快適に利用できるようにフロントエンドでの非同期描画やCDNの利用などの工夫をしています。 +GO最新攻略 & レイド招待・個体値チェッカー + +GameWith Developer Blog 「社内でFlutterを採用しアプリと管理画面を開発した話」より +# 開発プロセス + +## プロジェクトの進み方 + +チームごとにワークフローを決めて動いているため細かな違いがありますが、以下の部分は共通しています。 +1週間を1スプリントとしたアジャイル開発 +1日1回ビデオ通話による朝会(デイリースクラムのようなもの)を実施 +また、チームや仕事内容によって度合いは変わりますが各事業部とも仕様の相談・調整を随時行っています。開発部が主体的にビジネス視点での改善や施策を提案しコミットすることを強く推奨しており、ビジネス側もそれを受け入れる風土があります。 +## 各種管理 +コミュニケーションツールとして slack、 チームのタスク管理にはZenHub、ドキュメント管理にはNotionを利用しており、**フルリモートワーク体制でも滞りなく業務が遂行できる**ツールを積極的に導入しています。 + +ZenHubのカンバンボード +## 日常的にリリースを行う +現在の月間リリース数は80前後。平均すると1日に4〜5回リリースが行われている計算になります。 +GameWithではユーザに価値を素早く届けることを重視しており、ビッグバンリリースよりも小さなリリースを日常的に行うのが良しとされています。 +## 組織体制 +サービス開発部では約25名のメンバーが在籍しています。 +事業に沿ったチームと、それを横断的にサポートするチームが存在します。 +定期的に情報共有会を開催したり、一部のメンバーは複数のチームを兼務していたりとチーム間連携も活発に行われています。 + +ロールとしてはリーダー/ディレクター/エンジニアというメンバーでチームが構成されています。 +開発チームの年齢は26歳~42歳のレンジで構成されており、ボリュームゾーンは30代前半です。他にも、以下のような多様性のあるチームです。 +- 育児中のエンジニアリーダー・マネージャー がいる +- 女性エンジニア がいる +- 外国籍エンジニア がいる +- ディレクター経験のあるエンジニア がいる + +# エンジニアから見たGameWithの面白さ +## ハイトラフィックなサービスの開発運用 +月間5億PV、4500万UUが利用するサービスのため、自らリリースした施策への反応がすぐに返ってきます。秒間リクエスト数まで意識をして設計や実装を行う必要があるため、エンジニアとしてのスキルが磨かれます。 +## いちゲームユーザーとしての視点が活かせる +2020年〜の巣ごもり需要により、ゲーム業界全体の市場規模が大きく伸長しています。その中で攻略メディアビジネスも競争が激化しており、差別化やメディアとしてさらなる品質向上が重要になってきています。 + +そのため、いかに素早くユーザのニーズに応えられるようなサービスを提供し続けることができるかが今後の成長の鍵となります。 +技術力だけでなく業界のトレンドやいま流行しているゲームについてのキャッチアップも同時に求められ、とても刺激的な環境です。 + +## あらゆるステークホルダを支える屋台骨 +GameWithを開発するエンジニアにとって、少なくとも3つのステークホルダが存在すると考えています。 +まず1つにゲームを楽しむエンドユーザーです。品質の高い情報をいち早くユーザーに届け、ユーザーのゲームプレイをより快適にすることが求められます。 + +次にゲームを売り出すパブリッシャーやデベロッパーです。発売されたゲームをより楽しんでもらうこと、ゲームの魅力をより多くのユーザーに届けることでさらなるゲーム業界の発展に寄与していきます。 +最後にGameWithでゲームの記事を書くライターです。ダッシュボードを常に改善し続けることで彼らがより効率的に良い記事をリリースし続けることを目ざいます。 + +このような多様なステークホルダが満足するようにエンジニアリングの観点から最善を尽くしています。 +## GameWith開発部が目指す組織の姿 +### ボトムアップでのシステム改善・施策提案の実施 +コンテンツだけではなくサービスとして、より良い価値提供をユーザに行えるような組織体制を目指しています。 +解像度高くサービスのことを理解しているエンジニアだからこそできる施策やシステム改善などを積極的に実現できるよう仕組みやカルチャーをつくっています。 + +### 提案ボード +数値分析によるファクトベースでの施策立案 +施策立案をする際には、どのKPIに対して影響があるかを考えます。実際にリリースしたあとに結果はどうだったかを振り返る場をつくるようにしています。 +数値分析グループでは週次での定期レポーティング会を行っており、エンジニアもサービス全体の数値把握をおこなう機会があります。 + +### 開発効率の改善 +2013年にGameWithがリリースされ、以来多くの機能開発を行ってきました。コードベースや組織の拡大に伴うスピード低下を避けるために課題をひとつずつクリアし、あらゆる面から効率向上のための取り組みをおこなっています。 +機動的なペアプロ、モブワークの実践 +設計・コード・セキュリティレビューの実施 +E2Eテスト自動化によるテスト工数圧縮 +不要コードの削減 +# カルチャー +## 業務アピール会・社内LT会 +毎月おこなわれるサービス開発部の全体会のコンテンツのひとつとして、業務に対する個人のこだわりポイントを話してもらう業務アピール会というものを実施しています。 +また、毎週金曜日の業務時間終了後に任意参加の社内LT会が開催されています。ここでは、最近気になった技術やトピックなどを自由に発表しています。 + +## 互いに感謝・称賛するカルチャー +Slack上で ピアボーナスのシステムである HeyTaco を採用しています。 +これはタコスの絵文字で感謝を手軽に表現することでインセンティブを付与できるシステムです。 +タコスを集めるとガチャを引き、iTunes/Google Playカードを手に入れることができます。 + +## 積極的なスキルアップ支援 +エンジニアのスキルアップの支援として以下の手当や取り組みを行っています + +### 技術勉強手当 +業務時間外に月10時間以上の取り組みをした場合に支給されます + +基本的にはアウトプットが残る形を推奨しています + +- コードがあるものはgithubのリポジトリ公開 +- 読書をしたものは内容のサマリをブログで公開 +etc… + +### OSSコントリビュータ / コミッタ手当 +GitHub の場合、スター数が一定以上のOSSに対してIssueの起票やPullRequestのマージを一定以上行うことによって支給されます + +ハードルが高い分、半年程度継続して手当が支給されます + +### テックブログの執筆 +社内でテックブログ推進委員がおり、ブログ作成に不安がある人も安心して書くことが出来ます + +ブログを記載することはエンジニアのスキル向上に役に立つと捉えており、業務時間を使ってブログ執筆も可能です +# appendix - [GameWith エンジニアの採用面接ガイド](https://github.com/GameWith/recruitment/blob/master/interview_guide_engineer.md) - [GameWith エンジニアやサービス開発にまつわる記事](https://github.com/GameWith/recruitment/blob/master/articles.md) - [GameWith の開発スタイル](https://github.com/GameWith/recruitment/blob/master/development_style.md) diff --git a/articles.md b/articles.md index 3871eda..646f78c 100644 --- a/articles.md +++ b/articles.md @@ -12,6 +12,8 @@ GameWith のコーポレートサイトやエンジニアやデザイナーが - [GameWith Developer Blog](https://tech.gamewith.co.jp/) - サービス開発全般のブログです。技術、採用、チームなどの話を書いています。 - GameWith Advent Calendar + - [2022 年](https://qiita.com/advent-calendar/2022/gamewith) + - [2021 年](https://qiita.com/advent-calendar/2021/gamewith) - [2020 年](https://qiita.com/advent-calendar/2020/gamewith) - [2019 年](https://qiita.com/advent-calendar/2019/gamewith) - [2018 年](https://qiita.com/advent-calendar/2018/gamewith) @@ -20,6 +22,9 @@ GameWith のコーポレートサイトやエンジニアやデザイナーが 社内の雰囲気やメンバーをなんとなく知れる記事の一覧です。 +- `2022/10/28` [GameWithエンジニア入社雑記(Case: shgx)](https://tech.gamewith.co.jp/entry/2022/10/28/131759) +- `2022/10/24` [リモートワークになって最近の働き方](https://tech.gamewith.co.jp/entry/2022/10/24/130403) +- `2021/12/01` [2021年 GameWith の技術広報の1年間の振り返りとこれから](https://tech.gamewith.co.jp/entry/2021/12/01/123329) - `2021/07/07` [開発速度・パフォーマンスを可視化する](https://tech.gamewith.co.jp/entry/2021/07/07/110351) - `2021/04/23` [GameWith 開発部で取り組んでいる「業務アピール会」について](https://tech.gamewith.co.jp/entry/2021/04/23/125721) - `2020/12/22` [2020 年に起きたワークスタイルの変化とこれからについて](https://tech.gamewith.co.jp/entry/2020/12/22/172829) @@ -35,6 +40,13 @@ GameWith のコーポレートサイトやエンジニアやデザイナーが サービス開発がどのように行われているかなんとなく知れる記事の一覧です。 +- `2023/01/31` [読みやすいコードを書くときに心がけていること](https://tech.gamewith.co.jp/entry/2023/01/31/182849) +- `2022/12/26` [少人数チームでもデザインドックの恩恵を受けている](https://tech.gamewith.co.jp/entry/2022/12/26/124814) +- `2022/12/20` [認定スクラムマスターが自チームにスクラムを導入しないわけ](https://tech.gamewith.co.jp/entry/2022/12/20/081353) +- `2022/11/04` [社内でFlutterを採用しアプリと管理画面を開発した話](https://tech.gamewith.co.jp/entry/2022/11/04/150724) +- `2021/12/08` [動画の操作のログを送信する](https://tech.gamewith.co.jp/entry/2021/12/08/162805) +- `2021/10/28` [GameWith のログの実装について](https://tech.gamewith.co.jp/entry/2021/10/28/132723) +- `2021/10/11` [ゲームをより楽しむための攻略ツール開発コンテストを開催!](https://tech.gamewith.co.jp/entry/2021/10/11/141601) - `2021/05/10` [ウマ娘フレンド募集掲示板の Firestore 設計と検索](https://tech.gamewith.co.jp/entry/2021/05/10/115007) - `2021/03/04` [GameWith の Core Web Vitals(Cumulative Layout Shift) 改善!](https://tech.gamewith.co.jp/entry/2021/03/04/110829) - `2020/12/23` [GoogleAnalytics の目標到達プロセスの分析によって課題発見、改善できた話](https://tech.gamewith.co.jp/entry/2020/12/23/130429) @@ -46,6 +58,21 @@ GameWith のコーポレートサイトやエンジニアやデザイナーが 開発チームやシステムについて知れる記事の一覧です。 +- `2022/12/23` [Autifyの結果画面にフィルタ機能を付与するChrome拡張を作ってみた](https://tech.gamewith.co.jp/entry/2022/12/23/174619) +- `2022/12/22` [Froala 徹底解説!](https://tech.gamewith.co.jp/entry/2022/12/22/100752) +- `2022/12/19` [functions を使って firestore のGETをキャッシュしてコストを抑える](https://tech.gamewith.co.jp/entry/2022/12/19/174657) +- `2022/12/16` [firestore で物理削除を使うか、論理削除を使うか考える](https://tech.gamewith.co.jp/entry/2022/12/16/122510) +- `2022/12/05` [Amazon SQSを使って処理をキューイングするシステムを構築してみた](https://tech.gamewith.co.jp/entry/2022/12/05/215104) +- `2022/12/05` [Autifyを用いたE2EテストをJSで工夫した話](https://tech.gamewith.co.jp/entry/2022/12/05/154105) +- `2022/12/01` [「振り返り」と「インプット会」による相乗効果](https://tech.gamewith.co.jp/entry/2022/12/01/183707) +- `2022/11/08` [マイクロアニメーションコンポーネントを実装しました](https://tech.gamewith.co.jp/entry/2022/11/08/113936) +- `2022/11/01` [シューティングゲームの銃弾の当たり判定を作ってみる](https://tech.gamewith.co.jp/entry/2022/11/01/125007) +- `2022/10/31` [Vue テンプレート上のイベントハンドラ引数からオブジェクト参照を渡す方法を考えました](https://tech.gamewith.co.jp/entry/2022/10/31/162636) +- `2022/10.14` [モジュールをオンデマンド自動インポートする仕組みを導入しました](https://tech.gamewith.co.jp/entry/2022/10/14/123854) +- `2022/10/12` [複数の環境変数ファイルで変数定義存在チェックを自動化しました](https://tech.gamewith.co.jp/entry/2022/10/12/151133) +- `2022/09/09` [インフラ苦手エンジニアが Terraform にチャレンジしました](https://tech.gamewith.co.jp/entry/2022/09/09/130024) +- `2021/12/20` [New GA でレポーティングを行うTips](https://tech.gamewith.co.jp/entry/2021/12/20/132517) +- `2021/10/07` [コネクテッドシート導入時に意識したい料金について](https://tech.gamewith.co.jp/entry/2021/10/07/123839) - `2021/09/22` [GDS のビルド方式をパッケージビルド方式に変更しました](https://tech.gamewith.co.jp/entry/2021/09/22/110250) - `2021/09/07` [GameWith の フロントエンド を TypeScript へマイグレーションする](https://tech.gamewith.co.jp/entry/2021/09/07/175544) - `2021/02/19` [ダッシュボードに ESLint を導入した話](https://tech.gamewith.co.jp/entry/2021/02/19/175739) diff --git a/development_style.md b/development_style.md index 938958f..0ee72a9 100644 --- a/development_style.md +++ b/development_style.md @@ -1,22 +1,36 @@ # GameWith の開発スタイル + ## 技術スタック・ツール -サーバサイド言語として、主に PHP と Go を採用しています。 -GameWith は FuelPHP というフレームワークを利用して開発されていますが、適切な粒度でのサービス分割、新規実装部分は Go + Vue.js にて実装するケースも増えています。 +サーバサイド言語として、**主にPHPとGoを採用**しています。 +GameWith は FuelPHP というフレームワークを利用して開発されていますが、適切な粒度でのサービス分割、**新規実装部分はGo+Vue.jsにて実装するケースも増えています**。 + +最近ではスマホアプリや一部のwebにflutter を取り入れています。 -モダンな技術を積極的に取り入れたり、Web 標準に従うことで業界をリードできるよう努めています。 +### GameWith - サーバサイド:PHP, Go, (Python, Node.js) - フロントエンド:TypeScript, ES6, jQuery, Vue.js, Web Components, LESS... -- ネイティブアプリ:Swift, RxSwift, Kotlin, kotlinx.coroutines, ExoPlayer +- クライアントサイド: Swift, Kotlin, Flutter (Dart), Unity (C#) - データベース:MySQL, Aurora, DocumentDB, DynamoDB - システムモニタリング:New Relic, Firebase Performance Monitoring - 分析基盤:BigQuery, Google Analytics 4, Google Data Studio +- テスト:Autify - インフラ - AWS(ALB, ECS Fargate, ElastiCache, S3, Lambda, CloudFront...) - GCP(Firebase, Cloud Firestore, Cloud Functions, Vision AI...) - Akamai(Image and Video Manager, Adaptive Media Delivery...) + - Terraform + +### AIM練習ソフト + +- クライアントサイド: Unity (C#) +- サーバサイド:Go +- データベース:Aurora MySQL +- インフラ: + - AWS(ALB, ECS Fargate, S3, Lambda, CloudFront...) + - GS2(GameServiceService)主にユーザー管理系に利用 [StackShare](https://stackshare.io/gamewith-inc/gamewith) でも使用している技術スタックやツールなども公開しています。 @@ -24,11 +38,25 @@ GameWith は FuelPHP というフレームワークを利用して開発され ## 開発プロセス -チームにより多少の違いはありますが、基本的には 1 週間を 1 スプリントとしたアジャイル開発が行われています。サービス開発部だけでなく各事業部とも仕様の相談・調整を随時行っています。 +### プロジェクトの進み方 + +チームごとにワークフローを決めて動いているため細かな違いがありますが、以下の部分は共通しています。 -チームのタスク管理には ZenHub、ドキュメント管理には Notion を利用しており、フルリモートワーク体制を強みにできるようなツール選定をおこなっています。 +- 1週間を1スプリントとしたアジャイル開発 +- 1日1回ビデオ通話による朝会(デイリースクラムのようなもの)を実施 + +また、チームや仕事内容によって度合いは変わりますが各事業部とも仕様の相談・調整を随時行っています。開発部が主体的にビジネス視点での改善や施策を提案しコミットすることを強く推奨しており、ビジネス側もそれを受け入れる風土があります。 + +### 各種管理 + +コミュニケーションツールとして slack、 チームのタスク管理にはZenHub、ドキュメント管理にはNotionを利用しており、**フルリモートワーク体制でも**滞りなく業務が遂行できるツールを積極的に導入しています。 | ZenHub のカンバンボード | Notion | | --- | --- | | ![image](https://user-images.githubusercontent.com/1130921/115806189-41d0a180-a421-11eb-90cd-8f947d7a813e.png) | ![image](https://user-images.githubusercontent.com/1130921/115806224-501ebd80-a421-11eb-83b0-8b1755d7faf0.png) | +## 日常的にリリースを行う + +現在の月間リリース数は80前後。**平均すると1日に4〜5回リリースが行われている**計算になります。 + +GameWithではユーザに価値を素早く届けることを重視しており、ビッグバンリリースよりも小さなリリースを日常的に行うのが良しとされています。 \ No newline at end of file diff --git a/images/aboutgds.png b/images/aboutgds.png new file mode 100644 index 0000000..7d03e2b Binary files /dev/null and b/images/aboutgds.png differ diff --git a/images/aim.png b/images/aim.png new file mode 100644 index 0000000..2f7e11d Binary files /dev/null and b/images/aim.png differ diff --git a/images/analytics.png b/images/analytics.png new file mode 100644 index 0000000..08e9993 Binary files /dev/null and b/images/analytics.png differ diff --git a/images/appeal.png b/images/appeal.png new file mode 100644 index 0000000..28801e6 Binary files /dev/null and b/images/appeal.png differ diff --git a/images/blog.png b/images/blog.png new file mode 100644 index 0000000..77efa04 Binary files /dev/null and b/images/blog.png differ diff --git a/images/buttomup.png b/images/buttomup.png new file mode 100644 index 0000000..9b7060f Binary files /dev/null and b/images/buttomup.png differ diff --git a/images/contributer.png b/images/contributer.png new file mode 100644 index 0000000..74e93ac Binary files /dev/null and b/images/contributer.png differ diff --git a/images/gamewithen.png b/images/gamewithen.png new file mode 100644 index 0000000..68450f2 Binary files /dev/null and b/images/gamewithen.png differ diff --git a/images/gamewithjp1.png b/images/gamewithjp1.png new file mode 100644 index 0000000..4bc9338 Binary files /dev/null and b/images/gamewithjp1.png differ diff --git a/images/gamewithjp2.png b/images/gamewithjp2.png new file mode 100644 index 0000000..d27036f Binary files /dev/null and b/images/gamewithjp2.png differ diff --git a/images/gamewithjp3.png b/images/gamewithjp3.png new file mode 100644 index 0000000..6e3b4d5 Binary files /dev/null and b/images/gamewithjp3.png differ diff --git a/images/pokegoapp.png b/images/pokegoapp.png new file mode 100644 index 0000000..0196dcf Binary files /dev/null and b/images/pokegoapp.png differ diff --git a/images/study.png b/images/study.png new file mode 100644 index 0000000..df32a43 Binary files /dev/null and b/images/study.png differ diff --git a/images/tacos.png b/images/tacos.png new file mode 100644 index 0000000..12a96ae Binary files /dev/null and b/images/tacos.png differ diff --git a/images/zenhub.png b/images/zenhub.png new file mode 100644 index 0000000..47fe755 Binary files /dev/null and b/images/zenhub.png differ