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
400
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
130
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
1.2k
Bun に LCOV 出力を実装した
exoego
2
420
terraform-provider-aws にプルリクして マージされるまで
exoego
2
550
ライブラリをパブリッシュせずにすばやく試す
exoego
2
420
esbuild 最適化芸人
exoego
3
2.8k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
990
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
150
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
880
Other Decks in Programming
See All in Programming
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
240
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
580
LLM 101
dalinaum
0
480
protojson における文字化けの扱い
kazuki1023
0
230
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
220
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
220
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
640
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
420
Modernizing iOS Apps
seyfoyun
0
150
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
250
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
3
1.2k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
980
The agentic SEO stack - context over prompts
schlessera
0
1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
HDC tutorial
michielstock
2
1k
Building the Perfect Custom Keyboard
takai
2
950
ラッコキーワード サービス紹介資料
rakko
5
5.8M
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
48k
Being A Developer After 40
akosma
PRO
92
590k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
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回リリースして真の年忘れをするぞ