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
notoroid
August 29, 2026
Programming
41
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
Flow は今どうなっているか
mizdra
PRO
0
780
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
350
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
700
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
バグを直したら useEffect が消えた
colorful12
3
780
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
110
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.8k
業務時間外もAIに働いてもらう話
colorful12
2
9.2k
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
130
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
560
信頼性の目標を誰も求めてない
shubox
0
430
初めての模倣学習とVLA
natsutan
0
340
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
Paper Plane
katiecoart
PRO
2
53k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Prompt Engineering for Job Search
mfonobong
0
420
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
430
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
510
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Mind Mapping
helmedeiros
PRO
1
340
Making Projects Easy
brettharned
120
6.7k
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