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
100
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
46
The Integrity of Making: Extending Xcode Previews with MCP
elmetal
PRO
0
46
Generating DocC with AI
elmetal
PRO
0
77
A Swift Way to Blog
elmetal
PRO
0
250
Designing DocC for Clarity and Beauty
elmetal
PRO
0
150
SwiftUI Viewの責務分離
elmetal
PRO
2
540
サイボウズiOSアプリのマルチモジュール 2024
elmetal
PRO
0
160
開発を加速する共有Swift Package実践
elmetal
PRO
0
1.5k
Resolve Nested ObservableObject issues in Observation
elmetal
PRO
0
460
Other Decks in Programming
See All in Programming
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
290
Heart of Swift Concurrency
koher
0
1.2k
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.5k
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.9k
SREの越境 / SRE Collaboration
y0hgi
2
300
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
120
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.8k
The Rails Doctrine Decade
koic
2
500
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
550
phperだってパンチカードでコーディングしたい
o0h
PRO
0
210
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.4k
Mind Mapping
helmedeiros
1
390
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
260
We Are The Robots
honzajavorek
0
390
Designing for Performance
lara
611
70k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
250
Making Projects Easy
brettharned
120
6.8k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
740
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
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