この記事は Luli Perkins による Android Developers Blog の記事 "#AndroidDevJourney spotlight - January edition" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
#AndroidDevJourney は、デベロッパー コミュニティの皆さんが、それぞれの Android デベロッパーとしての歩みを Google のソーシャル プラットフォームで共有できるようにするためにスタートしました。2021 年 1 月 から 6 月まで、Android Developers Twitter アカウントで新しいデベロッパーを取り上げていきます。本記事では、多くの皆さんから寄せられたインスピレーションあふれる情報から、さらにピックアップした内容をお届けします。
始まりは 2009 年の Google Developer Day でした。そこで、初めての Android デバイス、HTC Magic を手にしたのです。当時は大学生で、個人的に JavaFX でアプリケーションを書いていたので、Java にはなじみがありました。その後まもなく、そのアプリを Android へ移植し始めました。卒業後はソフトウェア会社に入り、仕事で Android アプリの開発を希望しました。ただ、その会社ではチャンスはなさそうでした。そこで、Android アプリを開発する小さな会社を作ったのです。
たくさんあります。1 つ選ぶとすれば、Android Studio でしょう。私は、Android アプリの開発を始めた時 Eclipse を使っていたので、Android Studio のすばらしさにはいつも感謝しています。加えて、Kotlin、RecyclerView、ConstraintLayout などがなければ日々の業務を円滑にすすめることはできないでしょう。
なくてはならない Android Studio のショートカットは、Command + B(宣言または使用場所)です。これを使うと、宣言と使用場所を行き来できます。Android プラットフォームでもライブラリでも、ソースコードを読む場合にとても役立ちます。
公式ドキュメントを読むこと、そしてプラットフォームや使っているライブラリのソースコードを読むことです。短時間で Android について学習する手段の 1 つは、最初から最後まで、つまり公式にリリースするまでアプリを作ってみることです。
また、特にアプリの構造全体に関わる部分では、ライブラリに依存しすぎないようにします。ライブラリより長続きするアプリになるかもしれませんからね。
Android デベロッパーの道を歩み始めたきっかけは、学部の 4 年生のときでした。GreenAppleSolutions というスタートアップ企業でインターンに参加したのです。そこで Android プロジェクトに最初から関わる機会があり、初めてのプロジェクトが Play ストアで公開されました。Android の面白さに気づいたのは、このインターンの期間中です。コードで書いたことすべてが、その場で自分のデバイスに表示されるのです。そこから Android が大好きになり、Android をキャリアパスにすることを決めました。
私は Android Lint の大ファンです。非推奨の呼び出しや API を手動で見つける手間を何度も省いてくれました。ベスト プラクティスに従う上でも役立つので、コードが最適化され、安全になり、パフォーマンスも高くなります。
2 つあります。
モバイルに関わる仕事は 2010 年に iOS から始めました。その後 2011 年に大学で携わった最後の土木関係のアプリのプロジェクトチームには、Mac を持っている人が誰もいなかったので Android を使いました。当時は政府関係者にテクノロジーを教えており、コーディングはそれほど行っていなかったのですが、このプロジェクトの後、ジュニア Android デベロッパーの仕事につきました。それ以降、このプラットフォームにとても惹かれて、離れられなくなりました。
Eclipse + ADT で Java を使ったり、Holo や ActionBarSherlock、あるいは初歩的なマテリアル デザインを使ったりしていましたが、Google I/O ’13 に参加した際、Google が Android Studio を発表しました。わからないことだらけではありましたが、関連する知識を数多く学べただけでなく、出会った人にも大いに助けられ、洞察に満ちた体験でした。
それ以来、10 年以上モバイルの仕事を続けており、そのほとんどは Android をに関わるものです。多くのブラジルのテック企業や有力新興企業の Android プロジェクトを手伝い、2016 年には Android の Google Developer Experts になりました。
また、デベロッパーやデザインのコミュニティも好きなので、できるかぎり関わるようにしています。私は GDG サンパウロの元オーガナイザーで、Kotlin Meetup サンパウロと Android Dev BR を創設してオーガナイザーを務めています。後者はブラジルとポルトガル語圏における最大の Android コミュニティで、7,500 名以上のメンバーが参加しています。
さらに、全国的なスタートアップ企業コミュニティにも関わっており、ACE Startups とブラジルの Google For Startups Accelerator プログラムでメンターを務めています。
Android Studio には、私が多用しているシンプルで強力なショートカットがあります。その機能とは、同じ語句の複数カーソル選択なのですが、Ctrl + G(macOS)、Alt + J(Windows + Linux)で同じ語句の増分選択、Ctrl + Cmd + G / Shift + Ctrl + Alt + J ですべての同じ語句の選択ができます。つまらないことのように思えますが、このショートカットはコーディングを進める上で、特にリファクタリングを行う場合は非常に役立ちます。私は毎日使っています!
私のアドバイスは、この 2 つの言葉に要約されます。学習と共有です。
学習では、できるだけ多く学ぶようにします。公式ドキュメントやコミュニティのドキュメントとして公開されているすばらしいコンテンツだけでなく、実際に手を動かす実習を欠かさず、失敗からも学びましょう。インターネットには多くの無料コンテンツがあり、Google や私のような GDEs(Google Developer Experts)によるコンテンツもあります。実習を続け、オンラインで知識を得るようにしましょう。
そして、学んだあとは共有することです。今の私があるのは、学習中に自分で見つけられなかったことを共有できたからです。ですからぜひ、皆さんの知識を共有してください。
Android コミュニティはすばらしく、あなたの大きな力になってくれます。Twitter や Reddit などで、使っている API やライブラリの作成者と実際に話せるのです。情報の共有は、ブログ記事を書いたり、ポッドキャストを録音したり、動画を収録したりなど、さまざまな方法が使えます。
インターネットという強力な学習と共有のツールを使って学習し、共有してみてください。機会があれば、もちろん私もサポートします!:)
Android デベロッパーになったのは、2015 年、初めて起業について考えていたときでした。学校に戻る余裕はなかったので、会社を始めて腕を試してみることにしました。ウェブ アプリケーションを作成しましたが、顧客はニーズを満たすためにネイティブ アプリも必要だと言って譲りませんでした。最初は経験豊富な人を探したのですが、最終的に Android アプリの作り方を自習することにしました。そして 2017 年には、共同創業者の Christian と一緒に自社の Android アプリ Qoins を Google Play ストアに公開しました。それ以来、たくさんの Android ユーザーにご利用いただき、何度か資金を調達しました。
仮想デバイスで Android ビルドをテストできるのは本当に助かります。さまざまな種類のデバイスで動作する Android アプリを作るには、さまざまなシナリオを考えなければなりません。Firebase Test Labs などのツールやその他の仮想デバイス サービスを使えば、自分が持っている物理 Android デバイスでは行えない特別なシナリオを作成し、実際にテストすることができます。
失敗しても大丈夫です。それもプロセスの一部なのです。
Android に関わるようになったのは 2014 年の初めです。その前は、在庫システムを構築している小さな会社でジュニア Java デベロッパーとして働いていました。ですが、その仕事に興味が持てず、Java の知識を活用して大きな仕事をする機会を探していました。初めて買ったスマートフォンは Nokia でしたが、そのアプリを見てどうやって作っているのだろうと思いました。調べてみたところ、実はアプリが Java で書かれていることを知りました。そこから私の挑戦が始まりました。
初めてのアプリ、Simple Math を作ったことを覚えています。フラグメントはなかったので、アクティビティだけで作りました。その後の進化には驚かされますね。Simple Math は 500 回ダウンロードされ、評価は 4.5 でした。それが、もっとアプリを作りたいというモチベーションになりました。その後、Grow With Google Scholarship(2018 年)を受けることができ、それでキャリアが一気に加速しました。1 年間の奨学金を受けているとき、Google Play ストアに 2 つ目のアプリ Budgeting Buddy を公開し、5,000 回以上のダウンロードと評価 4.5 を獲得しました。現在は Android エンジニアとして Streem に勤務しています。
Android について大好きなところは、これほどの進化を遂げ、年を重ねるごとにテクノロジーやメンテナンス性能が改善されてきたことです。特にエミュレータについての改善が著しいです。
欠かせないと思うショートカットは、[Options + Command + L] と [Options + Command + O] です。プルリクエストの処理をするときに、とても役立ちます。学んだコツの中でも特に素晴らしいのは、git のローカル履歴オプションです。本当に助かっています。自分が変更内容を忘れてしまったとしても、これがあれば大丈夫です。
モバイルに完全に移行したとき、私は生涯、この学習曲線に適応しなければならないと感じました。その考えがずっと役立っています。最新情報や推奨事項、それが必要になる理由を学び続けることで、他より一歩先んじることができます。たとえば、Room ができたことはすばらしい進化でした。今では、Dagger や Hilt などもあります。そこから転じて、新しいデベロッパーに助言するとすれば、学ぶことを厭わなければ Android 開発を楽しめる、ということです。
Android Developer コミュニティは、多様な人が参加し、そしてあらゆる背景や人生の段階にあるデベロッパーを歓迎しています。コミュニティの活動に興味をお持ちの方や、コミュニティに参加する方法を詳しく知りたい方は、developer.android.com や Android Developers のTwitter アカウント、Android Developers YouTube チャンネルをぜひご覧ください。
Google Developer Groups プログラムに参加すると、皆さんと同じようにテクノロジーに興味をもっている地元のデベロッパーと出会うことができます。GDG のミートアップ イベントでは、さまざまな技術トピックについてのトークが行われ、ハンズオン形式のワークショップで新たなスキルを習得できます。こちらから、お住まいの地域のコミュニティをぜひこちらから探してみてください。
2014 年に創立された Google の Women Techmakers は、コミュニティや広報、リソースを通じて、テック業界で活躍するすべての女性をサポートすることに全力を注いでいます。10 万人以上の女性デベロッパーが参加しており、すべての女性がテクノロジーで活躍できる世界を作るために、世界中のコミュニティと連携しています。
Google Developers Experts プログラムは、高度な経験をもち、イベントでの講演、コンテンツの作成、イノベーションあふれるアプリの開発を通してデベロッパーや企業、テック コミュニティを積極的にサポートしている、テクノロジー エキスパートやインフルエンサー、思想的リーダーによるグローバル ネットワークです。エキスパートは、イノベーションあふれるアプリの開発や公開を手伝うことで積極的に貢献し、世界中のデベロッパーやスタートアップ企業のエコシステムをサポートしています。プログラムの詳細はこちらからご覧ください。
Java は Oracle および/またはその関連会社の登録商標です。
Google Play で配信しているゲームにおける定期購入の売り上げは 2019 年から急伸しています。定期購入を導入すると定期的な収益を確保する以外にも、ユーザーのエンゲージメントを高めることでゲームの世界観を広げ、ファンを増やす効果があることがわかりました。
日本の Google Play におけるゲームの定期購入売上成長率
では、定期購入の機能をうまく使いこなしているゲームタイトルはどのような部分を大事に考え、サービスの設計をしているのでしょうか。
ゲームに定期購入を導入する際には、まず解決したい課題を明確にすることが大切です。その上で、魅力的な定期購入の特典設計をし、ユーザーの購入意欲を喚起して継続してもらうための施策を講じます。
ゲームにおいて解決したい課題は、ゲームによって異なり、例えば以下のように多岐にわたります。
次に、設定した課題を解決するために定期購入をどのように組み入れ、どのような価値を提供するべきかを検討し、短期的な特典、中期的な特典、長期的な特典の 3 つを組み合わせたサービス設計を行います。
その他、解決したい課題が複数ある場合、条件や特典、期間などを変えた複数の定期購入を提供することも効果的です。KLab株式会社の「 BLEACH Brave Souls」は、定期購入プランの「ブレソル満喫パス」と「キャラ獲得パス」を提供し、異なる目的に合わせて課題の解決を実現しています。それぞれのパスに短期、中期、長期(満 3 ヶ月継続)の特典を設定しており、また、両方のパスを同時に購入することも可能です。
単独の定期購入プランでもゲームを楽しめる設計になっていながら、組み合わせて利用することでさらにゲームプレイを充実できるようにすることで、ユーザーの満足度を下げない仕組みになっています。
ガンホー・オンライン・エンターテイメント株式会社が手掛けるパズルロールプレイングゲーム「 パズル&ドラゴンズ」は 2019 年 12 月に定期購入プランの「パズドラパス」を導入しました。「パズドラパス」では通常課金メニューとは異なる特典とサービス設計を意識しており、また、1 週間の無料トライアル期間を設けることで、加入意欲を高める施策を講じています。
株式会社スクウェア・エニックスが手掛ける「 星のドラゴンクエスト」は、2019 年 7 月より定期購入プラン「星パス (月額版)」を提供しています。
14 日間限定シーズンパス「星の冒険者パスポート」の月額版として位置づけ、シーズンパスよりもより魅力的な特典を付与しています。また、こちらも初回の星パス (月額版) を無料で提供し、かつ、シーズンパスをすでに購入済みのユーザーにも無料で購入できるよう設計することで、定期購入プランの購入ハードルを下げました。
「モンパス」は、ロイヤルユーザーとのタッチポイントとなる機能を持った定期購入プランとして設計され、定期購入を継続しているユーザーに毎日、1 か月ごと、3 か月ごとと異なる特典を設けることで、継続意欲を上げ解約率を下げる効果を高めています。
定期購入ユーザーを増やすには、加入率と継続率を高め、解約率を削減することが必要です。また、定期購入を解約したユーザーへ再度の購入を促すことも重要です。定期購入プランの特典設計の他に、各社の定期購入は、加入率を向上する 無料試用とお試し価格や、ユーザーの予期しない解約を防ぐ猶予期間、 アカウントの一時停止機能などを活用しています。
上記 3 タイトルの定期購入ユーザーと非購入ユーザーと比べると、定期購入ユーザーのログイン率が高くなる、または、よりゲームをプレイする傾向があることがわかりました。
「パズル&ドラゴンズ」と「星のドラゴンクエスト」では、定期購入ユーザーのログイン率が非購入ユーザーと比較して高くなりました。「パズル&ドラゴンズ」の場合、「パズドラパス」を 3 か月継続購入しているユーザーと、非購入ユーザーを中央値で比較すると 30 ポイントほどログイン率が高く、同程度のゲーム進行度のユーザーのみ抽出した際にも、購入ユーザーは 20 ポイントほどログイン率が高くなりました。「星のドラゴンクエスト」の「星パス (月額版)」 購入ユーザーは、非購入ユーザーよりも、ログイン率が 1.2 倍高くなりました。
ログイン率が上がることで、ゲームプレイの継続率やクエストクリア回数の向上にも繋がります。「星のドラゴンクエスト」の「星パス (月額版)」 購入ユーザーは、非購入ユーザーと比べ、クエストクリア回数が 2.6 倍、マルチクリア回数は 3.2 倍になりました。「モンスターストライク」の「モンパス」を購入したユーザーは、モンパス購入前と比較して、一日あたりのプレイ回数が 20% ほど増え、エンゲージメント促進に寄与しています。
ゲームに定期購入を導入することで、ユーザー数やエンゲージメントを高め、ビジネスの成功につなげることができます。Google Play は、定期購入の価格設定オプションを簡単にコントロールしたり、定期購入の内容を変更するための複数のオプションが用意されています。 詳しくはこちらをご覧ください。
Posted by Toru Shimazaki - Google Play, Partner Development Manager
この記事は Ben Weiss による Android Developers - Medium の記事 "Using WorkManager in multi-process apps" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
📝 WorkManager 2.5.0 をリリースしました。マルチプロセス環境で簡単に使えるようになり、さらに、安定性の改善もいくつか行われています。複数のプロセスを管理するアプリでバックグラウンド作業を確実に管理する必要がある場合は、新しい WorkManager 2.5.0 をお使いください。
利用するためには、コードにいくつかの変更を加える必要がありますので、詳しくご説明します。また、本記事の最後に、今回のバージョンの WorkManager ライブラリにおけるその他の動作の変更点および最新の追加機能を記載していますので併せてご覧ください。
新しいマルチプロセス アーティファクトでは、ジョブのスケジュール管理を 1 つのプロセスに統合することで、パフォーマンスを向上させています。この機能を使うには、まずアプリに追加します。
implementation "androidx.work:work-multiprocess:2.5.0"
これで、WorkManager が WorkRequest をキューに追加するために使う専用のプロセスを選び、プロセス内スケジューラを実行できるようになります。
Configuration.Provider を使って設定する方法は次のようになります。
class MyApplication() : Application(), Configuration.Provider { override fun getWorkManagerConfiguration() = Configuration.Builder() .setProcessName("com.example:remote") .build()}
注: setProcessName のパラメータには完全修飾プロセス名を渡す必要があります。具体的には、アプリのパッケージ名にコロンを付け、その後にホストのプロセス名を指定します。例: com.example:remote
work-multiprocess を使う場合は、WorkManager の代わりに RemoteWorkManager を使って作業リクエストを管理できます。RemoteWorkManager は、常に専用プロセスにアクセスして作業をキューに格納します。これにより、呼び出し側のプロセスで誤って新しい WorkManager を初期化してしまうことはなくなります。プロセス内スケジューラも、同じ専用プロセス内で実行されます。
このように WorkManager を設定し、RemoteWorkManager を使って作業をスケジュールすることで、ジョブを高速に管理し、マルチプロセス アプリの信頼性を高めることができます。指定するプロセスで WorkManager インスタンスが 1 つだけ実行され、ファイルベースのロックを使わなくてよくなるため、SQLite 接続の数を大幅に削減できることに加え、プロセス間でジョブを調整する必要がなくなるためです。
これまでは、ActivityManager が JobService のインスタンスを作成してジョブを開始することができなかった場合、ベースとなるプラットフォームのバグの影響で、そのジョブは破棄され、何の通知も行われませんでした。今回より、WorkRequest オブジェクトとジョブを調整して Application インスタンスが作成されると、WorkManager はすべての WorkRequest についてスケジューラ ジョブが存在することを確認します。
アプリがクラッシュする原因の 1 つは、デバイスのストレージ不足であることがわかりました。これが起きるのは、主に最初からストレージ容量が少なかったデバイスです。しかし、アプリが大量の作業をスケジュールする場合、WorkManager がデバイスのストレージ不足の原因になることもありました。
完了したジョブはデフォルトで 7 日間内部 WorkManager データベースに記録されていました。今回、それが 1 日間に短縮されたので、データベースのサイズが大幅に減少します。
バッファの期間は短縮されますが、ジョブを記録する期間は keepResultsForAtLeast() API を使って制御できます。
WorkManager と ListenableFuture を併用すれば、テストがさらに簡単になります。TestListenableWorkerBuilder Kotlin 拡張機能が、ListenableWorker を拡張したすべてのクラスを受け取れるようになり、テストの柔軟性が向上しています。
今回のリリースには、新機能に加えていくつかのバグの修正も含まれています。これにより、WorkManager の安定性、信頼性、パフォーマンスが向上します。すべての変更点と修正されたバグは、リリースノートで確認できます。
WorkManager を含め、いくつかの Jetpack ライブラリは GitHub からの貢献を受け付けています。Alan Viverette が、プロセス全体について説明しているブログ記事(英語)を書いています。
2.5.0 リリースで修正されたバグのほとんどは、パブリック Issue Tracker で寄せられたものです。
修正につながる問題を登録するコツは、再現できる問題を登録することです。問題の再現に役立つように、WorkManager のサンプルを使うか、問題の説明に手順を記載して独自のサンプルコードを提供することをお勧めします。
ぜひこの機会に作業に着手し、アプリでこのライブラリのバージョンをアップデートしてください。
この記事は Eric Bahna による Android Developers Blog の記事 "Expanding the reach of your Android Auto apps" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
昨年 12 月、Google Play ストアで新しい Android Auto アプリをクローズド テストに公開できる機能を開放しました。続いて 2021 年 1 月 28 日より、Google Play ストアで、ナビゲーション、駐車場、充電スポットのアプリをオープン テストトラックに公開し、アプリのユーザーを増やせるようになりました。
オープンテストでは、アプリをダウンロードできるユーザー数に制限はなく、メールアドレスの一覧を管理する必要もありません。このオープンテストは、正式にアプリをリリースするまでの重要なマイルストーンです。アプリを実際の車ですべてのユーザーに使ってもらうことに一歩近づきますので、ぜひ Android for Cars App Library を使い、Play Console でオープン テストトラックを選択してアプリを公開してください。
Android Auto アプリに関する今後の予定についてお知らせします。
現在、このライブラリを Android Jetpack に追加する作業を進めています。これにより、他の Jetpack API との整合性が向上し、新機能が見つけやすくなります。Jetpack ライブラリが利用できるようになると、既存のライブラリからのアプリ移行が簡単になり、名前空間を変更していくつかの API 呼び出しを調整するだけの作業で完了します。Jetpack でライブラリを安定させた後は、その新しいアプリを Google Play ストアの本番環境トラックに公開できるように準備を進めればよいのです。
Jetpack ライブラリを待たずとも、オープン テストトラックに公開することはできるようになっています。以下の手順で公開してみましょう。
多くのデベロッパーの皆さんが開発した自動車向けアプリを、実車でテストすることを楽しみにしています。
2019 年 6 月、同社の開発チームは Android アプリの主要な開発言語が Kotlin に移行しつつあると判断し、Kotlin の導入を検討し始めました。Kotlin が採用された決め手は、Kotlin メインの Jetpack ライブラリを活用できること、コード量を減らしてメンテナンスの負担を軽減できること、構文の表現性が高く理解しやすいことなどでした。
同社の開発チームには Kotlin を使った開発経験があるエンジニアや、また、Java に精通しているエンジニアがいるため、Kotlin でのコーディングに難しさを感じることはありませんでした。Kotlin は Java との相互運用性が 100% なので、既存のコードベースを維持しながら、雨雲レーダーやニュース検索といった新機能を Kotlin で記述することができました。この雨雲レーダーでは、コルーチンを使用して画像のダウンロードとキャッシュを管理し、コルーチン ディスパッチャでタスクの管理を抽象化することで、raw スレッドの管理で陥りやすい罠を回避しています。
開発チームは、一部の Java コードをリファクタリングし、Kotlin の null 安全性機能も活用しています。Kotlin の構文では、可変性、null 可能性、初期化を特定できるため、早い段階でエラーを捕捉できます。これにより、コード変更の検証にかかる時間を 10% 短縮することができました。Kotlin の簡潔で効率的な構文を使用することで、コードベースの読みやすさが向上してメンテナンスが容易になり、実装から公開までの全体的な生産性が向上し、コード行数の 20% 削減に成功しました。
SmartNews アプリのコードはすでに全体で 45 % ほどが Kotlin に移行しています。新機能はすべて Kotlin で記述することにしているほか、既存のコードのリファクタリングを進めてさらにメンテナンス性を高めることにしています。
Kotlin を実装し、ボイラープレート コードを削減していくと、開発チームのモチベーションが向上してきました。開発メンバーがアイデアをより効率的に表現できるようになり、各自が読みやすいコード記述を心がけるように変化しました。同社でエンジニアリング マネージャーを務める大橋英雄氏によると、Kotlin はエンジニアの募集や採用にも効果的とのことです。
「応募者から最も多い質問のひとつが、"Kotlin は使っていますか?どれくらい活用していますか?" というものです。多くのエンジニアが Kotlin への移行に関心を寄せており、弊社としてもこの動きを支援したいと考えています。」
スマートニュース株式会社 Android エンジニアリングマネージャー 大橋英雄氏
SmartNews アプリへの Kotlin の導入は、アプリ開発だけに限らず、エンジニアのモチベーション向上や採用への良い反響を得ることができました。Android Developers の事例も併せてご覧ください。
Posted by Tamao Imura - Developer Marketing Manager, Platforms and Ecosystems
この記事は Miguel Guevara による Android Developers Blog の記事 "How we’re helping developers with differential privacy" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Google は、イノベーションとプライバシーは車の両輪だと考えています。その一環として2021 年 1 月、オンラインのユーザーの安全を確保するための私たちの取り組みについてブログでお知らせしました。その中では、差分プライバシー(ディファレンシャル・プライバシー / differential privacy )などの先進的なプライバシー技術に言及しておりました。
毎年 1 月 28 日は、データ プライバシーの日です。そこで、それに合わせて、Google のプロダクトに差分プライバシー技術を適用し、この技術を世界のデベロッパーや企業に広めていこうという新しい取り組みをここに詳しく紹介させていただきます。この取り組みにより、個人情報を確実に保護しつつ、データや知見に広くアクセスできるようになります。
差分プライバシーは高度な匿名化技術で、初めて Chrome に導入されたのは 7 年ほど前になります。そして現在では、Google マップや Google アシスタントなどのプロダクトに日々活用されています。昨年、世界が COVID-19 と闘う中、COVID-19 コミュニティ モビリティ レポート(英語)を公開しました。差分プライバシーを使っているこのレポートは、世界の公衆衛生当局、エコノミスト、政策立案者がコミュニティにとって重要な決定をする際に活用していますが、いかなる時点においても、個人を特定できる情報は利用できないことが保証されています。
Google Play Console では、今年中に差分プライバシーの手法を用いたアプリの新たな指標やベンチマークをデベロッパー向けに提供する予定です。この機能がリリースされると、デベロッパーは個人が特定または再特定できないことが保証される方法で、日々のアクティブ ユーザー数、アクティブ ユーザーあたりの収益など、アプリがどのくらいユーザーを惹きつけているかを表す指標に簡単にアクセスできるようになります。
このようなアプリの新たな指標に差分プライバシーを加えることで、デベロッパーに有用な知見を提供し、アプリの改善に役立ててもらうことができます。その一方で、ユーザーのプライバシーやデベロッパーの機密性が損なわれることはありません。今後は、差分プライバシーを使った指標を増やすことを計画しています。
Google のプロダクトにおけるプライバシー保護技術は進化を続けていますが、デベロッパーがこの技術を利用できるようにすることも重要です。そこで、2019 年に差分プライバシー ライブラリをオープンソース化し、世界中のデベロッパーが自由にアクセスして簡単にデプロイして活用できるようになりました。それ以降、たくさんのデベロッパーや研究者、団体が Google の差分プライバシー アルゴリズムを利用して、プライバシーが保護される方法で責任をもってデータを使い、新しい問題の解決に取り組んでいます。そのような企業の 1 つに、フランスの新興医療企業 Arkhn があります。Arkhn は、差分プライバシーによって複数の部門にまたがる病院のデータを安全な方法で収集、照会、分析できるようになり、それを活用して人工知能で医療業界に革命を起こすというミッションを掲げています。
Arkhn のようなデベロッパーのチームに、高度な差分プライバシー ライブラリを広く提供するため、 2021 年 1 月 29 日(現地時間 1 月 28 日)、OpenMined との新たなパートナーシップを結びましたのでお知らせします。
OpenMined は、プライバシー保護技術を研究し、その活用法を世界中に広めることに注力しているオープンソース デベロッパー グループです。Google は、今後 OpenMined と協力し、差分プライバシー ライブラリの Python デベロッパー専用のバージョンを開発する予定です。Python デベロッパーは、Google の差分プライバシー対応インフラストラクチャと同じ仕組みを活用することで、ワールドクラスのプライバシーを備えた他にはない新しい方法でデータを扱うことができます。
昨年と同様、デベロッパーが既存の差分プライバシー ライブラリをさらに簡単に使えるようにする作業も継続します。たとえば今月には、Google で日々何千件ものクエリに利用されている、新しい差分プライバシーに対応した SQL データベース クエリ言語拡張機能をオープンソース化しました。アナリストがこのようなクエリを活用すれば、ビジネスに関する知見を得たりプロダクトのトレンドを確認したりできます。これは、プライバシーが守られたデータ分析を広め、世界中のデータ サイエンティストが個人のプライバシーを保護および尊重しつつ、強力な洞察を得られるようにするための一歩です。
2 年前、TensorFlow Privacy(GitHub)をローンチしました。TensorFlow Privacy はオープンソース ライブラリです。これを使うと、デベロッパーがプライバシーに配慮した機械学習モデルを簡単にトレーニングでき、研究者は TensorFlow Privacy を使ってより安全なプライバシーを保証し、機械学習の水準を高めることができます。
昨年は、このライブラリを拡張して TensorFlow 2 をサポートするとともに、Keras モデル インターフェースと TensorFlow の既製 Estimator の両方をサポートしました。また、ウォータールー大学の研究者と連携してパフォーマンスを向上させています。これにより、新しいリリースでは一般的なワークロードのトレーニングが 4 倍以上高速になりました。
さらに、プライバシーを考慮した機械学習のトレーニングはコストが高くなってしまい、現実的ではない可能性があることがわかっています。そこで、機械学習モデルはどの程度プライベートなのかを理解するための調査を開始し、昨年、それに役立つ仮想攻撃ライブラリをオープンソース化しました。このライブラリを使うと、機械学習モデルの全体的なプライバシーの保護状況を確認できます。
その後は、プリンストン大学やシンガポール国立大学の研究者と連携。ライブラリのスコープを拡張して生成モデルや非ニューラル ネットワーク モデルをテストする新機能を追加しています。
先日、スタンフォード大学医学部の研究者がこの機能をいくつかのモデルで試しました。そのテストから、モデルの中でのプライバシーに関する動作が明らかになりました。その中には、それ以前はできなかったことも含まれています。
また、差分プライバシーと堅牢性のトレードオフに関する新しい研究を発表しました。これは、AI 倫理の中核にあるもう 1 つの特性である、プライバシーと安全性に関わることです。
健全なオープンソース エコシステムを育み、広げていく一方で、Google 製品を使うユーザーをアルゴリズムによって保護するために、Google は高度なプライバシー保護を行う取り組みに投資をしております。私たちは、世界中のあらゆる人がトップレベルなプライバシー保護を享受すべきだと強く確信しています。そのためにさまざまな組織と協力してそのミッションを果たしてまいります。
この記事は Chet Haase による Android Developers - Medium の記事 "Now in Android #32" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android 開発の最新ニュースやトピックをご紹介する Now in Android。今回はKotlin と Jetpack の API、Navigation についての新コース、最近公開されたブログ記事・動画・関連ドキュメント、ポッドキャスト エピソードなどをご紹介します。
最先端の Android 開発に関する技術コンテンツを扱う連載シリーズ MAD Skills の新しいミニシリーズ Kotlin で Jetpack API を使用する が順調に進んでいます。最初のエピソードを紹介した前回以降、3 つのエピソードが追加されました。この 3 つのエピソードでは、大まかに言えば Room ライブラリと WorkManager ライブラリの使い方に関する情報をお届けしていますが、コルーチンなどの Kotlin 機能を使ってコードをシンプルにする具体的な方法にも触れています。
このエピソードでは、Florina Muntenescu が、Room Kotlin API を使ってローカル データベース ストレージ要件を実現し、それをテストする方法について説明します。
ブログ記事(英語)でもご覧いただけます。
このエピソードでは、Florina が WorkManager を使って非同期作業をスケジュールする方法を説明します。これは、すぐに実行することも、遅延実行することもできます。
Android の Google Developer Expert の Magda Miu さんとチームメンバーは、Kotlin を使ってわかりやすく、メンテナンスしやすい CameraX のベンダー拡張機能を記述しています。その方法について動画で説明してくれました。
Kotlin と Jetpack シリーズの締めくくりとして、1 月 15 日にからもう一度リアルタイム Q&A を開催しました。
1 月 18 日の週から、新しい MAD Skills シリーズが始まっています。連載中のコンテンツは、YouTube の MAD Skills プレイリスト、Medium の記事、またはすべてのリンクが掲載されているランディング ページからご覧いただけます。
Android Basics in Kotlin コースに新しいユニット「Unit 3: Navigation」が追加されました。
このユニットでは、Navigation コンポーネントや Android アーキテクチャ コンポーネント ライブラリのその他の API に関するチュートリアルとサンプルを確認できます。
Isai Damier が暗号と認証、セキュリティについての新しい記事(英語)を公開しました。暗号に関するさまざまな興味深い背景を取り上げながら、暗号を利用した安全なソリューションで生体認証が用いられることが多い理由について説明しています。
Florina Muntenescu が、Kotlin を使えば生産性が上がるという記事を公開しました。既にたくさんの Kotlin コードを書いている方なら、おそらくご存知のことでしょう。しかし、仕事で Kotlin を使うべきか迷っている方や、プロジェクトの他のメンバーを説得する方法を探している方なら、この記事に書かれている具体的な内容が役立つかもしれません。
Meghan Mehta が RecyclerView に関する連載シリーズの第 3 回目のブログ記事(英語)を公開しました。RecyclerView でよくある要件の 1 つが、ユーザーのクリックへの対応です。リストの項目をクリックすれば、通常は何かが起こります。記事では、この機能を扱うおすすめの方法を紹介します。
前回の Now in Android 以降、Android Developers Backstage に新しいエピソードが投稿されています。以下のリンクまたはお気に入りのポッドキャスト クライアントでご確認ください。
2020 年末、Tor Norbye と Romain Guy、そして私がこのエピソードを収録しました。昨年、それまでとは違う働き方を模索する中で起きたことや、Android のツールやプラットフォームの最新機能について解説しています。
今回は以上です。次回も Android デベロッパーの世界の最新アップデートをお届けします。お楽しみに。
Reviewed by Yuichi Araki - Developer Relations Team and Hidenori Fujii - Google Play Developer Marketing APAC
https://play.google.com/apps/test/<package name>/<version code>
この記事は Florina Muntenescu による Android Developers Blog の記事 "MAD Skills Kotlin and Jetpack: wrap-up" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
今回は MAD Skills シリーズの 1 つ、Kotlin と Jetpack についての動画と記事をまとめました。Android コードの表現力と簡潔さ、安全性を向上させ、Kotlin で非同期コードを実行しやすくするさまざまな方法を取り上げています。
それぞれのエピソードから、Kotlin と Jetpack についての最新情報をご確認ください。いくつかの具体的な API を取り上げ、API の使い方だけでなく、API が内部的にどのように動作しているか解説しています。また、すべてのエピソードには対応するブログ投稿があり、そのほとんどにサンプルか Codelab へのリンクが含まれているので、実際に試してみたり、コンテンツに関する理解を深めたりできます。また、Jetpack や Kotlin のエンジニアが登場するリアルタイム Q&A も実施しました。
このエピソードでは、Jetpack KTX 拡張機能を使って、Android と Jetpack のコーディングを簡単、快適、そして Kotlin らしくする方法を取り上げました。現在のところ、20 以上のライブラリに KTX 版があり、その中から特に重要なものを紹介します。core-ktx は、Android プラットフォームに由来する API を Kotlin らしく書けるようにする機能を提供しています。また、LiveData や ViewModel などの API と組み合わせてユーザー エクスペリエンスの向上を図れるいくつかの Jetpack KTX ライブラリも紹介します。
動画またはブログ記事(英語)をご覧ください。
エピソード 2 では、コルーチンと Flow を使って API をシンプルにする方法と、suspendCancellableCoroutine API と callbackFlow API を使って独自のアダプタを作る方法について説明します。このトピックを実際に試してみたい方は、Kotlin 拡張機能ライブラリの作成 Codelab をご覧ください。
動画を視聴するか、ブログ記事(英語)でご確認ください。
このエピソードでは、実際に Room を使ってみます。その上で、Kotlin を使って Room のテーブルやデータベースを作る方法、挿入などの 1 回限りの suspend 操作を実装する方法、Flow を使った監視可能クエリーについて簡単に確認します。コルーチンと Flow を使うと、Room はすべてのデータベース操作をバックグラウンド スレッドに移してくれます。Room のクエリーの実装方法やテスト方法については、動画またはブログ記事(英語)をご覧ください。実際に試してみたい方は、ビューで Room を使う Codelab をご覧ください。
エピソード 4 では、WorkManager を使って作業を簡単にする方法について説明します。この機能を使うと、非同期タスクのスケジュールを設定して、アプリが閉じられた場合や、デバイスが再起動した場合にも実行されることが期待されるタスクを、即時実行または遅延実行できます。このエピソードでは、WorkManager の基本について説明し、CoroutineWorker などの Kotlin API についても解説しています。
こちらの動画またはこちらのブログ記事(英語)をご覧ください。また、ぜひ WorkManager Codelab で実際に体験してみてください。
エピソード 5 では、Android の Google Developer Expert の Magda Miu さんが Kotlin の基本 API と CameraX を使った経験についてお話ししています。
最後のエピソードでは、リアルタイム Q&A を実施しました。司会の Chet Haase のほか、ゲストとして Architecture Components テックリードの Yigit Boyar、Kotlin プロダクト マネージャーの David Winer、そしてデベロッパー リレーションズ エンジニアの Manuel Vivo と私が参加し、YouTube、Twitter などから寄せられた質問に回答しています。
この記事は Florina Muntenescu による Android Developers - Medium の記事 "More productivity with Kotlin" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Kotlin は簡潔なプログラミング言語として知られています。そしてそれは、高い生産性を意味します。そして実際に、Kotlin を使っている Android デベロッパーの 67% が、生産性が向上したと述べています。このブログ投稿では、Kotlin を使ってパートナーのエンジニアたちが生産性を向上させた方法をいくつか共有し、そのために役立つ Kotlin の機能も紹介します。
レビューやメンテナンスの担当者は、読むコードが少なくなるので、コードが行っていることを理解しやすくなります。そのため、レビューやメンテナンスが楽になります。
その一例として、Flipkart のチームを紹介しましょう。
「弊社の社内調査によると、デベロッパーの 50% が、Kotlin でモジュールを書くと [機能を完成させるまでの] 見積りが小さくなると回答しました」(Flipkart)
Kotlin の機能のほとんどは、簡潔さと高い可読性を持つため、高い生産性につながります。特によく使われる機能について見てみましょう。
Java プログラミング言語では、コンストラクタのパラメータが省略可能な場合、一般的に次の 2 つの方法のどちらかを利用します。
Kotlin ではデフォルト引数を利用できるので、どちらも必要ありません。デフォルト引数を使うと、ボイラープレートを追加することなく、関数のオーバーロードを実装できます。
Cash App チームが Kotlin を使い始めたとき、多くのビルダーを削減し、書く必要があるコードの量を減らすことができました。場合によっては、コードのサイズが 25% 少なくなりました。
たとえば、以下の一例は、 Task オブジェクトの実装で、タスクの名前のみが必須パラメータになっています。ビルダーを使った場合と、デフォルト引数を使った場合でそれぞれどうなるかを示しています。
/* Copyright 2020 Google LLC. SPDX-License-Identifier: Apache-2.0 */- public class Task {- private final String name;- private final Date deadline;- private final TaskPriority priority;- private final boolean completed;-- private Task(String name, Date deadline, TaskPriority priority, boolean completed) {- this.name = name;- this.deadline = deadline;- this.priority = priority;- this.completed = completed;- }-- public static class Builder {- private final String name;- private Date deadline;- private TaskPriority priority;- private boolean completed;-- public Builder(String name) {- this.name = name;- }-- public Builder setDeadline(Date deadline) {- this.deadline = deadline;- return this;- }-- public Builder setPriority(TaskPriority priority) {- this.priority = priority;- return this;- }-- public Builder setCompleted(boolean completed) {- this.completed = completed;- return this;- }-- public Task build() {- return new Task(name, deadline, priority, completed);- }- }-}+ data class Task(+ val name: String,+ val deadline: Date = DEFAULT_DEADLINE,+ val priority: TaskPriority = TaskPriority.LOW,+ val completed: Boolean = false+)
/* Copyright 2020 Google LLC.
SPDX-License-Identifier: Apache-2.0 */
- public class Task {
- private final String name;
- private final Date deadline;
- private final TaskPriority priority;
- private final boolean completed;
-
- private Task(String name, Date deadline, TaskPriority priority, boolean completed) {
- this.name = name;
- this.deadline = deadline;
- this.priority = priority;
- this.completed = completed;
- }
- public static class Builder {
- private Date deadline;
- private TaskPriority priority;
- private boolean completed;
- public Builder(String name) {
- public Builder setDeadline(Date deadline) {
- return this;
- public Builder setPriority(TaskPriority priority) {
- public Builder setCompleted(boolean completed) {
- public Task build() {
- return new Task(name, deadline, priority, completed);
-}
+ data class Task(
+ val name: String,
+ val deadline: Date = DEFAULT_DEADLINE,
+ val priority: TaskPriority = TaskPriority.LOW,
+ val completed: Boolean = false
+)
デフォルト引数の詳細については、連載シリーズ Kotlin Vocablary のブログ記事「Kotlin のデフォルト引数」をご覧ください。
おそらく、シングルトン パターンはソフトウェア開発で特によく使われるパターンの 1 つでしょう。オブジェクトのインスタンスを 1 つだけ作成し、他のオブジェクトから共有してアクセスできるようにしたい場合に役立ちます。
シングルトンを作るには、インスタンスが 1 つだけ存在するようにオブジェクトの作成方法を制御し、コードがスレッドセーフであることを保証する必要があります。Kotlin では、object キーワードだけでこれを実現できます。
/* Copyright 2020 Google LLC. SPDX-License-Identifier: Apache-2.0 */ - public class Singleton{- private static volatile Singleton INSTANCE;- private Singleton(){}- public static Singleton getInstance(){- if (INSTANCE == null) { // Single Checked- synchronized (Singleton.class) {- if (INSTANCE == null) { // Double checked- INSTANCE = new Singleton();- }- }- }- return INSTANCE;- }- private int count = 0;- public int count(){ return count++; }- }+ object Singleton {+ private var count = 0+ fun count(): Int {+ return count+++ }+ }
- public class Singleton{
- private static volatile Singleton INSTANCE;
- private Singleton(){}
- public static Singleton getInstance(){
- if (INSTANCE == null) { // Single Checked
- synchronized (Singleton.class) {
- if (INSTANCE == null) { // Double checked
- INSTANCE = new Singleton();
- return INSTANCE;
- private int count = 0;
- public int count(){ return count++; }
+ object Singleton {
+ private var count = 0
+ fun count(): Int {
+ return count++
+ }+ }
Kotlin 言語の簡潔さとシンプルさは、演算子オーバーロード、分割代入、文字列テンプレートなどの機能から明らかです。そのため、コードはとても読みやすくなります。
たとえば、本を集めたライブラリがあるとしましょう。ライブラリから本を取り出し、そのタイトルだけを出力する場合、コードは次のようになります。
/* Copyright 2020 Google LLC. SPDX-License-Identifier: Apache-2.0 */fun borrow(){ library -= book val (title, author) = book println("Borrowed $title")}
fun borrow(){
library -= book
val (title, author) = book
println("Borrowed $title")
}
使われている Kotlin の機能は次のとおりです。
Kotlin を使うと、コードは読みやすく、書きやすくなります。シングルトンや委譲などのパターンが言語に組み込まれており、たくさんのコードを書く必要がないため、バグが紛れ込む確率が低くなり、メンテナンスの負荷も軽減されます。また、文字列テンプレート、ラムダ式、エクステンション関数、演算子オーバーロードなどの機能で、コードをさらに簡潔かつシンプルにできます。書くコードが少なくなれば、読むコードやメンテナンスするコードも少なくなり、エラーが減って生産性が上がります。
詳しくは、Kotlin と Android Kotlin でより優れたアプリを作成するをお読みください。また、各社のケーススタディをご覧ください。デベロッパーにとっての Kotlin のメリットが確認できます。世界で特に好まれている開発言語の 1 つである Kotlin を使ってみたい方は、入門ページをご覧ください。
この記事は Eric Bahna による Android Developers Blog の記事 "Opening the Google Play Store for more car apps" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2020 年 10 月、Android Auto にナビゲーション、駐車場、充電スポット アプリを提供できるよう、ベータ版として Android for Cars App Library を公開しました。改善のため、これまでフィードバックを寄せていただいた皆様には改めて感謝いたします。そしてこのたび、次のステップに進む準備が整ったことをお知らせします。
2020 年 12 月 16 日(日本時間 12 月 17 日)より、Google Play ストアのクローズドなテストトラックにアプリを公開できるようになりました。この機能を使うと、アプリがどの程度アプリ品質ガイドラインを満たしているかについてのフィードバックを得られます。また、アプリを Android Auto テストユーザーに体験してもらう方法としても利用できます。継続的に問題が発生する場合は、パブリック Issue Tracker から問題の報告や機能リクエストを行ってください。
まもなく Play ストアのオープンテスト トラックが公開できるよう準備をしています。ぜひ、事前にクローズド テストトラックにアプリを公開してお待ちください。多くのデベロッパーのみなさんが開発した自動車用アプリがリリースされるのを楽しみにしております。
この記事は Christopher Katsaros による Android Developers Blog の記事 "What’s your MAD score?" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
MAD Skills シリーズを通して最先端の Android 開発(MAD)についてさまざまなことをお話ししてきました。そして今回は、皆さんの MAD スコアについてお知らせします。2020 年 12 月 15 日(日本時間 12 月 16 日)、MAD スコアカードを公開しました。これは、皆さんが使っている Jetpack ライブラリの数や、Kotlin でコーディングしているアプリの割合などを使い、皆さんの Andorid 開発がどれだけ最新であるかを示すスコアです。
MAD スコアカードは Android Studio を使って、アプリが Android App Bundle でどれくらいサイズを削減したかなどの情報を示します。また、特定の Jetpack ライブラリや Kotlin 機能など、皆さんが使う可能性がある主要な MAD テクノロジーにもそれぞれスポットライトを当てています。さらに、皆さんの最も MAD なスキルに基づいて、特別な MAD キャラクターも表示されます。
ご自身の MAD スコアは、新しい Android Studio プラグインを通じて確認できます。スコアカードを確認して共有する方法は、以下のとおりです。
スコアカードを確認できたら、MAD Skills の各エピソードもご覧ください。この動画と記事のシリーズでは、最先端の Android 開発の最新技術を使って、優れたアプリを簡単に作る方法を説明しています。ナビゲーション、Kotlin、Android Studio などの各トピックは、3 週間のシリーズとして構成されています。各トピックの最後には、Q&A で皆さんの質問に回答します。マテリアル デザイン コンポーネント、App Bundle、ナビゲーションなど、以前のトピックも確認できます。今後のトピックは、YouTube の Android Developers で公開します。
ここから MAD スコアカードを確認して、共有しましょう!
Reviewed by Hidenori Fujii - Google Play Developer Marketing APAC