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
elmetal
PRO
September 17, 2026
Programming
36
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
September 17, 2026
More Decks by elmetal
See All by elmetal
SwiftUI Text Rendering Deep Dive
elmetal
PRO
0
12
The Integrity of Making: Extending Xcode Previews with MCP
elmetal
PRO
0
44
Generating DocC with AI
elmetal
PRO
0
76
A Swift Way to Blog
elmetal
PRO
0
220
Designing DocC for Clarity and Beauty
elmetal
PRO
0
140
SwiftUI Viewの責務分離
elmetal
PRO
2
540
サイボウズiOSアプリのマルチモジュール 2024
elmetal
PRO
0
150
開発を加速する共有Swift Package実践
elmetal
PRO
0
1.5k
Resolve Nested ObservableObject issues in Observation
elmetal
PRO
0
450
Other Decks in Programming
See All in Programming
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
110
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
0
150
Java 27新機能 / Java 27 new features
kishida
2
140
新卒PdEのリアル
ryu1013
1
500
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
220
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
1.8k
自分的「カンファレンスの楽しみ方」
syumai
0
200
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
Intent as Code
shoppingjaws
6
1k
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
170
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
2
11k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
Six Lessons from altMBA
skipperchong
29
4.5k
Amusing Abliteration
ianozsvald
1
300
A better future with KSS
kneath
240
18k
30 Presentation Tips
portentint
PRO
1
390
Documentation Writing (for coders)
carmenintech
77
5.5k
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
A Tale of Four Properties
chriscoyier
163
24k
Transcript
プロダクトコードから ライブラリの境界を見つける 「ほかでも使えそう」を、 公開できるSwift Packageへ再設計するまで elmetal Cybozu, Inc. iOSDC Japan
2026 2026-09-12 #iosdc #c 1
About me @el̲metal̲ iOS App Developer 複数チームの 技術支援 #iosdc #c
2 競馬 対戦ゲーム 育児
サイボウズについて #iosdc #c 3
チームワークあふれる 社会を創る #iosdc #c #チームワークあふれる社会を創る 4
サイボウズについて iOSアプリ kintone サイボウズ O ce Garoon サイボウズでは複数のプロダクトを開発しています #iosdc #c
ffi 5
Intro #iosdc #c
🤔このコード他でも使えそう #iosdc #c 7
🤔ライブラリにできないか #iosdc #c 8
サイボウズでは色々ライブラリ作りました WebUI LicenseList #iosdc #c 9 認証(社内ライブラリ)
新規アプリの基盤構築を 4~5ヶ月から約2週間へ短縮 #iosdc #c 10
サイボウズではどのように ライブラリに再設計しているかお話しします #iosdc #c 11
ライブラリの境界を見つける #iosdc #c 12
「ほかでも使えそう」から始める • ライブラリの境界:ライブラリ側の責任と利用側の責任の線引き • 共通部分っぽいところを見つけて抜き出してみる • 基盤でも共通アルゴリズムでも、なんでもok • 共通部分を大きく取ろうとしない •
大きく取れるところは取ろうとしなくても自然と大きく取れる #iosdc #c 13
ライブラリ、リポジトリの名前を決める • 責務を表現する命名を試みる • 一言で表現するくらいの粒度で • 細部はまだ決めない • APIを作る時に自然と境界が決まっていく •
被りがないかGitHubで検索しておく #iosdc #c 14
ライブラリのための再設計をする #iosdc #c
責務を分析して境界を再設計する • コードを別のモジュールに移動してpublicにするだけでは機能するライブラリ にならない • 元のコードのスメルが残りがち • 移動元にあった固有の型に依存している • 特定の状態管理や画面構成が前提になっている
• 内部実装の都合が反映された呼び出しになっている #iosdc #c 16
責務を分析して境界を再設計する • 疑似コードを使って複数の呼び出し案を考える • 実装が全くない状態で議論している • これらの選択肢を使って議論した上でADRに記録を残す #iosdc #c 17
責務を分析して境界を再設計する 擬似コードの例 WebUIで検討していた時の疑似コード struct ContentView: View { var body: some
View { WebViewReader { proxy in VStack { Button("Go back") { proxy.goBack() } WebView(url: URL(...)) } } } } #iosdc #c 18
ライブラリが担う責務を決める • プログラム上の責務 • ライブラリ側と利用者側の責任分解点の線引き • 先に全部決めるのは難しい • 存在を認識した上で決めるのを後でやる部分があっても良い #iosdc
#c 19
プロダクト固有の依存を探し出す コードレベル • プロダクト独自の型 • ViewModel/Store 基盤 暗黙の前提 • Navigation
• デザインシステム • ログ・分析基盤 • 認証基盤 #iosdc #c 20 • 状態管理 • 画面構成
不要な依存を取り除く • そもそもライブラリ内に依存が必要かを考える • 積極的に利用側へ戻す • アプリごとに異なるものは利用側の責務とする • プロダクトの状態管理やデザインシステムとの接続はプロダクト側のAdapter が行う
#iosdc #c 21
API設計 • 利用側の呼び出しを決める • API Documentを書く • この型が何か, メソッドの返り値が何か •
この時点での実装可能性は考慮しない #iosdc #c 22
利用者のためのAPIを設計する • よくある用途が自然に書けるか • 高度な機能が段階的に使えるか • 内部の概念が漏洩していないか • 不正な組み合わせを型レベルで防げるか •
Swift/SwiftUIの語彙に馴染んでいるか #iosdc #c 23
API設計Tips インターフェースに標準の型を使う • Swift標準ライブラリの型 • swift-lang・appleのライブラリの型 • 利用側に安定したインターフェースを提供できる #iosdc #c
24
API設計Tips ポリシーに従って決める • 何でも差し替え可能にしない • 提供するスコープを超えた拡張を考慮しない • 責務を超える要求を受け入れない #iosdc #c
25
呼び出し側から設計を精査する #iosdc #c
利用例で評価する • 抽象度が適切かどうか利用例を使って評価する • ドキュメント • テスト • サンプルアプリ •
API設計の精度を高めていく • 線形のプロセスでなくてよい #iosdc #c
DocC • APIリファレンスはAPI設計時に書く • API Design Guidelines | swift.org •
設計がおかしいとドキュメントがうまく書けないので設計へのフィードバ ックになる • API以外にもライブラリのOverviewや基本概念、重要な制約について書く • Apple Developer Documentationのスタイルを踏襲する #iosdc #c 28
テスト • テストは最初の利用者 • コードレベルでAPIがおかしくないかフィードバックする • 公開APIの振る舞いを検証する • 入出力の契約 •
エラーの挙動 • プラットフォーム差異 #iosdc #c 29
サンプルアプリ • サンプルアプリで統合する • 機能レベルだけでなくコードレベルでもうまく統合されているか確認する • アプリの利用例として機能させる • 実行可能なドキュメントとして扱う #iosdc
#c 30
運用の設計 #iosdc #c
CIを動かす • ビルド・テスト • 複数プラットフォームでのビルド • サンプルアプリでのビルド • DocCのドキュメント生成とGitHub Pagesへのデプロイ
#iosdc #c 32
公開後の運用ポイント • Issueはライブラリの責務範囲内か • どこまでをライブラリ側API追加で、どこまでを利用側で解決すると線引きするか • 破壊的変更を行う価値があるか • APIやサポート対象の廃止 •
Deprecatedによる移行期間設定 • セマンティックバージョニング #iosdc #c 33
最近のサイボウズでは • 最近はいきなり別リポジトリを立てることが多い • 設計や責務のスコープを決めるのに慣れてきた • プロダクトコードの中で価値が出そうなところは大体やり切ってしまった • リポジトリ作成時点でOSSを射程に入れている •
社内ライブラリで開発開始しつつOSSにできそうか見てみる • 社内ライブラリのままでもOKのスタンス #iosdc #c 34
まとめ • 共通の責務を見つけ、抽象度を上げて、機能するライブラリに再設計する • APIドキュメント、テスト、サンプルアプリ、実アプリと段階の異なる利用者 でAPI設計を精査する • 公開するとライブラリの境界をメンテナンスすることになる #iosdc #c
35
ありがとうございました #iosdc #c