今月のみてみて(2022年7月)

Firebase連携アプリ、みてみてエストーク伊勢125社巡り

このうち、みてみてにフォーカスを当て、Firebaseのアクセス動向やアプリの改善を考察する開発記事です。

Realtime Database+Storage構成の投稿アプリ

アプリのユーザー数の変動とともにFirebaseのアクセス動向を確認します。

2022年7月1日~7月31日のユーザー数の変動

(ユーザー数の変動)

1ヶ月の新規獲得ユーザー数

今月もインストール数は伸びていますが、ユーザーの減少数の変動も相変わらずです。

そして、インストールとアンインストールの波もシンクロしたまま。

ということは、インストールしてすぐにアンインストールされている、ということで、

それはつまり、プレイストアで興味を持ってインストールしたもののリピートしたくなるほどの魅力がなかった、ということですね。。。

もう少し分かりやすい掴みが必要そうです。

(Google Play ConsoleのKPIが変更になりましたね!

(インストールの上位国)

今月もフィリピンを中心にインストールが伸びています。

今月は、アプリの多言語化対応(英語、インドネシア語、ロシア語、日本語)に合わせて、プレイストアも4か国語に対応(インドネシア語、ロシア語の追加)しました。

これよって他国のインストールの変動があるようならもう少し多言語化を進めたいと思っています。

7月31日直近のFirebaseの変動

(Firebaseの変動)

投稿情報を整理し、Storageで管理している画像を削除しました。

インストールの増加に伴い、Realtime Databaseで管理しているユーザー情報が増加した結果、ストレージに伸びがありますが、想定内です。

2022年7月1日~7月31日のAdMob

無料アプリなので、AdMob広告収入 > Firebase使用料 を目指しています。

今月は、AdMob広告収入:500円、 Firebase使用料:0円となりました。

今後、アクティブユーザー数の増加を目指す中で、

AdMob広告収入 > Firebase使用料を維持できるのか、このあたりも試行錯誤になります。

仮に1ヶ月のアクティブユーザーが5万人に達した場合、

AdMob広告収入:$766(現在レートで約10万円)

Firebase使用料:$0.2(現在レートで約30円(ストレージ無料枠内、ネットワーク下り30GiBと仮定))

となる計算なんですが、どうなんでしょうか。

みてみての投稿を見てみて

(今月の投稿ピックアップ)

ポーランドの風景。

summer timeって響きがいいですね。

志摩市観光農園を訪れた際の1枚

これは私の投稿です(^^;

今後の改善案

8月中に新機能2点を追加し、ツールとして完成形に持っていきたいと思っています。

目指すは世界一ゆるいコミュニケーションツールです。

また、前回からの改善目標、ベースアーキテクチャのリファクタリングと

リピートしてもらえるアイデアの追加、このあたりを検討したいと思います。

,

AdMobユーザー指標が0表示になっているので改善する

2022年7月31日

開発環境
OS:Windows 10
SDK:Android Studio Chipmunk | 2021.2.1

概要

Firebase連携アプリのAdMobユーザー指標が0表示になってしまったのでFirebase Analyticsに対応した、という話です。

AdMobのユーザー指標が0になっているのだが。。。

無料の投稿型コミュニケーションツール、みてみて

このアプリは投稿機能をFirebaseで実現し、収入源としてAdMobを組み込んでいます。

アプリリリース当初はAdMobのユーザー指標にアクティブな値が表示されていた、

と思っていたのですが、改めて確認すると0表示になっていました。

(AdMobアカウントとFirebaseアカウントを連携させたから?それとも記憶違い?

ユーザー指標が知りたい

今後、アプリの収益化を目指すにあたりユーザー指標が知りたい。

ということで0表示の改善を試みます。

AdMob設定の変更

まずはAdMobの設定を変更します。

Admobの「設定」の「リンクされたサービス」で当該アプリ(みてみて)のFirebaseをオンにします。

改めてユーザー指標を確認すると。

0表示のままですね。。。

Firebase Analyticsを組み込む

つぎにアプリの修正を行います。

ステップ1)Gradle(アプリ)にfirebase-analyticsを追加します。

dependencies {
  ・・・
    implementation platform('com.google.firebase:firebase-bom:28.4.1')
    implementation 'com.google.firebase:firebase-database-ktx'
    implementation 'com.google.firebase:firebase-storage-ktx'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0'
    implementation 'com.google.android.gms:play-services-ads:21.1.0'
  ・・・
}

kotlinの場合は、’com.google.firebase:firebase-analytics-ktx:21.1.0’です。

ステップ2)firebase-analyticsの初期化を行う。

import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics

class MainActivity : AppCompatActivity() {
    private lateinit var firebaseAnalytics: FirebaseAnalytics

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        FirebaseApp.initializeApp(this)
        MobileAds.initialize(this){}
        firebaseAnalytics = Firebase.analytics

        ・・・
    }
}

変数 firebaseAnalytics を追加します。

そして、MainActivityで初期化(firebaseAnalytics = Firebase.analytics)すればOKです。

アプリ「みてみて」ではFirebase、AdMobの初期化と合わせて、firebaseAnalyticsの初期化を行いました。

初期化しますがfirebaseAnalyticsは使用しません。

(firebaseAnalyticsを使ってユニークなログ、データを出力することもできるようです。

あとはリリースするだけです。

修正アプリをリリースした結果

ユーザー指標が表示されるようになりました。

ワタル&グラン展2に行ってきました。

2022年7月14日

概要

ハッキシ言っておもしろカッコイイぜ!、って久しぶりにいいたい。

大阪で何しよう。

大阪に出かける用事があったのでついでにどこか寄ろうかと考えていたところで行きついたのがこちら。

魔神英雄伝ワタル&魔動王グランゾート展2。

これは懐かしい。

開催場所も梅田ロフト、ということで行ってきました。

初日の並びはいかほど?

大阪を訪れるのが7月14日。
ちょうどワタル&グラン展の初日。
念のためロフトのホームページをチェックしてみたら入場整理が発生する、とのこと。
大丈夫なのか?

 

せっかく行っても入場整理で見れないのは避けたい。

ということで、当日、しっかり並ぶことに。

整理券配布の5分前に到着。

心配した感じではありませんでした。

10時30分、予定通り整理券配布が始まりました。

無事入場整理券ゲット。

入場券をもらったあとは近くで時間をつぶし、開店10分前に集合です。

集合してみると全体で30人ほどとなってました。

いざ開店

集合するとほどなくして店員さんに案内され、会場に向かいます。

そして、開店待機。

チケット購入して準備完了。

展示の内容は、企画原案やキャラクラ―原案などがボードにまとめられ、ワタル、グランゾート、それぞれシリーズ毎に分けられて展示されていました。

途中、プラモの紹介やキャラクターアートの展示もあり、見ごたえありました。

そして、最後は物販コーナーです。

グッズもしっかり買う。

ハッキシ言っておもしろカッコイイぜ!

開催期間は2022年7月14日(木)~8月8日(月)。

お近くの方は是非いかれてみてはどうでしょうか?

他にはこちらも開催中のようですね!

インストール済アプリがピックアップできないAndroid 12

2022年7月19日

開発環境
OS:Windows 10
SDK:Android Studio Chipmunk | 2021.2.1

概要

Android 12におけるセキュリティ強化。
それに伴い、権限なしにインストール済アプリをピックアップすることができなくなってました、という話です。

スマホの機種変更

androidアプリ開発をしている以上もちろんAndroid 12での動作検証も行います。

とは言っても検証はもっぱら仮想デバイスでした。

それが最近、スマホを買い替え、ようやくAndroid 12の実機が我が手元に。

生でAndroid 12に触れる機会ができたので早速、アプリを色々と動かしてみたのですが。。。

早々と想定通りに動作していない機能を発見、慌てて改修した次第です。

仮想デバイスでは検証しにくい機能なんです。。。

Android12のセキュリティ強化

想定通りに動作しなかった機能とは何か?

それは、インストール済アプリのピックアップ機能です。

コードで表すと Packagemanager の getInstalledPackages です。

Android 12のセキュリティ強化に伴い、権限、もしくは、<queries>定義なしに

インストール済アプリをピックアップできなくなった、とのこと。

この機能がダメになるとランチャー系のアプリは全滅です。

そこで2パターンの方法で改修を行いました。

パターン1)どうしてもインストール済アプリを全て知りたい

ランチャー系アプリの場合、インストール済アプリを全てピックアップしたいので権限追加で対応します。

AndroidManifest.xmlに以下のパーミションを追加します。

<uses-permission android:name=”android.permission.QUERY_ALL_PACKAGES”/>

対応は以上です。

あとはビルドしてリリースするだけなのですが、なにせ強力な権限です。

Google Play Consoleの「アプリのコンテンツ」において権限の用途を説明する必要があります。

Google Play Console「アプリのコンテンツ」

まずは目的の説明を記載し、そして、用途の選択を行います。

機密情報にかかわる権限とAPI(1)

ランチャーアプリの場合、

目的は「ランチャーアプリ。アプリリストを表示するため」、

用途は「アプリの機能」、と明確です。

そして、最後に求められるのが動画です。

機密情報にかかわる権限とAPI(2)

ざっくりと作ってYouTubeにアップしてみました。

まさか動画を求められるとは。。。

すると、まあ、なんということでしょう。

リリースしてから1時間もしないうちに審査が通り、インストールできるようになりました。

パターン2)必要なアプリだけインストールされていることを知りたい

アプリの連携のため、連携対象のアプリがインストールされているか知りたい。

そのような場合、

AndroidManifest.xmlに以下の定義を追加します。

(アプリ”com.sample.application”がインストールされているか知りたい場合)

<manifest ・・・>

    <queries>
        <package android:name="com.sample.application" />
    </queries>

    <application ・・・

    </application>

</manifest>

これで Packagemanager の getInstalledPackagesまわりは改修しなくても対象アプリをピックアップしてくれるようになります。

あとはビルドしてリリースするだけです。

こちらのパターンの場合、Google Play Consoleで「アプリのコンテンツ」を記載する必要もありません。

Android 12のセキュリティ強化に伴う対応は以上です。

プログラマー回顧録(22)

~ エンデベッドシステム開発経験を回顧する ~

総合試験でバグを見つけるには。

結合試験で流出したバグをせき止める最後の砦、総合試験。

総合試験ではどのような試験を行うべきなのだろうか?

基本的に総合試験の試験内容はどのような対応をしようが同じであるはずなのだ。

なぜなら総合試験の検証範囲は機能全体であり、どのような対応を行おうが、新機能の検証(要求仕様確認)と従来通りの機能の検証(デグレード確認)に要約されるからである。

◎要求仕様確認

仕様書をベースに要求仕様が全て満たされていることを確認する試験。

テスターは要求仕様の意図を完全に把握している必要がある。

◎デグレード確認

標準動作を一通り実施し、対応前と後で差異がないことを確認する試験。

基本的には対応前後の出力データの突合をもってデグレードの検知を行う。

さて、それではなぜ総合試験でバグは流出したのだろうか?

今回流出したバグの性質を見るとデグレードだ。

つまりデグレード確認で検知できなかった、ということであり、

デグレード確認のなかで行った標準動作では検証しきれていない機能が存在した、ということであった。

そこで標準動作を見直すことにした。

標準動作を縦軸に、機能を横軸にしたマトリクスを作成し、機能の網羅性を確認したのだ。

すると今までの標準動作では検証できていない機能が浮き彫りになったのである。

そう、それはまさに今回のバグ発生の手順となった動作であった。

こうして見落とした機能の検証を標準動作として組み込み、デグレード試験の質を高めること。

これをもって対策を終えたわけである。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.07.17更新日0000.00.00

プログラマー回顧録

プログラマー回顧録(21)

~ エンデベッドシステム開発経験を回顧する ~

結合試験で流れ出るバグ

詳細設計では「サーバーから受信したデータをメモリに展開する」対応としたわけだ。

では、それに対し、どのような結合試験を行ったのだろうか?

2つの観点に基づき結合試験項目は作成されていた。

(観点1.データフロー)

・データがセットされていない場合、されている場合、2つの状態においてサーバーから受信したデータがメモリに展開されること

改修機能全般を確認する試験であり、サーバーとの通信からメモリ管理まで、データフローに着目した試験である。

(観点2.データ参照)

・データエリアが参照できること

メモリに展開されたデータ群の1ブロック目と最終ブロック(新たに定義されたデータの1つ手前)を参照する機能を抜粋し、その機能に対するデグレードを確認する試験である。

以上が結合試験の内容であった。

詳細設計において予備エリアに新たにセットされたデータを参照する機能がないと結論付けていた。

その結果、結合試験の試験設計において「予備エリアを参照する機能の動作確認」という観点が抽出できなかったわけである。

どうすれば結合試験でバグの流出を防げただろうか?

参照する機能がない(と実は勘違いしていた)データエリアを参照する機能のデグレードを結合試験で炙り出すのは不可能ではないか。

結合試験の限界との結論に至ったのであった。

だがしかし、検証でバグを流出させるわけにはいかないわけで。

結果として総合試験の見直しに至ったのである。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.07.03更新日0000.00.00

プログラマー回顧録

今月のみてみて(2022年6月)

Firebase連携アプリ、みてみてエストーク伊勢125社巡り

このうち、みてみてにフォーカスを当て、Firebaseのアクセス動向やアプリの改善を考察する開発記事です。

Realtime Database+Storage構成の投稿アプリ

アプリの新規獲得ユーザー数の変動とともにFirebaseのアクセス動向を確認します。

2022年6月1日~6月30日の新規獲得ユーザー数

(ユーザー数の変動)

1ヶ月の新規獲得ユーザー数

今月もインストール数は伸びています。

先月と比べ、新規獲得ユーザー数は約1.5倍、先々月と比べると2倍です。

ユーザー減少数について述べるのは・・・止めておきます。

(インストールの上位国)

フィリピンのインストールが伸び率が圧倒的です。

フィリピンは英語とフィリピン語が公用語。

アプリとしては多言語化対応(英語、インドネシア語、ロシア語)しているのですが、

GooglePlayのストア表示は日本語、英語の2言語対応のみ。

このあたり、英語に馴染みがあるかどうかがインストール数に影響しているのかもしれないですね。

ストア表示にも対応してみようかと思います。

(Firebaseの変動)

まだ微々たるものですが、それでも先月と比べ、ダウンロード量が約3倍。

実際にアプリの起動が少し遅く感じるようになりました。

今のうちにアプリの起動シーケンスを見直してみようかと思います。

(今週の投稿ピックアップ)

フィリピンの公園(広場?)を投稿してもらいました。

木陰が恋しい時期になってきましたね。

(今後の改善案)

ようやく改修案件も落ち着いてきたので前からの課題、2件に着手したい。。。

①UIの改善。

②ベースアーキテクチャのデファクタリング。

それと今回新たに必要性を感じた2件。

③GoolePlayストアの多言語化対応。

④アプリ起動シーケンスの見直し。

計4件の消化が今月の目標です。

,

プログラマー回顧録(20)

~ エンデベッドシステム開発経験を回顧する ~

バグ流出を防ぐ3つのテスト

バグを作り込む。

システム設計をするうえで避けては通れない問題だろう。

そこでV字モデルによる開発ではバグ流出を3つのテストで防ぐこととなる。

コーディングによるバグは単体試験で流出を防ぐ。

詳細設計によるバグは結合試験で流出を防ぐ。

基本設計によるバグは総合試験で流出を防ぐ。

開発フローが開発と検証(試験)で相対しあうようになっており、そこがV字と言われるゆえんでもある。

ちなみに各試験ではどのような試験を行うのか?

単体試験ではカバレッジを考慮した関数、メソッド単位でのIN/OUTの確認を行う。

SDKで動作確認を行い、コーディング時のタイピングミスや処理フローの見落としなどを防ぐ。

結合試験では改修ロジックをシステムに反映させ、システムを操作して確認を行う。

試験内容は、指定の条件、操作に対して改修機能が想定通りに動作するか、また、改修機能の関連機能がデグレードしていないかの確認がメインとなる。

総合試験では全ての機能を盛り込み、システム全体を操作して確認を行う。

試験内容は、要求仕様を満たしていることの確認や基本機能に対するデグレード確認などである。

それでは、今回の問題はどの試験で防げたのか?

詳細設計フェーズにおいてバグの作り込みを行っているため、

流出を防ぐとすれば結合試験だろう。

では、結合試験の試験内容はどのようになっていたのだろうか。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.06.26更新日0000.00.00

プログラマー回顧録



プログラマー回顧録(19)

~ エンデベッドシステム開発経験を回顧する ~

詳細設計レビューまで時を戻せるならどうする?

詳細設計で提案された2案。

1つは修羅場へと続く道。そして、もう1つは平穏な日常が続く道。

振り返ると大きな分岐点であったわけである。

では、この2案。

レビュー当時、どうすれば正しい選択肢へと導けたのだろうか?

少なくとも選択肢としてピックアップできていたのだ。

修羅場を回避できた可能性はあったはずだ。

そうなると、選択の拠り所となった妥当性の判断に対して指摘できたのか、

がポイントになるだろう。

データの参照先がいるか、どうか。

選択肢の判断材料となるその問いに対し、設計担当者は「いない」と述べた。

だがしかし、結果としてデータの参照先が「いた」わけだ。

その参照先が誤作動を起こし、機能停止となったのだから。

つまり、担当者は参照先の検索の仕方に誤りがあり、参照先を見落とした。

参照先が「いない」と判断した経緯を明確にする必要があった、ということだ。

そのためにはまずどう検索したかを明確にするため、検索ワードを明記する。

「検索ワード「XXX(変数名)」で検索した結果、参照先はいませんでした。」

この発言を引き出し、それに対し、誤りに気付けるかどうかだったのだ。

今回の誤りは、C言語としてありがちな「キャストによるメモリの参照」。

これが検索できておらず、参照先を見落としたのだった。

検索ワードとして「○○○(アドレス名)」の検索までしていれば正しい選択肢へとたどり着いたのではなかろうか、

そういう結論に至った次第である。

続いて流出原因の見直しとなる。



これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.06.19更新日0000.00.00

プログラマー回顧録



Android Studioを更新したら起動しなくなった話

2022年6月13日

開発環境
OS:Windows 10
SDK:Android Studio Bumblebee | 2021.1.1

概要

全ては日本語化パッチに通ずる。

Android Studioを更新する

さて、アプリの改修でも行おう。と、Android Studioを起動するとたまに出る右下のポップアップ。

kotlinのバージョンアップ通知、emulatorのバージョンアップ通知、などなど。

バージョンアップを促してくるわけですが、基本的には見かけたらすぐにバージョンアップしています。

ですが、ただ1つ、Android Studioのバージョンアップだけは慎重になります。

なぜならだいたいバージョンアップをすると問題が発生するからです。

なので、Android Studioのバージョンアップだけは時間的に余裕のあるときに実施するわけです。

そして、今日。

ハチからリスにバージョンアップした結果がこれです。

やはりハマってしまいました。

バージョンアップ時に発生する問題はたいてい日本語化対応による弊害。

対処法は2つ。

①日本語化パッチを当てなおす。

②再インストールする

①を実施、それでも駄目なら②を実施。

今までもこれで乗り切ってきたわけです。

それが今回、①、②、どちらを実行してもエラーが解除されない事態に。。。

そこで “Could not find main class com/intellij/idea/Main” で検索しみると。

stackoverflowなどでも検索結果がヒットするものの、解決策を見ると環境変数JAVA_HOMEの設定が~。

どうやら的外れ。

そこで基本に立ち戻り、日本語化を解除してみました。

C:\Users\~\AppData\Roaming\Google\AndroidStudio2021.2\studio64.exe.vmoptions

上記ファイルの最下段、”-Xverity”と”-javaagent:~plaiades.jar”をコメントアウト。

すると、あっさり起動しました。

日本語化パッチ、またやりおったか。