エンジニアとしてある程度のキャリアを積んだときに多くの方が出会うであろう、「Clean Architecture 達人に学ぶソフトウェアの構造と設計」で語られる設計手法について、Kotlin Multiplatformを使用してアプリを実装する際にどのように利用できるのかを考えていきます。
MVC、MVVMといったアプリ開発でも用いられる設計手法と比較して語られることが多くありますが、実際は方法の違いはあれど、思想に多くの共通点があります。
本セッションは実際に用いられる手法をベースに、クリーンアーキテクチャとして語られる概念がどのようなものであるのかを、KMPのコードベースでお話ししていきます。
2020年に業務を通じてAndroidアプリ開発やKotlinを学ぶ機会を得るまでは、これらの知識は全くのゼロの状態でした。
最初は心配と試行錯誤の連続ではありましたが、効率よく楽しんでキャッチアップをしながら、得られたインプットを実務内で上手に生かしながらコミットをする際のヒントや押さえておくと基本理解からある程度の応用を可能にするための、着眼点や考え方、エッセンスをできるだけ紹介する予定です。
また、始めた当初から約3年経過して、モバイルアプリ開発に向き合う際の考え方に生じたポジティブな変化に関してもお伝えできれば幸いです。
プッシュ通知は、ユーザーとのコミュニケーションを強化し、アプリケーションの価値を高める重要な機能です。
このセッションでは、モバイルアプリとサーバーサイドの両方をKotlinで実装し、プッシュ通知についての基本的なプロセスを紹介します。
Androidでのプッシュ通知の設定方法から始め、Kotlinを用いたシンプルなサーバーサイドの通知送信の例までをステップバイステップで説明します。
またFirebase Cloud Messaging (FCM) の基本的な使用法を解説し、実際の通知の設定、テスト、デバッグ方法についても紹介します。
このセッションは、プッシュ通知をこれから学び始める方に最適です。
株式会社Voicyでは、かつてモバイルアプリの新規機能開発時にKotlin Multiplatform(KMP)を導入することに挑戦しました。
実際にAndroid版で使用するまで開発を進めましたが、最終的にiOS版では導入せず、最終的にAndroid版からもKMPのコードを取り除くに至っています。
本セッションではこの判断の経緯をお話ししながら、今導入するならどうするか?の視点でも考えつつ、お聞きの方がKMPの導入を検討する上で参考にしていただきたい項目をお伝えしていきます。
セッション内要:
・Kotlin Multiplatformの導入に至った経緯
・運用方法とその課題、iOS版への導入見送りの理由
・機能を保ちながら、Android版のKotlin Multiplatformコードを取り除く方法
・これから導入を検討するには何を考えるか?
Kotlin in Action といえば言わずと知れた名著かと思います。
特に日本語訳もされていたため (現在は残念ながら絶版となってしまっていますが)、お世話になった方も多いんじゃないかと想像しています。
実は長い期間を経て、 Second Edition が 2024年 5月に発売される予定となっています。
(現在も MEAP という形で書き途中のものを読むことができます)
https://www.manning.com/books/kotlin-in-action-second-edition
このセッションでは、 当時 Kotlin in Action の初版にお世話になっていたスピーカーが、 初版と Second Edition の比較から Kotlin がどのような進化や思想の変化を遂げたのかを紹介していきます。
Kotlinはドメイン知識をコードとして表現するのに優れた言語だ!
実際そう感じた事例として既存の複雑なコードをKotlinの機能を用いてDSL的に宣言的に表現することができました。
その結果、開発者にコードの意図が伝わりやすくなるだけでなく重複処理を省くことや無駄な処理を省くことによってプロダクトの機能の大幅は速度改善に寄与できました。
このセッションではKotlin DSLを用いたサーバーサイド開発の改善について実例に沿った内容でご紹介していきます。
Kotlin/NativeはKotlinの文法でバイナリが吐き出せるという夢のような技術ですが、実際の実装に当たっては辛く厳しい道のりが待ち受けています。
本セッションでは、Kotlin/JVMを使用してサーバサイド開発を行っている開発者を対象に、Kotlin/Nativeのサーバサイド分野での可能性を以下のような内容から探ります。
・VMが不要になることの利点
・C言語ライブラリとの連携方法
・Kotlin/Nativeにおける制限
・SSL通信の統合
書籍『データ指向プログラミング』( https://www.shoeisha.co.jp/book/detail/9784798179797 )は、プログラミング言語Clojureにおいて典型的なプログラミングスタイルの根幹にある考え方を他言語でも応用できる形で抽出し紹介する試みであるということができます。
Clojureを実務や趣味で継続的に利用するとともに比較的最近Kotlinに再入門した立場から、この本で提示されている「データ指向プログラミング」というプログラミングスタイルを概説しながらKotlinらしい実践の可能性について考察します。
データ指向プログラミングの原則:
アプリケーション開発をしていて、何か素敵なアイディアが浮かんだら、ぜひそれをライブラリとして公開してみましょう。
一方で、ライブラリの運用には思ったより手間暇がかかります。
デプロイのフローやドキュメントの更新等、自動化できるものはできる限り自動化しましょう。
このセッションでは、私が実際にいくつかのライブラリを公開した経験をもとに、ライブラリを公開する方法から、それを楽に運用するためのコツについて紹介します。
K2コンパイラによりKotlinコンパイラへの注目度が増してきています。しかし、業務を始めたばかりの状態でKotlinコンパイラ全般に対する理解を深めるのは中々に大変な道のりです。
この発表では、KSPのコード生成の仕組みを追いながら、Kotlinコンパイラを理解する入り口に立つことを目標としています。
私は、株式会社フライル (以下弊社) で働いています。弊社はプロダクトマネジメントやVoC分析を効率化するSaaSです。
弊社はバックエンドを全てKotlinで実装しています。
弊社はこれまで、LLMを含む機械学習を使用した機能を10個リリースしました。
これらの機能には、単にLLMを呼び出すだけの機能もあれば、クラスタリングアルゴリズムを使用する機能もあります。
これらの機能を開発する際、技術的な論点として、「Pythonで実装するべきか」があります。
Pythonを選択するメリットとして、クラスタリングなどの機械学習処理が非常に充実している一方、
デメリットとして、PythonとKotlinの連携が必要になったり、そもそもPythonに慣れているエンジニアが少ない、などがあります。
このセッションでは、KotlinとPythonの分界点について、自社での経験を共有します。
Kotlinでよりアドバンスな抽象化を記述する際には、ジェネリックスの使い方をしっかりと把握しておく必要があります。
本セッションではジェネリクスの強力な機能を広く深く探求し、型パラメーター、変性、そしてreified genericsを含む、Kotlinの型システムを強化する要素を詳細に説明します。
Kotlinには豊富な言語機能や高い可読性があり、テスト周辺のライブラリも充実していて、テストが書きやすい言語といえます。本セッションではこのKotlinのメリットを活かしてテスト駆動開発(以下TDD)を実践していきます。
TDDとはコードを書く前にテストを書くという、品質と開発効率向上を目指す手法です。Kotlinの機能を使いながら、実際にAndroidアプリのコードを書いていきます。また、FlowのようなKotlin機能のテスト方法についても触れます。
テストを書くことでKotlin特有の概念も理解しやすくなるため、Kotlinを始めたばかりの方も対象です。
キーワード
・Fake、MockK
・コルーチン、Flow、Turbine
・例外、Result
・sealed interface
・拡張関数
・テンプレートやAIによる自動生成、デバッグ
・Kotest
・良いテストとは
Konsistは、Kotlin言語用に特化されたstructural linterです。共通のコーディング規約の順守を保証することで、コードの可読性と保守性を向上させることを目的としています。
また、Konsist APIはJUnit4、JUnit5、Kotestなどの主要なテストフレームワークともスムーズな統合ができ、KMPにも対応可能です。
このセッションでは主に
の流れでKonsistを一緒に理解していき、Konsistの魅了を紹介していきます!
KotlinではCompose Multiplatformと呼ばれる最新の宣言型UIフレームワークを利用できます。
Compose Multiplatformを利用することで、Kotlinで容易にデスクトップアプリを開発できる環境が整っています。
本セッションはKotlinとCompose Multiplatformを利用したデスクトップアプリ開発を初めてみたい
初学者の方に向けて以下の項目に沿ってアプリ開発の進め方を解説していきます。
「structured concurrency」とは日本語にすると「構造化された並行性」と呼ばれ、非同期処理を構造化して管理する概念です。
非同期処理を正しく構造化することで、安全にサービスのパフォーマンスを向上させることができます。
Kotlin coroutinesを深く理解して、一緒にstructured concurrencyをマスターしましょう。
本セッションで話すこと
・Coroutine Contextについて
・structured concurrencyについて
・coroutinesにおけるエラーの扱いと伝搬について
・coroutinesにおけるキャンセルの扱いと伝搬について
・いくつかのユースケースを踏まえた、structured concurrencyの実装の紹介
この発表では、Kotlinのコードでドメイン上の意図や意味を表現するテクニックとして、DSL(のような)手法を紹介します。
ビジネスロジックをDSLとして実装することでコードの意図や構造を明確に表現でき、可読性や保守性が向上します。一方で、設計には常にトレードオフがあるため上手に設計判断を行う必要があります。
発表ではKotlinの言語機能を活用したコード例を示しながら、設計の考え方やトレードオフについて話します。
さらに株式会社ヘンリーでの事例も紹介し、DSLを活用する際の留意点を共有することで、聴講者がこのような設計を行う際の指針を得られることを目指します。
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
DetektはKotlinの静的解析ツールであり、コード品質を担保するためのルールを提供しています。
しかし、開発をしていると、既存のルールだけではカバーしきれない場面も出てくるのではないでしょうか?
(例えば、Modifier.Paddingの引数の順番をstart/top/end/bottomに統一するなど)
このセッションでは、Detektのカスタムルールを作成する方法に焦点を当て、具体的な手順を示します。
現状の発表の内容の構想は以下のとおりです