サンダーボルト

相手モンスターを全て破壊する。

Concept Challenge: Which Tests Should You Run?のメモ

Tech Dev Guide の これ👇 techdevguide.withgoogle.com

の課題であるこれ👇

www.coursera.org

を見たときのメモ。

メモ

remove(0)メソッドが成功したと判断するための基準は何か?

自分の考え

  • エラーが発生しない
  • 戻り値が正しいか
  • sizeが1減っているか
    • 要素とは別の参照で管理されているから
  • 元indexが1の要素のpreviousがnullになっているか

解説 essential piece(必要不可欠)なものをテストしよう。

  • get(-1)はgetのテストでやるからいらない
  • get(0)のチェックは当然いる
  • get(1)はgetとかaddとかで見るでしょ。1つシフトされたのをget(0)で見てるから不要
  • get(2)もいらない getのテストしてるんじゃないんや
  • sizeのテストはいる。不可欠や

ここまででremoveのテストはきちんとできているはず。しかし、1つめの要素のprevが消したはずの要素を指しているというバグにここまでのテストでは気づけない。

We'll recommend for you to actually break the boundaries of black box testing just a bit.

リストとして正しい動きをしているけど、内部構造がおかしい、というようなバグを見つけるにはデータ構造を考えてテストしないといけないね。 場合によってはブラックボックスバリアを破って(外からテストできることだけじゃなくて、内部構造についての観点で)テストしていかないとね〜

Algorithmic problem solving and interviewsのメモ

Tech Dev Guideのこれ👇

techdevguide.withgoogle.com

のこれ👇

www.coursera.org

を見たメモです

メモ

  • 面接では最初にめっちゃ質問せよ。面接官がまだ言ってない前提とか、いろいろを聞き出しまくれ
  • その後自分の理解を確認せよ。そのとき、具体例(実際の引数とか)を出せ。隠された前提とかが出てきたら👆に戻って質問して問題を明確化せよ
  • エッジケースの確認をせよ。(隠された)難しいポイントを見つけておけ。追加で出てきた前提条件とかもちゃんとメモっとけ
  • ここでやっと設計を始める。とりあえず思いついた1つめの奴で設計してみよう。もしエレガントな方法じゃなくてもまずは正しい方法をブルートフォースでも良いので見つけておくべき
  • で、ブルートフォースでも良いので、まずは頭の中テストする。ノーマルテスト、エッジケース。その後、どういうデータ構造が良いか考える。ブルートフォースにはどんなデータ構造が適切か?そしてパフォーマンスはどうか?メモリ性能は?実行速度は??
  • そこまで確認して、良い感じに設計できたら、再度別の方法で設計する。そしたらまた別の方法で設計する。その後、一番良い設計ができたら、やっと実装開始だ

Activity Log(2020年5月 第5週)

この記事は何?

技術に関する個人的な学びやアウトプットをまとめたもの。

インプット

公式ドキュメントや本など

Admob系の記事をたくさん読んだけど、あんまメモってなかった😅

アウトプットした記事の中にたくさんリンクが貼ってると思う。

その他記事

なし

アウトプット

ブログ

開発

仕事以外では特にやってないか〜

まとめ

  • アップデートした結果、3日間くらい広告収入が3~40円くらいになって、月に1000円くらい儲かりそうと思って、すごくやる気が出てAdmobをめっちゃ調べていた
  • きちんと科学的にアプローチしたく、KPIツリーを作って、どういったAnalyticsを仕込めば良いかを考えていた
  • 。。。なんだけど、広告収入が高かったのは最初の3日間だけでその後はほぼ0円となっており、急激にやる気がなくなっているのが今😅

Wishesアプリの戦略立案・KPIの現在の値を調査した

モチベーション

この記事でKPIツリーを作ったので、各KPIの現在の値を調べることにした。そのログ。

ツリーに沿って調査

f:id:nao_666:20200528135335p:plain
KPIツリー

とりあえず調査してみました。するとまぁ今のアナリティクスでは値がいろいろ取れてないことがわかってきました。具体的には

  • そもそもAnalyticsの「アクティブユーザー」の定義が微妙
    • アクティブ ユーザーとはアプリをデバイスのフォアグラウンドで使用し、user_engagement イベントを記録したユーザーのことらしく、自分としては自分のアプリはログインしないと使えないものなので、ログインしたユーザー数を知りたい
  • MAUのうち、どれくらいが新規ユーザーでどれくらいが既存ユーザーが分からない
    • 新規はfirst_openイベントでざっくり集計できるが、ログイン前に離脱している人もいるはずなのできちんと知りたい
  • 起動後、ログインした率が不明
  • 1回起動あたりの平均起動時間が不明
    • たぶん不明。。1日あたりのエンゲージメントはあるんだけどなぁ

主なところはこの辺で、このあたりがまともに算出できないと、目標を達成しているかどうかさえ判定できません。なので、次のアップデートでは、このあたりを知ることができるようなAnalytics系のログを仕込もうと思います✌

どういったログを仕込めば良いかが見えてきて、いい感じだ。やってくぞ〜〜

Wishesアプリの戦略立案・KPIツリーを作ってみる

モチベーション

Wishesというウィッシュリスト(やりたいことリスト)管理アプリを作っているのですが、そのアプリを戦略的に成長させたいので、まずは売上をKGIとしたKPIツリーを作ってみることにした!

KGI

KGIとはKey Goal Indicator(=重要目標達成指標)のことで、こいつをツリーの頂点として、KPI(Key Performance Indicator)に分解していく。弊アプリでは現在売上はAdmobのクリック報酬そのものなので、それを分解していく。

KPIツリー

とりあえず作ってみました!

f:id:nao_666:20200528135335p:plain
WishesアプリのKPIツリー

基本的には全て掛け算で分解してますが、MAU以下の新規ユーザーと既存ユーザーだけは足し算になっています。AndroidiOSはツリーとして表現されていないので、そこも今後実際の値を調べるときは意識しないといけません。

KPIツリーができたので、今後は各KPIについて目標を立てて、それを達成するにはどうすべきかを考えていこうかと思います。ただ、目標を立てると言っても、相場が全く分からないので、現在のWishesアプリの各KPIの値を調べるところからかなぁと思っています。

次は

ということで、次はこのツリー上にあるKPIの現状の値を調べてみることにします!

Admobについての調査

モチベーション

弊アプリの売上を増加させたくて、真面目に取り組もうと思った矢先、自分がAdmobについて知らなさすぎることがこの記事を書くことで発覚したので、きちんとAdmobについて調べてまとめるぞ!

Admobの報酬型

広告には基本的にクリック報酬型インプレッション型があります。

クリック報酬型 広告をクリックしたことで報酬が発生
インプレッション型 広告の表示回数によって報酬が発生

Admobはどちらにも対応しているのか、それとも一方だけなのか。調べると

現在のところ、インプレッション単価制のバナー広告とインタースティシャル広告のご利用は、一部のパブリッシャー様に限らせていただいております。 (中略)

...インプレッション単価制の広告やインタースティシャル広告を掲載する要件を満たしている場合は、Google の AdMob チームからお客様へ直接ご連絡いたします。 (https://support.google.com/admob/answer/9680863?hl=ja)

とありました。他にも色々調べたんですが、

アプリに表示された広告のクリック数、表示回数、その他のインタラクションに基づき、Google や第三者広告ネットワークから収益を受け取ることができます。 (https://support.google.com/admob/answer/7356092?hl=ja)

くらいの情報しか見つけられませんでした。最初に挙げた2つ以外の報酬の型が存在する可能性もありますが、インプレッション型が無い(自分は連絡が来ていないから)となれば、基本的にはクリック報酬型と考えて良さそうです。だから、今後はAdmobの報酬を考える際はクリック報酬型として計算等していこうと思います。

(追加調査) Admobのレポートを見ていたのですが、弊アプリでは、ある時期にクリック数0回で1円の収益が発生していました。ただインプレッション型という連絡ももらっていないので謎ですが、ただまぁ130回の広告表示で1円の収益というところで、かなりインパクトが弱いのでやはり無視しようと思います。

クリック単価と業界の関係

投資とか不動産とかの広告はクリック単価が高いらしい、ということを聞いたことがある。どういうことか調べてみる。

まず、自分の日次収益の一部を抜粋すると、以下のような状態だった。

見積もり収益額 クリック数 報酬/クリック数
9円 1回 9円/回
31円 3回 10.3円/回
44円 3回 14.7円/回

やはりバラつきはあるみたい。仕組みとしては、広告を掲載したい人がGoogleにお金を払う。その払った金額が弊アプリの広告収入になるので、つまりこのクリック単価の話をするためには、広告を掲載する側の話が欠かせない。というわけで、Google広告から自分が広告を作ろうとしてみた。すると以下の画面にたどり着いた。

f:id:nao_666:20200525223653p:plain:w400
宣伝するサービスのジャンルを設定
f:id:nao_666:20200525215102p:plain:w400
広告予算設定ページ

宣伝したいものを「スマホアプリ」と仮定して、アプリの予算を設定するページを見てみると、上記のような3つのプランが出てきた。試しに一番上のコースで単価を計算すると、

42,600円/((510回 + 870回)/2)=61.7円/回 となる。

では今度は、単価が高いらしいお金に近い業界で設定してみる。

f:id:nao_666:20200525221727p:plain:w400
「不動産」をサービスとして設定
f:id:nao_666:20200525221808p:plain:w400
不動産広告の予算

一番上のコースで単価を計算すると、

30,400/((70回 + 130回)/2)=304円/回!!となる!!高い!

こういった業界の違いでやはり単価が変わってきているんですね。業界によって広告にかけられる予算が違うから、その違いがそのまま広告のクリック報酬に響いているというのがこれを見るとよくわかりました。

結局、たしかに噂通り業界によって単価が違いそう、というのは分かったけど、これはそもそも存在するはずの「単価決定ロジック」の結果導かれた結論なだけで、根本のロジックはまだ全然追えていない。ということで、単価決定ロジックをもう少し追いたい。

表示される広告とクリック単価の決定ロジック

クリック単価の決定ロジックを追うには、まず表示される広告がどう決まるかを調べる必要がありそうなので、そこを調べてみる。

  • ユーザーに興味のあるものがいい感じで表示されるらしい
  • どの広告を表示するかはオークションにて決めるらしい

ということは聞いたことがあった。で、色々探すと以下のページにたどり着いた。

support.google.com

👆には表示する候補となる広告を選ぶ、「広告のターゲティング」について書かれていて、簡単にまとめると

コンテンツターゲティングページに表示されているコンテンツに合った広告
プレースメントターゲティング広告主が掲載先を自分で指定
パーソナライズドターゲティングユーザーの興味や関心に合わせた広告

という感じ(ネットワーク掲載ターゲティングは省略)。まぁなるほどなぁって感じだ。ただちょっと気になるのは、このページはadsenseのページなんだけど、Admobでも同じようにターゲティングされるのかな?って思っていて、特にコンテンツターゲティングはモバイルアプリでは難しいのでは??と思った。そして調べると、、、

support.google.com

それっぽいのを見つけた。つまり、広告をAdmobで表示する際に、そのアプリの画面と対応するURLを渡せば、そのURLのページの内容に合った広告をモバイル側に表示してくれる、というものっぽい。なるほどなぁ〜〜〜という感じ。どうでも良いけど、👆のページの最下部あたりにあるソースコードのサンプルフォーマットひどすぎるwww

f:id:nao_666:20200526222836p:plain:w600
インデント等がひどすぎるAndroid用のサンプルコード

さて、こういった方法である広告枠に表示する広告の候補一覧が決まったら、オークションによって広告が決まる。この記事が詳しかった。

support.google.com

クリック単価の調査にはあまり関係無いけど、例えば100円で入札した人と300円で入札した人がいたとして、結局300円の方が落札するんだけど、支払額は101円となる仕組みはめっちゃ面白い!普通オークションって設けたいから言い値を払わないといけないけど、かなり親切設計になってる。

という感じで、実際にはいくら払うかってのは他の広告主とのオークションで決まるから、最初にGoogle広告で試したときも、あくまで「予算」だったんすね。

クリック単価の話に戻すと、この広告主が支払う金額の何%かがもらえる感じなんでしょうね。

まとめ

クリックの単価決定や、表示される広告の候補を絞り込むロジックはやはりざっくりとしか説明されていないので、これくらいが調査の限界かなぁという感じ。結論としては、

結構知識も増えてきたし、再度どうやったら売上を増やせるか考えてみようかな!!

Wishesアプリの現状分析はじめの一歩 〜スタートラインに立てていなかったの巻〜

モチベーション

アプリの収入が、月あたり数十円とか100円とかの域を超えて、1000円/月くらいを狙えるようになってきた。大きな理由は広告をある特定の画面にだけちょこっと出していたものを、常時上部に出すようにしたから。

誤差で儲かっていたのと違い、それなりの金額が入るようになったので、そろそろ真面目に分析してきちんとアプローチして、売上を増やす努力をしていきたいと思った。

その一歩として、初めにどのように現状を分析すべきかから考えたい。このブログはその考えをまとめるものである。

アプリの売上目標

アプリだけで食べていける、という基準から月20万円を目標としたい。現在は月1000円(2020/5/24時点での予測値)なので、その200倍ということになるが、これをどうにか正しくアプローチし続けることで達成したい。


・・・正直、この目標の根拠はそこまでしっかり詰められていない。なんとなく、20万円くらい稼いでいれば最悪会社クビになってもしばらくはどうにかなりそうだし、日々の行動に余裕が生まれるかなぁと思った。とりあえず目標立てるといろいろ計算できるようになるし、立てようかなと。 ちなみに余談だけど、月20万円あれば1000万円の車を5年ローンで買うことも可能なのだ✌NISSAN GT-R欲しいのだ🚗

月20万円を達成するには

売上の基本式

Wishesは現在広告収入が唯一の売上をあげる方法である。 基本的には広告がクリックされた回数によって売上が決まるので、

売上 = クリック単価 × クリック回数

となる。

クリック単価

広告によって変わる、、、らしい。。。 少しFirebase Analyticsを見てみると1クリック30円くらいのものもあれば10円くらいのものもありそう。

クリック回数

クリック回数は以下の式で表す事が可能である。

クリック回数 = 画面起動時間 × 単位時間あたりのクリック回数

つまり、起動時間を長くするか、クリックの頻度を上げることが必要。

分析すること

本当は、この先、単価と回数を深堀りして、その後ストア検索率、ダウンロード率、起動率、継続率、とかそういった話を展開していくつもりだったけど、そもそも広告について自分が知らなさすぎることにこの記事を書きながら気づいた😅

売上 = クリック単価 × クリック回数

って書いたくせに、そもそも単価のことを自分が分かってなさすぎる😅 しかも、クリックしなくても収益が発生する広告もあるし。Admobがそれを導入しているかどうかさえ知らない。そうなると👆の式がいきなり変わってくる。そんなことでまともな戦略が練られる訳がない!

つまり、分析を始める前にそもそもの広告収入のことについてしっかり調べることが大事だという結論にこの記事を書きながらたどり着きました!たくさん調べて理解したらまたそれも記事にまとめよう。

大層に分析するぞ!とか息巻いといてそのスタートラインにも立っていないことを自分で気づくための記事でした。おしまい👋