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
ServerSideSwiftAndContainerMachine - アプリ実装そのままクラウド
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
notoroid
August 29, 2026
Programming
52
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ServerSideSwiftAndContainerMachine - アプリ実装そのままクラウド
iPhone Dev Sapporo 2026年8月30日向けのプレゼンテーション資料
notoroid
August 29, 2026
More Decks by notoroid
See All by notoroid
Testflight - iOS27 でのAppleIntelligenceの強化
notoroid
0
60
New_features_in_Xcode26.3_to_Xcode26.4.pdf
notoroid
0
110
iOS26 オーディオ録音新機能 - iOS26 AVInputPickerInteraction
notoroid
0
160
Info.plist - after Xcode26.
notoroid
0
99
GeometryReader - SwiftUI
notoroid
0
130
iOS 26 SDKの新機能 (liquid抜き) - iOS26orLaterUpdateAndSceneForUIKit
notoroid
0
260
UIテスト自動化サポート- Testbed for XCUIAutomation practice
notoroid
0
270
UIViewController - Interactive PopGesture
notoroid
0
130
Xcodeショートカット 2025年版
notoroid
0
150
Other Decks in Programming
See All in Programming
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
250
wkhtmltopdfの次どうするか問題2026
willnet
2
1.4k
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
480
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
440
AHC070解法紹介
eijirou
0
120
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
560
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
170
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
730
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
490
Jetpack Compose メカニズム
skydoves
0
440
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.5k
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
210
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
320
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Rails Girls Zürich Keynote
gr2m
96
14k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
BBQ
matthewcrist
89
10k
Navigating Weather and Climate Data
rabernat
0
520
Transcript
アプリ実装そのままクラウド サーバーサイドSwift を支える技術 能登 要(@notoroid) - iPhoneアプリ開発者 2026年8月29日
話す内容 • サーバーサイドSwift を支える技術について • gRPCとProtocol Bu er(Protobuf) • Container
machine (macOS27〜) • Googl Cloud • アプリ側機能をサーバーサイドへの切り出しデモンストレーション ff • ローカルでテストできたコンテナはGoogle Cloud にでdeploy可能か?
話さない内容 • Google Cloudの詳細な設定 • 認証済み接続の確立方法 • クラウドログへの接続 • サーバーから他サービスへの連携
• ランニングコスト
お題目 • サーバーサイドSwift とGoogle Cloud • アプリから始めるサーバー実装&deploy
自己紹介: 能登 要 • iPhoneアプリ開発者( X: @notoroid) • アプリ開発者歴(2008〜) •
アプリ作って四半世紀(Windowsアプリ〜iOS) • 趣味はゲーム(反射神経が衰えと目の疲れが抜けない) • 最近遊んだゲーム • Splatoon Raiders (新作)は面白かったです
サーバーサイドSwift と Google Cloud
8月も末
Appleの新製品が出る9月も間近 もう発表されたぞ
Apple Intelligenceが 前面に押し出されて何が嬉しいか
初代iPhone以来 Googleと表立って連携
GoogleとAppleが連携すると なにが起きるか
サーバーサイドSwiftの話が進む
gRPCとSwiftによるリアルタイムのアプリやサービスの構築 https://developer.apple.com/jp/videos/play/wwdc2026/265 • HTTPベースのAPIとは異なる手段での サービス構築の紹介 • gRPCとProtobuf でのAPI定義とスタ ブ構築機能の紹介 •
ローカルテストからコンテナでの動作 テスト • クラウドへのコンテナのdeploy
gRPCとSwiftによるリアルタイムのアプリやサービスの構築 https://developer.apple.com/jp/videos/play/wwdc2026/265 • サーバーサイドSwift も考慮したネットワークスタック • アプリ側での非同期処理対応 • コンテナ技術(Container machie)
• Google Cloudとの相性
googleの課題を解決したネットワークスタックが利用可能に① • Gooleのサービスは標準的なRequestやResponseフォーマットで は即応性が求められる自社サービスに使用できない • 自前で開発 • 通信プロトコルとしてhttp/2 (QUIC) •
通信そのものを効率的に行うためのgRPC • gRPC上でのデータシリアライズとして ProtocolBuffer(Protobuf)を採用 • Google Cloudでのサポートおよび多プログラミング言語対応
googleの課題を解決したネットワークスタックが利用可能に② サーバーサイドSwiftでの利用方法 • Protobuf はデータのシリアライズ化向けの仕様 • 〜だけでなくIDL(インターフェイス定義言語) を内包、Request/ Responseに関わる定義を記述できる •
定義ファイル(.proto) を信頼できる唯一情報源としてコード生成機 能を利用可能 • コード生成の結果をアプリ/サーバーで共有可能
唯一の信頼できる情報源(A Single Source of Truth)をどのように実現? ① .protoファイルでインターフェイスを定義 ネットワーク呼び出し定義 .proto ファイル
② Generatorでpackage生成 ④ Generatorで Stub生成 ③ アプリ(Xcode, VSCode)で API参照 ③ サーバーにStub組み込み GRPCProtobufGenerator サービスAPI サービスAPI SwiftPackage Stub iOS, iPadOS, macOSで動作 Google Cloud Cloud Run macOS arm64/linux(コンテナ) amd64/linux(コンテナ),etc
SwiftNIO の技術スタック • サポートするOS GRPCNIOTransportHTTP2Posix • iOS GRPCNIOTransportCore NIOPosix NIOHTTP2
NIOExtras NIOCore NIOSSL • macOS X509 SwiftASN1 • linux(arm64, amd64) • Windows11 クライアントからサーバーまでサポート
ネットワークスタックの依存関係 TiledFlipperAPI サービス app target 共通コア(GRPCCore)を再利用 GRPCCore GRPCProtobuf GRPCNIOTransportHTTP2Posix grpc-swift-2
· 2.4.2 grpc-swift-protobuf · 2.4.1 grpc-swift-nio-transport · 2.9.1 SwiftNIO 非依存 シリアライズのみ 実際にリンクされる唯一の枝 …TransportServices Network.framework版・未使用 POSIX ソケット (NIOPosix) GRPCNIOTransportCore SwiftProtobuf swift-protobuf · 1.38.1 TLS 証明書検証 内部共有ターゲット HTTP/2 フレーミング swift-nio-extras · 1.34.3 NIOPosix NIOHTTP2 swift-nio · 2.101.3 swift-nio-http2 · 1.45.0 NIOExtras NIOCertificateReloading NIOSSL X509 swift-nio-ssl · 2.37.2 swift-certificates · 1.19.4 ASN.1 NIOCore swift-nio · 2.101.3 (基盤) SwiftASN1 swift-asn1 · 1.7.1
Swiftでのリアルタイムデータストリームの受け取り基盤 AsyncStream - Swift Concurrency • WWDC21で公開 • async/await/actor 向けのデータストリーム入力
• エラーthrow付きAsyncThrowingStreamもあり AsyncStreamの使う場所が少なかったので 印象に薄かった
AsyncStreamの例: 購読停止まで繰り返し /// 差し替え指示を一定間隔で流し続けるストリームを作る。 /// /// 止められるまで、落ちている列を 1 行ずつ下げながら新しい列を足し続ける。 ///
受け取り側が読むのをやめるとストリームの終了が通知され、生成側のループも止まる。 func flips() -> AsyncStream<TileFlip> { AsyncStream { continuation in guard rows > 0, columns > 0 else { continuation.finish() return } } } Taskを作成し繰り返す let task = Task { while !Task.isCancelled { for flip in nextFlips() { continuation.yield(flip) } try? await Task.sleep(for: stepInterval) } continuation.finish() } continuation.onTermination = { _ in task.cancel() } Taskのsleep() を使って待つ。 購読停止でTaskを終了
コンテナマシン(macOS27 later) https://developer.apple.com/jp/videos/play/wwdc2026/389 • Containerization framework を基盤 • 軽量の永続的なLinux環境を提供 •
mac上のストレージをコンテナに割り当 て • macOS上アカウントをコンテナへコピー • ブリッジドネットワーキングは標準ではサ ポートせず
Google Cloudとの相性 macOS上のlinuxコンテナでビルドできればGoogle Cloud にdeploy可能 ローカル環境(macOS) iOSアプリ クラウド環境(macOS) サーバー http/2,
gRPC,非セキュア ローカル上のコンテナ iOSアプリ サーバー http/2, gRPC,非セキュア iOSアプリ Google Cloud上のコンテナ サーバー http/2, gRPC,セキュア通信
プレゼンテーションでは ローカルでのコンテナ構築からクラウドへのデプロイまで 素晴らしくスムーズに説明
コンテナ周りの話が 幾分省略されていて 怪しい
実際にdeploy可能か試してみる
アプリから始める サーバー実装&deploy
実際にdeploy可能か 試してみよう
ただ試すだけでは 面白くない
アプリとして実装済みの機能を サーバーサイドへ移植する
検証アプリの環境 コンテナ起動にはmacOS27が必要 •開発環境 •Xcode27 beta6 •コード自体はXcode26以降で動作可能なはず •Swift6.3 •ローカルコンテナを動かす場合 •macOS27 beta6
•クラウド •Google Cloud (Cloud Run)
TiledFlipper https://github.com/notoroid/TiledFlipper/tree/feature/support̲animation • 9x9にアートワークを貼り付け • ランダムなフリップアニメーション を表示 • オンライからアートワーク取得機能 •
AsyncStream,async/awati/actor を使用
スタンドアロン デモンストレーション
TiledFlipperをローカルサーバーに切り分ける https://github.com/notoroid/TiledFlipper/tree/feature/support̲local̲test̲server •下準備が必要 •サービスとして切り分ける機能をModelとして分割 •アプリ内部リソースに依存する箇所を修正 •AIにProtpbuf向けのIDLを生成 •OpenAPIのYAMLを生成(AIの指示間違えた) •YAMLからコマンドラインベースのサーバーを構築
ローカルサーバー デモンストレーション
ローカルサーバーからコンテナベースで起動可能に変換 https://github.com/notoroid/TiledFlipper/tree/feature/support̲cloud̲container •下準備が必要 •サービスとして切り分ける機能をModelとして分割 •アプリ内部リソースに依存する箇所を修正 •AIにProtpbuf向けのIDLを生成 •OpenAPIのYAMLを生成(AIの指示間違えた) •YAMLからコマンドラインベースのサーバーを構築 •SwiftPackagesベースで動作
ローカルコンテナ デモンストレーション
コンテナベースで動くというけれども… https://github.com/notoroid/TiledFlipper/tree/feature/support̲cloud̲container •Pros •ソースコードはローカル環境と同じ •arm64/linux で起動確認 •Cons •ビルド時にSwift6.3 からSwift6.2 に変更しないとビルドが中断
•AI側でコンテナの結果を待ち受け方法が安定しない
ローカルでは動いた クラウドで動作するのか?
クラウドにコンテナをデプロイする https://github.com/notoroid/TiledFlipper/tree/feature/support̲cloud̲container •Pros •Google CloudのCloud Runと相性が良い •コンテナで(amd64/linux) で動作 •Cons •macOSから直接deployはできなかった
•Cloud Deploy経由でdeploy •ビルド時にSwift6.3 からSwift6.2 に変更しないとビルドが中断 •AI側でコンテナの結果を待ち受け方法が安定していない
ローカル/クラウドでの相違 ソースコード ツールチェイン ローカル macOS27 arm/Linux クラウド Googl Cloud Cloud
Run 同一 同一 Swift6.2 Swift6.3 通信 http/2 非セキュア Deploy - amd86/linx向 けに http/2 ビルドできず セキュア通信 Cloud Runを使 用
クラウドでわかっていない点 https://github.com/notoroid/TiledFlipper/tree/feature/support̲cloud̲container •認証済み接続 •認証された接続を確立する方法が不明 •ログへの接続 •クラウド側のログに接続する方法が不明 •デバッグはローカルサーバーのみ •Google Cloudのサービスアカウントへのアタッチが必要
まとめ •GoogleとAppleの提携でサーバーサイドSwiftが魅力的になりました •プラットフォームを跨いだネットワークスタックが整備されています •アプリとサーバーをSwiftプログラミングで実現可能です •macOS27からコンテナでの確認が可能となりました •クラウドへのdeployは整備途中という印象です
notoroid - Speaker Deck 参考 • gRPCとSwiftによるリアルタイム のアプリやサービスの構築 • https://developer.apple.com/
jp/videos/play/ wwdc2026/265 • コンテナマシンの詳細 • https://developer.apple.com/ jp/videos/play/ wwdc2026/389 • Platforms State of the Union • https://developer.apple.com/ jp/videos/play/ wwdc2026/102 • Swift Concurrency AsyncStreamを使ってみる • https://qiita.com/ tomoyuki̲HAYAKAWA/items/ 8b5a3a3b801fc622553f