Category Archives: Kotlin

Android向けKotlinのロードマップ

Googleが最近アナウンスした中で最も興味深いニュースはJackコンパイラによりAndroidNでJava8を(限定的に)サポートするという話ではないでしょうか。当然ながら皆様はこれがKotlinのAndroid開発向けのロードマップにどう影響するか興味のあることと思いますのでここで説明させてください。 KotlinのAndroid向けのロードマップ JetBrainsではKotlinがAndroid開発で優れたツールとなるよう多大な注目を置いています。今後いくつかのバージョン1.0.Xにおけるリリースでは引き続きツール群やライブラリの改善を施していきます。フォーカスは三つのエリアに渡っています。開発ワークフローのスピードアップ、ランタイムライブラリのサイズ削減、ツールサポートの充実化です。 開発ワークフロー 開発ワークフローの高速化のため、KotlinのGradleプラグインはインクリメンタルコンパイルをサポートするようになります。ソースに変更があった場合、モジュール全体ではなく本当に影響のある箇所だけを再コンパイルするためビルド時間を大幅に短縮できます。 続いてAndroidのビルドパフォーマンス改善のためAndroidの新しいJack and Jillツールチェインとのインテグレーションを提供します。 現在のところKotlinの生成するバイトコードのハンドルを妨げる問題(196084 と 203531)がありますが、Googleのチームと連携して問題を解決するか、JetBrainsサイドにて回避策を提供する予定です。それが完了したら、インクリメンタルコンパイル中に変更のあったクラスファイルのみJillを使ってトランスレート出来るようになります。(なおこれまでAndroidサポートでは毎回全てのクラスをトランスレートする必要がありました)。 そしてインスタントランです。現在のところKotlinではコールドスワップしかできず、ウォームとホットスワップをサポートするためにもうしばらく調査が必要です。しかし早急に可能な限りを尽くします。それまでの間、JRebel for Androidを使えばKotlinのホットスワップを行うことが可能です。 ランタイムサイズ メソッド数を削減してkotlin-stdlibのサイズを縮めるべく、いくらかの改善を施す計画があります。現在のところ7191です: 複数ファイルに渡るファサードクラスのトップレベルファンクションの最適化や、inline-onlyの関数をランタイムバイナリから外すとで数千のメソッド数を削減できる見込みです。 ツールサポート Kotlin 1.0のAndroidサポートで欠けているものの内一番大きいのがLintチェックでしょう。でもご安心ください。もちろんKotlinのLintチェックのリリース予定があります。既にAndroid Studio 1.5でLintチェックができるよう実装済みで、Kotlin 1.0.2でリリース予定です。そしてAndroid Studio 2.0向けについては現在実装中です。LintチェックはKotlinとJavaコードの共通基盤上に実装しており、今後Android SDKがデフォルトの状態でKotlinサポートできるようこの基盤をAndroid SDKへコントリビュートする予定です。 Android特有のIDEサポート、例えば”New Kotlin Activity”アクション、コードインサイトやナビゲーションなどは少しずつ1.0.xリリースで加えられていきます。 KotlinとJava 8 Java 8がリリースされてしばらく経過しておりますが、Android開発を行っていない開発者でもJava 8よりもKotlinを選択して楽しんでいらっしゃる方々が沢山いらっしゃいあす。Androidが正式にJava8の言語機能をサポートしましたが、KotlinとJavaの選択にどう影響を与えるでしょうか? まず第一に、Java 8のラムダをAndroidにもたらしますが、Androidのツールチェインがサポートするラムダの既存プラットフォーム(Nリリース以前)サポートはKotlinによるサポートとは重要な違いがあります。違いを理解するため、シンプルなコード例をお見せします: Kotlin: list.forEach { process(it) … Continue reading

Posted in Kotlin | Leave a comment

Kotlin Educational プラグイン

Kotlinは習得が簡単だと常々申し上げてきました。実際簡単なのですが、言語の分かりやすさだけでなく、学習素材も重要です。この点について新しいステップを踏み出しました。Kotlin Educationalプラグインです。 Kotlin Educationは IntelliJ IDEA 2016.1用のプラグインで、名前の通りトレーニングコースを提供します。一つのコースにはいくつものタスクがあり、それぞれのタスクには空欄があり、問題解決のために皆様に穴埋めをしていってもらいます。 現在のところ、コースはひとつだけあります。有名なKotlin Koansです。すでにオンラインでも利用可能なもので、Kotlin初学者に大変人気です。オフラインバージョンのKoansもにたようなものですが、もちろんIntelliJ IDEAのリファクタリングやインテンションアクションを活用しながら学ぶことができます! Kotlin Koansについて質問が何か質問がございましたら、Slackの#koans チャンネルへどうぞ。 P.S. あなた自身でコースを作りたい場合はメールにて直接ご連絡ください。 [原文]

Posted in Kotlin | Leave a comment

Kotlin 1.0.1 EAP!

Kotlin 1.0をリリースしてから1ヶ月になります。最初のバグフィックスアップデートを準備する間、ユーザーベースはおよそ2倍となりました。 Kotlin 1.0.1は言語(や、Kotlinプロジェクト全体)のバグフィクスやパフォーマンス改善や、ツール/インテグレーション周りの新機能をリリースする1.0.Xバージョンの最初のリリースになります。今回はIDE機能の細かな改善にとどまりますが、1.0.2以降ではもっと便利な新機能が搭載されていく予定ですので楽しみにしてください。 1.0.1の変更点 全ての変更内容についてはリリースノートをご覧ください。中でも特筆すべき数字やハイライトを以下に挙げます: コンパイラ、ライブラリ、Gradleプラグインの47に渡る修正、パフォーマンス改善 Gradle 2.12との互換性 IDE機能: IDEA 2016との互換性 Kotlin Education Plugin (IDEA 2016向け) KT-9752 “Move declaration to another file”でより便利なファイルチューザー KT-9697 メソッドをコンパニオンオブジェクトへ、または逆への移動 IDE周りの39におよぶ修正 是非EAPをお試し頂き、フィードバックを頂ければ幸いです。皆さんでKotlinをよりよいものにしていきましょう!

Posted in Kotlin | Leave a comment

Kotlin 1.0 リリース: JVMとAndroid向けの実用的(Pragmatic)言語

Kotlinバージョン1.0をついにリリースいたしました! 長く、エキサイティングな道のりでしたが、ついに1.0のリリースとなりました。ロゴも新しくなりました: See discussions on Reddit and Hacker News   Kotlin #とは? KotlinはJVMとAndroid向けのオブジェクト指向かつ関数型な実用的(Pragmatic)言語です。相互運用性、安全性、明瞭性、そしてツールサポートにフォーカスしています。 汎用言語であるKotlinはJavaが動作する場所であればサーバサイドアプリケーション、モバイルアプリケーション(Android)、デスクトップアプリケーションを含むどこでも動作します。以下のメジャーなツールやサービスに対応しています: IntelliJ IDEA、Android Studio、Eclipse Maven、Gradle、Ant Spring Boot (KotlinサポートがKotlin 1.0と同時にリリースされました!) GitHub、Slack、Minecraft Kotlinの焦点として大事なのが相互運用性、JavaとKotlinをミックスしたプロジェクトのシームレスなサポートです。これにより、既存プロジェクトを段階的に簡潔かつよりタイプセーフなコードに移行していくことが可能です。さらに、Kotlinは拡張可能な標準ライブラリを備えており、バイトコードのフットプリントを小さく抑えます。もちろん、どんなJavaライブラリもKotlinから呼び出せますし、逆も然りです。 実用的(Pragmatic) #とは? 長きに渡るプロジェクトでは人のコアバリューを理解することが非常に大切です。Kotlinのデザインを一言で表すならば実用主義(pragmatism)です。Kotlinの主眼は早い段階から新発明や、研究ではありませんでした。結果的に沢山の発明がありましたが、あくまでプロジェクトのポイントではありません。我々が開発してきた物はだれもが利用可能なバグを防ぐための型システムであったり、コードの再利用を促す抽象化メカニズムです。我々はこの言語を素晴らしい物とすべく常にユースケースにフォーカスしてきました。 特に、既存コードとの相互運用性は重要です。全てをスクラッチから書き直すことをだれが望むでしょう?私にもそんなことをしたいと思ったことがありました・・・極めて稀ですが。Kotlinの開発はJavaとの相互運用性やMavenインテグレーション、Android互換性を無視すれば極めて簡単なものだったでしょう。アプローチもよりエレガントになったかもしれません。しかし、エレガントであることはゴールではありません。ゴールは便利(useful)であることです。新しく覚えること、新しく発明すること、スクラッチから繰り返すことが少ないほど、再利用はしやすく、より便利ツールとなり得ます。 Q. なぜKotlinは独自のパッケージマネージャーやビルドシステムを持たないのですか? A. すでにMavenやGradleがあり、多大な既存資産を再利用できることは多くのプロジェクトで重要だからです。 Q. 新しくデザインし直すことをせず、なぜJDK互換のコレクションインターフェースを開発することに注力したのですか? A. 既存のJavaコードはJDKのコレクションフレームワークに多大に依存しており、言語の境界をまたがる際に変換をするのは面倒だからです。 Q. なぜKotlinはJava6のバイトコードをサポートするのですか? A. 多くの人はいまだにJava6を使っているからです(Androidデベロッパが多いですが、Androidだけではありません). … Continue reading

Posted in Kotlin, お知らせ | Leave a comment

Kotlin – Gradle Daemonサポートによるコンパイル高速化

Kotlinのチームはコンパイル時間改善の作業を続けています。Kotlin 0.12.1230ではGradle Daemon機能を使うようになりましたのでお試しください。起動コストがなくなりし、ビルドが早くなります。 バックグラウンド kotlincの実行時間の中でも、コンパイラのクラスをロードし、ウォームアップする時間は特に掛かります。そこでコンパイラインスタンスを繰り返し使い回して最適化するという方法にたどり着きました。 他のJVMベースのツールも同様の問題があるためGradleはクラスロード時間やJITコンパイル時間を不要にするためのロングランニングプロセス – Daemon機能があります。 お試しください KotlinのコンパイラでGrade Daemonがうまく使えない問題を解決しました。Gradle 2.4以上安定して動作するはずです(Gradleのアップグレード方法について詳しくはこちらをご覧ください)。Android Studioはデフォルトでデーモンを使いますので単にbuild.gradeファイル内でKotlinのバージョンとして“0.12.1230″を指定すれば有効になります:

注: 高速化の恩恵を最大限に受けられるのはビルドを数回行ってからになります。最初はコールド状態からのスタートとなり、二回目でほとんどのウォームアップが完了します。それ以降のビルドではJITコンパイラによる最適化で少し早くなります。 フィードバック プロジェクトのビルドがどれくらい早くなったのか(行数と実際のビルド時間など)をお知らせ頂ければ幸いです。 原文

Posted in Kotlin | Leave a comment

IntelliJ IDEA 15 EAP + Kotlin = 愛

IntelliJ IDEA 15 EAPの新しいビルドをリリースしました。毎回新しい機能追加や、バグ修正を行っていきますので、是非フィードバックを掲示板やYouTrackへお寄せください。 新しいビルドではKotlinプラグインをバンドルしています: Kotlin blogに書いている通り、Kotlinのチームは年内に正式リリースをすべく開発を進めております。Kotlinをまだお試しでなければ、この新しいビルドをダウンロードして是非お試しください。基本的な文法はこちら(英語)で確認していただけます。他にも日本語のブログ記事やアドベントカレンダー、雑誌の連載を書いていらっしゃる方も多くいらっしゃいますのであわせてご参照ください。 他に注目すべき改善点は、Find / Replaceにおける正規表現のcase transformation文法のサポートです: “\l”、 “\L”、 “\u”、 “\U”、“\E”をサポートしています。これらの文法に馴染みがない方はPerlのドキュメントをご参照ください。 変更内容の一覧はリリースノートにてご確認いただけます。 Develop with Pleasure! 原文

Posted in IntelliJ IDEA, Kotlin | Leave a comment

Kotlin M6.1リリース

二ヶ月前にM6をリリースしました。そして今日、沢山の改善を含む次のステップへと移る準備ができました。 言語の改善 言語の新機能や改善が施されました より良いインターフェース タイプインターフェースにはスマートキャストが働きます。以下のコードが期待通り動作します:

より良いキャスティング診断 コンパイラは賢くなり、不可能なキャストを検出します

、といったコードはコンパイル時にエラーを出します。 特定のケースでは生のタイプへのキャストは推論が働きます

さらに、else句はwhen節内で返値に関連がない場合は不要となりました。つまり、これはステートメントとして利用できます:

警告の抑止 任意の宣言や式にsuppressアノテーションをつけて(Cmd+Enterを押せばIntelliJ IDEAがやってくれます)、コンパイラの出す警告を抑止させることができます。未チェックキャストやリネームされたパラメータを含むいかなる警告に対して利用できます。

ローカルリターンを名前付きラムダ式で 混乱を防ぐため、純粋なreturnは「名前付き関数からの戻り」と認識されます。つまりラムダ式内で”return x”と表記してそのラムダがxを返すという書き方は認められないことになります。この制約を和らげるため、本リリースより「ラムダ式内のラベル付きリターン」を書くことができるようになりました。たとえばfooという名前の関数があった場合

この関数を呼び出す際にラムダ式を渡して条件を確認して早期に戻すというコードが書けます

この定義内で明示的なラベリングは必須ではありません。以下のように書くことも出来ます:

ラムダ式が関数に渡されたときは自動的にラベル付きとなります。 注意:ラムダ式内の明示的なリターンタイプは一時的に必要なもので、将来的に不要になる予定です 警告: メタデータフォーマットの変更 生成するバイトコードは以前とは大きく異なります。サイズはよりスリムになり、リフレクションは高速になりました。ただし以前のバージョンのKotlinでコンパイルしたバイトコードとは互換性がありません。 JavaScriptサポート KotlinのJavaScriptサポートを利用して成功を収めている商用製品がある傍ら、JetBrainsは現在のところJVM向けにフォーカスしてきました。しかし、現在はJavaScriptサポートに全力を注いでおり今回のリリースで以下の機能を含めました: Support for enums Class Objects Delegated properties … Continue reading

Posted in Kotlin | Leave a comment