2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
Androidアプリにまつわる運用の話(全1記事)
リンクをコピー
記事をブックマーク
Reyurnible氏(以下、Reyurnible):「Androidアプリにまつわる運用の話」ということで、connpassの登壇者IDがRから始まるIDになってます。……こんな感じで大丈夫ですかね?(笑)。
じゃあ、始めていきたいと思います。はじめに、GitHubやQiitaのアカウントはRから始まる「Reyurnible」というアカウントでやっていて、社内とかだと通称「ほっしゃん」と呼ばれてます。
今の仕事なんですが、「キッズリー」という保育園向けのサービスを担当していて、主務はプロダクトのマネージャーと、エンジニアとしてはAndroidかサーバーを担当してます。今が新卒の2年目となっています。
今日の内容なんですが、ざっくりと自プロダクトのアプリの運用事例について。そして、エンジニアがPMから見たときにこれはやっておくとうれしい、みたいな話ができればいいかなと思っています。
トップバッターということもあるので、会場について少しだけ説明させてください。
今ここにいるRMPなんですけど、5月からこちらの目黒に移転してきました。とくにうちの会社は、ライフイベントに関する事業を扱う会社となってます。主なものでいくと、スタディサプリやゼクシィ、カーセンサーなどが、うちのプロダクトになります。
あと、Quipperという、海外に対して教育の事業を提供する会社がありまして、国内だとスタディサプリをQuipperが開発しており、RMPの内製開発チームと同じフロアで仕事をしています。
というところで、次にプロダクトについてです。今担当しているのが「キッズリー」というプロダクトで、保育者と保護者のコミュニケーション支援を行うサービスとなっています。アプリに関しては保護者と保育士に提供していて、園の方はWebサイトから利用していただく、みたいなかたちになっています。
コミュニケーションサービスだけでは事業として成り立たないので、他のサービスとして登降園の管理であったり、保育者の労働環境調査を行う保育者ケアであったりとか、あとは労務支援や、印刷サービスみたいなものもやっています。
そんなキッズリーというところで、Androidのアプリとしては保護者のアプリと、登降園管理というタブレットのアプリと、あとはキッズリープリントという印刷サービスのアプリが、3つ存在しています。
基本的にうちの会社は内製開発でやっているんですが、やはりアプリ数やサービス数が多くなってくるとどうしても手が回らない部分があります。そちらに関しては外部に委託して開発をしている部分もいくらかある、というかたちになっています。
では、さっそく本題の話に入っていこうと思います。サービスのリリース周りの話ということで、主にAndroidのアプリのリリース周りの話をしたいと思います。
大まかなリリース作業の流れとしては、リリースブランチやプルリクを作成して、リリース用のAPKを作成したあとにストアにアップロードして、Firebase Remote Configなどを使用したバージョンの通知設定をしたり、というかたちになります。
それぞれ作業の中なんですが、リリースのブランチやプルリクの作成は、バージョンコード上げたりリリースのブランチを切ったり、あとはgitのpr-releaseとか使ってプルリクエストを作ったりして、リリースノートにプルリクを書いたりしてます。このあたりは一般的なフローだと思います。
あとはgit-pr-releaseとか、一応載せておいてます。git-pr-releaseはブランチ間のサブのプルリクを列挙して、チェックボックス形式でチェックできるようにするものなんですが、導入当時はほかのiOSサーバーなどに合わせるために利用しています。ほかのサービスやリリースフローと合わせて、誰でもリリースができるようなフローにしておくというのは重要かなと思っています。
あとは、fastlaneでラップしたコマンドだけ作っておいてあげるとか、iOSのエンジニアでも親しみがあるようなコマンドにもしています。
続いて、「リリース用のAPKの作成」です。パートナーもいたりするので、GithubのReleaseを作成して、そこの中にリリースビルドしたAPKファイルをアップロードするようにしています。このリリースビルドのAPKでGoogleのApp Signingを使っていて、ここは社内の事情とかもあるので後ほど言います。
GoogleのApp Signingなんですが、これが……、去年よりもうちょっと前かな? GoogleのPlay Consoleに標準でついている鍵ファイルを管理する仕組みで、従来の鍵ファイルだと1つでアップロードと署名の両方をやっていたんですが、PlayStoreへのアップと、ストアでもう1回署名し直してユーザーが手に入れるというところで、2回に署名を分けるのがGoogle App Signingになります。
そもそも外部のパートナーさんにリリースのビルドまでしてもらうのに、アップロードのキーだけ別にできることが魅力で導入しました。あとはセキュリティ対策として署名のファイルを使ったりしているので、そこが重要でした。
Google App Signingなんですが、流れとしては先ほど言ったとおり、ストアへのアップロードと、アップロード用のキーをビルドして行うもの。アップロード後にもう1回GoogleのPlayStoreで署名し直すという作業。最後に、ユーザーには今までどおり、昔使っていた署名されたキーでアプリが配信されるというかたちになります。1度設定してしまえば開発者がリリース時に行う作業は変わらない、というものになります。
Google App Signingのメリットなんですが、もう使っている方はいいんですが、従来どおりの場合であれば署名の鍵ファイルが基本的に変えられなくて、紛失したら新しいアプリを新しいパッケージ名で公開したり。そもそもセキュリティリスクにつながったり、いろいろな問題があります。
Google App Signingの場合は、本署名の署名鍵ファイルはGoogle管理なので基本的に紛失する心配がないですし、アップロード用の署名の鍵ファイルは再発行や取り消しができます。なのでまだ導入されていない方は導入するといいかなと。
そこで導入なんですが、新しいアプリの場合は利用規約に同意するだけで自動で有効になります。既存のアプリの場合はアップロードキーと署名キーを分けるかどうかによって、自分でアップロードキーを作成する場合はキーストアからpem形式の証明書をエクスポートしておく必要があります。詳しいやり方はGoogleが書いてくれているので、そこを見ればできるというかたちになってます。
何個か注意点があって、1度有効化すると無効にできないというところと、署名情報を使用しているサービスとか……例えばFirebaseやGooglePlayServiceで署名鍵とアップロードキーが別だった場合は、2つの情報を登録してあげる必要があります。
あとは。ほかの同一署名アプリの連携をしている場合は、中でハッシュキーをチェックしている場合は、アップロードキーも同じでビルドして、その連携のチェックをしたりしなければいけません。この同一署名のところはセキュリティの本にたまに書いてあるので、そちら見ていただければと思います。
キッズリーだととくに本体アプリとプリントのアプリっていうので、ログインのアカウントマネージャーを共有していたりして、そこで鍵ファイルチェックしていたりするので、こちらで使用していたりします。
もし設定が不安だったら、既存のアプリをGoogle App Signingに追加する場合は、署名キーとアップロードキーを同じものにしておけばFirebase周りの設定はいじる必要もないですし、ビルド周りでなにかエラーが起きることもないかな、と思います。
まぁ、署名ファイルの紛失リスクだけがなくなると考えてもらえばいいのかなと思ってます。
残り、3・4はふつうの作業で、「ストアアップロード」ということで、Google Play Consoleから手でアップロードしていて、ここは会社のレギュレーションもあってAPIでのアップロードができなくて。今後改善していきたポイントの1つです。
最後は、アップロード通知用の設定で、うちだとFirebaseのRemoteConfigを使って……強制アップデートというほど効力は強くないんですが「新しいアプリのアップデートが出ました」ということを通知したりしています。
次にアナリティクスの話なんですが、うちのプロダクトの主なアナリティクスの方針が、基本的にはサーバー側のデータをもとに行っていて、データもDBのほうなんですが。アプリのアナリティクス戦略としては、基本サーバーにない情報を取るようにアナリティクスのイベントを設計しています。
とくにアプリ間の通信をしている部分があって……キッズリーだと保護者アプリと登降園管理タブレットでNearbyを使ったアプリ間の通信をしているところがあって、サーバー側にも情報がなかなか貯まっていかないので、不具合対応も含めてアプリ側で手厚くイベントを送ったりしています。
全体の設計は、今はこういうかたちになっています。Webサーバー側からのデータはdigdagやembulkを使ってTreasure Dataのデータベースに流していて、アプリ側からはFirebaseのアナリティクスに流したものをBigQueryに流して、それを最後全部Re:dashのほうで見るというかたちになってます。
先ほど言ったように、アプリ側のアラートは全部Re:dash側から、それぞれメールで配信するようになってます。
うちだとプロダクト数や、1つのサービスの中で同じIDを使ったもので複数のアプリがあるものがあるので、ここらへんでうまく……BigQueryも今は1つしか書いていないので、複数のものからRe:dashに連携したりしています。
Firebase Analyticsは最近見て「けっこう変わってるな」と思いました。昔に比べて見れる情報が増えていて、送っている細かいプロパティも見れるようになっているなと思いました。あとはイベント数や簡単な離脱率だけであればFirebaseでも見れて、ここらへんは利用の仕方次第でいくらでもやれるところがあるなというところです。
ただ、細かいユーザーIDや期間の検索をするならBigQueryが必要になりますが、それが簡単に連携できるところが特徴になります。FirebaseのプランをBlaze以上にしたらいろいろできるんですが、値段は従量制で安いので、小規模~中規模くらいのプロダクトだったら有料化してもぜんぜんお金はかからないかな、っていうところになります。
なぜRe:dash使うか、みたいなところです。Re:dashを一応説明しておくと、いろんなDBをソースにして、クエリ発行したりグラフのデータの可視化を行えるサービスです。サーバー側のデータを連携したいという要望があったり、うちではやっていないんですが、FirebaseでBlazeにしているとGCP上で簡単に、Image展開するだけでRe:dashを構築できます。アプリのエンジニアでも試しやすいのがいいのかな、と思っています。
以上で発表は終わります。ありがとうございました。
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略