Android 用の Jetpack Compose をベースにした、クロスプラットフォーム アプリケーション用のオープンソース Kotlin フレームワークがプレビュー段階になりました。
Google の Jetpack Compose は、Android アプリケーションでユーザー インターフェースを構築するための公式フレームワークであり、先週、Android Studio の最初の安定リリースである 2020.3.1 または「Arctic Fox」と同時にバージョン 1.0 に到達しました。
まだ 1.0 に到達したばかりであるにもかかわらず、Google は次のように述べている。「Play ストアにはすでに 2,000 を超えるアプリが Compose を使用しています。実際、Play ストア アプリ自体も Compose を使用しています。」
Composeは、レイアウトとコントロールの階層構造やツリー構造という従来のAndroidのアプローチから脱却した宣言型フレームワークです。Composeのユーザーインターフェースは、画面の状態を記述する@Composableアノテーションを付与した関数を記述することで定義されます。これらの関数がユーザーインターフェースを生成します。「アプリの状態が変化するとUIが自動的に更新されるため、UIを迅速に構築することがはるかに簡単になります」とGoogleのAndroidチームは述べています。
Android版Jetpack Composeがバージョン1.0に到達しました
ComposeはKotlinフレームワークであり、KotlinとAndroid Studio(公式Android IDE)はどちらも開発ツール企業JetBrainsが開発しました。Jetpack ComposeはAndroid専用ですが(GoogleのFlutterフレームワークとは異なり)、JetBrainsはComposeをクロスプラットフォーム化できると考えていました。Compose Multiplatformは、このフレームワークをmacOS、Linux、Windows、そしてWebに移植したものです。バージョン1.0 Alphaがリリースされました。まだ初期バージョンではありますが、JetBrainsは「開発者が安全に使用できる安定したAPIを提供している」と述べています。
JetBrainsでCompose担当リーダーを務めるNikolay Igotti氏に、IntelliJ IDEA IDEとその派生製品で既に使用されているデスクトップアプリケーション向けクロスプラットフォームJavaフレームワークがあるにもかかわらず、なぜCompose for Desktopに投資するのかを尋ねました。Igotti氏は、「これはSwingに多少の修正を加えたものです」と答えました。「SwingはJDKのデフォルトのUIフレームワークで、SwingとAWT(Abstract Windows Toolkit)がそれです。Composeは全く異なるフレームワークですが、相互運用性は提供しています。…Swingは90年代後半にリリースされたかなり古いフレームワークで、それ以来、UIに対する人々の考え方は変化してきました。」
JetBrains IDE の Compose for Desktop プロジェクト
ComposeとSwingの共通点は一つあります。それは、JavaのSWT(Standard Widget Toolkit)やMicrosoftのXamarinなど、ネイティブコントロールを使用するクロスプラットフォームフレームワークとは異なり、独自のコントロールを描画することです。Composeは、Google Chrome、Flutter、その他多くのフレームワークでも使用されているオープンソースグラフィックライブラリSkiaを使用しています。では、Composeアプリケーションはネイティブなルックアンドフィールを持たないのでしょうか?「アプリケーションのテーマ設定は開発者次第です」とIgotti氏は言います。「その点では、Flutterのような他のフレームワークと状況は似ています。」
Compose for Desktop アプリケーションは JVM(Java 仮想マシン)に依存しているのでしょうか?「JVM アプリケーションの配布は多少複雑になる可能性があることを認識しています」と Igotti 氏は語ります。「独自の Gradle プラグインがあり、これは jpackage と Jlink を使用して JVM アプリケーションからネイティブアプリケーションを作成します。Mac の場合は .dmg、Windows の場合は MSI、Linux の場合は .deb パッケージが提供されるので、JVM を意識する必要はありません。」とはいえ、Kotlin/Native コンパイラによって JVM を回避できるとはいえ、実際には内部的には JVM アプリケーションです。「これは将来、デスクトップ開発にも使用される予定です」と Igotti 氏は語ります。
デスクトップ版 Compose: スタート
ウェブアプリケーションについてはどうでしょうか?「Kotlin/JSコンパイラを使用しています」とイゴッティ氏は言います。Composeのウェブ版はデスクトップ版ほど進化しておらず、ドキュメントには「APIは最終決定されておらず、互換性を破る変更が予想される」と警告されています。さらに、ウェブ版はComposeモデルを使用していますが、APIは異なり、HTMLとCSSを使用しているため、Compose for Desktopと共有できるコードが少なくなります。
- 32,000人の開発者を対象とした大規模調査で、JavaScript、GitHub、AWSがトップに
- マイクロソフトは自社の技術を推進するために多大な努力を払ってきたが、調査によると多くの開発者が.NETの導入を逃しているようだ。
- 痛みの家:YAMLで悪態をつくなら、もっと大きな声で叫ぶべき。その苦しみには理由がある。
- JetBrainsはTeamCityをクラウドに押し込み、ビルドパイプラインにはKotlinを採用した。YAMLは「本当に面倒」だからだ。
「Compose はアプリケーションに対する異なる考え方です」とイゴッティ氏は述べた。「状態は UI にとって真実の源泉であり、UI はステートレスであり、常に状態から計算されます。この点において、Compose(Web 版)は同じプリミティブセットを共有し、状態管理も共有されています。しかし、ウィジェットの具体的なセットや、それらがどのように配置されているかといった点については、共有されていません」とイゴッティ氏は述べた。
Androidから他のプラットフォームにComposeを拡張する主な動機は何でしょうか?「Composeのターゲットユーザーは3つのグループです。1つ目は、KotlinとComposeを使用して他のプラットフォームへのデリバリーを希望するAndroid開発者です。2つ目は、『一度書けばどこでも実行できる』新しいアプリケーションを開発したいKotlin開発者です。3つ目は、KotlinやComposeに精通していないものの、魅力的なUIを作成したいという人々です。私たちは、そのような人々に簡単にそれを実現するためのツールを提供したいと考えています。」
イゴッティ氏は具体的な日程については明言を避けたが、「秋の半ば」にはベータ版をリリースし、「今年中に1.0をリリースしたい」と述べた。このプロジェクトはオープンソースであり、「21世紀においてはフレームワークに料金を請求しないのが一般的だ」とイゴッティ氏は述べ、JetBrainsのビジネスモデルはツールをベースとしていると述べた。「私たちは、欠けているソフトウェアを作りたいのです」と彼は語った。
Composeにはビジュアルデザイナーが存在しないことに注意してください。「ほとんどのベンダーはグラフィカルなUIビルダーから脱却したいと考えています」とIgotti氏は述べ、宣言型のUIとプレビューで確認する方法を優先しています。「私たちはプレビューメカニズムを提供しており、コンポーズ可能な関数に特定のアノテーションを追加すると、アプリケーションを実行せずにプレビューできます。」
ジェットブレインズは、デスクトップアプリケーションの開発者が十分なサービスを受けられていないと考えている。これは同社独自の開発者調査にも一部基づいている。「デスクトップは多くの人にとって二級市民のようなもので、ある程度の注意を払う必要があるニッチな領域のように思える。」
JetBrainsは自社ツールにComposeを採用するのでしょうか?その一つであるJetBrains Toolbox(インストール済みIDEを管理するツール)は既にComposeを採用していますが、Igotti氏は、IntelliJ IDEAのような製品の既存フレームワークをComposeに置き換えるには、既存のフレームワークが多すぎると述べています。「最も複雑で重要なコンポーネントはエディタです。20年も開発されてきたため、中期的に書き換えられる可能性は極めて低いでしょう。JetBrainsも私も、全員にComposeで開発するよう強制するつもりはありません。私たちの目標は、より優れたフレームワークを必要とする人々に、Composeを使う機会を提供することです。」
IntelliJ IDEA Community Edition と基本的なチュートリアルを使用して Compose for Desktop を簡単に見てみました。すべてが少し最先端のように感じましたが、画面に Hello World を表示することができました。
世界には本当に新たなクロスプラットフォームフレームワークが必要なのでしょうか?GoogleのFlutterは主にモバイル向けですが、現在ではデスクトップとiOSもターゲットにしています。iOSはComposeが現在サポートしていません。Flutterの言語はDartですが、StackOverflowの最新の調査によると、Dartの利用は(主にFlutterのおかげで)増加しているものの、Kotlinほど普及していません。
GitHubリポジトリには5,000以上のスターが付き、多くの問題が報告されていることからも、勢いが伺えます。開発者の皆様は多少の不具合は覚悟しておかれるでしょうが、これは活発な動きの兆候と言えるでしょう。ComposeはUI構築において独自のアプローチを採用しており、Androidでの使用を通じてこのモデルを好む開発者にとって、他のプラットフォームにも対応できる機能は歓迎されるでしょう。®