💪

FoundationのSwift PackageがBetaリリースされました。

2023/05/03に公開

Xcodeを用いた開発では、よく使うSwift Package。

ついに先日Swift で書き直されたFoundation PackageがBetaリリースされたので、変更点などを追ってみたいと思います。

https://www.swift.org/blog/foundation-preview-now-available/

Context

Xcodeを用いた開発では、基本的にFoundationというFrameworkを利用することが基本です。

このフレームワークは、ページにもあるように下記のような機能を内包しています。

原文)The Foundation framework provides a base layer of functionality for apps and frameworks, including data storage and persistence, text processing, date and time calculations, sorting and filtering, and networking. The classes, protocols, and data types defined by Foundation are used throughout the macOS, iOS, watchOS, and tvOS SDKs.

和文) Foundation フレームワークは、データ ストレージと永続性、テキスト処理、日付と時刻の計算、並べ替えとフィルタリング、ネットワークなど、アプリとフレームワークの機能の基本レイヤーを提供します。 Foundation によって定義されたクラス、プロトコル、およびデータ型は、macOS、iOS、watchOS、および tvOS SDK 全体で使用されます。

もしあなたが書いているSwift / Objective-Cのコードで明示的に利用していなかったとしても、内部では利用されているケースがほとんどです。

例えば、アプリ開発でよく使うJSONDecoderもFoundationフレームワークをimportしています。

このように、アプリ開発の多くの部分で暗黙的・明示的を問わず利用されているFoundationフレームワークですが、iOS2.0の時代から存在するため、Swiftで書かれていないなどの点を始め、いくつかの改善点がありました。

昨年に発表された The Future Of Foundationという記事でそれらの改善を行っていく旨がアナウンスされました。

上記記事では、下記4つの点に絞って、Foundationの改善を進めていく、と書かれています。

  • No more wrapped C code (ラップされたCコードの排除及び実装のNative Swift化)
    • パフォーマンスが向上します
  • Provide the option of smaller, more granular packages (バイナリサイズを小さく保つための、Foundationの分割化)
    • バイナリサイズを小さくすることが可能になります。
  • Unify Foundation implementations(API実装のプラットフォーム差異をなくす)
    • 別プラットフォームで利用したとしても、バグのリスクを減らします。
  • Open contribution process (FoundationのOpen Source化)
    • Foundationに対して、より多くの開発者がContributionできるようになります。

今回のBetaリリースはその一環と言えるものです

主な変更点

今回のBetaリリースでは、下記タイプが利用可能です。

  • FoundationEssentials
    • AttributedString
    • Data
    • Date
    • DateInterval
    • JSONEncoder
    • JSONDecoder
    • Predicate
    • String extensions
    • UUID
  • Internationalization
    • Calendar
    • TimeZone
    • Locale
    • DateComponents
    • FormatStyle
    • ParseStrategy

上記の実装はSwiftで書き直されているため、以前のC/Objective-CのFoundationより大きな利点があります。

例えば、

  • Calendarのパフォーマンスは一部の機能において20%以上高速
  • FormatStyleを利用した日付の書式設定は、150%高速
  • JSONのデコード時間が、200%から500% 改善

おわりに

Appleプラットフォーム向けのアプリ開発でコアに利用されてきたFoundationフレームワークがSwiftで完全に書き換えられようとしているのは、現役のSwiftエンジニアとしてとても嬉しいことで、これらの改善がパフォーマンスの改善という誰にでもわかりやすい形で一般のユーザーにも恩恵を与えてくれるであろうということにもとてもワクワクしています。

まだSwiftでのFoudnation Packageは開発途上ではありますが、数年後私達が開発するiOSアプリにもそれらの機能が実装されると思うと、とてもうれしく思います。

今後とも興味深く見守っていきたいと思います

(ContributeできそうなものがあればContributeしてみたいかも・・・)

ではでは。

Discussion