Shoichi Matsuda's diary

このブログは移転しました。 https://shoma2da.net/ が新しいブログです。

なぜJava以外のプログラミング言語でAndroidアプリを作ろうとするのか

こにふぁーさんのツイッターでこんな発言を発見しました。

自分もたまに「Java以外のプログラミング言語でAndroidアプリを作る」ということをするクチです。
(Androidに限らずいろんな環境でいろんな言語を使おうしますね。)

具体的には、最近だとKotlin瞬間タイマーというアプリを作ったりしてます。

なぜ自分が他の言語で書こうとするのかを今ぱっと思いついた範囲でまとめてみます。

新しい言語を学ぶ機会として"ついでに"アプリを作っている

真っ先に思いついたのはこちらです。
一番の目的は「新しい言語を学ぶこと」で、その手段として「アプリ(などなど)を作りきってみる」という順ですね。

プログラマーのバイブルのひとつ「達人プログラマー」にも「毎年一つは新しい言語を学べ」といったことが書かれているのでこれを実践している感じですね。

達人プログラマー―システム開発の職人から名匠への道

達人プログラマー―システム開発の職人から名匠への道

  • 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本
  • 購入: 42人 クリック: 1,099回
  • この商品を含むブログ (350件) を見る

実際にやってみると言語によってのなじみやすさや記述方法の違い、パラダイムの違いを感じられてかなり楽しいです。

自慢気に記事を書いたり他の人と話したい

次に思いつくとしたらこちらです。ゲスいww

あるプラットフォームにおいて標準以外の言語を使えるのは(当然ですが)プログラマー全体に対してかなりの少数派です。
となると他のそこに優位性が出てきます。

勉強会やQiita、Twitterでもその言語に関する話題で先導できて、ちょっとだけ嬉しい気持ちになります。

しかし良いことばかりではなく…

単純に一度別の言語で作るだけならとっても楽しくて良いんですが、やっぱり辛い面もあります。
大きくは以下の様な点です。

  • テスト/インスペクション/ドキュメンテーションなどに少しでも踏み込むと情報が少なすぎる
  • 時間を開けるとまともに開発できなくなる
  • 他の人と作業しづらい
テスト/インスペクション/ドキュメンテーションなどに少しでも踏み込むと情報が少なすぎる

「ただ書いてただ動かす」だけなら困ることは少ないですが、アプリを一つ作るなどある程度の実用レベルで使おうとするとそうはいきません。

単体テストや結合テスト、システムテストは基本的には必須ですよね。
加えてFindbugs/PMD/Checkstyle/Lintなどの静的解析や、JavaDoc的なドキュメント生成もしたいです。

ところがこのレベル(そんなに高くないですが…)の話になってくると一気に情報量が少なくなるのも事実です。
公式ドキュメントなどに沿ってすんなり動けば良いのですが、よくわからない依存関係に陥ったりして解決までかなりの工数を要することもあります。
Javaを使ってればすぐできるのに…といったことも多く心が折れそうになります。

継続的インテグレーション入門

継続的インテグレーション入門

  • 作者: ポール・M・デュバル,スティーブ・M・マティアス,アンドリュー・グローバー,大塚庸史,丸山大輔,岡本裕二,亀村圭助
  • 出版社/メーカー: 日経BP社
  • 発売日: 2009/08/06
  • メディア: 単行本
  • 購入: 18人 クリック: 388回
  • この商品を含むブログ (37件) を見る

時間を開けるとまともに開発できなくなる

初回リリースまでなどは大丈夫なんですが、数週間〜数ヶ月空くだけで再度作業するのはかなり難しくなります。

理由としては「言語仕様を忘れる」と「ツールの対応状況が変わって動かすまでが大変になったりする」という2点です。

人間なので「言語仕様を忘れる」はしょうがないですよねw しばらく書いていないとすぐに細かい記述方法などは忘れますw

「ツールの対応状況が変わって動かすまでが大変になったりする」はAndroid StudioのバージョンやKotlinプラグインのバージョンの更新などです。(依存ライブラリの状況も変わったりしますね)
少しでも時間が空くとこのあたりを整理したうえで開発作業に入らなければいけなくなってしまって大変です。

他の人と作業しづらい

一人で作業するときは良いんですが、他の人ともソースを共有して一緒に開発しようとすると大変です。
当然ほとんどの人にはイチから言語仕様や独自環境などを把握してもらわないといけないですよね…

工数対効果などで絶対にその言語にする方が良い!と自信があれば良いですが、ほぼそこまでの自信を持てることはないのが実情です。

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

まとめ

僕個人は基本的には「他の言語を学ぶため」にしばしば標準以外のプログラミング言語で開発をします。
この動きを通して他の言語での実用レベルの開発などを体感できてかなり楽しいです。

ただし実際の運用では難しい点がたくさんあるのも認識しているので、目的が「きちんとプロダクトを作る」であれば標準の言語を使うのかなーと思います。
(言い換えると記述が簡単やパラダイムが良いものだから、などの理由だけではプロダクトで標準以外の言語を使うことはほとんどないのかなーと思ってます。全体のバランスですね。)

以上です。