GoogleがKotlinをAndroid開発言語として公式サポートするってよ!
苦節5年、Kotlinエバンジェリストを自称して啓蒙活動に励んできましたが、ついに! KotlinがAndroidアプリの開発用言語としてGoogleのお墨付きをもらいました! おめでとう!
毎年毎年、Google I/Oのキーノートを見ながら友達と「今年はKotlin来てほしいなー」なんて話していましたが、まさか今年来るとはね。
KotlinでAndroidを始める方は拙著がおすすめです!
- 作者: 長澤太郎
- 出版社/メーカー: リックテレコム
- 発売日: 2017/03/21
- メディア: Kindle版
- この商品を含むブログを見る
また、日本Kotlinユーザグループでは勉強会や交流会を開催していますので、興味ある方はぜひ!
#DroidKaigi でKotlinハンズオンの講師をしたよ〜!
3/9(木)、3/10(金)にDroidKaigiに行ってきました。 2日目にはKotlinハンズオンの講師を務めました。 KotlinとAndroidを絡めたハンズオンをやるのは実は初めてで、結果的にはおおむね成功でしたが、課題がいくつか残りました。
90分という枠にいろいろ詰めすぎたことを一番反省しています。 RetrofitとDagger、async/awaitはスコープに含めるべきではありませんでした。 これらを盛り込んだ理由は、RetrofitやDaggerなど AndroidJavaで便利に使えるライブラリをKotlinからも難なく使えるんだよ ってことを示したかったからです。 async/awaitは、DroidKaigiより1〜2週間前にKotlin 1.1がリリースされたこともあり「せっかくだから紹介しよう」というノリで入れてしまいました。
ご協力いただいたチューターの方々のブログもご覧ください。
- Kotlinハンズオンのお手伝いしました&DroidKaigi2017の2日目に参加してきました #droidkaigi
- DroidKaigi 2017でKotlinハンズオンのチューターとしてお手伝いしてきた #DroidKaigi
サンプルプロジェクトはGithubで公開しています(https://github.com/ntaro/github-client-for-droidkaigi)。 スライドはこちら↓
次回ハンズオンの宣伝
日本Kotlinユーザグループ x teratail でお送りするKotlinハンズオンが4/15(土)に開催されます! 3/22(水)から募集開始です。 レベル感としては「Kolintは初めてだけど他の言語でプロダクト作ってるよ」って人を対象としています。 ぜひお越しください!
Kotlin 便利なプラグインが2つ登場しRealmが捗るよ〜
Kotiln 1.0.6がリリースされました! 同時に面白いプラグインが2つリリースされました。 all-open compiler pluginとno-arg compiler pluginです。
all-open compiler pluginは、指定したアノテーションがついたクラスが自動でopen
指定されるという機能を持ちます。
no-arg compiler pluginは、指定したアノテーションがついたクラスに、自動でデフォルトコンストラクタ(引数を持たないコンストラクタ)を生成してくれます。
導入方法は、冒頭に示したKotlin公式ブログを参照してください。
今回はこれらのプラグインを用いることで、Realmが使いやすくなることを示したいと思います。
プラグインなし
まずは普通にKotlinだけを使って、Realmオブジェクトを定義してみます。
open User(@PrimaryKey open var id: Long = 0, open var name: String = ""): RealmObject
うひゃー、おまじないだらけですね。
open
が3回も登場していますが、RealmがこのUser
クラスを継承して面白い機能を追加するために必要なのです。
また、Realmはデフォルトコンストラクタを要求します。
そのためUser
クラスのプライマリコンストラクタでデフォルト引数を与えることで、引数なしのコンストラクタを提供しているというわけです。
ともかく、本来であれば無視してもよいことに注意しなければならないのですね〜。
all-open compiler pluginを使う
all-open compiler pluginを使って、open
修飾子を退治しましょう。
プラグインの設定として、下記をbuild.gradleに記述します。
allOpen {
annotation('io.realm.annotations.RealmClass')
}
この設定により、@RealmClass
アノテーションが付いたクラスが、自動でopen
指定となります。
@RealmClass User(@PrimaryKey var id: Long = 0, var name: String = ""): RealmObject
no-arg compiler pluginを使う
次にno-arg compiler pluginを使って、デフォルト引数を毎回記述する退屈な作業から解放されましょう。 プラグインの設定として、下記をbuild.gradleに記述します。
noArg {
annotation('io.realm.annotations.RealmClass')
}
all-openのときと同じように、@RealmClass
が付いたクラスを対象に、デフォルトコンストラクタの自動生成を設定します。
ついにやりました!
謎のopen
もデフォルト引数も、キレイに消えたコードが手に入りました!
@RealmClass class User(@PrimaryKey var id: Long, var name: String) : RealmObject()
おまけ
no-argで自動生成したデフォルトコンストラクタは、Kotlinのリフレクション機能を使ってもアクセスすることはできないようです。 一方Javaのリフレクション機能を使うとアクセスできます。
@MyAnnotation // このアノテーションに対してno-arg設定 data class Hoge(val value: String)
Hoge::class.constructors.forEach(::println) println("----------") Hoge::class.java.constructors.forEach(::println) println("----------") println(Hoge::class.java.newInstance())
実行すると...
fun <init>(kotlin.String): Hoge
----------
public Hoge()
public Hoge(java.lang.String)
----------
Hoge(value=null)
App Shortcuts 実装方法と実際の応用例
一昨日くらいにAndroid 7.1.1のOTAが開始されましたね。 私のNexus5Xにも届いたので、早速インストールしました。
Android 7.1で目玉の機能となるのは、App Shortcutsなのではないでしょうか! ということで試してみました。 公式のAPIガイドを見てやれば、すごく簡単に実装できます!
App Shortcuts 概略
App Shortcutsは、欲しい情報にすぐにアクセスするための機能です。 ランチャーアイコンを長押しすることで、ショートカット一覧が表示されます。 ショートカットを押せば、そのアプリの特定の画面にすぐにたどり着けるというものです。
続きを読む