既存AndroidプロジェクトのKotlin化の取り組み
前回のブログで紹介したように、EAP Androidアプリでは半年ほど前から開発言語にKotlinを導入しています。今回は既存プロジェクトのKotlin化について紹介します。
なぜKotlin?
Kotlinには以下のメリットがあります。
- Null安全などの安定性を向上する仕組み
- 簡潔な記述力
- Javaとの相互運用性
まず安定性の向上についてですが、Kotlinでは言語自体でnull参照を回避することが考慮されているため、コンパイル時に多くのエラーを防止するようになっています。アプリがクラッシュする原因の多くはnull参照なので、この仕組みは大いに安定性の向上に寄与してくれます。
簡潔な記述力について、Kotlinでは文法が洗練されているので、getter/setterなどの冗長な記述をすることなくアプリを開発できます。
加えてラムダ式やコレクション操作、スコープ関数などの、かゆいところに手が届く仕組みが言語仕様として提供されています。
Javaとの相互運用性が保証されていることも重要な点です。Javaで書かれている既存ライブラリをKotlinから利用できること、逆に新規に開発したライブラリをJavaからも利用できること、さらにJavaとKotlinが混在しても問題ないことがそれぞれ保証されています。これによって、段階的にKotlinへと移行することが可能になります。
以上のような利点から、EAP AndroidアプリにおいてもKotlinの導入に至りました。
デメリットは?
とはいえ、以下のようなデメリットも考えられます。
- 学習コスト
- ビルド時間の増大
学習コストについては、Kotlinの文法がJavaからかけ離れているわけではないので、理解するにはそれほど問題とはなりません。ただし、スコープ関数やコレクション操作によって書き方の自由度が高まったことで書き方の統一性がなくなる場合があります。この場合はプロジェクトに合った一定のルール決めが必要になってくるかもしれません。
型推論などから、Kotlinでは必然的にJavaよりもコンパイラが処理することが多くなるでビルド時間は増大しますが、感覚的にはほどんど気にならない程度でしたので、こちらも大きな問題ではありません。
Kotlin導入の方針
というわけで、Kotlinを導入することになりましたが、導入に際して以下の方針で作業しました。
方針:
- 新規のコードはKotlinで書く
— 特に問題がない限り、新しいコードはKotlinで書く - 既存のコードはKotlinで書き換える
— ただし、JavaからKotlinへの機械的な変換ではなく、kotlin化と同時にリファクタリングを行う
Kotlinを導入する環境は整えられているとはいえ、一気にKotlinに移行するのは大変です。なので、まずは新規のコードはKotlinで書くこととしました。
次に、上記で述べたKotlinのメリットを享受するため、既存のコードもKotlinへと書き換えることにします。Android Studioの変換機能を利用すればある程度自動的に書き換えることが出来ますが、必ずしも最適な文法に変換してくれないことや、古いコードを見直す良い期間でもあるので一つずつKotlinへと書き換えことにしました。
進捗
以下が現在の書き換え状況です。
これまでに8割ほどKotlinに書き換えることができました。ただし、導入当初のコードを見返すと、Java的な書き方になっていてKotlinらしい書き方ができていないものもあるので、定期的な見直しが必要かもしれません。
Androidエンジニアです。最近は技術系ポッドキャストをよく聞いています。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境