13
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【個人開発】月間100万PVゲームアプリの超手抜きインフラ構成の話

Last updated at Posted at 2020-12-02

インフラ管理よりも価値を生み出すことに時間を

まず大前提として、ユーザーはバックエンドのインフラがEC2で手動でデプロイされていようと、Lambdaで実行されていようと**「どうでもいい」**ということ。インフラの技術自慢はユーザー視点・ビジネス視点からは乖離している。
未経験駆け出しエンジニア転職界隈では「Herokuにデプロイしているポートフォリオ」を揶揄されているらしいが、その面接官全員に説教したい。「ラクできることって素晴らしいじゃん!」と思っている。エンジニアは手抜きできる人の方が優秀なのだ。
その上で理解してほしい価値観として、

インフラ管理は要求を満たした上で最小限にし、アプリケーション(ユーザーが体験できる価値)を充実させることに時間を集中しよう

というのがサービス開発者の価値観であるべき。と思っています。
PaaSもKubernetesもCI/CDもトータルでプロダクト開発を"ラクするため"のツールなんだよ。みんなインフラ管理でラクしてもっと価値あるコードいっぱい書こうぜ!

自己紹介とアプリ紹介

職歴

  • コナミでゲーム(C/C++)作ってた。
  • ヤフーで数千台規模のIaaSサービスの運用&それをKubernetesに移管するプロジェクトやってた
  • スタートアップでリードエンジニアしてた
  • 副業で作ってたアプリで稼げるようになって独立 - 株式会社GENIT

ピアノあそび

子供向けの音楽アプリ(子供向けの超簡単な音ゲーのイメージ)
image.png

AppStore
Google Play Store

↓くらい遊んでもらえています。

|パラメータ|概数|
|---|---|---|
|累計DL数|50万DL|
|DAU|1万人|
|月間遊ばれる回数|100万プレー|

image.png

インフラ構成の考え方

まず、そもそも考えることは、そのサービスにサーバーいるの?というところから。
その判断基準は単純で

UGCがあるか?

これ。要はユーザーが何かを入力して保存して、それを"他の誰か"が見る必要があるのか?
"他の誰か"が見る必要がないなら、ローカルストレージで事足りる(体重管理アプリとか)

ピアノあそびに関しては、ユーザーが入力したデータを他の人が見ることはない。(ランキング機能とか)

が、以下の2点でクラウド化する必要がある

  1. JASRACの契約上ストリーミング方式(都度楽曲データをクラウドから取得)する形にしたい。音楽データをローカルに保存すると「複製権」というのがかかるらしく、支払額がバク上がりする。
  2. 季節の曲の追加など(クリスマス曲等)をアプリのアプデなしでやりたい。

ということ。

なので「ピアノあそび」の要件は

UGCはない。でもデータはクラウドから取得したい。

ピアノあそびのインフラ構成

オチはとてもシンプルで、クラウドからクライアントへのデータが一方通行なんだから、サーバーなんて用意しなくて、s3に置いて配信するだけでいいじゃん。ということ。

image.png

  • 開発PCでRails+sqliteのアプリを起動してデータの管理はそこでやっている(.sqliteはGitの管理対象にしている)
  • ボタンをポチって押すと、DBからjsonを生成して、s3に保存
  • クライアントからはCloudFront経由でGETリクエストで取得。GETリクエストでJSONが返るので、それはもうWebAPI

s3 + CloudFrontなので、普通にサーバーで運用しているより可用性が圧倒的に高い&サーバー障害が…とか気にしなくていい(s3が落ちたらそれはもうしょうがない)

管理ツール

ローカルで超シンプルなRailsアプリ+sqlite

  • ローカルで実行するからログイン機能必要ない
  • sqliteのファイルを.gitignoreから外してGitで管理してしちゃう
  • もちろんサーバー代かからない

image.png

image.png

viewのh1、scaffoldした時に作られたやつのままだな…

最後に

もう一度言うけど、やっぱりエンジニアは要件の範囲で手抜きできる人が優秀だと思う。
プログラマになること#9 三大美徳

会社もお客さんも、結局のところユーザーに喜んでもらって"なんぼ"なので、よりユーザーに喜んでもらえる価値を提供できるエンジニアに僕はなりたいです。

Twitterよかったらフォローしてください@ryohorie3
(フォローしてくれたら自動でフォロバするボットが走ってます)

13
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?