Kotlin正式リリース後に追加されたKotlin Standard LibraryのAPIを、登壇者の独断と偏見でピックアップして紹介します。
2016年2月にKotlin 1.0が正式リリースされ、約8年が経ちました。正式リリース前から、趣味に、仕事にKotlinを使っていた方も多いのではないでしょうか?
一方でKotlin正式リリースから長い月日が経ち
という方もいるのではないでしょうか?
本セッションではそのような方をメインターゲットに、Kotlin正式リリース後に追加されたStandard LibraryのAPIを、登壇者の独断と偏見でピックアップして紹介します。
CameraXは、Android端末のカメラを操作する際に強力なライブラリである。
しかし、メモリやGPUのリソースが限られている端末や、サポートされていない外部カメラを搭載した端末でCameraXのライブラリを使う際には、注意が必要となる。
本セッションでは、AndroidOSを搭載したデジタルサイネージを用い、正しく広告を投影しているかを遠隔で撮影して確認できる保守システムを例に挙げ、メモリやGPUなどの制限のある環境下で外部カメラを制御する方法について解説を行う。
また、MLKitの顔認識をバックグラウンドで行う方法を例に挙げ、GPUの負荷を抑えた画像認識能方法についても説明する。GPUの負荷を抑えるため、撮影時以外は解像度を落として顔認識を行う方法や、メモリ内に画像を1枚のみ格納し、解析が終わった際に確実にメモリを解放することでメモリーリークを防ぐといった方法について紹介する。
Gradleのプラグインとして開発されたAmperというプロジェクトを構成するためのツールが登場しました。
Amperを使うことでスムーズにプロジェクトを構成することができ、さらに開発者体験も向上します。
本セッションはAmperに関する知見を共有します。
概要は以下です。
トピックは以下を想定しています。
対象
セッションの目標
この一年で生成AI・LLMを取り巻く環境は大きく変化し、今までAIに取り組んでいなかった企業・プロダクトも生成AI・LLMを用いた開発に取り組む例が増えた事を実感します。
しかし、世の中の事例はどうしてもPython環境が多く、KotlinでのLLMアプリケーション・機能開発に関しての情報は広く共有されていません。
例えば、Kotlin(JVM)環境でOpenAI APIにアクセスするためのライブラリはあるのでしょうか?どうしてもPythonでないと出来ないことは何でしょう?
本セッションでは、サーバーサイド言語としてKotlinを採用している企業・プロダクトでLLMに取り組んだ一年の体験談・悩みも交えながら、
KotlinでLLMアプリケーション・機能開発を取り巻く環境や、実際にどのような構成・考え方で取り組んだかについて紹介します。
Kotlinでdata class宣言を行うとequalsやhashCode, componentNなど、便利なメソッドが自動的に生成されます。
自動生成メソッドの中にcopyというメソッドがありますが、このメソッドは非常に便利な反面、利用シーンを間違えると不整合データが簡単に作れてしまうなどデメリットも併せ持っています。
今回は、copyメソッドとの付き合い方と、アーキテクチャテストでの解決方法についてお話します。
現在SpringBootとKotlinで開発しています。
以前SpringBootの2系 -> 3系にアップデートをした際、周辺ライブラリの見直しも一緒に行いました。
実際悪戦苦闘した結果と、今改めてKotlin + SpringBootで開発するならどういうミドルウェアの選定を行うか?
について自分の考えをお話します。
普段から自動テストを書いていく上で、以下のような悩みを持っている方は多いのではないでしょうか。
・実行するたびに結果が変わってしまう
・1箇所だけ修正したはずなのに、色々なところのテストが落ちる
・そもそもどれくらいテストを書くべきなのか分からない
など
このセッションではKotlin以外の言語でも使えるテスト設計全般的な話と、それをKotlinで具体的にどのように実現するのかをお話しします。
テストコードを負債にしないためのテクニックや考え方をお伝えできればと思います。
具体的なテーマの例
・観点が明確なテストを書こう
・不要なテストを減らそう
・モックの使い過ぎには注意
※ 取り扱わないテーマ
・E2Eテストに関すること
・実際にデータベースと接続して行う単体、結合テスト
KotlinにはJavaのように検査例外・非検査例外の区別はしません。
Java以外にも、他の言語にはエラーのハンドリングを強要させるような仕組みがありますが、Kotlinにはありません。
そのため、Kotlinにおける例外のthrowはすべて副作用となります。
このことから、Kotlinにおけるエラーハンドリングは多少工夫する必要があります。
そのための一つのテクニックとして、関数の戻り値にResult型という成功値もしくは失敗値を表現する型を利用する方法があります。
今回は、いくつかのライブラリの比較をしつつ、現場導入の際に考慮した事項と、実際にプロダクトへ導入した効果についてお話します。
Minecraftは世界で最も有名なサンドボックスゲームの一つであり、その魅力を拡張するのがマルチプレイサーバー上で動くプラグインです。
本セッションでは、Kotlinを利用してJava版Minecraftサーバーのためのプラグイン開発について取り上げます。
Kotlin初学者でも追いやすいよう、プラグイン開発の基礎から段階的にご紹介します。
Kotlinを学びたい方、またはMinecraftプラグイン開発に興味のある開発者にとって有意義に学べる内容を目指しています。
Kotlinのアプリにおいて、非同期処理をアプリ上で工夫して行っていました。
それを別アプリ・インフラでの非同期処理に移行していくまでの思考過程・技術選定・DDDとの相性についてお話します。
OSSのコードを読んで挙動を理解してみたいと思いつつ、膨大なソースコードを前にしてどこから始めていいかわからず二の足を踏んでいる方は多いのではないでしょうか。
今回、そんな方のために、ChatGPT/Claude等のLLM系AIチャットと対話を進めながら、とっかかりを提案してもらい、 KotlinのOSSコード(Ktorを取り上げる予定)を読み進めてみるやり方をご紹介します。始めて読むソースコードでも、LLM系AIチャットがあなたと伴走してくれます!
アプリケーション開発をする上で認可というものは切っても切り離せない関係にあります。
そのユーザーがどのような操作ができて、何ができないのかを定義し、実装することは当たり前のようにやられていると思います。
しかし、認可処理の実装には様々なパターンがあり、適切なパターンを選択するのは困難です。
このセッションでは認可のベストプラクティスとDDDの文脈における認可の取り扱いについて説明します。
また、ケースに合わせた実装パターンについて、Kotlinでの実装例も合わせてご紹介致します。
私たちベンチャー企業がサーバーサイド言語にKotlinを採用するメリットについて、「ビジネスモデル」「採用」「育成」の観点からお話します。
このセッションは、私たちならではの視点を多分に盛り込んだものとなる予定です。
私は言語選定と組織の戦略は密接に関わるものだと思っています。
まず、私たちのビジネスモデルを簡単にご紹介します。
そのうえで、そのビジネスモデルを実現するためにはどんな人を採用して育成していきたいかをお話します。
その中でKotlinが有用であると思える点についてお伝えします。
もし他の組織であればどの言語を選択していたか、など別の言語についても少しだけ言及したいと考えています。
興味を持っていただけると嬉しいです。
よろしくお願いいたします。
DSL(Domain Specific Language)とは、特定の問題領域に特化して設計された言語のことです。
Kotlinの言語機能を活用すると、開発者は自身のニーズに合わせたDSLを容易に作成できます。
これによりプログラミングの生産性とコードの品質を大きく向上させることができます。
このセッションでは、HTMLをテーマにゼロからDSLを構築します。
より具体的には、ラムダ式、レシーバ付きラムダ、拡張関数を用いて、型安全なHTMLビルダーを作成します。
Kotlin初心者でもすぐに取り組めるDSLの基本から応用までを実践します。
Kotlinには豊富な言語表現があります。
例えば状態を保持するのにもenumとsealed interface(class)などがあります。
比較表現にも==と===、classにつけるキーワードにもdataやinner、value、inlineなどいくつかあります。
しかし、それぞれの特徴を理解しておかないと意図しない表現になったり、もっと工夫できる書き方があるのに気づかなかったりします。
そこで使用事例の違いから内部実装の違い、Kotlinにしかない機能に関してはバイトコードから分かるコードサイズの違いまで様々な観点から見ていきます。
本セッションでは、Kotlinにいくつか存在する似た言語機能を時間の許す限りピックアップします。
そして、聞いていただいた方が違いを理解することで自信を持ってコーディングできる状態を目指します。
※ 取り上げる予定の言語機能についてはスライド参照
Kotlin DSLが新規Gradle Buildsのデフォルトになって1年が経ちました。Kotlinで書かれたGradle Pluginも見る機会が増えているかと思います。
今後ますますのkotlnizeが進むと思われるGradleでKotlin DSLの力を発揮するためのTipsをお送りします。
本セッションでは下記のことを取り扱います。
・Kotlin DSLとGroovy DSL
・Kotlin DSLの強みと弱み
・Groovy DSLからの移行
・Kotlinで表現する便利Gradle Tasks
・Java(Kotlin) Project, Android ProjectそれぞれでのKotlin DSLの活かし方
OkioはSquareが開発しているjava.ioとjava.nioの取り回しを楽にしてくれるラッパーライブラリです。言わずと知れたOkHttpやMoshiのベースにも使用されているライブラリです。
Kotlinで書き直された2.0.0よりMPP(KMP)対応が行われ、3.0.0でファイルシステム周りの機能が追加されました。
KMP(android, iOS)プロジェクトで実際に使用した私がありがたいと感じた部分についてお話しします。
本セッションでは下記のことを取り扱います。
・標準ライブラリが強力なKotlinでなぜOkioを見直すのか
・KMP実装にIO周辺実装での諸課題
・KMP実装においてもOkioがもたらすメリット
・Okioを使用する際の注意するべき前提
Java言語にvalue objectsを導入することを目指す「Project Valhalla」が進行中です。これにより、値ベースのプログラミングスタイルを実現し、同時に実行時性能を大幅に向上させられると期待されています。Project Valhallaの影響はJVM言語でもあるKotlinに対しても多大であり、将来の我々のプログラミングスタイルにも変革をもたらすでしょう。
このセッションでは、Project ValhallaとそれがKotlin言語にもたらす影響について、以下のようなトピックで話す予定です。