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の活かし方
Java言語にvalue objectsを導入することを目指す「Project Valhalla」が進行中です。これにより、値ベースのプログラミングスタイルを実現し、同時に実行時性能を大幅に向上させられると期待されています。Project Valhallaの影響はJVM言語でもあるKotlinに対しても多大であり、将来の我々のプログラミングスタイルにも変革をもたらすでしょう。
このセッションでは、Project ValhallaとそれがKotlin言語にもたらす影響について、以下のようなトピックで話す予定です。
JetpackComposeを使ったアプリケーション開発はAndroidは勿論のこと、iOSやデスクトップアプリ、Webアプリも開発可能となっています。
その中唯一Web向けのものは以前はDom操作を行う形で実現されていました。
2022年頃に新しくskiaを利用した描画方式が登場し、Webでも他のプラットフォームと同様の仕組みでのUI描画が可能になりました。
このセッションではそんなCompose for Webがどんな仕組みで動いているかを簡単に見つつ、小規模なWebアプリ構築のTipsを段階を追って紹介します。
コマンドライン環境を便利にするためにシェルスクリプトを書きますが、慣れ親しんだ言語ではないので毎回検索しながら試行錯誤を経て実装していませんか?また、時間が経過したあとにスクリプトを修正しようと思ったときに、「あれ…これなにしてるんだっけ」と途方に暮れた経験はありませんか?もしKotlinでスクリプトを書くことができれば、もっとスピーディかつ保守性も高くやりたいことを実現できるのではないでしょうか。
そんな望みをKotlin Scriptingが解決します。Kotlin Scriptingを使えば、Kotlinをあたかもスクリプト言語のように扱うことができます。このセッションでは、そんなKotlin Scriptingの1からの使い方から、日常で使うために立ちはだかるハードルのクリアを仕方を解説し、誰しも明日からKotlin Scriptingを使っていけるような解説をします。
モバイルアプリ開発は日々進化している状況ですが、Android/iOSの仕様差異、いつまでも定まらないバックエンドなど未だ現場には課題が山積みです。
私はKotlinFest2019でKMPと出会い、その可能性に衝撃を受けました。これまで抱えてきた様々な課題を解決できるのではないか、と。
その後、社内でKMP導入に向けた共有会や技術調査を実施して、新規サービスの開発にてKMPの導入を実現化し、無事リリースまで成し遂げることができました。
本セッションでは、そんな私の体験談を交えながら、
Property Based Testing(PBT)は、関数のテストにランダムに生成された入力値を用いることで、エッジケースの見落としを発見しやすくするテスト手法です。
そして、KotlinでPBTを行うための強力なツールとしてKotestがあります。KotestのPBT機能はKotest本体のテストフレームワークの機能とは独立しているため、JUnitなど他のフレームワークを利用していても簡単に導入が可能です。
このセッションでは、PBTのメリットについてJUnit + Kotestを利用したテストコードの例を用いて説明しつつ、独自型のランダム値生成などの利用機会が多そうな機能も紹介します。
また、私はPBTを行うことがクラスや関数の設計の堅牢さに対して良いフィードバックがあると実感しており、それを示す例ついても触れたいと考えています。
よろしくお願いします。
皆さんは、Kotlin のコードをレビューするとき、どのような点に気をつけていますか?このセッションでは、レビュー依頼を受けたことを想定し、どのようなコメントを書くべきかについて、リアルタイムデモを交えて説明します。
レビューでは、以下の内容に触れる予定です。
また、Kotlin Fest 2022 の "可読性から見たKotlinの言語機能 -「使いたい」の、その先へ。" のプレゼンテーションや "読みやすいコードの書き方" の資料 (https://gist.github.com/munetoshi/65a1b563fb2c271f328c121a4ac63571) をレビューに活用する例も取り上げます。
runCatching は、ブロックに定義された関数の実行が成功したかどうかを簡単にチェックし、例外をより安全に扱うことができる Kotlin の関数です。それゆえ、全ての Throwable を catch することが可能です。
一方、Kotlin では全ての例外クラスが Throwable を継承しており、チェックされる例外(checked exceptions)を持たない設計思想になっています。この思想の背景には、主に大規模なソフトウェアプロジェクトでの例外をチェックすることが生産性の低下やコード品質の向上に寄与しないといったことがあります。
では、どのようなケースでは例外をチェックするべきでしょうか?
このセッションでは様々な例外の具体的ケースをもとに、実践的な例外の扱い方を紹介します。是非この機会に runCatching の依存から脱却しましょう!
どんなプロジェクトも、コード量の増加や関わるメンバーの増加により、設計のルールが守りにくくなり、アーキテクチャ上の「無謀な負債」が懸念事項となります。
Javaの土地勘がある方なら、ArchUnitというツールが思い浮かぶかもしれません。実は、ArchUnitの思想を汲んだKotlinネイティブのツール、Konsistというライブラリが存在します。
本セッションでは以下の内容を掘り下げ、Konsistの価値を理解していただき、技術選定の際の重要な参考材料として提供できればと思います。
Kotlin Multiplatform(KMP)を使うとjvmやAndroid Runtime上だけでなく、IOS上や、javascript、PCのバイナリとしてもコードを実行することができます。
これによって各プラットフォームでKotlinの言語機能の恩恵を受けることができ、プラットフォーム間のソースコードの共通化や、クロスプラットフォームのアプリケーションの開発をすることができます。
このセッションではKMPとそうでないアプリケーションとの違いや、KMPならではの特徴、実際に開発して得たノウハウについて、技術選定からKMPならではのアーキテクチャ事情、実装パターンまでを含めて紹介します。
KMPでの開発を始めたい人、始めたての人がKMPのことをより深く知り、KMPでの開発をしていく手助けになるセッションにしたいと思います。
Kotlinによる開発の難しさの一つにエラーハンドリングの難しさが挙げられます。
KotlinではJavaと違い検査例外がないため関数の呼び元でエラーハンドリングを強制できません。また、どのエラーに対応するべきかは中身の実装を見る必要があります。
この問題の解決策として、Railway Oriented Programmingとその実装としてOSS kotlin-resultを紹介します。
Railway Oriented Programmingでは正常ケースと異常ケースの2つのレールを型で表現しながら開発する手法です。
異常ケースが型で表現されるためエラーハンドリングのミスがコンパイラーフェーズで気付けるようになります。
具体的には関数型プログラミングにおけるResultやEitherという成功値かエラー値かのどちらか一方の値を持ったデータ構造を使ってエラーハンドリングを行います。
このセッションでは、オブジェクト指向をベースにした設計、理解容易性、命名、コードスタイル、機能要件、ドキュメント、テストといった7つの観点で行うコードレビューの手法を紹介します。
特に設計と理解容易性は、プロダクトの品質や保守性に関連する重要な観点です。そのため、コードレビューの観点で以下のデザインパターンをアンチパターンから堅牢なKotlinコードに改善する手法を紹介します。
・完全コンストラクタ
・バリューオブジェクト
・ストラテジパターン
・ポリシー
・ファーストクラスコレクション
・スプラウトクラス
また、コードレビューを支援するツールであるPR-AgentやCodeRabbitを活用したAIコードレビューの手法やレビューを効率化するプロンプト戦術を紹介します。参加者は、効果的なコードレビュー戦略を学び、チームの技術力向上に効果的かつ実践的な手法を得ることができるでしょう。
Kotlinの静的コード解析ツールのdetektについて紹介します。
detektは強力な解析ツールとなっており、コードスタイル・パフォーマンス・複雑性・潜在的なバグなどを検知してくれます。
コードを健全に保つのに非常に役に立つツールになっています。
検知してくれるルールを紹介しつつ、基本的な設定方法や使い方などを説明していきます。
また、ルールのカスタマイズ方法や、既存プロジェクトへの導入方法なども説明します。
「単体テストの考え方/使い方」(原題: Unit Testing Principles, Practices, and Patterns)という本があります。
単なるテストの書き方にとどまらず、価値の高いソフトウェアを構築するためのエッセンスが凝縮された名著です。
本セッションでは本書の内容をかいつまんで紹介しつつ、Kotlinにおいてどのようにそれを実践していけばいいのか、具体的な事例を交えながらそのベストプラクティスを探っていきます。
・単体テストは書いたことある or 日常的に書いてるけど、結局「いいテスト」ってなんなのかよくわからない
・単体テスト・統合テスト・E2Eテストってどう組み合わせればいいの?
・なんか気づいたらいつもテストコードの修正してる
という方々、ぜひご参加ください。