Clojureを使用してネイティブAndroidアプリを構築する
Androidプラットフォーム上でのClojureの開発はここ数年で著しく進歩しており、開発者はSwiftKeyのClarityキーボードなどの本格的 ここでは、Androidプラットフォーム上でClojureをサポートするツールの現在の状態を確認します。
歴史的に、Android上のClojureは起動が遅く、標準の上流のClojureを使用する場合、Javaの4-10倍長くなる可能性があります。 この問題は、Clojureのコンパイラを最適化して、よりコンパクトでロードの速いバイトコードを生成するClojureフォークであるSkummetによって解決されています。 最適化コンパイラを提供するだけでなく、Skummetには、前者によって構築されたClojureのランタイムの最適化されたバージョンも含まれています。Skummetの作成者Alex Yakushevによると、
Skummetは最大限の互換性を確保することを目指しており、Vars
を直接参照することに依存するコードには問題がある可能性があ
全体として、Skummetは単純なbenchmarkアプリの最初の起動時にロード時間を4倍短縮し、APKサイズとヒープ使用量の両方を2倍縮小することができます。 SwiftKeyのAdam ClementsとBen Leavettによると、Skummetを使用することで、Clarity Keyboardの読み込み時間を約1.5〜2秒に保つことができ、さらなる改善が可能です。
Android上でのClojure開発のための他の便利なツールは、Clojure-Android Initiativeの傘下のプロジェクトの下でパックされており、次のものが含まれています:
- レイン=ドロイド: Clojure-Androidプロジェクトのビルドツールとして機能し、リソースのパッケージ化、APKファイルの作成、署名などのプロセスを扱うLeiningenプラグインです。
- Neko:AndroidのJava APIの一部をラップして、Clojureからより慣用的に使用できるようにするツールキット。
Android用Nightwebアプリの著者であるZach Oakes氏は、Clojureは簡潔なイディオムを有効にすることでアプリのコードベースを”驚くほど”小さくすることができ、プログラマが非同期タスクを実行しやすくすることでアプリの応答性を向上させることができると述べている。
SwiftKeyのエンジニアによると、Clojureを使用してAndroidアプリを構築することは、アプリの設計に大きな影響を与える可能性があります。 具体的には、Clarity Keyboardのケースでは、不変のデータ構造の使用と相まって、ユーザーのアクションを簡単に保存して”再生”できる完全な”イベント駆動型”設計を採用す 不変のデータを使用することで、高度にモジュール化されたアプリを構築し、すべての操作をデフォルトで非同期にすることもできました。