この記事は The Jetpack Compose Team による Android Developers Blog の記事 "Android Dev Challenge: lift off with Jetpack Compose" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Jetpack Compose は、Android でネイティブ UI を作成する最新のツールキットです。強力なツールと直感的な Kotlin API によって、少ないコードですばやくアプリを作成できます。
本日 Jetpack Compose ベータ版をリリースしました。そこで、Jetpack Compose を使い始める皆さんのお役に立てるように、新たに #AndroidDevChallenge を開催します。Compose の機能を学び、導入する準備を始める絶好のチャンスです。
#AndroidDevChallenge では、Jetpack Compose で優れたアプリをすばやく作成する技術を身につけられるよう、これから 4 週間にわたって週単位のチャレンジを出題します。各チャレンジでは、「インサイトを開放する」をテーマに、アニメーションやマテリアル テーマ、Composable やリストなど、毎回 Compose の新しい領域を扱います。毎回のチャレンジの勝者に新しい賞品があり、Pixel 5 を含む 1000 個以上の賞品を準備しています*。最初のチャレンジは本日より始まります。
毎週提示される新しいチャレンジには、それぞれのルールとタスクがあります。本日より、毎週水曜日(日本時間木曜日)に、課題と締め切りについての詳しい説明を含むブログ投稿を公開します。いずれのチャレンジも、Text や List などの基本的な Composable から状態やアニメーションまで、Compose のメンタルモデルやさまざまな Compose API に親しむために役立ちます。
Text
List
チャレンジに参加するためには、GitHub リポジトリで実装する必要があります。すぐにスタートできるよう、Compose による基本的な Hello World! と継続的インテグレーション設定を含む Github リポジトリのテンプレートを作成していますのでご利用ください。
Hello World!
#AndroidDevChallenge 初回のチャレンジは、子犬の里親探しアプリの作成です。このアプリでは、概要画面で子犬の一覧を、詳細画面でそれぞれの子犬の詳細を表示する必要があります。エントリは、太平洋標準時 3 月 2 日 23 時59 分(日本時間 3 月 3 日 16 時 59 分)までにこちらから送信してください。
UI はすべて Compose で作成する必要があります。審査対象はアプリの UI レイヤーのみです。実装にあたっては、レイアウト、リスト、テキスト、ナビゲーションに関する Compose ドキュメントを参考にしてください。ハンズオンの学習教材として Compose Pathway を試すこともできます。このチャレンジに役立つトピックを説明した Codelabs が含まれています。
🐶 よりも 🐱 のほうが好きな方も大丈夫です。ペットの里親探しアプリであれば、どんな種類でも歓迎します。
多数のご応募をお待ちしています。
最初のチャレンジの賞品は、Compose で飛び回る際の相棒としてぴったりな、LEGO ブロックの Jetpack Compose スーパーヒーロー限定トロフィーです。チャレンジを成功させてエントリを送信した最初の 500 名には #AndroidDevChallenge 初週の勝者である証として、Android フィギュアのコレクションにこのトロフィーを追加できます。
Jetpack Compose の中核はデベロッパー コミュニティです。プロダクトをさらに使いやすく改善するために、皆さんのフィードバックをお寄せください。
*毎週のチャレンジに新しい賞品が設定されています。Google Pixel 5 が賞品になる週で、Google Pixel 5 が利用できない国にお住まいの方には、同程度の価値がある電子ギフトカードをお送りします。詳しくは公式ルールをご覧ください。
Reviewed by Yuichi Araki - Developer Relations Team and Hidenori Fujii - Google Play Developer Marketing APAC
refContentProvider()
releaseWakeLock()
JobScheduler.schedule()
この記事は 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 デベロッパーの世界の最新アップデートをお届けします。お楽しみに。