Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ゆくKotlin くるRust
Search
TATSUNO Yasuhiro
December 17, 2025
Programming
380
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
No More NoSuchMethodError
exoego
1
78
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
1.1k
Bun に LCOV 出力を実装した
exoego
2
410
terraform-provider-aws にプルリクして マージされるまで
exoego
2
550
ライブラリをパブリッシュせずにすばやく試す
exoego
2
400
esbuild 最適化芸人
exoego
3
2.8k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
970
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
140
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
870
Other Decks in Programming
See All in Programming
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Domain-Driven Transformation
hschwentner
2
2.3k
golang-bob.pdf
iwatsukayura
0
130
すこし踏み込む CancellationToken
htkym
2
1.7k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
JIS keyboard support in Omarchy
lef237
0
110
phperだってパンチカードでコーディングしたい
o0h
PRO
0
330
The Rails Doctrine Decade
koic
2
590
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
Accessibility Awareness
sabderemane
1
250
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Code Review Best Practice
trishagee
74
20k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
New Earth Scene 8
popppiees
4
2.7k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
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回リリースして真の年忘れをするぞ