グーグルが昨年、Androidアプリのプログラミング言語としてJavaの代替として承認したKotlinは、すでにオープンソースのAndroidアプリの約12%に導入されており、コードの品質向上に貢献している。
フランスのヴァランシエンヌ大学に所属するコンピューター科学者のブルーノ・ゴイス・マテウス氏とマティアス・マルティネス氏は、2017年末にGoogleが同社のIDEであるAndroid Studio 3.0で開発されたAndroidアプリの17%以上にKotlinが浸透していると発表したことを指摘した。
Kotlinは、JVM、Android、JavaScript(ES5.1へのトランスパイル)、そしてネイティブプラットフォーム(LLVM経由)を対象としたオープンソースの静的型付けプログラミング言語です。Kotlinの開発元であるJetBrainsは、KotlinはJavaよりも簡潔で型安全であると主張しています。Kotlinで書かれたアプリは、Javaで書かれたアプリよりも約40%少ないコード量になると推定されています。コード行数が減れば、理論上はバグも少なくなると期待できます。
プレプリントサービス ArXiv を通じて配布された論文「Kotlin 言語で書かれた Android アプリケーションの品質に関する実証的研究」の中で、Mateus 氏と Martinez 氏は、オープンソースの F-Droid リポジトリから 925 個のアプリを収集し、それぞれのアプリの Kotlin コードの量を測定し、コードの品質の指標として「臭い」についてコードを分析した方法について説明しています。
「臭い」は、「アンチパターン」よりも、より直感的な表現です。アンチパターンとは、不適切なコーディングパターンを指す専門用語です。Javaでは、Blob(別名God Objects)がよく引用されるアンチパターンの代表例です。
コード専門家たちは、F-Droid データセット内の 925 個のアプリケーションのうち 109 個に、2017 年から 2018 年の間に少なくとも 1 つのバージョンが Kotlin を使用して記述されていることを発見しました。
Kotlin対応アプリの最新バージョン(利用可能な場合は複数のバージョンを調査)のうち、35%はKotlinのみで記述されていました。また、Kotlinアプリの約68%では、後続のバージョンでKotlinコードが増加し、Javaコードが減少しました。
コード品質の嗅覚テストでは、研究者らは「分析した Android アプリケーション内のコードの臭いを検出する」ツールキットである Paprika を活用しました。
彼らの結論は、Java は臭い (もっと優しく言えば、Kotlin はバラの香りがする) ということです。
それでもJavaは存続する
彼らは Paprika を使用して、10 種類の異なる匂いをテストしました。そのうち 4 種類はオブジェクト指向 (OO) コードに関連し、6 種類は Android に関連しています。
オブジェクト指向のアンチパターンには、Blob Class (BLOB)、Swiss Army Knife (SAK)、Long Method (LM)、Complex Class (CC) などが含まれます。Android のアンチパターンには、Heavy Broadcast Receiver (HBR)、Heavy AsyncTask (HAS)、Heavy Service Start (HSS)、Init OnDraw (IOD)、No Low Memory Resolver (NLMR)、UI Overdraw (UIO) などが含まれます。
Android開発者の間でKotlinがJavaを駆逐
続きを読む
OO パターンのうち、LM、CC、BLOB の 4 つのうち 3 つは、Kotlin アプリと Java アプリの両方で少なくとも 92% に出現し、OO 臭は Kotlin アプリでより一般的です。
しかし、コンピューター科学者たちは、Java アプリ全体では 10 種類の匂いのうち 4 種類の匂いの影響を受けるエンティティが Kotlin よりも多いことを発見しました。Kotlin では、吐き気を催すような匂いを誘発するアプリは 10 個中 1 個だけでした。
「Androidアプリケーション、つまりKotlinコードを含む最初のバージョンにKotlinを導入することによる直接的な影響に関しては、Kotlinの採用により少なくとも50パーセントのアプリケーションの品質が向上することがわかった」と論文では述べている。
ちなみに、別の研究者グループ(Sarra Habchi、Geoffrey Hecht、Romain Rouvoy、Naouel Moha)は昨年、iOS アプリと Android アプリの両方を対象に同様のスニフ テストを実施しました。
Objective-CアプリとSwiftアプリを比較したところ、iOSアプリはプログラミング言語に関わらず、悪臭の発生率はほぼ同じであるものの、Androidアプリよりも悪臭の度合いが低いことが分かりました。「結果はAndroidアプリの方がiOSアプリよりも異常値が多いことを明確に示しているが、これは必ずしもAndroidアプリが品質の点で世界的に最悪であることを意味するわけではない」と結論付けています。®