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
「ジェン文字」使ってますか?
Search
Ryu-nakayama
December 12, 2025
Programming
88
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「ジェン文字」使ってますか?
mobile.stmn #15の登壇資料です
Ryu-nakayama
December 12, 2025
More Decks by Ryu-nakayama
See All by Ryu-nakayama
AIに「任せない」という選択
ryunakayama
0
48
iOS機能開発のAI環境と起きた変化
ryunakayama
0
240
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
430
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
160
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
360
iOSの画面の状態のアレコレを調査してみた
ryunakayama
0
110
作文ツール(Writing Tools)をアプリから制御する
ryunakayama
0
69
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
320
「ジェン文字」をアプリ内で使ってみよう
ryunakayama
0
210
Other Decks in Programming
See All in Programming
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
250
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
560
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
640
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
710
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
170
メールのエイリアス機能を履き違えない
isshinfunada
0
230
Foundation Models frameworkで画像分析
ryodeveloper
1
610
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
550
源内ハンズオン概要編
hideg
0
160
仕様駆動開発の消費期限
watany
20
7.8k
今さら聞けない .NET CLI
htkym
0
190
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
We Are The Robots
honzajavorek
0
300
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
270
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.3k
The Invisible Side of Design
smashingmag
301
52k
Transcript
「ジェン文字」使ってますか? iOSアプリ開発グループ 機能開発チーム 中山 龍 2025年12月12日 mobile.stmn #15
2 中山 龍 (なかやま りゅう) • 株式会社kubell ◦ 新卒3年目のiOSエンジニア(23) ◦
「Chatwork」アプリの機能開発を担当 ◦ 機能開発チーム(愛称: Ciel) チームリーダー • 愛知県在住 ◦ 自己紹介 @ryu_develop 6月に買った洗濯機が日曜にぶっ壊れまし た。マジで激しく萎えぽよ 🥹
3 以前の登壇 mobile.stmn #11 にて iOSアプリ内でジェン文字を入力・表示できるようにする 方法をお伝えしました
4 使ってる? ジェン文字が日本で利用できるようになって約10ヶ月、みなさん普段利用してい ますか?
5 使ってる? ジェン文字が日本で利用できるようになって約10ヶ月、みなさん普段利用してい ますか? 開発者もユーザーも全然使われていないのでは? と思い、iOSアプリだけでなく、サーバー・Webも含め、 実際にジェン文字対応したものを実装してみました
01 | 復習: ジェン文字とは?
復習: ジェン文字とは • Apple Intelligenceの機能の1つ • 絵文字キーボードに説明を入力するだけ で、オリジナルの絵文字を生成することが できる機能 7
Apple公式より引用
8 復習: ジェン文字を入力できるようにしよう UITextViewの supportsAdaptiveImageGlyph を true にすることでジェン文字が 入力できるようになる 生成した絵文字
最近使用した絵文字の中 にもジェン文字が表示さ れる
復習: ジェン文字を表示できるようにしてみよう 9 UITextViewの入力値を attributedText で扱えるようにする そして、Text / UILabelなどでNSAttributedString の値として表示する
画面表示 入力
02 | ジェン文字を含むメッセージをサー バーへ保存する
11 ジェン文字を含むメッセージをサーバーへ保存する iOSアプリ内でのジェン文字はUnicodeの文字コードを持た ず、画像データを文字として扱っている(画像グリフ) iOSアプリ内ではUnicodeの文字コードを持つ通常の絵文字と同じように扱える が、iOSアプリ外で扱う場合は一工夫必要
12 ジェン文字を含むメッセージをサーバーへ保存する ジェン文字を含むメッセージは 「RTFD」 としてサーバーへ送信・保存すること ができる RTFD: Rich Text Format
Directory • RTF(Rich Text Format)をベースに、画像や他のファイルなどを埋め込めるように拡張したもの • NSAttributedString (AppKit/Foundationフレームワーク) と非常に親和性が高い
13 ジェン文字を含むメッセージをサーバーへ保存する ジェン文字を含むメッセージは 「RTFD」 としてサーバーへ送信・保存すること ができる iOS ジェン文字を含むメッセージを RTFD に変換して送信
サーバー RTFD を受信し、ジェン文字を含むメッセージに変換して表示
14 ジェン文字を含むメッセージをサーバーへ保存する ジェン文字を含むメッセージは 「RTFD」 としてサーバーへ送信・保存すること ができる iOS ジェン文字を含むメッセージを RTFD に変換して送信
サーバー RTFD を受信し、ジェン文字を含むメッセージに変換して表示
15 ジェン文字を含むメッセージをサーバーへ保存する AttributedStringをBase64のRTFDに変換 → サーバーへ送信(RTFDで保存) let rtfdData = try attributedString.data(
from: NSRange(location: 0, length: attributedString.length), documentAttributes: [.documentType: NSAttributedString.DocumentType.rtfd] ) let rtfdBase64String = "data:application/rtfd;base64," + rtfdData.base64EncodedString() Swift
16 ジェン文字を含むメッセージをサーバーへ保存する AttributedStringをBase64のRTFDに変換 → サーバーへ送信(RTFDで保存) { "id": 1, "rtfd": "data:application\/rtfd;base64,~~~
} JSON
17 ジェン文字を含むメッセージをサーバーへ保存する ジェン文字を含むメッセージは 「RTFD」 としてサーバーへ送信・保存すること ができる iOS ジェン文字を含むメッセージを RTFD に変換して送信
サーバー RTFD を受信し、ジェン文字を含むメッセージに変換して表示
18 ジェン文字を含むメッセージをサーバーへ保存する Base64のRTFDをサーバーから取得 → AttributedStringに変換 let base64String = rtfdData.replacingOccurrences(of: "data:application/rtfd;base64,",
with: "") if let data = Data(base64Encoded: base64String) { do { let nsAttributedString = try NSAttributedString( data: data, options: [.documentType: NSAttributedString.DocumentType.rtfd], documentAttributes: nil ) return AttributedString(nsAttributedString) } catch { ~~~ } } Swift
19 ジェン文字を含むメッセージをサーバーへ保存する ジェン文字を含むメッセージは 「RTFD」 としてサーバーへ送信・保存すること ができる iOS ジェン文字を含むメッセージを RTFD に変換して送信
サーバー RTFD を受信し、ジェン文字を含むメッセージに変換して表示 これでiOS ←→ サーバーでジェン文字を含むメッセージの 送受信ができるようになった
03 | ジェン文字を含むメッセージをiOS 以外のクライアントで表示する
21 ジェン文字を含むメッセージの表現 ジェン文字で表現している内容が簡単に破棄されてしまわないようにすることが 大切になる ジェン文字でアプリに表情を追加
22 インライン画像に対応していないアプリ・クライアントへの対応 インライン画像に対応していないアプリ・クライアントの場合、 contentDescriptionのテキスト表現を使用するという対応方法がある ジェン文字でアプリに表情を追加
23 ジェン文字からcontentDescriptionを取得する ジェン文字(NSAdaptiveImageGlyph)は contentDescriptionが取得できる // AttributedString中のジェン文字部分 let adaptiveImageGlyph: NSAdaptiveImageGlyph =
~~ // contentDescriptionの取得 let description = adaptiveImageGlyph.contentDescription ジェン文字部分を contentDescription に置き換えてサーバーへ送信 Swift
24 ジェン文字からcontentDescriptionを取得する ジェン文字(NSAdaptiveImageGlyph)は contentDescriptionが取得できる { "id": 1, "content": { "rtfd":
"data:application\/rtfd;base64,~~~, "text": "[美味しそうな寿司]食べたい" } } RTFDとは別でテキスト(contentDescription版)の情報も送信 JSON
25 インライン画像に対応していないアプリ・クライアントへの対応 テキストの情報を使って、ジェン文字が含まれているメッセージをテキストで表 現することができるようになった!! Webクライアント
やってみての感想・考察
27 やってみての感想・考察 ジェン文字を表現するデータに対応するのが大変そう • (サーバー側の事情に詳しくないが)メッセージなどのテキストをRTFDで扱っ ているサービスはおそらく多くない ◦ → ジェン文字に対応しようと思うと、多くの場合テキストをRTFDで扱う ためにサーバーの改修が必要になるのでは?
• 追加で、contentDescriptionに置き換えられたテキストの情報(インライン画 像に対応していないクライアント用)や、ジェン文字部分を画像に置き換えて インライン画像表現をするための情報も合わせて扱うことが必要になってく る
28 やってみての感想・考察 それに対して... • 「Unicodeの文字コードを持つものだけを扱う」としてしまえば ◦ RTFDや画像データ、テキスト版データなどいくつもの情報を合わせて扱 う必要もなく、どのクライアントでも同じような表示ができる ◦ Unicodeにある絵文字は使用可能なので、(カスタムではない)標準の絵文
字表現は可能 クライアント・サーバー全体で複雑な 実装を入れてジェン文字に対応する 「Unicodeの文字コードを持つものだ けを扱う」を持つものだけで十分であ り、シンプルに保ちたい < というのが世間の開発者内では多数派の意見なのではないか?
29 参考 ジェン文字でアプリに表情を追加 - WWDC2024 実装(ほとんど): Claude Code • localでPHPのサーバーを実装→
iOS・Webから接続
働くをもっと楽しく、創造的に