とらのメモ

IT関係やガジェットについての雑記

try!Swift2025 参加ログ

try!Swift 2025のフォトスポット

こんにちは、とらです。
気がついたら2週間経過していましたが、try!Swift行ってきたログです

4/9 - 4/11の3日間、立川ガーデンパークで開催されたSwiftカンファレンスに行ってきました。

会場フォト

過去ロゴ
会場とステージ
2日目アフターパーティー
サービスコーヒーとオリジナルのお菓子

ノベルティ

例年通り、各ブースで色々貰いました

デザイナーさんの作ったステッカーがかなり可愛いかったです
名札に貼れるように作られたステッカーの発送に驚き

製作者の方に「ぜひ名札に貼ってデコってください」と言われたので色々貼った様子↓

会場

これまでのtrySwiftは新宿や渋谷で開催されていたが、今回から初の試みとして立川で開催することになったらしい

外観はガラス張りになっていてかなり綺麗 中も席もかなり多くてかなり広々していて良かった 音響もしっかりとしていて発表者の声が聞こえないなどの問題もなくかなり良い会場だと思った

不満点として飲食禁止だったので、セッション後半になると眠気が凄まじかった(フィードバック済)

Webサイトについて

セッションではほとんど触れられていませんでしたが、 今年からtry!SwiftのWebサイトがSwiftによって作られるようになりました。

Ignite(https://github.com/twostraws/Ignite)という静的サイトジェネレータライブラリが使われています。


このIgniteも去年のtry!Swift2024のセッションにて、Paul Hudsonさんから発表されました。

  • HTMLは30年以上ウェブページ構造の記述に使用されてきたが、誤ったタグ記述やクロスブラウザ対応、レスポンシブ対応、アクセシビリティ確保など、多くの問題がある。
  • Appleが2019年に発表したResult Buildersを用いることでSwiftのコードを宣言的に書けるようになり、HTMLの記述が簡単かつエラーを減らせる。
  • SwiftUIと同じ感覚でHTMLを書く仕組みを紹介し、条件分岐やレスポンシブデザインのためのコードも簡単に書けるようになる。
  • ウェブフレームワークのBootstrapを導入することで、クロスブラウザ対応、レスポンシブデザイン、複雑なUI要素(ドロップダウン、カルーセル等)、アクセシビリティ対応の問題を同時に解決できる。
  • 最終的にSwiftの開発者向けに最適化したHTMLレンダリングフレームワークIgnite」を作成し、Bootstrapと連携してSwiftUIのような記法で高速かつ美しいウェブサイト構築が可能になる。
  • IgniteMarkdownにも対応しており、検索エンジン最適化やSNS共有、アクセシビリティを考慮した静的サイトをSwiftだけで構築可能。

引用元:

セッションについて

今年はアップロードが早く、既にYoutubeの方にセッションのフルはアップロードされているので、AIを使用して要約させました。興味のあったセッションを掻い摘んで共有します。

興味があれば各セッションの動画を貼っておくので見てみてください(誰でも無料で見ることができます)

iOS15,16,17の新機能

  • 日付や数値、コレクションを簡単かつ安全にフォーマットできるformattedメソッドがiOS 15から提供。従来のDateFormatterの間違いを防止する。
  • SwiftUIのprivacySensitive修飾子(iOS 15〜)を使うと、アプリがバックグラウンド時に特定のビューの内容を自動で隠せる。ただしスクリーンショットには別の方法が必要。
  • Toggleをボタン風にスタイリングできるtoggleStyle(.button)修飾子がiOS 15から利用可能。
  • iOS 16からは、UIKitアプリでSwiftUIを簡単に使えるUIHostingConfigurationが追加され、UITableViewCellやUICollectionViewCellに直接SwiftUIビューを表示可能。
  • SwiftUIのTextFieldは、iOS 16以降で縦方向にスクロール可能になり、長い入力内容でも視認性が向上する。
  • iOS 17では、検索結果なしの画面を簡単に表示できるContentUnavailableView.search、および簡単に課金画面を作成できるSubscriptionStoreViewが導入された。課金フローの分析用イベントも簡単に設定可能。
  • SwiftUIのスクロールビューがiOS 17から強化され、ページングやビュー単位のスクロール停止が簡単に実装可能になった。
  • GeometryReaderを使わず相対的なレイアウトを実現できるcontainerRelativeFrameと、レイアウトを崩さず視覚効果を追加できるvisualEffectがiOS 17で追加。
  • 数値表示の変化を美しくアニメーション化できるcontentTransition(.numericText)がiOS 17から利用可能で、特にカウントダウン表示に最適。

弊社アプリは最低バージョンを切ってからじゃないとコードに追加しない方針なので
現在の最低バージョンである16と、次に最低バージョンになる予定のiOS17の追加機能振り返りは改めて振り返る機会になり、ありがたいセッションでした。

SwiftUI Textを使った特殊効果

  • Paul HudsonがSwiftUIのTextを使った特殊効果(Word Art風の演出)を紹介。
  • 1991年のMicrosoft OfficeのWord Artを例に、文字の視覚効果の歴史を振り返る。
  • SwiftUIのテキストは「Lines(行)」「Runs(書式が同じ文字列)」「Glyphs(個々の文字)」の3要素で構成されている。
  • iOS 18からはSwiftUIのTextRendererプロトコルを使い、文字単位で自由に描画が可能になった。
  • 独自の属性を定義して特定の文字列を強調表示する仕組みを実演。
  • 各文字を波形やランダムな震動で動かすアニメーションやブラー効果を適用する方法を紹介。
  • より高度な視覚効果(遠近感やカーブテキスト)にはMetalを用いることが可能で、ピクセルレベルでの操作ができる。
  • SwiftUIとMetalを組み合わせることで、高速で複雑なグラフィック効果を実現可能。
  • 講演で紹介したコードをまとめたオープンソースmacOSプロジェクト『Prismic』が公開される。

最近のAppleっぽいワードアートもSwiftで再現可能
前回のIgniteと合わせると、画像を使わずにワードアートで90年代のようなサイトが作れそうで面白いなと思いました。

自分は98年生まれなので90年代文化をほとんど触ったことがないですが...


Prismicのサンプルコードで触ってみた

SwiftUI APIデザインの教訓: 手続き型APIと宣言型世界の橋渡し

  • SwiftUIでカメラAPIを宣言的に設計する方法の提案。
  • 従来のカメラAPI(AVFoundation)は手続き型であり、SwiftUIの宣言的な設計と相性が悪い。
  • SwiftUIのViewは「画面部品」ではなく、JSONYAMLに似た「アプリ構造」を表現するものである。
  • カメラセッションのような重いオブジェクトは@Stateを使い、一度だけ初期化してライフサイクルを適切に管理すべき。
  • 入出力設定はSwiftUIの子Viewとして宣言的に定義し、設定情報を親Viewに伝えるためにPreferenceKeyを使用する。
  • 手続き型処理(写真撮影など)はSwiftUIが許可する「安全領域」(ボタンアクション、onChange等)に限定し、プロキシオブジェクトとasync/awaitを使う。
  • SwiftUIではクロージャが非宣言的で扱いづらいため、可能なら非同期処理(async/await)を用いてクロージャを避ける。
  • 発表で紹介されたサンプルコードはGitHubで公開済み(Capture UI)。

引用元:

全体的な感想

  • 今年はDeNAさんから4人くらい登壇されていて個々のエンジニアの強さを感じた
  • 真面目なセッションは発表内容の難しさ+去年同様英語の聞き取りが困難だったので動画で復習した
  • VisionOSの話が4セッションくらいあったが、AppleのMRは購入コストが高すぎて購入が躊躇われるので、廉価版が出るのを期待してる(自分もまだ買えてない)