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
「ジェン文字」使ってますか?
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryu-nakayama
December 12, 2025
Programming
100
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
90
iOS機能開発のAI環境と起きた変化
ryunakayama
0
270
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
460
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
180
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
380
iOSの画面の状態のアレコレを調査してみた
ryunakayama
0
150
作文ツール(Writing Tools)をアプリから制御する
ryunakayama
0
94
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
340
「ジェン文字」をアプリ内で使ってみよう
ryunakayama
0
230
Other Decks in Programming
See All in Programming
Railsバージョンを4倍にした話
optim
0
470
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.6k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
300
sbt 2.0: takeoff
eed3si9n
0
160
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
最近”作らせてる” ローカルAIアプリの話
akit37
0
480
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
280
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
440
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Done Done
chrislema
187
17k
Optimizing for Happiness
mojombo
378
71k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
550
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
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から接続
働くをもっと楽しく、創造的に