2024/10/10
laprasdrum.icon 1010
/icons/hr.icon
iOSの起動時処理
main() が実行されるまでの処理をprewarmingという。
https://scrapbox.io/files/67071f33cd8ec5001c47d314.png
ただ、実際はprewarming中にAppDelegateのfunctionが呼ばれているらしく、Appleのこのドキュメントは不正確であるという指摘がされている。
特に、UserDefaultsはKeyChainのような機密データストアでないという位置づけにもかかわらずprewarming時にアクセスできない問題があるらしい。
その結果、Live ActivityでUserDefaultsにアクセスする場合はアプリの再起動時に100%問題を引き起こすらしい。
この記事ではUserDefaultsの代わりに、同様の機能を果たすplistをFileManagerで管理する手法を提案し、ライブラリ化してる。
バイナリをライブラリとして扱う
macOSアプリにffmpegを組み込んだ話。
試してみたい。
TipKitのデザインをカスタムする
Modifierでカスタムレイアウトを作れば良い。
Package.resolvedが消されるバグ
まだ治らない。
Dangerでdeletion commitを抑止するのはあり。
大規模なレガシーコードの現代化 with GenAI
RESTful API Patterns & Practices • Mike Amundsen • GOTO 2024
1. パターン思考の重要性
パターン思考は、Christopher Alexanderの建築理論から派生した概念です。ソフトウェア開発に適用されると、以下のような利点があります:
- 再利用可能な解決策: 共通の問題に対して、繰り返し適用できる解決策を提供します。
- 効率的なコミュニケーション: 開発者間で共通の語彙を提供し、複雑な概念を簡潔に伝えることができます。
- 柔軟性と拡張性: 特定の実装に縛られず、様々な状況に適用できる抽象的な解決策を提供します。
講演者は、パターン思考を帰納的推論と関連付けています。これは、特定の観察から一般的な結論を導き出すプロセスです。ソフトウェア開発において、これは個々の実装経験から一般的なパターンを見出すことを意味します。
2. Web中心のパターン思考
講演者は、Webベースのシステムを設計する際の3つの主要な柱を提示しています:
- メッセージ: 情報をどのように表現し、送信するかを定義します。例えば、JSON、XML、HTMLなどの形式があります。
- アクション: システムで実行可能な操作を定義します。RESTfulシステムでは、GET、POST、PUT、DELETEなどのHTTPメソッドがこれに相当します。
- 語彙: メッセージの意味を定義します。これは特定のドメイン(例:銀行業務、医療など)に固有の概念や用語を含みます。
これらの要素を適切に組み合わせることで、柔軟で拡張性の高いAPIを設計できます。
3. デザインパターン
デザインパターンは、APIの全体的な構造と動作を定義します。主要な概念には以下があります:
- 相互運用性: 異なるシステム間でのスムーズな通信を可能にします。
- 互換性: 新しいバージョンが古いクライアントと互換性を保つようにします。
- ドメイン固有の共有: 特定の業界や分野に関連する概念を効果的に表現します。
講演者は特に「問題空間の記述」の重要性を強調しています。これは、APIが解決しようとしている問題を明確に定義し、ドキュメント化することを意味します。これにより、開発者はAPIの目的と制約を理解しやすくなります。
4. クライアントパターン
クライアントパターンは、APIを消費するアプリケーションの設計に関するものです。主要な概念には以下があります:
- 適応性: クライアントがサーバーの変更に柔軟に対応できるようにします。
- 状態管理: クライアントが自身の状態を管理し、複雑な操作を実行できるようにします。
- 目標指向: クライアントが特定の目標を達成するために複数のAPIを組み合わせて利用できるようにします。
これらのパターンを適用することで、より堅牢で柔軟なクライアントアプリケーションを開発できます。
5. サービスパターン
サービスパターンは、APIのサーバーサイド実装に関するものです。主要な概念には以下があります:
- モデルリークの防止: 内部データモデルの詳細がAPIを通じて露出しないようにします。
- 内部モデルの変換: データベースモデルをAPIレスポンスに適切に変換します。
- アクションの表現: 内部機能をAPIエンドポイントとして適切に表現します。
講演者はまた、メタデータの重要性を強調しています。これには、APIのバージョン、利用可能なエンドポイント、エラー情報などが含まれます。適切なメタデータを提供することで、クライアントはAPIをより効果的に利用できるようになります。
6. データパターン
データパターンは、APIを通じてデータを効果的に管理し、提供する方法に関するものです。主要な概念には以下があります:
- データストレージの隠蔽: 具体的なデータベース技術をクライアントから隠蔽します。
- クエリ言語の実装: 効果的なデータ検索を可能にするクエリ機能を提供します。
- メタデータの返却: データに関する追加情報(総レコード数、ページング情報など)を提供します。
これらのパターンを適用することで、データの柔軟な管理と効率的な提供が可能になります。
7. ワークフローパターン
ワークフローパターンは、複雑なビジネスプロセスをAPIを通じて実現する方法に関するものです。主要な概念には以下があります:
- タスクとジョブ: 長時間実行される操作を管理します。
- 共有状態: 複数のサービスにまたがるワークフローの状態を管理します。
- ワークフローの記述: コード、ドキュメント、またはドメイン固有言語でワークフローを表現します。
これらのパターンを適用することで、複雑な業務プロセスをAPIを通じて効果的に実装できます。
全体として、この講演は、RESTful Web APIの設計と実装に関する包括的なガイドを提供しています。パターン思考を中心に据えることで、開発者は柔軟で拡張性が高く、長期的に維持可能なAPIを作成するための強力なツールセットを得ることができます。