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
48
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
55
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
350
信頼性の目標を誰も求めてない
shubox
0
480
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
260
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
650
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
120
typoなんかねぇよ
raspython3
0
660
初めての模倣学習とVLA
natsutan
0
440
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
130
Oxlintはいいぞ(続)
yug1224
1
530
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
800
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
130
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
140
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Between Models and Reality
mayunak
4
440
Crafting Experiences
bethany
1
280
sira's awesome portfolio website redesign presentation
elsirapls
0
390
So, you think you're a good person
axbom
PRO
2
2.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
330
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Making Projects Easy
brettharned
120
6.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Done Done
chrislema
186
16k
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