2020年に業務を通じてAndroidアプリ開発やKotlinを学ぶ機会を得るまでは、これらの知識は全くのゼロの状態でした。
最初は心配と試行錯誤の連続ではありましたが、効率よく楽しんでキャッチアップをしながら、得られたインプットを実務内で上手に生かしながらコミットをする際のヒントや押さえておくと基本理解からある程度の応用を可能にするための、着眼点や考え方、エッセンスをできるだけ紹介する予定です。
また、始めた当初から約3年経過して、モバイルアプリ開発に向き合う際の考え方に生じたポジティブな変化に関してもお伝えできれば幸いです。
Kotlin in Action といえば言わずと知れた名著かと思います。
特に日本語訳もされていたため (現在は残念ながら絶版となってしまっていますが)、お世話になった方も多いんじゃないかと想像しています。
実は長い期間を経て、 Second Edition が 2024年 5月に発売される予定となっています。
(現在も MEAP という形で書き途中のものを読むことができます)
https://www.manning.com/books/kotlin-in-action-second-edition
このセッションでは、 当時 Kotlin in Action の初版にお世話になっていたスピーカーが、 初版と Second Edition の比較から Kotlin がどのような進化や思想の変化を遂げたのかを紹介していきます。
書籍『データ指向プログラミング』( https://www.shoeisha.co.jp/book/detail/9784798179797 )は、プログラミング言語Clojureにおいて典型的なプログラミングスタイルの根幹にある考え方を他言語でも応用できる形で抽出し紹介する試みであるということができます。
Clojureを実務や趣味で継続的に利用するとともに比較的最近Kotlinに再入門した立場から、この本で提示されている「データ指向プログラミング」というプログラミングスタイルを概説しながらKotlinらしい実践の可能性について考察します。
データ指向プログラミングの原則:
Kotlinには豊富な言語機能や高い可読性があり、テスト周辺のライブラリも充実していて、テストが書きやすい言語といえます。本セッションではこのKotlinのメリットを活かしてテスト駆動開発(以下TDD)を実践していきます。
TDDとはコードを書く前にテストを書くという、品質と開発効率向上を目指す手法です。Kotlinの機能を使いながら、実際にAndroidアプリのコードを書いていきます。また、FlowのようなKotlin機能のテスト方法についても触れます。
テストを書くことでKotlin特有の概念も理解しやすくなるため、Kotlinを始めたばかりの方も対象です。
キーワード
・Fake、MockK
・コルーチン、Flow、Turbine
・例外、Result
・sealed interface
・拡張関数
・テンプレートやAIによる自動生成、デバッグ
・Kotest
・良いテストとは
KotlinではCompose Multiplatformと呼ばれる最新の宣言型UIフレームワークを利用できます。
Compose Multiplatformを利用することで、Kotlinで容易にデスクトップアプリを開発できる環境が整っています。
本セッションはKotlinとCompose Multiplatformを利用したデスクトップアプリ開発を初めてみたい
初学者の方に向けて以下の項目に沿ってアプリ開発の進め方を解説していきます。
「structured concurrency」とは日本語にすると「構造化された並行性」と呼ばれ、非同期処理を構造化して管理する概念です。
非同期処理を正しく構造化することで、安全にサービスのパフォーマンスを向上させることができます。
Kotlin coroutinesを深く理解して、一緒にstructured concurrencyをマスターしましょう。
本セッションで話すこと
・Coroutine Contextについて
・structured concurrencyについて
・coroutinesにおけるエラーの扱いと伝搬について
・coroutinesにおけるキャンセルの扱いと伝搬について
・いくつかのユースケースを踏まえた、structured concurrencyの実装の紹介
LINEマンガアプリにおいて、重要な API である起動タブ API について、Kotlin Coroutine を前提とした並列化・最適化を行い3倍の高速化を実現したので、その紹介をさせてください。
Kotlin が提供する Null safety 等の機能のおかげで、エンジニアは設計(やりたいこと)をより明確でミスのない形でコード(実装)として記入できるようになりました。
今回、LINEマンガでは Coroutine を利用して、アプリ起動時に呼び出される重要 API を3倍以上高速化する事に成功しました。
等について紹介させて下さい。
KotlinはJavaを継承した言語処理系で有り、多くのライブラリ資産を利用できます。OR Mapper もその例外ではなく、高品質なLibraryをそのまま利用できます。
ORMが担当する部分は一般的にシステム境界として問題が出やすい部分であり、
この問題の多くは、型の問題として表れます(フィールド名や型とプログラム上の不一致)。
Kotlinで、これをもっと賢く(コードを書かずに、あるいは書いても早期に発見できるように)ならないかという疑問をもって、改めて2024年最新の有名LibraryのKotlin上の挙動を調べて見ました。
Libraryには、Kotlin Nativeを自称するものや、Java時代のものが含まれます。
Keyword
LINEマンガは2013年4月に公開されました。当初サーバーサイドはPerl言語で開発していましたが、今ではPerlを採用するメリットが少なくなりました。そこで2018年にJava言語への移管プロジェクトが立ち上がりました。
本発表ではLINEマンガのPerl to Java移行プロジェクトを中心に、移行中に見つかった課題や解決方法を紹介します。
キーワード: 「backend」 「feature flag」 「Spring Boot」 「Central Dogma」
対象者:
2024年現在、KotlinとSpring Bootは、backend開発で最も優れた選択肢の1つです。
しかし、JVMのビルドは、Opsでしばしばボトルネックになります。
また、そこにチームの拡大が加わると、並行開発のコンフリクトは指数関数的に増大します。
そこで、本セッションでは、これらを一挙に解決する
について、 LINEマンガの実例を交えて発表します。
弊社では既存の Flutter アプリケーションから、Android(Kotlin) / iOS(Swift) ネイティブアプリケーションへの移行を完了させました。
Flutter は内製アプリではなかったため、外注アプリケーションをネイティブアプリケーションとして内製化した形になります。
この内製化にはさまざまな問題が発生し、その対処にかなりの労力を要しました。
ここでは Android(Kotlin) 移行プロジェクトによって発生した問題と、その対処について発表します。
構文エラーではなくともコンパイラがエラーとして扱い、コンパイルできないコードがKotlinにはある。これはコンパイラの限界によるものである。
例えば、data class のプロパティは何個まで宣言できるだろうか?あるいは、true && true && ... と繋げられる限界は何個だろうか?
このセッションで、そんなコンパイラの限界を探求しようじゃないか。
セッションの概要は以下となる。
ショートセッションでの採択の場合は、3と4の一部を省略する。このセッションを聞くことで、Kotlinコンパイラの内部構造と限界について理解を深めることができるだろう。
Compose for Webの登場により、Kotlin/JSの注目度も高まってきました。
さて、Compose for Webの登場以前からKotlin/JSでリッチなWebフロントエンドを行う手段がありました。それがkotlin-reactです。
このセッションでは、kotlin-reactを使ってどのようにWebフロントエンド開発を行うのかを解説します。
以下トピック
Kotlinを使ってIntellij IDEA向けのプラグインを開発する手法を紹介します。
実際にプラグイン開発する手順を詳細に紹介しつつ、実装に利用するクラスの役割も含めて解説することでセッションで紹介する題材以外のプラグイン開発にも役立つようになることを目指します。
現時点で題材として扱うプラグインでは、選択した範囲の文字列に対して加工して文字列を置き換えるという動作を行い、読み取りと書き込み両方をカバーします。
Kotlin言語自体の仕様には触れないため中級者向けにしていますが詳細に説明することで誰でも理解できるように努めます。
KotlinがAndroid開発の世界にやってきて早数年。もともとJavaで書かれていたライブラリのKotlin移行も加速度的に進んでいます。しかし実際にライブラリをKotlinに書き換えようとすると、意外にも考えるべきことが多いことに気付かされます。
このセッションではJavaで書かれたライブラリをKotlinに書き換える際に考慮したい・気をつけたいポイントを実例を交えて解説します。
互換性維持やKotlinのデータクラスを公開APIにする場合の注意点、Javaコードからの呼び出しの配慮など、今まさにKotlinへの書き換えを検討している開発者はもちろん、すでにKotlinのライブラリをメンテナンスしている開発者の方にも改善のヒントになるかもしれません。
より開発者フレンドリーなライブラリを作っていきませんか?
KotlinはJetBrains社によって2011年にそのコンセプトが公開されてから今日に至るまで、幾つものバージョンアップを重ねてきました。
バージョン毎に公開されるリリースノートは、当時どのような課題があり、Kotlinがそれをどう解決したかを読み解くことができる非常に面白い歴史的資料です。
ユーザ目線でリリースノートを眺めることで、Kotlinの言語仕様の変遷を追うと共に、Kotlinが重要視している思想や、Kotlinはどのような言語であると言えるのか、一次情報であるリリースノートを読むときのtipsなどについてお話しします。
以下、扱うトピック
・リリースノートを読むことの楽しさ
・Pragmaticである、とは
・実際に当時のリリースノートを眺めてみる
Gradleのプラグインとして開発されたAmperというプロジェクトを構成するためのツールが登場しました。
Amperを使うことでスムーズにプロジェクトを構成することができ、さらに開発者体験も向上します。
本セッションはAmperに関する知見を共有します。
概要は以下です。
トピックは以下を想定しています。
普段から自動テストを書いていく上で、以下のような悩みを持っている方は多いのではないでしょうか。
・実行するたびに結果が変わってしまう
・1箇所だけ修正したはずなのに、色々なところのテストが落ちる
・そもそもどれくらいテストを書くべきなのか分からない
など
このセッションではKotlin以外の言語でも使えるテスト設計全般的な話と、それをKotlinで具体的にどのように実現するのかをお話しします。
テストコードを負債にしないためのテクニックや考え方をお伝えできればと思います。
具体的なテーマの例
・観点が明確なテストを書こう
・不要なテストを減らそう
・モックの使い過ぎには注意
※ 取り扱わないテーマ
・E2Eテストに関すること
・実際にデータベースと接続して行う単体、結合テスト
KotlinにはJavaのように検査例外・非検査例外の区別はしません。
Java以外にも、他の言語にはエラーのハンドリングを強要させるような仕組みがありますが、Kotlinにはありません。
そのため、Kotlinにおける例外のthrowはすべて副作用となります。
このことから、Kotlinにおけるエラーハンドリングは多少工夫する必要があります。
そのための一つのテクニックとして、関数の戻り値にResult型という成功値もしくは失敗値を表現する型を利用する方法があります。
今回は、いくつかのライブラリの比較をしつつ、現場導入の際に考慮した事項と、実際にプロダクトへ導入した効果についてお話します。
Minecraftは世界で最も有名なサンドボックスゲームの一つであり、その魅力を拡張するのがマルチプレイサーバー上で動くプラグインです。
本セッションでは、Kotlinを利用してJava版Minecraftサーバーのためのプラグイン開発について取り上げます。
Kotlin初学者でも追いやすいよう、プラグイン開発の基礎から段階的にご紹介します。
Kotlinを学びたい方、またはMinecraftプラグイン開発に興味のある開発者にとって有意義に学べる内容を目指しています。