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
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
89
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
91
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
340
「ジェン文字」をアプリ内で使ってみよう
ryunakayama
0
230
Other Decks in Programming
See All in Programming
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
360
気持ちぃ〜角丸 Squircle
ryu1013
0
280
Agents on Rails - Rails at Scale 2026
irinanazarova
0
530
すこし踏み込む CancellationToken
htkym
2
1.7k
The Rails Doctrine Decade
koic
2
560
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
160
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
16k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
160
Are APIs Still Relevant in the AI Era?
soyuka
0
460
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
710
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
430
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
560
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
210
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
450
Writing Fast Ruby
sferik
630
63k
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から接続
働くをもっと楽しく、創造的に