Kotlinでdata class宣言を行うとequalsやhashCode, componentNなど、便利なメソッドが自動的に生成されます。
自動生成メソッドの中にcopyというメソッドがありますが、このメソッドは非常に便利な反面、利用シーンを間違えると不整合データが簡単に作れてしまうなどデメリットも併せ持っています。
今回は、copyメソッドとの付き合い方と、アーキテクチャテストでの解決方法についてお話します。
現在SpringBootとKotlinで開発しています。
以前SpringBootの2系 -> 3系にアップデートをした際、周辺ライブラリの見直しも一緒に行いました。
実際悪戦苦闘した結果と、今改めてKotlin + SpringBootで開発するならどういうミドルウェアの選定を行うか?
について自分の考えをお話します。
私たちベンチャー企業がサーバーサイド言語にKotlinを採用するメリットについて、「ビジネスモデル」「採用」「育成」の観点からお話します。
このセッションは、私たちならではの視点を多分に盛り込んだものとなる予定です。
私は言語選定と組織の戦略は密接に関わるものだと思っています。
まず、私たちのビジネスモデルを簡単にご紹介します。
そのうえで、そのビジネスモデルを実現するためにはどんな人を採用して育成していきたいかをお話します。
その中でKotlinが有用であると思える点についてお伝えします。
もし他の組織であればどの言語を選択していたか、など別の言語についても少しだけ言及したいと考えています。
興味を持っていただけると嬉しいです。
よろしくお願いいたします。
DSL(Domain Specific Language)とは、特定の問題領域に特化して設計された言語のことです。
Kotlinの言語機能を活用すると、開発者は自身のニーズに合わせたDSLを容易に作成できます。
これによりプログラミングの生産性とコードの品質を大きく向上させることができます。
このセッションでは、HTMLをテーマにゼロからDSLを構築します。
より具体的には、ラムダ式、レシーバ付きラムダ、拡張関数を用いて、型安全なHTMLビルダーを作成します。
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を使用する際の注意するべき前提
JetpackComposeを使ったアプリケーション開発はAndroidは勿論のこと、iOSやデスクトップアプリ、Webアプリも開発可能となっています。
その中唯一Web向けのものは以前はDom操作を行う形で実現されていました。
2022年頃に新しくskiaを利用した描画方式が登場し、Webでも他のプラットフォームと同様の仕組みでのUI描画が可能になりました。
このセッションではそんなCompose for Webがどんな仕組みで動いているかを簡単に見つつ、小規模なWebアプリ構築のTipsを段階を追って紹介します。
モバイルアプリ開発は日々進化している状況ですが、Android/iOSの仕様差異、いつまでも定まらないバックエンドなど未だ現場には課題が山積みです。
私はKotlinFest2019でKMPと出会い、その可能性に衝撃を受けました。これまで抱えてきた様々な課題を解決できるのではないか、と。
その後、社内でKMP導入に向けた共有会や技術調査を実施して、新規サービスの開発にてKMPの導入を実現化し、無事リリースまで成し遂げることができました。
本セッションでは、そんな私の体験談を交えながら、
Property Based Testing(PBT)は、関数のテストにランダムに生成された入力値を用いることで、エッジケースの見落としを発見しやすくするテスト手法です。
そして、KotlinでPBTを行うための強力なツールとしてKotestがあります。KotestのPBT機能はKotest本体のテストフレームワークの機能とは独立しているため、JUnitなど他のフレームワークを利用していても簡単に導入が可能です。
このセッションでは、PBTのメリットについてJUnit + Kotestを利用したテストコードの例を用いて説明しつつ、独自型のランダム値生成などの利用機会が多そうな機能も紹介します。
また、私はPBTを行うことがクラスや関数の設計の堅牢さに対して良いフィードバックがあると実感しており、それを示す例ついても触れたいと考えています。
よろしくお願いします。
KotlinではCoroutineを用いることで、非同期処理を手続き的に記述できます。
Coroutineの利用例として「ネットワークアクセスをwithContext(Dispatchers.IO)でラップすることでIOスレッドで行う」という例が紹介されることが多いです。
そのため、「withContextはスレッド切り替え時に使う」という理解をされている方は多いと思います。
しかし、実際にはwithContextはCoroutineContextを切り替えるために利用するものであり、スレッド切り替え以外にもさまざまな活用法があります。
本セッションでは、CoroutineContextについて触れたうえで、筆者のチームがwithContextをどのような場面で活用しているかを紹介したいと思います。
runCatching は、ブロックに定義された関数の実行が成功したかどうかを簡単にチェックし、例外をより安全に扱うことができる Kotlin の関数です。それゆえ、全ての Throwable を catch することが可能です。
一方、Kotlin では全ての例外クラスが Throwable を継承しており、チェックされる例外(checked exceptions)を持たない設計思想になっています。この思想の背景には、主に大規模なソフトウェアプロジェクトでの例外をチェックすることが生産性の低下やコード品質の向上に寄与しないといったことがあります。
では、どのようなケースでは例外をチェックするべきでしょうか?
このセッションでは様々な例外の具体的ケースをもとに、実践的な例外の扱い方を紹介します。是非この機会に runCatching の依存から脱却しましょう!
Kotlinの静的コード解析ツールのdetektについて紹介します。
detektは強力な解析ツールとなっており、コードスタイル・パフォーマンス・複雑性・潜在的なバグなどを検知してくれます。
コードを健全に保つのに非常に役に立つツールになっています。
検知してくれるルールを紹介しつつ、基本的な設定方法や使い方などを説明していきます。
また、ルールのカスタマイズ方法や、既存プロジェクトへの導入方法なども説明します。
クリエイティブコーディングを行うソフトウェアにおいてはProcessingが広く知られています。 OPENRNDR ( https://openrndr.org/ ) はKotlinで書かれたクリエイティブコーディングのライブラリです。
私はこれまでに、中高生や大学生にプログラミングの講義をする機会に恵まれてきましたが、その経験からKotlinとOPENRNDRがたのしくコーディングするために優れたものであると感じています。
本セッションのトークでは、皆さんが今すぐOPENRNDRを使ってクリエイティブコーディングを始めたくなるような紹介を試みたいと思います。
皆さんFlowを理解しながら使っていますか? 私はかつてはずっと雰囲気で使っていました。
数あるオペレータを使いこなしていますか? 私はcollectLatestくらいしか使っていませんでした。
このセッションではFlowに関する短いクイズの出題とその解答、解説を行い、その中でFlowの重要な概念に関して説明していきます。
クイズは実際の開発現場でのユースケースを想定した内容となっています。
一緒にFlowと仲良くなりましょう。
登壇者はkotlin-csvというKotlin製のOSSを自作し、5年運用してきました。
https://github.com/doyaaaaaken/kotlin-csv
その経験を振り返り、感想をシェアするセッションです。
なお2年前のKotlin Fest 2022にて、kotlin-csvをどのようにして普及させたのかについてはすでに語っています。
https://speakerdeck.com/doyaaaaaken/kotlinzhi-zi-zuo-ossnopu-ji-zhan-lue-kotlin-csvnoshi-li-woyuan-ni-at-kotlin-fest-2022
今年のセッションでは具体よりも、自身が5年の経験の中で得た知見について語ります。
楽しんでもらいかつ「自身もチャレンジしてみよう」と思ってもらえるセッションになるよう頑張ります。
Spring Boot × Kotlin でバックエンドの開発をする時に悩むのがアーキテクチャだと思います。
世の中には様々なアーキテクチャがありますが、サービス立ち上げの時からアーキテクチャに凝りすぎると開発の速度が落ちてしまいかねません。
かと言って、何も決まりがない状態ではだんだんとカオスになってしまうと思います。
このセッションでは、Kotlin × GraphQL (DGS) × Spring Boot で CQRS アーキテクチャを実現し、責務を分離すべき部分はしっかりと、そうでもない部分は柔らかい状態を残しておく例をご紹介します。
併せて、Kotlin で CQRS と一緒にイベントソーシングを実現する例と、その際に便利な Sealed class の利用例についてご紹介します。
ArchUnit (https://www.archunit.org/) というツールをご存知でしょうか?
Java、Kotlin のプロジェクトに対してパッケージの依存関係から付与すべきアノテーションやクラス名など様々なコーディングルールを直感的に記述することができるフレームワークとなっています。
これによって暗黙知になりがちでコードレビューなどで担保しているようなコーディングルールを読みやすく管理でき、CI などで自動的に検知することが可能になります。
本セッションでは、「明日からプロダクトに ArchUnit を導入して暗黙的なコーディングルールを自動的にチェックできる」を目指し、以下に触れる予定です。
このセッションでは、Kotlin Notebook について解説します。
Kotlin Notebook は データサイエンスの領域などで使われている Jupyter Notebook のための、 Kotlin カーネル を 使用できる IntelliJ IDEA用の プラグインです。 Community Edition では使えず、 Ultimate で使えます。
対話型でKotlinのコードをすぐに動かすことができ、コードとその実行結果に、テキストや画像を1つのドキュメントにまとめることができます。
本セッションではツールの紹介から始め、基本的な使い方、さまざまな利用用途について触れます。
データサイエンス分野はもちろんのこと、普段アプリケーションコードを書いている人にとっても有用なユースケースが多くあるのでそういった点についても説明します。
Jetpack ComposeのMultiplatform対応が安定版でリリースされ、1つのコードベースからAndroid/iOS/デスクトップなど複数のプラットフォームにネイティブUIを提供できるようになりました。
本セッションでは、Compose Multiplatformを用いてAndroid/iOSのアプリケーションを開発する流れを自身の経験を交えて初学者の方にもわかりやすく解説します。
あなたが既にKotlinに興味があったり触れたことがあるなら、Compose Multiplatformフレームワークを用いることで効率的にマルチプラットフォームアプリを構築できます。
マルチプラットフォームに興味はあるものの、何から始めたら良いか不安を感じている方も、本セッションを通してCompose Multiplatformへの第一歩を踏み出して頂けたら幸いです。