JavaとKotlinとDartを比較
JavaとKotlinと"Dart"
Kotlin は 「Kotlin Multiplatform」 で iOS も開発可能ですが、あまり盛んに使われている様子ではありません。
今回 Java と Kotlin と Dart 3つの言語を比較させていただくのですが、一体どこから切り込んでいけば分かりやすいか、、、悩みましたが、どのルートから入ってもややこしいです。
ややこしい理由の一つは、上図のように各言語、 Android 以外の開発言語としても使われています。単純に「この言語を学べば大丈夫」と言えない状況。
上の図を見れば 「Dart」 という言語が Android も iOS も Web も開発できて便利そう。現に "Dart" は Flutter という Android Studio 上で動く SDK で使用されていて、 Dart 一つの言語で Android も iOS も開発できるので "すごい" と注目を集めています。
また Dart を気にし始めると、必ずといっていいほど登場してくるのが "Fuchsia" という新しい OS の存在。 2020年 5月中旬にもリリースされる?* といわれている Android の次期 OS の "Fuchsia" は、 Java や Kotlin をサポートせず、 Dart などなどをサポート(下図参照)。
次期OSといわれる Fuchsia がサポートするプログラミング言語*
既存の Android Studio で Android アプリも iOS アプリも開発でき、 次期OS?といわれる Fuchsia にも対応できるため "Dart" は注目を集めています。
こうなってくるとどれぐらい "Dart" が利用されているか、気になるところ。参考までに GitHub の新規リポジトリ数を月別に収集してみました。
上記グラフのデータ: Googleシート
データ収集に利用した Pythonコード、 昼食の間に Python に自動集計してもらいました。
2015年1月から 2019年10月までの言語別、月別の新規リポジトリを収集し、グラフにしてみると 「Dart、 そんなにすごくないのでは...」 という印象を受けるのではないでしょうか?
現在 Dart は主に Flutter という SDK と合わせて使われているケースが多いと思うのですが、どちらかというと企業レベルで使われている印象。個人対象のチュートリアルやサンプルは少ないです。試しに MNIST という数字認識できる AIアプリのサンプルがないか Web 検索したところ、 Dart のみサンプルは見つかりませんでした。
また Flutter(Dart) に対応した TensorFlow のクラス tflite は 2019年 6月に登場したばかり。 Java に比べると開発に必要なクラスのリリースがゆっくり目な印象を受けます。
基本的には Java(Kotlin) も Flutter(Dart) も Android のネイティブ・クラス(API)には対応しているということですが、 tflite のように細かい部分では違いがあるようですね。
ただ Java に比べると "ゆっくり"な開発スピードの印象をうける Dart も、 Flutter を使えば iOS のアプリケーションも作れます。 Java 、 Dart でメリット・デメリットが浮き沈みしますので、もう少し総合的に情報を確認したいと思います。
【コメント】
Webも Android も iOS もいける Dart と Flutter ですが、どことなく JavaScript & React とも似ているような。
Dart も JavaScript も Flutter や React という SDK や ライブラリによって、各アプリケーションを作れるのですが、 API や テンプレート・デザインの対応状況が違ったり、ライブラリ自体の開発、メンテナンススピードが違ったりします。デザインについては、 Flutter がスマホの Material Theme (https://flutter.dev/docs/resources/faq#does-flutter-support-material-theming) 100%対応だったり。ただ 3D(OpenGL) はサポートしていないなど JavaScript に劣る点も。
民泊で一世を風靡した Airbnb は、 React を採用していたことで有名でしたが、 2018年に React 自体のリスクを考慮し、撤退を発表しています。開発環境や開発時期によっても、プログラミング言語やプラットフォームの環境って流動的なのかもしれないですね。
JavaとKotlinとDartをパノラマ的に比較
Java と Kotlin と Dart を比較(概要)
|
言語 |
サポート期限 |
リリース |
運営会社 |
求人 (indeed) |
需要 (クラウドワークス) |
参考書 |
サンプルアプリ数 |
コミュニティ |
チュートリアル |
必要な開発環境 |
できるもの |
言語 |
始めやすさ |
馴染みやすさ |
楽しめる |
マネタライズ |
安心感 |
+α |
|
|
Java |
2025年 (Java 1.8) |
1995年 |
Oracle社 |
43489 |
62 |
100冊以上 |
多い |
盛ん |
豊富 |
Android Studio |
Android App Web App System |
Java |
◎ |
◎ |
◎ |
手堅い |
○ |
就職・転職に活かせる |
|
|
Kotlin |
- |
2011年 |
Jetbrains社 |
2,123 |
6 |
20冊程 |
まずまず |
まずまず |
少なめ |
Android Studio |
基本 Android App |
Kotlin |
◎ |
○ |
△ |
まずまず |
○ |
Javaと100%互換性あり |
|
|
Dart |
- |
2011年 |
Google |
28 |
0 |
5 Flutter |
少ない |
少ない |
少ない |
Android Studio Flutter Java Git |
Android App iOS App Web App |
Dart |
△ |
△ |
△ |
? |
? |
新OS:Fuchsia |
|
3言語の概要、ニーズ、情報量等をまとめた表です
さて Androidアプリ開発では Dart 優勢に感じる状況ですが、上記表の様に総合的に判断した場合も、 Dart優勢でしょうか?上記表は実際に Java、 Kotlin、 Dart(Flutter) の 3つの言語それぞれを使って、Android アプリ開発をし、その上で情報収集してみた結果になります。
本稿はプログラミングをはじめようかな、はじめたばかり、という方を対象にしているつもりですが、どの言語でも学習初期の作業パターンってある程度決まっていると思います。
- 開発環境の作成
- 参考書の購入
- 簡単なプログラムやサンプルアプリを作ってみる
- サンプルアプリをいろいろ試してみる
- サンプルを元にいろいろ応用してみる
このルーティーンが上手く回れば、「プログラミング、楽しい」「アプリ開発、楽しい」「儲かりそう...」となるわけですが、ルーティーンが回らなければ "挫折" か "相当なストレス負荷" になります。
恐らく Dart は後者の方で、プログラミング初心者が Dart をはじめて、ルーティーンが上手く回る環境とは、思えません。理由は、開発環境がやや複雑なこと。
Androidアプリ開発におけるJava、Kotlin、Dartの開発環境
Java や Kotlin で Android アプリ開発を行う場合は、 Android Studio さえインストールすれば、プログラミング言語として Java や Kotlin を個別にインストールする必要はありません。すぐにアプリ開発をはじめることができます。
一方、 Dart(Flutter) は、 Android Studio のプラグインとして個別に 「Flutter」「Dart」 をインストール必要があります。そしてパソコン本体にも Flutter SDK をセットする必要が。
【Android StudioにFlutter(Dart)をセットする流れ】
- 必要なSDKのダウンロード
- PATH の設定
- flutter doctor で開発環境の確認
私だけかもしれませんが、 flutter doctor の診断結果が上手く解決できずに、半日時間を費やしました。
パソコンに上手く Flutter SDK がセットできていない様子
今多くのプログラミング言語が "開発環境" という初期ストレスを低くしている中、 Flutter(Dart) についてはそうもいかないかもしれません。つまり、 Dart(Flutter)は魅力的な言語かもしれないが、開発環境の部分で躓くかもしれない、というとこですね。
Java、Kotlin、Dartのコミュニティー
さて先程の Flutter(Dart) の開発環境で困った時、頼りになるのが "コミュニティー・サイト" ですが、各言語でどれぐらい コミュニティーの情報量に違いがあるか確認してみました。
上記グラフの Googleシート
プログラミング学習時に役立つコミュニティーサイトより統計した結果
YouTube の Java については、 Java検索結果数 - JavaScript検索結果数 とし、検索結果数の重複を回避しています。
また Dart については、 YouTube で "Dart" を検索すると、 "dart's" や "darts" などプログライング言語: Dart 以外の動画も多数抽出されてしまいます。そのため プログラミング言語 Dart としての統計があまりにもはっきりしないので、 Flutter のみの統計結果としています。
私がプログラミングやアプリ開発をする際によく使うコミュニティーサイト「STACK OVERFLOW」や「Qiita」「YouTube」「Medium」にあるストック量をチェックしてみました。その結果、圧倒的に Java に関する情報が多いことが分かります。 STACK OVERFLOW や Qiitaでは(上図上段)、 基本的な文法の Q&A やエラー対策、フレームワークに関するもの、 Androidのアプリ開発に関するもの、 人工知能系、システム系など様々な情報がストックされています。まさに歴史と汎用性がある Java ならではの情報量と言えるでしょう。このボリュームの情報量は、プログラミング初心者にとっては有り難いことで、自分が経験するであろうエラーを、 多くの Javaエンジニアが既に解決済み。エラー文を Google にコピペして調べたら、ほとんどのケースで回答文が返ってくるでしょう。
ただし、 テック系マガジンの Medium についてはどの言語も同じぐらいのボリューム。 Medium だけ Java のボリュームに偏っていない理由は分かりませんが、少なくとも Java が情報量で他の言語に負けている、ということはないことが分かりますね。
このように先程までは "機能面" で優勢だった Dart も、わからない時の助け舟となる "コミュニティー" や "情報量" は、 Java に比べると劣勢な様子。特別 Dart にしなければならない理由がないのなら、 Java がエラーハンドリングもしやすそうですね。
動画 YouTube の総本数は "Java" が多いですが、新規アップロード本数の傾向を確認すると、 2019年は Java も Kotlin も Flutter もあまり変わらない様子。
上記グラフのGoogleシート
YouTubeのデータを集めた Pythonコード
YouTubeの統計的なデータはほとんど公開されていないため、 YouTube API を使ってデータ収集しました。参考までにそのコードを下記に記します。
"""
-*- coding: utf-8 -*-
学習★YouTubeAPI_Demo.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1zzrcQjNgkCOmB_cGPNS8f-ljgXwvMdeP
Get API Key
https://console.developers.google.com
"""
api_key = "AIzaSyD4kWchtrsZkfgb8FKhm1pvHGWvE"
from apiclient.discovery import build
youtube = build("youtube","v3",developerKey=api_key)
type(youtube)
"""
カテゴリーID [リスト](https://gist.github.com/dgp/1b24bf2961521bd75d6c)
キーワード検索 Java の場合
JavaScript も拾うため正式な数字にはならない
Dart も Dart's や Darts など拾う
"""
request_java = youtube.search().list(
q="java",
part="snippet",
type="video",
videoCategoryId="27",
publishedBefore="2016-02-01T00:00:00Z",
publishedAfter="2016-01-01T00:00:00Z")
response_java = request_java.execute()
response_java
response_java.keys()
response_java["pageInfo"]
response_java["pageInfo"]["totalResults"]
java_youtube = response_java["pageInfo"]["totalResults"]
"""Java で検索したら JavaScript も拾っている"""
request_js = youtube.search().list(
q="javascript",
part="snippet",
type="video",
videoCategoryId="27",
publishedBefore="2019-11-01T00:00:00Z",
publishedAfter="2019-10-01T00:00:00Z")
response_js = request_js.execute()
print(response_js["pageInfo"]["totalResults"])
js_youtube = response_js["pageInfo"]["totalResults"]
type(js_youtube)
java_youtube = java_youtube - js_youtube
print(java_youtube)
"""日付をループすればOK"""
year = ["2016","2017","2018","2019"] """4年分は API Quotas で引っかかる 10,000/day/project"""
month = ["01","02","03","04","05","06","07","08","09","10","11","12"]
"""Java"""
def my_function():
request_java = youtube.search().list( q="java", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_java = request_java.execute()
java_youtube = response_java["pageInfo"]["totalResults"]
request_js = youtube.search().list( q="javascript", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_js = request_js.execute()
js_youtube = response_js["pageInfo"]["totalResults"]
java_youtube = java_youtube - js_youtube
print(str(y) + "." + str(i) + ": " + str(java_youtube) )
with open('YouTubeAPI_java.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow([str(y), str(i), str(java_youtube) ])
csvFile.close()
"""Kotlin & Dart"""
def my_function():
request_kotlin = youtube.search().list( q="kotlin", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_kotlin = request_kotlin.execute()
kotlin_youtube = response_kotlin["pageInfo"]["totalResults"]
request_dart = youtube.search().list( q="dart", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_dart = request_dart.execute()
dart_youtube = response_dart["pageInfo"]["totalResults"]
print("Kotlin: " + str(kotlin_youtube))
print("Dart: " + str(dart_youtube))
with open('YouTubeAPI_K&D.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow([str(y), str(i), str(kotlin_youtube), str(dart_youtube)])
csvFile.close()
"""darts & dart's"""
def my_function():
request_darts = youtube.search().list( q="darts", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_darts = request_darts.execute()
darts_youtube = response_darts["pageInfo"]["totalResults"]
request_dartss = youtube.search().list( q="dart's", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_dartss = request_dartss.execute()
dartss_youtube = response_dartss["pageInfo"]["totalResults"]
print("darts: " + str(darts_youtube))
print("dartss: " + str(dartss_youtube))
with open('YouTubeAPI_Dartss.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow([str(y), str(i), str(darts_youtube), str(dartss_youtube)])
csvFile.close()
"""Flutter"""
def my_function():
request_flutter = youtube.search().list( q="flutter", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_flutter = request_flutter.execute()
flutter_youtube = response_flutter["pageInfo"]["totalResults"]
print("Flutter: " + str(flutter_youtube))
with open('YouTubeAPI_Flutter.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow([str(y), str(i), str(flutter_youtube)])
csvFile.close()
import csv
for y in year:
i = 0
while i < 12:
if i == 11:
i = i + 1
my_publishedAfter = str(y) + "-12-01T00:00:00Z"
yy = int(y) + 1
my_publishedBefore = str(yy) + "-01-01T00:00:00Z"
my_function()
break
else:
after_month = month[i]
i = i + 1
before_month = month[i]
my_publishedAfter = y + "-" + after_month + "-01T00:00:00Z"
my_publishedBefore = y + "-" + before_month + "-01T00:00:00Z"
my_function()
動画 1本あたりの時間などは分かりませんが、一昔前のような Java の人気はなく、落ち着いてきているようにも見えます。ただ Android開発では Java の勢いが薄れているようにも感じる中、今でも新規の Java チュートリアルがアップされている現状がありますね。
JavaとKotlinの比較(バージョン編)
さてここまで確認したことを少しまとめますと、
- Dart は、 Flutter を使って Androidアプリも iOSアプリも開発できる
- Java は、 ネット上に情報がたくさんあって、困った時もなんとかなりそう
- Kotlin は、....
Dart や Java の特徴が少しずつわかり始めたのに対して、 Kotlin はコレといった特徴がまだ確認できていません。 Java の代替候補としてよく利用される Kotlin について確認してみました。一度に Java と全部比較するとわかりにくくなるため、少しずつ Kotlin の特徴に沿って確認していきたいと思います。
Javaのバージョンサポートについて
|
Android Studioでの Java |
Android Studioでの Kotlin |
Oracle(Java SE)の Java |
Javaバージョン |
1.8 |
1.8 |
1.12 |
Java1.12対応可? |
❌ |
○ |
○ |
まずは Java のバージョンサポート状況を確認。現在 Oracle社からリリースサれている Java の最新バージョンは 1.12 ですが、 Android Studio で使用される Java や Kotlin がサポートする標準の Java バージョンは少し前のもの。 Android Studio における "Java" は、 1.12 に対応できないという事態も(1.11なども❌)。
すこしややこしいのですが、 Android Studio 内で使用される "Java" は、 文法等は Oracle社 の "Java" と同じであるものの、管理面は Oracle社 の Java 1.8 と違ってきます。その証拠に Android Studio の Java環境って、 Oracle関係なしに、 Android Studio をインストールした時点で "Java" 入ってますよね。つまり動き方としては Android Studio の "Java 8" も Oracle社の "Java 8" も同じですが、 『Android Studio の Java = Oracle社の Java』 では ない ということを認識しておきましょう。利用側からすると、本当にややこしいですね。
Java 1.8 は、 Javaのバージョン。
Java 8 は Java SE(Develop Ment Kit) のバージョン。 Java 8 は、 Java 1.8 に対応したプログラムを開発できる。
Java の開発環境 Java Development Kit は、以下のように Android Studio と Oracle では違ってきます。
Java Development Kit(JDK)の違い
Android StudioのJDK |
OracleのJDK |
OpenJDK |
Oracle JDK |
なんと同じ Java を使う開発環境でも、「Oracle JDK」 と 「OpenJDK」 の 2種類があるんですね。
現在 Oracle JDK は 12 が最新で、 OpenJDK は 11 が最新。 Android Studio も OpenJDK 11 を採用してくれれば Java 1.11 に対応した "Java" を使えると思うのですが、現在は 1.8 止まり。代わりに Kotlin が Java 1.11 や 1.12 をサポート。 JDK や 各バージョン、それのサポート、たくさんの関連要素が登場してきましたので、一度表にまとめてみます。
Java開発のサポート状況
|
無料? |
サポートリミット |
Java 1.11 |
Java |
Oracle Java SE 8 |
2020/12/01まで |
2025年3月 |
❌ |
Oracle Java SE 11 |
個人や開発利用のみ無料 |
2026年 |
○ |
Android Studio |
無料 |
? |
❌ |
Kotlin |
無料 |
2023年? |
○ |
補足
・Java SE 8は、 2019年1月 パブリックアップデート終了済。そして 2020.12.01 に個人用パプリックアップデート終了予定。
その後は ライセンス所有ユーザーのみ 2025年 までサポート。
ライセンス料は、月300円〜。
・Kotlin は、 基本 Java 1.6、 1.8 に対応。 1.11、 1.12 も設定次第で対応可能。サポートリミットは、 OpenJDK 11 の期日を記載。ただし、 Kotlin が OpenJDK 11 を採用しているという情報は確認できていません。
要は、安全に新しいバージョンの Java に対応できる Android アプリを開発していくなら "Kotlin"、 新しさよりも実績やサンプル、情報量を重視というなら "Java" になるのではないでしょうか。 Oracle 純正の "Java" と Android Studio の "Java"、 Javaと100%互換性のある "Kotlin" 、この 3言語はこれからプログラミングをはじめようと考えている方にとっては、本当にややこしいですよね。
さて少し視点を変えて Kotlin の特徴を改めて確認したいと思います。
JavaとKotlinの比較(コード編)
img: Android Developers/ Kotlin
【Kotlinの特徴】
- Javaに比べて簡潔なコード
- 安全
- Javaとの統合運用
上 2つの 「Javaに比べて簡潔なコード」「安全」 と聞くと、まるで プログラミング言語 Swift と同じようなイメージをされる方もいらっしゃるのではないでしょうか?
確かに Java に比べると Kotlin は簡潔で安全です。しかし、 それはあくまで "Java" と比べた場合。 Kotlin の公式ページには、 Java に比べておよそ 40% 少ない行数でプログラムを組めると紹介されています*。実際にどんなコードか確認してみましょう。
【Kotlinで書いた Hello World】
fun main(args: Array<String>) {
println("Hello, World! Kotlin")
}
【Javaで書いた Hello World】
public class SampleCode{
public static void main(String[] args){
System.out.println("Hello World! Java");
}
}
【Swift で書いた Hello World】
print("Hello, World! Swift")
【Python で書いた Hello World】
print("Hello, World! Python")
【Dart で書いた Hello World】
void main() {
print('Hello, World! Dart');
}
Dart は JavaScript っぽいですね
さて Kotlin、 Java 以外に Swift と Python、 Dart の Hello World も書いてみましたが、 Kotlin どうでしょうか? Java に比べると確かにコードは減っていますが、 Swift や Python に比べるとコード量多いですね。つまり Kotlin のコードは、 "思ったほど簡潔ではない" かもしれないということを知っておきましょう。
"安全性" については、 Javaではスルーしてしまう null のミスコードを Kotlin の場合は、コンパイル時に発見できる、という特徴があります。しかしこの null、 Java で記述する場合も null の危険がある場合は @Nullable
などで対策することが可能、といいますか文法的に @Nullable
を使うと思います。つまり Kotlin の "安全性" は、 Kotlin だけのものではなく、 Java も対策をしているということ。
以上 2つの "簡潔"、 "安全" を考慮すると Kotlin が他の言語に比べて特別飛出して凄いわけではないということです。むしろコードをコンパイルする時の時間が Java より長い傾向で、開発モチベーションにチョット影響するかもしれません。このような事情を踏まえると、 「すぐに Java から Kotlin に変えないと...」 とならない現状があります。
JavaとKotlinとDartのプログラムコードを比較
先ほど Hello World で各言語のコードを比較しましたが、実際の開発コードも比較確認しておきましょう。 3つの言語をよりイメージできると思います。
Android Studio上のJava、Kotlin、Dart(Flutter)
|
|
|
Java |
Kotlin |
Dart(Flutter) |
画像クリックで拡大
上図のサンプルコード引用元: Java、 Kotlin、 Dart(Flutter)
Java、 Kotlin、 Dart(Flutter) それぞれでスマホ上にリスト表示をさせるプログラムを組んだ結果が上図のとおりです。レイアウトや中身の違いはありますが、コードやファイル構成、どうでしょうか? Kotlin、 Dart、 モダンなイメージがあったかもしれませんが、プログラミング初心者の方にとってはチョット難しいですよね。また Java も Kotlin も Dart(Flutter) もパッと見た目はあまり変わらないのでは....
そして Android も iOS も開発できると言われる Dart の Flutter、どうでしょうか。 Java や Kotlin に比べるとファイル構造は複雑で、ちょっと難しそう...
つまり Kotlin や Dart のイメージ的な PR に惑わされてはイケナイ、ということ。どの言語もアプリケーションを開発するのはそんなに簡単なことではありません。
しかしもし仮に、簡単にアプリを作りたい、ということが "目的" であれば、プログラミング言語からの選択ではなく、 "サンプル" から選択というのも一つの手。サンプルのアプリケーションを元に、自分なりにアレンジを加えてアプリ開発、という流れです。参考までにテトリスやオセロ、画像認識アプリのサンプル数を比較してみました。
各言語のサンプルApp数の違い
|
Tetris |
Othello |
画像認識 |
Java |
236 |
62 |
52 |
Kotlin |
13 |
3 |
3 |
Dart |
1 |
0 |
0 |
Search Url Sample: https://github.com/search?utf8=%E2%9C%93&q=Tetris+android+language%3AJava&type=Repositories&ref=advsearch&l=Java&l=
さすがに Java は歴史が長い分、サンプルアプリ数は一番多い結果に。しかし、この 2、3年で急速に発展している AI 系の MNIST という画像認識アプリも Java が優位。 Kotlin でも作れるはずの AIアプリが Java優位、これにはいくつか理由があると思いますが、 Androidのアプリ開発、全然 Java でも大丈夫、ということではないでしょうか?
私も Java で画像認識アプリ(テスト用)を作りましたが、たぶん Kotlin だったらできなかったと思います。 Java の豊富なサンプル群と豊富なエラーハンドリング情報によって、プログラミング初心者でも AIアプリの作成に成功しています。
https://play.google.com/store/apps/details?id=com.oshimamasara.tflite_vegetable
Apple社の iOS に比べて、本当に Android の開発環境って落ち着かないですよね。 iOS は Swift 一本に対して、 Android は Java と Kotlin と Dart。ちょっと嫌になっちゃうかもしれませんが、 Android の市場シェアは iOS の 3倍強あります。
img: statcounter 2014.01 - 2019.10 のシェア推移
お仕事の求人も indeed で検索すると Android 14,194件に対して、 iOS は 10,398件。 Android エンジニアの方が iOS エンジニアに比べて 1.5倍ほど需要がある事が確認できます*。
こうした状況をまとめると以下の方程式が出来上がると思います。
(魅力的な Androidアプリの市況 + 悩ましい開発環境) × 自分の思い = ....
あなたの出す答えは、 ナニ でしょうか?
私の答えは、 「とりあえず Java」 です。実際に Java だと Android のアプリ開発が割と早くできますし、豊富なテンプレート群と豊富な情報量で、安心して作ったことのないアプリにも挑戦できます。特に最近は、 「AIアプリ」 のような複合的なものを作ろうと思うと、 AI には Python、 アプリには Java と 2言語必要になってきます。クラスやモジュール、もう覚えられませんし、情報を管理できません。
そんな時、やはり Google検索に助けられますので、結果的に情報量の多い Java だと作業がはかどる結果に。 Android Studio での Java、 継続利用のリスクはありますが、 Kotlinだったら "リスク" のステージすら立てなかったと思います。まずは作って、それから Kotlin に変更、という段取りでもダメではないと思います。便利な Java -> Kotlin コンバーターというのもリリースされていますし*。
また Java ができれば、アプリ開発に留まらず、システムや Web への転身も可能。 Kotlin も Web サポートですが、実績は...。
最後に Dart(Flutter)ですが、こちらは正直プログラミング初心者には向かないと思います、難しいです。参考書やネット上の情報もまだ少ないので、あえて難易度の高いところから挑戦しなくても私はいいと思います。
長くなりましたが、 Java 、 Kotlin 、 Dart(Flutter) を以下のようにまとめます。
- Java は、プログラミング初心者向け、簡単に Androidアプリを作れる、公開できる
- Kotlin は、 Javaを知っているシニア向け、初心者ではアプリ開発を楽しみにくい
- Dart(Flutter) は、玄人向け。 JavaScript やってる方は馴染みやすそう。
「やっぱり Android には Java か...でも参考書買ったけどわからないんだよな」「Java、なんか学校で習ったような...しかし、わからん」という方、 一人で全部しようとせずプログラミング・スクールを頼ってみる、というのはどうでしょうか? CodeCamp では、プログラミング初心者向けに Javaマスターコース と アプリマスターコース の 2つを設け、さらに Java も Android も Python も HTML/CSS も学び放題というコースもあります。
ちょっと受講料はかかりますが、将来への自己投資、としてどうでしょうか? 学習を終えた後は、きっと違う世界が広がっていると思います。 「チョット興味あるかな...」という方、よろしければ 無料体験 をお試し下さい。
無料体験では、CodeCamp が提供しているオンラインレッスンの仕組みや内容を本会員さながらに体験することができます。私も試したことありますが、オンラインレッスン、一人で勉強するよりも結構おもしろいですよ。ご興味ある方は 公式ページ より確認してみて下さい。