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
77
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
iOS機能開発のAI環境と起きた変化
ryunakayama
0
230
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
420
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
150
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
360
iOSの画面の状態のアレコレを調査してみた
ryunakayama
0
100
作文ツール(Writing Tools)をアプリから制御する
ryunakayama
0
64
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
310
「ジェン文字」をアプリ内で使ってみよう
ryunakayama
0
200
SwiftDataと連携したWidgetを作ってみた
ryunakayama
1
230
Other Decks in Programming
See All in Programming
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.9k
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.9k
関数型プログラミングのメリットって何だろう?
wanko_it
0
140
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.7k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.8k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
120
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1k
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
0
1.3k
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
Featured
See All Featured
Paper Plane
katiecoart
PRO
1
52k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Are puppies a ranking factor?
jonoalderson
1
3.7k
How to make the Groovebox
asonas
2
2.3k
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から接続
働くをもっと楽しく、創造的に