関数型まつり(#fp_matsuri)の登壇資料です。
こんにちは。株式会社ヘンリーでエンジニアをしているagatanです。 私たちが開発する電子カルテ・医事会計システム「Henry」は、非常に巨大な単一のプロダクトです。そして、その性質上、明確なドメイン境界を見出すことが難しいという特性を持っています。この「巨大で複雑なプロダクトを、いかにして組織的に開発し続けるか」という問いに開発チームは長年向き合ってきました。 最近、この大きな問いに対する新たな一手として、かつて2つのgRPCサービスとして分割されていたバックエンドを、段階的に「1プロセスのモジュラーモノリス」へと移行させるプロジェクトが進捗しています。 今回は、その移行の過程についてお話しします。 第一歩: モノレポ化 移行への大きな第一歩目は、2年前に遡ります。当時、第一歩として踏み切った「モノレポ化」については、過去のブログでも紹介されています。 dev.henry.jp この記事
株式会社ヘンリーでエンジニアをしている okbee です。 直近は製品のフルリニューアルを行なっており、詳細は省きますが、私もこの開発に参加しています。社内では「コスト連携」と呼ばれる機能の開発を主に担当していました。 「コスト連携」をざっくりと説明するならば、患者に対して医師が作成した指示(オーダー)を元にして、実際の金額を算出するためのワークフローです。詳細はコンテキストで紹介します。 さて、今回は「コスト連携」の実装を通して感じた反省を元に、より良い設計のヒントとして「コンパイルエラーを活用した手順不足の検知」を考えていきます。 コンテキスト コスト連携には臨床・会計の2つの大きなコンテキストが背景にあります。 患者に対して医師が作成する指示(以降はオーダーと表記)は臨床と呼ばれるコンテキストで作成されます。ちょうど、皆さんがクリニックなどで診察を受ける際に医師が薬を処方したり、注射
Kotlin言語を開発するJetBrainsは、Javaの代表的なフレームワークとして知られるSpring Frameworkの開発チームと戦略的提携を発表しました。 この提携により、Kotlinによるバックエンド開発がSpringによって強化されることになります。 JetBrains and Spring are starting a strategic partnership to make the Kotlin developer experience with Spring even better! Read here for more: https://t.co/2sfRy9iMiq — SpringCentral (@springcentral) May 22, 2025 KotlinはJavaVM上で実装された言語として登場し、2017年にAndroidの正式な開発言語となっ
先日より開催されていたKotlinConfで、新しいエラーハンドリング「Rich Errors」についての言及がありました。従来のように例外を使用するのではなく、エラーを値として扱えるようにする新機能です。聴き逃しているだけかもしれませんが、まだリリース予定などは立っておらず、機能を設計中の段階なのではないかと思われます。 私はもともとKotlinのエラーハンドリングはなかなか悩ましいなと思っていた節があり、ずいぶん前からKEEP上での議論を追うなどしてキャッチアップしていました。最近同僚ともエラーハンドリングに関する決め事をあれこれするために議論しており、私自身はエラーハンドリングに対する関心が高いです。 私の所感としては、Kotlinの言語設計によく合ったエラーハンドリングの方式が採用されそうで非常に楽しみにしています。最近の議論ではともすればモナドであるとか、Result<T, E>
こんにちは、Android アプリエンジニアの id:kk__777 です。『Inside GigaViewer for Apps』連載8回目は、出版社向けマンガビューワのアプリ版である「GigaViewer for Apps」(以下 GigaApps)のVRTから静的解析まで、Androidのテストについてお話しします。 GigaApps UnitTestの歴史と現在 概要 アーキテクチャとUnitTestの基本方針 使用しているツール モッキングライブラリ コルーチンディスパッチャの差し替え アサーション(Truth + Expect) テストツールの変遷 UIテストの取り組み VRT(Visual Regression Testing)の導入と運用 概要 Compose Preview を使った VRT GigaApps特有の難しさ UIプラグインによるPreviewの難しさ どう対
5月14日、海外の技術メディアAIMが「Why Developers are Quietly Quitting Golang」と題した記事を公開した。この記事では、Go開発者が同言語を静かに離れつつあるという現状について述べられている。以下に、その内容を簡単に紹介する。 Go に今逆風が吹いている 記事の冒頭では、フィンテック系スタートアップのエンジニア Yash Batra が半年で Go から Kotlin へ全面移行した体験を取り上げている。Batra は「 私たちはツールを作るためにツールを作っていた 」と述べ、Go の最小主義がプロダクト開発の速度を著しく低下させたと回顧する。 また、長年 Google で Go を率いてきた Ian Lance Taylor が 2025 年 4 月に退職したことも、コミュニティに衝撃を与えた。Taylor は「Go は“単なる一言語”の段階に
はじめに こんにちは。レシピ事業部でアルバイト中の松本 (@matsumo0922) です。クックパッドでは以前からモバイルアプリケーション向けのロギングライブラリである Puree を公開していましたが、今回新しく Kotlin Multiplatform1 を用いた KMP 版をリリースしました。また、このライブラリは既に iOS、 Android 両方のクックパッドアプリで動作しており、クックパッド初の Kotlin Multiplatform 導入事例ということで、難しかった点などをライブラリの紹介と合わせてご紹介します。 Pureeとは サービスのログを収集する際に、Web アプリケーションであればサーバー側でログを収集することが可能ですが、モバイルアプリケーションは画面の操作はアプリ側でコントロールされるため、アプリがログを収集して送信する必要があります。アプリの操作は、ユーザ
はじめに こんにちは、株式会社スマートラウンドでチーフテックリードをしているtsukakei1012です。 ついに、JetBrains製のAIコーディングエージェントであるJunieがGenerally Availableになりました🎉 弊社では、EAP(Early Access Program)の頃から開発チーム全体で導入・活用していることもあり、既にいくつかの知見が蓄積されています。 この記事では、新たにJunieを導入しよう・してみたいと考えている方に向けた参考資料になればいいと思い、書きましたのでぜひご参考にしてみてください! (ちなみに料金体系などの違いは下の記事によくまとまっています!) ちょっとした宣伝 弊社は創業期からKtorを活用したサーバーサイドKotlinでプロダクト開発を行っており、Server-Side Kotlin Meetup(以下、SSKMと呼びます。)の
4月8日、海外のテクノロジーメディアInfoWorldが「Kotlin, Swift, and Ruby losing popularity – Tiobe index」と題した記事を公開した。この記事では、プログラミング言語Kotlin、Swift、RubyがTiobe指数において順位を下げ、人気が低下している状況について紹介されている。 4月8日、海外のテクノロジーメディアInfoWorldが「Kotlin, Swift, and Ruby losing popularity – Tiobe index」と題した記事を公開した。この記事では、プログラミング言語Kotlin、Swift、RubyがTiobe指数において順位を下げ、人気が低下している状況について紹介されている。 Tiobe指数とは Tiobe Programming Community Indexは、検索エンジンのヒット数
はじめに 皆さん!初めまして! 楽楽請求新卒エンジニアの kaihatsuda です。 本記事では、Kotlin のテストフレームワーク Kotest に使われている Kotlin の特徴的な記法や技術を紐解いていきます! (本記事は Kotest の 使い方解説 ではなく、その背後にある Kotlin の技術を理解することに焦点を当てていますので、ご了承ください。) 私たちが開発する 楽楽請求 では、サーバーサイドの実装に Kotlin を採用しています。テストコードの記述も開発サイクルに欠かせない重要な工程の一部として位置づけられており、品質を担保するための必須要素になっています。特に、テストコードの 簡潔さ や 可読性の高さ は、効率的な開発において非常に重要です。 楽楽請求では、単体テストを記述するために Kotest を採用しています。私自身、学生時代に単体テストを書く経験がほと
はじめに 「明日からきみは Java ね」って言われたとき、これくらい知っていれば大丈夫だろう内容をまとめました。 この記事は初心者エンジニアで Java 系に触れているひとのフォローアップや、Java 系以外の実務経験ならあるというひとへの読み物的なまとめです。 文法解説や設計論、ツール紹介などはありません。 項目は多いですが、ひとつひとつは軽くまとめてあります。 「必要に応じて詳細を調べられる」という入り口のところまでさくさくと紹介します。 この記事の内容を覚える必要はありませんし、最初の最初はあまり理解できなくても大丈夫です。 必要になったとき「そういえばそんなこと聞いたような」くらいに思えれば、きっと普段のお仕事や気持ちがちょっとらくになるはずです。 コンパイルと実行 暗記して自分の手でできるようになる必要はありませんが、大前提として知っておきましょう。 javac コマンドと j
klibsを眺めていたところ面白そうなものを見つけたので試してみた。 sqldelight.github.io これが結構面白い。リポジトリのAboutに「Generates typesafe Kotlin APIs from SQL」とあって「ORM?」と思ったけど、どうもちょっと違う気がする*1。ORMはオブジェクトを定義して、オブジェクトを操作することでSQLを扱う。が、SQLDelightは逆で、SQLを元に型安全なコードを自動生成するというアプローチを取っている。正しく表現できてるかアレだけど、簡単に違いを表にしてみる。 特徴 SQLDelight 典型的なORM SQL操作 SQLを直接記述し、それを元に型安全なコードを生成 SQLを抽象化してオブジェクトとして操作 型安全性 SQLを元にオブジェクトを定義する。オブジェクトの作成はSQLDelightが自動で定義してくれる。
Dispatchers.Unconfined is one of kotlinx.coroutines’ built in CoroutineDispatchers. It’s different from other built in dispatchers as it’s not backed by a thread pool or other asynchronous primitive. Instead, Dispatchers.Unconfined is hardcoded to never change threads when entering its context (this is called “dispatching”). It’s pretty easy to verify this from its (simplified) implementation: obj
毎回忘れがちなiOSとAndroidのストアURLを知る方法まとめ SNSやLP(ランディングページ)、関連WebサイトなどでアプリのリリースをPRのため、AppStoreとGooglePlayストアそれぞれのダウンロードページへのリンクを貼ることがある。Flutter開発でiOS/Android同時リリースの機会では同時に調べる必要がある。 iOSは、AppStoreConnectのアプリ情報の「Apple ID」 Androidは、プロジェクト作成時に設定した「Bundle ID」が対応。android/app/main/AndroidManifest.xml のandroid:nameプロパティか、android/app/build.gradle のapplicationIdに記載されている。 https://itunes.apple.com/jp/app/id[アプリのAppleI
最初に違和感を感じたのが、以下のスクリーンショットにある「級」という字です。 初級、中級、上級という単語で使用していますが、よく見ると「級」の糸へんの下の縦棒部分が、点になっていることがわかります。 習字で行書体を書くときのような形です。 iOSではこのような表示にはならず、問題なく縦棒になっています。 現在、Androidのシステムフォントは、Googleによって開発された「Roboto」か「Noto Sans CJK」です。 Flutterに限らず、Androidアプリの開発においてフォントファミリーを指定しなかった場合は、Androidの端末によってどちらかのフォントがデフォルトフォントとして適用されます。 なお、手元にあるAndroid端末は「Google Pixel 6a」です。 どうやらデフォルトフォントは「Noto Sans CJK」になっているようです。 さて、ではどうして
ここ数年で『関数型ドメインモデリング』という書籍や、『Functional and Reactive Domain Modeling』といった書籍を読んだ経験から、今業務で取り組んでいるKotlinではどう表現できるのかに興味がありました。年末年始に少しまとまった時間が取れたので、実際に実装してみました。今回は、その過程でどのような知見を得られたかを、主には自分の理解のためにまとめておきたいと思います。 関数型ドメインモデリング ドメイン駆動設計とF#でソフトウェアの複雑さに立ち向かおう (アスキードワンゴ) 作者:Scott Wlaschin,猪股 健太郎ドワンゴAmazon github.com 先に書いておきますが、長いです。目次をご覧になって、興味のある場所をかいつまんでお読みください。 免責事項 お題 技術スタック 設計 全体的な設計 Kotlinの使用に関するもの データ型の定
const obj = {a:0, b:1}; const { a, b } = obj; // これは以下のものと同様です // const a = obj.a; // const b = obj.b; class Data(val firstName: String, val lastName: String, val age: Int, val sex: Int){ operator fun component1() = firstName operator fun component2() = lastName operator fun component3() = age operator fun component4() = sex }
はじめに TRIAL&RetailAI Advent Calendar 2024 の 10日目の記事です。 昨日は@fujihara_hideyukiさんの『flutter_genでアセット管理してみた』 という記事でした。 個人開発でflutterアプリを作っているのですが、私自身もassetsに画像をたくさん入れて「何で画像が表示されんの?」となり、typoに気付いた事があります。 もっと早く教(略 自己紹介 Trialの基盤システム部に所属しています。 夏頃まではRetail AIにいまして、転籍して今に至ります。 12/8に宮崎でフルマラソンに参加してきました。 過去珍しいぐらい寒く(開始気温6℃)、最初のほうは走ってる人がグラつくぐらい風が強かったです。 Quarkus 去年のアドベントカレンダーでも扱ったのですが、自分の部署ではQuarkus(Kotlin)を使っています。 普
この記事は、Money Forward Engineering Advent Calendar 2024 12/4 の投稿です。 12/3 は VTRyo さんで SRE Kaigi 2025に 「一人から始めたSREチーム3年間の歩み -求められるスキルの変化とチームのあり方-」で登壇します でした。 adventar.org こんにちは、マネーフォワードでバックエンドエンジニアをしている @hktechno です。 現在、マネーフォワードでは、バックエンド開発においてこれまでの Ruby on Rails に加えて、サーバーサイド Kotlin の導入を推進しています。 私は現在、これからサーバーサイド Kotlin を導入するプロジェクトや、すでに導入したプロジェクトに対して、社内標準の技術スタックを定義して提案したり、社内向けの共通ライブラリ・ベストプラクティスを提供したりすること
はじめに 皆様こんにちは、ソーシャル経済メディア「NewsPicks」(Media Infrastructureチーム)エンジニアの北見です。 弊社では Server Side Kotlin を採用しており、昔に書かれた一部のコードは Java ですが、基本的に新規コードは Kotlin で書いており、既存の Java コードも Kotlin 化を推し進めています。 tech.uzabase.com tech.uzabase.com 今回は Kotlin の sealed class を使って、コードをシンプルにする例をご紹介します。 kotlinlang.org 微妙に異なるけど殆ど同じ処理を共通化 例えば、クレジットカードとキャリア決済の2通りで商品を購入するユースケースを考えてみます。 class PurchaseService( val productRepository: Pro
Kotlinエバンジェリスト・長澤太郎氏が薦める、Kotlinへの理解を深める3冊 2024年9月5日 Kotlinエバンジェリスト 長澤 太郎 Ubie株式会社のソフトウェアエンジニア。「テクノロジーで人々を適切な医療に案内する」をミッションに、日々開発に勤しむ。 本業のかたわら、自称Kotlinエバンジェリストとして、講演や執筆などを通じて啓蒙活動に尽力。国内最大のKotlin技術カンファレンス「Kotlin Fest」の代表を務める。 X: @ngsw_taro 1. 『Kotlinイン・アクション』Dmitry Jemerov 著、Svetlana Isakova 著、長澤 太郎 監修・翻訳、 藤原 聖 監修・翻訳、山本 純平 監修・翻訳、 yy_yank 監修・翻訳 2. 『Kotlinスタートブック』長澤 太郎 著 3. 『Kotlin サーバーサイドプログラミング実践開発』竹
はじめに 直面した課題 課題へのアプローチ 改善前のコード SharedFlowの導入 UiEvent と SharedFlow 改善後のコード SharedFlowを使う際の注意点 まとめ さいごに はじめに こんにちは!アソビューでAndroidアプリの開発をしているけんすーです。 アソビューのAndroidアプリはリリースから約2年が経ちました。その間、様々な機能追加や仕様変更を行ってきました。 当初は画面構成がシンプルで問題なかったものの、画面要素やUIイベントが増えることでComposable関数が複雑化していきました。その結果、コードの可読性や保守性が損なわれるという課題に直面しました。課題の詳細は次の章にて説明します。 今回は、その課題とどのように改善したのかを紹介します。 題材として、GitHubリポジトリを検索するアプリのサンプルコードを使用します。 サンプルコードは以下
単一のSwiftコードからiOSアプリとAndroidアプリが作れる「Skip 1.0」正式リリース。SwiftをKotlinへトランスパイル iOSのネイティブアプリケーション開発には、開発ツールとしてXcodeを使い、Swift言語を用いてプログラミングを行うのが、iOSの開発元であるAppleが推奨する方法です。一方、AndroidではAndroid Studioを開発ツールとしてKotlin言語を用いてプログラミングすることがGoogleによって推奨されています。 しかしiOSとAndroidの両方で同じモバイルアプリケーションを展開したい場合、異なる開発ツールを使い分ける手間やプログラミング言語の学習コストを考えると、できれば単一のソースコードから2種類のプラットフォームへ展開できることが望ましいでしょう。 最近ではこうしたニーズに対応して単一のソースコードからマルチプラットフォ
こんにちは! 技術本部 Sansan Engineering Unit Mobile Applicationグループの桑原です。 この度、Sansanモバイルアプリでは開発スピードを加速させるため、実プロダクトにKotlin Multiplatform(以下、KMP)を導入しました! まずは1画面の導入から始めましたが、今後は既存の画面も順次KMPに移行していく予定です。 この記事では、Androidエンジニアの視点から、SansanアプリにKMPを導入した背景やその成果、さらにKMPの設計についても簡単に紹介します。 KMPの導入背景と成果 導入した理由 導入で感じたメリット 導入で感じたデメリット KMPの基本設計 AndroidでのKMPモジュールの取り込み方法 採用したアーキテクチャ KMPモジュールの構成 エラーハンドリング テスト KMPで使用しているその他ライブラリ 最後に
こんにちは!ヘンリーでソフトウェアエンジニアをしている @agatan です。 今日は小ネタで、サーバーサイド Java / Kotlin エコシステムで意外と使われている ThreadLocal と、それを Coroutine と安全に組み合わせる方法について紹介します! TL; DR ThreadContextElementを使おう! ThreadLocal とは java.lang.ThreadLocal<T> は、その名の通り、スレッドローカルな(= スレッドごとに独立した値を持つ)変数を定義するための機構です。 ある Thread で値を書き換えたとしても、他の Thread から見た ThreadLocal 変数の中身は書き換わらない、という性質があります。 import kotlin.concurrent.thread val tls: ThreadLocal<Int> =
しばらくは忙しく過ごしていてなかなか技術書を読む余裕はありませんでしたが、ようやく一冊読めたのでメモを残しておきたいと思います。『Kotlin in Action』という本の第2版です。未邦訳らしかったので、原著を読みました。 なお、気になったところだけつまんで読んだので、すべての章のメモが記されているわけではありません。ほとんどの章はScalaの頃の経験で概念としては知っている状態だったので、あまり印象に残りませんでした。後半戦は比較的Kotlin固有の概念が多くそちらは印象に残りました。 Kotlin in Action, Second Edition (English Edition) 作者:Aigner, Sebastian,Elizarov, Roman,Isakova, Svetlana,Jemerov, DmitryManningAmazon 大前提ですが、Android側の
So, you’ve been working with Kotlin Coroutines for a while and you’re already familiar with basic concepts like suspend functions and thelaunchbuilder. But as your projects become more complex, you might find yourself frequently searching for advanced solutions and asking Google or your favorite AI for help. This cheat sheet consolidates the key insights I’ve picked up along the way. It’s designed
こんにちは、モーニーングルーティーン担当、VPoEの河合(@vaaaaanquish)です。 サムネイルの写真は、娘が描いてくれたパパです。上手です。 本記事は、先日開催されましたKotlin Festにおいてエムスリーのスポンサーブースで展開していた『エンジニア トリ診断』の開発秘話を公開するものです。 Kotlin Festとエンジニアトリ診断 Kotlin Compose HTMLとは Compose HTMLをGitHub Pagesでホスティングする OGPを設定する Kotlinでフロントエンド開発を進める おわりに We are hiring !! Kotlin Festとエンジニアトリ診断 Kotlin Festは、Kotlinに関する技術カンファレンスで、今年は6月22日に開催されました。 詳しくは参加レポートもありますので、ご参照頂ければ幸いです。 www.m3tech
こんにちは。食べログでAndroidアプリの開発をしているsadaです。 先日、6/22(土)に Kotlin Fest 2024 が開催されました! 弊社もたまごスポンサーとして協賛させていただきましたが、オフラインでの開催は実に5年ぶりということで、本当に楽しみにしていました。 弊社も協賛しております!#KotlinFest pic.twitter.com/UNT9V8PvIq— sada (@sadashi_ota) June 22, 2024 当日は、各セッションはもちろん、ブースや懇親会など、とても楽しい時間となりました。 Kotlin Festに参加された皆様、そして運営の皆様本当にありがとうございました! それではここからは参加レポートになります。 目次 セッション オープニングセッション パフォーマンスと可読性を両立:KotlinのCollection関数をマスター Kot
KotlinConf 2024 shocked me with a new announcement. Union types are coming to Kotlin! However, in a limited form. At first, I couldn't understand why, but after some talks and discussions, I realized that it is a very smart move. Now let me show you the big picture. One feature I have always admired in other programming languages is union types, such as Int | String. I haven’t had any specific pla
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く