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
390
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
110
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
980
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
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
180
最近”作らせてる” ローカルAIアプリの話
akit37
0
500
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
続・コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions-again
handlename
0
130
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
150
ActionController meets Protocol Buffers
sorah
1
710
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3k
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
110
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
120
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
200
R8 の設定見直しでアプリサイズ削減
andpad
0
230
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
220
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
580
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Prompt Engineering for Job Search
mfonobong
0
540
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
490
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
530
Building AI with AI
inesmontani
PRO
1
1.3k
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回リリースして真の年忘れをするぞ