It’s time to migrate to
Android Studio
YUTAKA YK KATOH
1ST SECTION, 1ST DEPARTMENT, GLOBAL BUSINESS DEVELOPMENT CENTER
RICOH COMPANY LIMITED
DevFest #2
Android Studio とは
 Android Studio (あんどろいど すとぅーでぃおぅ):
カイゼンの鬼 Google が開発した Android 専用の Java/C++ 開発環境
 2013年5月に発表、以後プレビューを経て2014年12月にバージョン1.0リリース
 Apache License 2.0 のオープンソースソフトウェア、無償で利用可能
 Google の各種サービスや Google Cloud Platform を標準でサポート、容易にア
プリへ組み込める (我らには不要)
 スマートウォッチ向けアプリの開発にも対応 (我らには…)
主なメリット
 生産性が向上する
 ビルド作業やテスト作業の徹底的な自動化
 高度な入力支援とリファクタリングツール
 高機能なレイアウトエディター
 冗長性を排除したテストコード記述
 バグを未然に防げる
 性能、操作性、バージョン互換などをその場で検証
 JVM ユニットテストや UI テストなど複数のテスト手段のサポート
 アノテーションによる静的解析の強化
デメリットもある
 既存プロジェクトは変換が必要、新旧両立や後戻りはできない
 Eclipse 内蔵ビルドシステム (及び Ant) から、Gradle に全面移行する必要がある
 操作性が全然違う
 用語差異に戸惑う、画面レイアウトも違う、機能や設定のメニュー項目も全く違う
 起動が遅い
 そもそも開発マシンの要求スペックが高い
 大きなプロジェクトでは Indexing 処理に時間がかかる
 動作が重い
 IDE の UI が SWT ではなく Swing で書かれているので、全体的に描画が遅い
 英語版のみ
Android Studio とわたし
 新人課題 2013 のとき
 Android Studio を開発環境の候補にリストアップ、しかし当時のバージョンは 0.9 (プ
レビュー版) 機能的な制約もあり、業務で使えるレベルでないと判断、不採用
 Streamline NX 2.6 着手のとき
 開発環境の候補にリストアップ、当時バージョン 1.0 (2014年12月) 出たてほやほや
 詳細設計を進めているうちに 1.1 リリース、目玉機能 “Unit Testing Support” が追加さ
れ、技術検証のち採用!
 Streamline NX 2.6 実装フェーズ
 1.2 リリース、1.3 リリース、1.4 リリース、と追いかけてゆき、(途中何度もバグや気
まぐれな仕様変更に巻き込まれながらも一気に改良が進み) 現在 1.5.1 利用中
Google の最近の動き (1/2)
 2015年6月、Eclipse ベースの開発環境の年内の開発及びサポート中止を表明
 Eclipse を含めた開発環境一式は既に配布停止、現在はプラグイン配布のみ
http://android-developers.blogspot.jp/2015/06/an-update-on-eclipse-android-developer.html
Google の最近の動き (2/2)
 2015年11月、Android Dev Summit で Android Studio 2.0 発表
 “Instant Run”: コード修正をその場で動いてるアプリに反映・確認できる!
https://twitter.com/AndroidDev/status/668841078481657856
https://androiddevsummit.withgoogle.com/
(巷の話題) Kotlin 流行の兆し
 Kotlin (ことりん): Better Java を目指して開発された新言語
 Java とまぜこぜで運用できる (文法互換はないので、ファイル単位で)
 日本 Java ユーザー会のカンファレンスで Kotlin+ Android のセッション登場
https://speakerdeck.com/ntaro/ebanzierisutozhi-chuan-kotlinwoji-cun-purodakutodeshi-u-number-jjug-ccc-number-jjug-number-jkug
去年技術調査
した Ceylon
は全然流行ら
ない…
(一応紹介) Eclipse 陣営の最近の動き
 次期 Eclipse リリース “Neon” に向けて、“Andmore” プロジェクトを立ち上げ
 フォークした ADT Plugin に Maven の正式サポート等の若干の機能を追加
 正式版リリースは 2016 年 6 月末を予定、その後もサポートが続くかわからない
https://projects.eclipse.org/projects/tools.andmore
Android Studio の魅力
 Android Studio の魅力は、主に以下の 3 要素からなる:
 ベース IDE である IntelliJ IDEA (いんてりじぇい あいであ) の魅力
 ビルドシステム Gradle (ぐれーどる) の魅力
 Android Studio (Gradle 拡張を含む) 独自機能の魅力
IntelliJ IDEA
 チェコの JetBrains 社が開発、姉妹製品に PyCharm や RubyMine 等
 インテリジェントなコードアシスタントや高度なリファクタリング機能が特徴
 Java, Scala, Groovy, Kotlin を標準でサポート
 OSS 版と有償版があり、有償版では Java EE, Spring, Play 等のフレームワークサ
ポートや Web, DB 開発のサポートが充実
Java 8 研修でも
IntelliJ を利用
(ただし自分だけ…)
Gradle
 Java と Groovy で作られたビルド自動化システム
 ビルド以外も何でもできるので、正確にはタスク自動化システム
 Groovy ベースの DSL※ で無駄のない簡潔な設定・タスク記述を実現
 Ant タスク実行機能や Maven リポジトリアクセス機能も搭載
ビルド定義 / パラダイム 手続き的 規約によるビルド
スクリプト Make Gradle
XML Ant Maven
「Gradle 徹底入門」(2014, 翔泳社) より
DSL: Domain Specific Language (ドメイン固有言語)
Layout Editor
 ADT のレイアウトエディター同様、様々な条件でプレビューできる
 互換性やアクセシビリティ等のチェックが自動で行われる
Translations Editor
 多言語リソースの効率的な入力や確認が可能、対応言語一覧ビューも装備
 翻訳漏れは重大警告として厳しくチェック、Google に翻訳依頼する機能も…
簡易 Device Monitor
 メモリ, CPU, GPU, ネットワークの推移をリアルタイムで追跡
 ダンプやアロケーショントラッキングも可能
Android Device Monitor
 こちらは ADT 時代と全く同じ画面 (スタンドアロン版) が起動される
 起動すると、前述の簡易モニターは無効になる… (DDMS の制約?)
Build Variants
 Build Variants = Build Types + Product Flavors
 Build Types
 Debug / Release 吐き分け機能
 各種 APK 生成パラメーター等を切り替えられる (署名や難読化など)
 Product Flavors
 差分開発を容易にするビルド切り替え機能 (仕組み自体は Build Types と同じ※)
 広告あり/なし、体験版/製品版などの実現が最小限の差分だけで済む
※: 事前定義されている点、別々の初期値を持っている点が異なる
JVM Unit Testing
 従来のインストゥルメンテーションテスト※に加え、Java VM を用いたユニット
テストを新たにサポート
 JUnit 4 + Hamcrest + Mockito による高いテストコード生産性
 UI テストはインストゥルメンテーションテスト、ユニットテストは JVM 上と使
い分けるのが Google の提唱する基本スタイル
※: 予め起動されたエミュレーターや実機などの Android OS を用意して実行するテスト
Support Annotations
 Android SDK のオプションライブラリ support-annotations が大活躍
 Checker Framework 由来: @NonNull, @Nullable
 値域定義系: @Size(3), @IntRange(from=0,to=2), @FloatReange(…)
 使用法指南系: @CallSuper, @CheckResult
 並行性検証系: @MainThread, @UiThread, @WorkerThread, @BinderThread
 リソース種別指定系: @IdRes, @DrawableRes, @StringRes, @LayoutRes 等
 マニフェスト検証系: @RequiresPermission
 On-the-fly 静的解析により、コードを書いたその場で警告やエラー表示
 リテンションポリシーは Class: あってもなくてもランタイムには影響しない
Package Summery:
https://developer.android.com/intl/ja/reference/android/support/annotation/package-summary.html
※: MainThread と UiThread 何が違うの?とか聞かれると脱線するので勘弁してください
Gauge
 テスト自動化ツール Gauge を内蔵、”Unit Testing Support” 機能やカバレッジ
ツールを実行し、容易にテスト結果やカバレッジ計測・集計を得られる
 あまり表舞台に出てこないが非常に強力なツール、もっと活用できれば…
 (こぼれ話) Gauge 自体は Go 言語で開発されている
ご清聴ありがとうございました

GBDC 勉強会 #2 Android Studio 実践レポート

  • 1.
    It’s time tomigrate to Android Studio YUTAKA YK KATOH 1ST SECTION, 1ST DEPARTMENT, GLOBAL BUSINESS DEVELOPMENT CENTER RICOH COMPANY LIMITED DevFest #2
  • 2.
    Android Studio とは Android Studio (あんどろいど すとぅーでぃおぅ): カイゼンの鬼 Google が開発した Android 専用の Java/C++ 開発環境  2013年5月に発表、以後プレビューを経て2014年12月にバージョン1.0リリース  Apache License 2.0 のオープンソースソフトウェア、無償で利用可能  Google の各種サービスや Google Cloud Platform を標準でサポート、容易にア プリへ組み込める (我らには不要)  スマートウォッチ向けアプリの開発にも対応 (我らには…)
  • 3.
    主なメリット  生産性が向上する  ビルド作業やテスト作業の徹底的な自動化 高度な入力支援とリファクタリングツール  高機能なレイアウトエディター  冗長性を排除したテストコード記述  バグを未然に防げる  性能、操作性、バージョン互換などをその場で検証  JVM ユニットテストや UI テストなど複数のテスト手段のサポート  アノテーションによる静的解析の強化
  • 4.
    デメリットもある  既存プロジェクトは変換が必要、新旧両立や後戻りはできない  Eclipse内蔵ビルドシステム (及び Ant) から、Gradle に全面移行する必要がある  操作性が全然違う  用語差異に戸惑う、画面レイアウトも違う、機能や設定のメニュー項目も全く違う  起動が遅い  そもそも開発マシンの要求スペックが高い  大きなプロジェクトでは Indexing 処理に時間がかかる  動作が重い  IDE の UI が SWT ではなく Swing で書かれているので、全体的に描画が遅い  英語版のみ
  • 5.
    Android Studio とわたし 新人課題 2013 のとき  Android Studio を開発環境の候補にリストアップ、しかし当時のバージョンは 0.9 (プ レビュー版) 機能的な制約もあり、業務で使えるレベルでないと判断、不採用  Streamline NX 2.6 着手のとき  開発環境の候補にリストアップ、当時バージョン 1.0 (2014年12月) 出たてほやほや  詳細設計を進めているうちに 1.1 リリース、目玉機能 “Unit Testing Support” が追加さ れ、技術検証のち採用!  Streamline NX 2.6 実装フェーズ  1.2 リリース、1.3 リリース、1.4 リリース、と追いかけてゆき、(途中何度もバグや気 まぐれな仕様変更に巻き込まれながらも一気に改良が進み) 現在 1.5.1 利用中
  • 6.
    Google の最近の動き (1/2) 2015年6月、Eclipse ベースの開発環境の年内の開発及びサポート中止を表明  Eclipse を含めた開発環境一式は既に配布停止、現在はプラグイン配布のみ http://android-developers.blogspot.jp/2015/06/an-update-on-eclipse-android-developer.html
  • 7.
    Google の最近の動き (2/2) 2015年11月、Android Dev Summit で Android Studio 2.0 発表  “Instant Run”: コード修正をその場で動いてるアプリに反映・確認できる! https://twitter.com/AndroidDev/status/668841078481657856 https://androiddevsummit.withgoogle.com/
  • 8.
    (巷の話題) Kotlin 流行の兆し Kotlin (ことりん): Better Java を目指して開発された新言語  Java とまぜこぜで運用できる (文法互換はないので、ファイル単位で)  日本 Java ユーザー会のカンファレンスで Kotlin+ Android のセッション登場 https://speakerdeck.com/ntaro/ebanzierisutozhi-chuan-kotlinwoji-cun-purodakutodeshi-u-number-jjug-ccc-number-jjug-number-jkug 去年技術調査 した Ceylon は全然流行ら ない…
  • 9.
    (一応紹介) Eclipse 陣営の最近の動き 次期 Eclipse リリース “Neon” に向けて、“Andmore” プロジェクトを立ち上げ  フォークした ADT Plugin に Maven の正式サポート等の若干の機能を追加  正式版リリースは 2016 年 6 月末を予定、その後もサポートが続くかわからない https://projects.eclipse.org/projects/tools.andmore
  • 10.
    Android Studio の魅力 Android Studio の魅力は、主に以下の 3 要素からなる:  ベース IDE である IntelliJ IDEA (いんてりじぇい あいであ) の魅力  ビルドシステム Gradle (ぐれーどる) の魅力  Android Studio (Gradle 拡張を含む) 独自機能の魅力
  • 11.
    IntelliJ IDEA  チェコのJetBrains 社が開発、姉妹製品に PyCharm や RubyMine 等  インテリジェントなコードアシスタントや高度なリファクタリング機能が特徴  Java, Scala, Groovy, Kotlin を標準でサポート  OSS 版と有償版があり、有償版では Java EE, Spring, Play 等のフレームワークサ ポートや Web, DB 開発のサポートが充実 Java 8 研修でも IntelliJ を利用 (ただし自分だけ…)
  • 12.
    Gradle  Java とGroovy で作られたビルド自動化システム  ビルド以外も何でもできるので、正確にはタスク自動化システム  Groovy ベースの DSL※ で無駄のない簡潔な設定・タスク記述を実現  Ant タスク実行機能や Maven リポジトリアクセス機能も搭載 ビルド定義 / パラダイム 手続き的 規約によるビルド スクリプト Make Gradle XML Ant Maven 「Gradle 徹底入門」(2014, 翔泳社) より DSL: Domain Specific Language (ドメイン固有言語)
  • 13.
    Layout Editor  ADTのレイアウトエディター同様、様々な条件でプレビューできる  互換性やアクセシビリティ等のチェックが自動で行われる
  • 14.
    Translations Editor  多言語リソースの効率的な入力や確認が可能、対応言語一覧ビューも装備 翻訳漏れは重大警告として厳しくチェック、Google に翻訳依頼する機能も…
  • 15.
    簡易 Device Monitor メモリ, CPU, GPU, ネットワークの推移をリアルタイムで追跡  ダンプやアロケーショントラッキングも可能
  • 16.
    Android Device Monitor こちらは ADT 時代と全く同じ画面 (スタンドアロン版) が起動される  起動すると、前述の簡易モニターは無効になる… (DDMS の制約?)
  • 17.
    Build Variants  BuildVariants = Build Types + Product Flavors  Build Types  Debug / Release 吐き分け機能  各種 APK 生成パラメーター等を切り替えられる (署名や難読化など)  Product Flavors  差分開発を容易にするビルド切り替え機能 (仕組み自体は Build Types と同じ※)  広告あり/なし、体験版/製品版などの実現が最小限の差分だけで済む ※: 事前定義されている点、別々の初期値を持っている点が異なる
  • 18.
    JVM Unit Testing 従来のインストゥルメンテーションテスト※に加え、Java VM を用いたユニット テストを新たにサポート  JUnit 4 + Hamcrest + Mockito による高いテストコード生産性  UI テストはインストゥルメンテーションテスト、ユニットテストは JVM 上と使 い分けるのが Google の提唱する基本スタイル ※: 予め起動されたエミュレーターや実機などの Android OS を用意して実行するテスト
  • 19.
    Support Annotations  AndroidSDK のオプションライブラリ support-annotations が大活躍  Checker Framework 由来: @NonNull, @Nullable  値域定義系: @Size(3), @IntRange(from=0,to=2), @FloatReange(…)  使用法指南系: @CallSuper, @CheckResult  並行性検証系: @MainThread, @UiThread, @WorkerThread, @BinderThread  リソース種別指定系: @IdRes, @DrawableRes, @StringRes, @LayoutRes 等  マニフェスト検証系: @RequiresPermission  On-the-fly 静的解析により、コードを書いたその場で警告やエラー表示  リテンションポリシーは Class: あってもなくてもランタイムには影響しない Package Summery: https://developer.android.com/intl/ja/reference/android/support/annotation/package-summary.html ※: MainThread と UiThread 何が違うの?とか聞かれると脱線するので勘弁してください
  • 20.
    Gauge  テスト自動化ツール Gaugeを内蔵、”Unit Testing Support” 機能やカバレッジ ツールを実行し、容易にテスト結果やカバレッジ計測・集計を得られる  あまり表舞台に出てこないが非常に強力なツール、もっと活用できれば…  (こぼれ話) Gauge 自体は Go 言語で開発されている
  • 21.