Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゆくKotlin くるRust
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
TATSUNO Yasuhiro
December 17, 2025
Programming
300
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ゆくKotlin くるRust
https://ore-no-benkyoukai.connpass.com/event/375376/
TATSUNO Yasuhiro
December 17, 2025
More Decks by TATSUNO Yasuhiro
See All by TATSUNO Yasuhiro
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
1k
Bun に LCOV 出力を実装した
exoego
2
360
terraform-provider-aws にプルリクして マージされるまで
exoego
2
520
ライブラリをパブリッシュせずにすばやく試す
exoego
2
360
esbuild 最適化芸人
exoego
3
2.7k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
930
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
120
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
840
Scala と AWS でフルサーバーレス開発事例 / How Chatworks uses Scala and Serverless
exoego
3
1.7k
Other Decks in Programming
See All in Programming
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
660
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
1.9k
Vite+ Unified Toolchain for the Web
naokihaba
0
230
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
120
スマートグラスで並列バイブコーディング
hyshu
0
120
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
230
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
190
dRuby over BLE
makicamel
2
330
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
860
AIとRubyの静的型付け
ukin0k0
0
560
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
Skip the Path - Find Your Career Trail
mkilby
1
140
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to train your dragon (web standard)
notwaldorf
97
6.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Writing Fast Ruby
sferik
630
63k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
ゆ Nano Banana Pro で生成 2025-12-17 #orestudy 俺の勉強会2025 株式会社 Henry,
Tatsuno
弊社サーバとお客様施設内の機器を繋ぐ 常駐プロセスを Kotlin から Rust へ移植した 苦労を年忘れしたい!
病院/クリニック 院内ネットワーク 弊社サーバー 電子カルテ(診察の記録) レセコン(診療報酬の計算) オーダリング(処方・検査など指示) 1.電カルなど利用 常駐 プロセス 2.患者情報など送信
4. 検査結果など送信 3. 院内機器やオンプレソフトと の連携 インターネット イラスト https://www.streamlinehq.com/icons/freehand-free
弊 “常駐プロセス ” のこれまで - 2021年、電子カルテサーバーと共通言語 Kotlin で開発 - 2024年、GraalVM
Native Image でネイティブ化 - アップデートに課題があった通常の JRE (Java 実行環境) を不要に
技術刷新のモチベーション - GraalVM Native Image を使った継続開発に課題 - ネイティブ版で「Java リフレクションを使った機能が動かない」という不具合がたまに 起きた。テストを書いて
Java リフレクション設定を自動収集する仕組み を活かす習 慣が担当部署に根付かなかった - Native Image そのものは悪くない(重要)。Java/Kotlin/Scala コードのネイティ ブ化を活用できる場面はいっぱいある - かといって JRE 配布にも戻りたくない - 今後多数の機能追加を計画してるので、たくさんの病院に何度も手作業 でデプロイしていくのはしんどい。安全な自動更新 が欲しい - サーバーサイドは引き続き Kotlin。リライトは常駐プロセスだけ
Rust と Web 技術でアプリ開発できる Tauri を選定 - 2020 年 v1、2024年
v2 - 一言で言うと小さくて軽い Electron - デスクトップやスマホアプリを TypeScript/HTML/CSS で書ける - 自社 Web アプリのデザインシステム利用で 統一感ある UI - 社内に Tauri 開発経験者がいて、Electron より知見がある - TypeScript に加えて Rust が使える - 高速:CPU アーキや OS ごとに合わせたネイティブコードにコンパイルするので - 堅牢:解放済みメモリへのアクセスやデータ競合を防げるボローチェッカーなど - 元の Kotlin がテスト含め4000行なので「いけるのでは!?」 Slack, Figma, 1password など大手は Electron 採用が多い。Tauri 大手事例は不明
1100 既存ライブラリで移植できたコード 200 既存ライブラリではできなかったので 自前実装したコード 2600 Tauri でできた新機能。自動更新など 3.2x 1.7x
テスト大幅増は、Kotlin版で見逃され たケースを網羅したため&Rust ライブ ラリの挙動確認が大きい やってみたら 1人フルタイム 1.5ヶ月で なんとかなった
本題 Kotlin から Rust への移植で 苦労したこと 3つ厳選
❶ファイル監視が環境依存のところがある - 検査装置やオンプレシステムとファイルでやりとりするため、昔なが らのファイル監視が必要 - Kotlinでは Java NIO WatchService で
Win/Mac 問題なし - Rust で定番の notify とラッパー notify_debouncer を使用。正常系 動作はいいが、異常系(監視対象フォルダの削除)を Windows で 検知できない https://github.com/notify-rs/notify/issues/261 Tauri にパッチする時間が取れてないので、Windows だけフォルダを別途 監視し、削除イベントを擬似発行することで回避
❷ロガーがグローバルすぎて、出力先カスタマイズが困難 - Kotlin/JVM で広く使われる logback は、ファイルやコードでグローバルのロ ガーも、グローバルじゃないロガーも柔軟に設定できた - 一方、Tauri のログは
fern という Rust で広く使われるロガーを使用 - fern はグローバルシングルトンで一度設定したら変更不能 。Tauri 内部で fern が設定されるので、Tauri ログ標準(ファイル、標準入出力、web console)以外 の外部サービスなどを設定するすべがなかった 任意のログ出力先(今回は Google Cloud Logging)を追加できる ようにするパッチを送って解決した https://github.com/tauri-apps/plugins-workspace/pull/2600
❸ .proto から生成されるデータ構造が微妙に違う - サーバとのデータ授受に言語非依存と称する gRPC を使用。共通の .proto か ら
Kotlin class / Rust struct を生成 - 特に問題になったのが enum のデータ構造で、ざっくりいうと - grpc-kotlin data class MyEnum(val number: Int) みたいなフィールドあり - tonic (Rust) struct MyEnum(u32) のような newtype タプルでフィールドなし - この違いはメモリ上では気にならないが、テンプレートエンジンでテキストファイ ル出力する時に問題。Kotlinで {{ foo.bar.number }} としていたところを {{ foo.bar }} に書き換えるのは、製品導入チームに負担が…… 実際のテンプレートで問題が起きる enum が数個とわかったので、そい つらだけ Kotlin 互換シリアライザを実装
MacやWindows で何度もテストして 他にもいろんな問題を解決して ついに 12月10日、リリース!
まだ動いてない - Rust というよりデスクトップアプリ開発が難しかった…… - お客さまの Windows PC でなぜかシステム環境変数を読み込めない -
「30億のデバイスで走る Java」は偉大だった - OS の違いをしっかり吸収してくれる標準ライブラリ - 堅牢で出力先も柔軟なロガー - それでも Rust は……いいぞ - 来週もう1回リリースして真の年忘れをするぞ