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
Ryu-nakayama
December 12, 2025
Programming
97
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
72
iOS機能開発のAI環境と起きた変化
ryunakayama
0
260
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
450
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
170
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
380
iOSの画面の状態のアレコレを調査してみた
ryunakayama
0
130
作文ツール(Writing Tools)をアプリから制御する
ryunakayama
0
84
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
340
「ジェン文字」をアプリ内で使ってみよう
ryunakayama
0
220
Other Decks in Programming
See All in Programming
Intent as Code
shoppingjaws
6
1.1k
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
250
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
250
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.1k
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
360
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
200
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
270
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
180
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
310
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
310
Are APIs Still Relevant in the AI Era?
soyuka
0
280
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
130
Featured
See All Featured
HDC tutorial
michielstock
2
880
The Mindset for Success: Future Career Progression
greggifford
PRO
0
500
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
Fireside Chat
paigeccino
43
4k
From π to Pie charts
rasagy
1
370
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Balancing Empowerment & Direction
lara
6
1.3k
Paper Plane
katiecoart
PRO
4
53k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
700
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Scaling GitHub
holman
464
140k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
460
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から接続
働くをもっと楽しく、創造的に