Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ServerSideSwiftAndContainerMachine - アプリ実装そのままクラウド
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
notoroid
August 29, 2026
Programming
43
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
54
New_features_in_Xcode26.3_to_Xcode26.4.pdf
notoroid
0
100
iOS26 オーディオ録音新機能 - iOS26 AVInputPickerInteraction
notoroid
0
150
Info.plist - after Xcode26.
notoroid
0
92
GeometryReader - SwiftUI
notoroid
0
120
iOS 26 SDKの新機能 (liquid抜き) - iOS26orLaterUpdateAndSceneForUIKit
notoroid
0
260
UIテスト自動化サポート- Testbed for XCUIAutomation practice
notoroid
0
260
UIViewController - Interactive PopGesture
notoroid
0
120
Xcodeショートカット 2025年版
notoroid
0
150
Other Decks in Programming
See All in Programming
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
250
XHTMLが残したもの
yosuke_furukawa
PRO
1
240
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
510
Flow は今どうなっているか
mizdra
PRO
0
820
源内ハンズオン概要編
hideg
0
230
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
500
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
720
ALB ログから Trace を気合で繋げる技術
fohte
7
840
信頼性の目標を誰も求めてない
shubox
0
460
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
180
業務時間外もAIに働いてもらう話
colorful12
3
9.6k
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.4k
Featured
See All Featured
Abbi's Birthday
coloredviolet
3
9.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A designer walks into a library…
pauljervisheath
211
24k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
310
Tell your own story through comics
letsgokoyo
1
1.1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
430
How to train your dragon (web standard)
notwaldorf
97
6.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
What's in a price? How to price your products and services
michaelherold
247
13k
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