🤖

AppleのDistributed Frameworkは〇〇だった。

2024/01/04に公開

※GPTに書かせてる文章があるので、おかしいところは突っ込んでください。

Distributed Frameworkは、複数のデバイス間でのデータやタスクの分散処理を可能にするためのフレームワークです。

https://developer.apple.com/documentation/distributed

Distributed Frameworkを使用することで、アプリ開発者は以下のような機能を実現することができます。

  • バックグラウンドタスクの最適化
  • デバイス間でタスクを分散
  • リアルタイム処理の強化
  • 拡張性の向上

Distributed Frameworkは、バックグラウンドでのデータ処理やタスクの実行を最適化します。アプリはユーザーの操作に影響を与えることなく、データ処理を行うことができます。特にリアルタイムでのデータ更新が必要なアプリケーションにおいて重要です。


今回はDistributed FrameworkについてOSI参照モデルを参考に、Distributed Frameworkがもたらす恩恵について考察していこうと思います。

OSI参照モデルの基本

OSI参照モデルは、ネットワーク通信を理解するための標準モデルです。通信過程をいくつかの階層(レイヤー)に分け、各レイヤーが特定の機能を担当します。

日立情報通信エンジニアリング・OSI参照モデルとは

具体例: ネットワーク通信

例えば、アプリケーション層(OSIモデルの最上層)での開発を考えてみましょう。開発者がWeb APIにデータを要求する際、彼らはHTTPリクエストを作成し、レスポンスを処理します。このプロセスでは、下層のTCP/IPプロトコル、インターネット層のIPアドレスのルーティング、物理層のデータ転送の詳細などは意識されません。このようにOSIモデルは下層のレイヤーを隠蔽化して考えることができます。

なぜ隠蔽化が重要か

  • 複雑性の低減: 隠蔽化により、開発者は特定のレイヤーに特化した作業に集中でき、他のレイヤーの複雑性に気を取られることがありません。
  • 再利用性の向上: 一つのレイヤーで開発された機能やプロトコルは、他のプロジェクトや異なる環境でも容易に再利用できます。
  • 保守性の向上: 下層レイヤーの変更が上層レイヤーに影響を与えにくいため、システムの保守が容易になります。

OSI参照モデルにおける隠蔽化は、下層のレイヤーの複雑さを上層レイヤーから隠すことにより、開発の簡素化を図る重要な概念です。このように、隠蔽化は複雑なネットワークシステムを効率的に管理し、開発プロセスをスムーズに進めるための鍵となります。

アプリケーション層におけるシステムもレイヤー成している

現代のアプリ開発においてもアプリは複数のレイヤーに分けられており、各レイヤーは特定の機能や責任を持っています。例えばクライアントがサーバーとAPIで連携すする際を考えてみましょう。

1. API(ここではmethod,functionを指します)

APIは、アプリケーションが提供する機能を定義し、外部のクライアントや他のアプリケーション部分とのインターフェースを提供します。このサブレイヤーでは、具体的なビジネスロジックやデータ操作が行われます。

2. データのエンコード/デコード

データのエンコード/デコードサブレイヤーは、アプリケーションが使用するデータの形式を管理します。JSONやXML、Protobufといったフォーマットでデータをエンコードまたはデコードし、通信に適した形に整える役割を果たします。

3. 通信

このレイヤーは隠蔽化されたOSIそのものです。アプリケーションが外部と通信する方法を担います。HTTPやgRPCなどのプロトコルを使用してネットワーク越しにデータを送受信する責任を持ちます。この層により、アプリケーションはサーバー、他のアプリケーション、あるいはクライアントデバイスと情報をやり取りできます。

ネイティブアプリ開発におけるモデルの定義とその利用

ネイティブアプリ開発では、データの構造やビジネスロジックを定義するためにモデルが広く用いられます。これらのモデルは、アプリケーションの根幹を形成し、APIレイヤーでのデータ操作、通信レイヤーでのデータ送受信、データのエンコード/デコードレイヤーでのデータ形式の変換など、アプリケーションの各レイヤーで活用されます。モデルの使用は、アプリケーションのデータフローを明確にし、開発プロセスを効率化するのに役立ちます。また、モデルを明確に定義することで、アプリケーションの保守や拡張が容易になります。

Distributed Frameworkによるアプリケーション層の効果的な隠蔽化

Distributed Frameworkは、アプリケーション層における通信とデータのエンコード/デコードの処理を効果的に隠蔽化します。このフレームワークは、開発者がAPIの実装に集中できるように設計されており、OSI参照モデルのような下層の詳細に深入りする必要をなくします。

通信とデータのエンコード/デコードの隠蔽化

Distributed Frameworkにおいて、通信プロトコルやデータのエンコード/デコード処理はフレームワークによって内部的に処理されます。これにより、開発者はHTTP、TCP/IP、gRPCなどの複雑な通信プロトコルや、JSON、XML、Protobufといったデータフォーマットの具体的な処理を意識することなく、アプリケーションの主要な機能開発に注力できます。

API開発への集中

Distributed Frameworkは、API機能の実装に重点を置いています。開発者はビジネスロジックやデータ操作のメソッド、関数を定義することに集中でき、下層の通信やデータ処理の複雑さから解放されます。これにより、よりクリーンでメンテナンスしやすいコードを書くことが可能になり、開発プロセス全体の効率化と品質向上が図れます。

開発の効率化とメリット

Distributed Frameworkを使用することで、開発者はより効率的にアプリケーションを構築できます。内部的な通信とデータ処理の隠蔽化は、開発時間の短縮とエラーの減少に寄与し、アプリケーションの安定性と拡張性を向上させます。また、新しい通信手段やデータフォーマットが登場した場合でも、フレームワークの更新によって容易に対応できるため、将来の技術変化にも柔軟に適応可能です。

DistributedActorSystemの柔軟性

DistributedActorSystemは、分散アクターを一意に識別し、リモートのプロセスと通信するためのシステムです。各分散アクターには固有のIDが割り当てられ、これにより異なるデバイスやプロセス間での識別と通信が可能になります。簡単に言うと、このシステムは分散アプリケーション内のアクター間でのデータやメッセージのやり取りを管理し、アクター同士が効率的に協力して動作することを支援します。

通信レイヤーの切り替えメリット

DistributedActorSystemの重要な特徴は、通信レイヤーを容易に変更できることです。このシステムはプロトコルに準拠しており、異なる通信手段への対応が柔軟に行えます。たとえば、TicTacFishでは、サーバー間通信の他にローカルネットワークでの通信に関するサンプルコードも提供されています。これにより、開発者は異なる通信環境に適応するアプリケーションを容易に構築できます。

APIからは隠蔽されているので、その変更を意識する必要はありません。

Actorの利用とサーバーサイドの重要性

現在、サーバーサイドでのSwiftの普及は限定的ですが、Distributed Frameworkを最大限に活用するにはサーバーサイドSwiftが不可欠です。このフレームワークを用いると、サーバーサイドでも通信処理が隠蔽化され、開発に集中できます。また、クライアントとサーバー間で同じモデルを共有できるため、効率的な開発が可能になります。これにより、サーバーサイドとクライアントサイドの一貫性が保たれ、全体のアプリケーション開発がスムーズになります。

Server Side Swiftの現状

Swiftのサーバーサイド開発においては、IBMが支援していたKituraプロジェクトがありましたが、IBMは後にこのプロジェクトから撤退しました。この撤退にもかかわらず、Swiftのサーバーサイド開発は引き続き進行しており、Swift 6ではサーバーサイド開発の強化が目指されています。新しいOSサポートやビルド時間の改善などが含まれています。

VaporはSwiftのサーバーサイド開発において注目のフレームワークです。Swiftのサーバーサイド機能を拡張し、開発者が簡単にウェブアプリケーションやAPIを構築できるようにしています。

https://vapor.codes/

https://opensource.apple.com/projects/swiftnio/

Swift 6: サーバーサイド開発の強化

Swift 6におけるサーバーサイド開発の強化には、以下の重要な機能と改善が含まれます

1. 改善された並行処理サポート

Swift 6は、並行処理のサポートを大幅に強化し、新しい言語形式とツールを導入して、並行コードの記述を容易にすることを目指しています。

2. ジェネリクスの強化

Swiftの強力な型システムとジェネリクスのサポートがさらに強化され、ジェネリックコードの作成が容易になります。

3. Swiftパッケージマネージャの改善

Swift Package Managerの機能が向上し、バイナリ依存関係のサポートの強化やキャッシュの改善が行われます。

4. エラーハンドリングの改善

復旧可能なエラーや復旧不可能なエラーのサポートが拡張され、エラーハンドリングシステムがさらに強化されます。

5. デバッグの改善

デバッグ機能の改善により、コードのデバッグが容易になります。

6. パフォーマンスの向上

最適化とメモリ管理の強化により、Swiftのパフォーマンスがさらに向上します。

7. 相互運用性の向上

CやC++など他の言語との互換性がさらに向上し、Swiftの適用範囲が広がります。

これらの機能と改善により、Swift 6は現代のアプリケーション開発においてさらに優れた言語になることが期待されています。

まとめ

開発を歴史的に考えても隠蔽化は効率的に機能し、不可逆的な働きをします。
その証拠としてクライアントのネイティブ開発を行う人は底レイヤーでの通信に関してのほとんど触ることがないはずです。車輪の再発明とよく言われますが、Distributed Frameworkは僕たちが繰り返し行ってきた開発での通信部分を置き換え新しい開発体験を作るものであると考えます。

Discussion