Upgrade to Pro — share decks privately, control downloads, hide ads and more …

個人開発アプリでの Swift Macros 紹介

swiftty
October 17, 2023

個人開発アプリでの Swift Macros 紹介

【ハイブリット開催】Mobile勉強会 Wantedly × チームラボ #11
https://wantedly.connpass.com/event/297601/

で発表した資料です

swiftty

October 17, 2023
Tweet

More Decks by swiftty

Other Decks in Technology

Transcript

  1. Agenda 1. Swift Macros とは 2. 開発中のアプリでの利用例 ◦ member ◦

    peer ◦ accessor 3. 使ってみた感想 © 2023 Wantedly, Inc.
  2. Swift Macros • ソースコードのコンパイル時にコードを変換し、繰り返し書く手 間を省く • Swift では 2 種類のマクロがある

    ◦ Freestanding macros ▪ 引数のみに依存して独立して展開される ▪ #function, #warning ◦ Attached macros ▪ 宣言に付属して対象の情報を利用して展開される ▪ @Observation © 2023 Wantedly, Inc. https://docs.swift.org/swift-book/documentation/the-swift- programming-language/macros/
  3. Swift Macros • ソースコードのコンパイル時にコードを変換し、繰り返し書く手 間を省く • Swift では 2 種類のマクロがある

    ◦ Freestanding macros ▪ 引数のみに依存して独立して展開される ▪ #function, #warning ◦ Attached macros ▪ 宣言に付属して対象の情報を利用して展開される ▪ @Observation © 2023 Wantedly, Inc. https://docs.swift.org/swift-book/documentation/the-swift- programming-language/macros/
  4. 開発中のアプリの紹介 • Swift 5.9, iOS17 SDK の機能 を色々試してみる環境 • Apple

    のドキュメントブラウザア プリ © 2023 Wantedly, Inc. https://github.com/swiftty/apple-documentation
  5. ImplicitInitMacro • init を構築 ◦ init() { for-loop } ◦

    self.foo = foo を組み立て © 2023 Wantedly, Inc.
  6. SwiftUIEnvironmentMacro • peer マクロで EnvironmentKey に適合する型を生成 ◦ 返却する Syntax は

    ExpressibleByStringInterpolation に 適合しているので文字列で実装することも可能 © 2023 Wantedly, Inc.
  7. SwiftUIEnvironmentMacro • accessor マクロも同様に getter と setter の Syntax を

    生成 ◦ peer で生成される型を参照 © 2023 Wantedly, Inc.
  8. Tips • Swift AST Explorer がやっぱり便利 ◦ https://swift-ast-explorer.com/ ◦ どこでどの

    Syntax が現れるかを確認し て、キャストするため • SwiftSyntaxMacrosTestSupport の assertMacroExpansion も期待 する生成結果かどうか確認しやすい © 2023 Wantedly, Inc.
  9. 感想 • ボイラープレートで煩雑に感じていたコードがマクロでスッキ リするのは良い体験 • resultBuilder や ExpressibleByStringInterpolation のサポートで直感的に追加するコードを書ける •

    dependency に swift-syntax が必要 ◦ 3rd party の Macro ライブラリだと微妙にニーズが満たせなかった り swift-syntax によって依存関係がシビアになりがちなので、しば らく自作が良さそう © 2023 Wantedly, Inc.