📝 実装タスク一覧
✅ 基盤構築
- ✅ プロジェクト初期設定
- 📝 HTTP クライアント実装
- 📝 エラー型定義
- 📝 設定管理
📝 認証・認可機能
- 📝 OAuth 2.0 フロー実装
- 📝 サービスアカウント認証サポート
- 📝 スコープ管理
📝 API 機能実装
- イベント管理 API
- イベント作成機能
- ✅ Event構造体の定義
- ✅ 基本的なイベント作成機能の実装(タイトル、説明、開始・終了時間)
- 📝 参加者の追加機能
- 📝 場所情報の追加機能
- 📝 リマインダー設定機能
- 📝 カラー設定機能
- 📝 可視性(public/private)設定機能
- 📝 ビデオ会議リンクの自動生成機能
- イベント読み込み機能
- 📝 イベントIDによる単一イベントの取得
- 📝 日付範囲による複数イベントの取得
- 📝 検索クエリによるイベントの検索
- 📝 定期的なイベントの展開機能
- 📝 更新されたイベントの同期機能
- 📝 削除されたイベントの処理
- 共通基盤
- 📝 イベントのバリデーション機能
- ✅ 日時処理ユーティリティ
- ✅ タイムゾーン処理
- 📝 エラーハンドリング
- 📝 レスポンスのデシリアライズ処理
- イベント作成機能
📝 ユーティリティ機能
- 📝 エラーハンドリング補助機能
- 📝 リクエスト構築ヘルパー
- 📝 統合テストの作成
各機能は以下のPRに分割して実装を進めます:
- ✅ DONE: 完了
- 🔄 IN PROGRESS: 作業中
- 📝 TODO: 未着手
- HTTP クライアント実装
- エラー型定義
- 設定管理の基本実装
- Event構造体の定義
- シリアライズ/デシリアライズの実装
- 基本的なバリデーション機能
create_event
メソッドの実装- タイトル、説明、開始・終了時間の設定
- 基本的なレスポンス処理
get_event
メソッドの実装- イベントIDによる単一イベントの取得
- レスポンスのデシリアライズ処理
- ✅ 日時処理ユーティリティの実装
- ✅ タイムゾーン処理の実装
- ✅ 既存コードの日時処理の改善
- 参加者の追加機能
- 場所情報の追加機能
- 関連するテストの追加
- リマインダー設定機能
- カラー設定機能
- 可視性設定機能
- 日付範囲による複数イベントの取得
- 検索クエリによるイベントの検索
- ページネーション処理
- ビデオ会議リンクの自動生成機能
- 定期的なイベントの展開機能
- 更新されたイベントの同期機能
各PRの特徴:
- 各PRは独立して機能する最小単位
- テストも含めて完結するように設計
- レビューしやすい適切なサイズ
- 依存関係を考慮した順序
- 認証・認可: OAuth 2.0 およびサービスアカウントによる認証・認可処理
- イベント管理: イベントの CRUD 操作、検索、定期的なイベントの管理
- カレンダー管理: カレンダーの CRUD 操作、共有設定の管理
- リマインダー管理: リマインダーの CRUD 操作、イベントとの関連付け
CalendarClient
構造体は、Google Calendar API とのインタラクションを管理する主要なクライアントです。
pub struct CalendarClient {
http_client: HttpClient,
auth_config: AuthConfig,
base_url: String,
}
http_client
: HTTP リクエストを処理する内部クライアントauth_config
: 認証設定を保持する構造体base_url
: Google Calendar API のベース URL
new(auth_config: AuthConfig) -> Result<Self>
: 新しいクライアントインスタンスを作成create_event(event: Event) -> Result<Event>
: 新しいイベントを作成get_event(event_id: &str) -> Result<Event>
: イベントを取得update_event(event_id: &str, event: Event) -> Result<Event>
: イベントを更新delete_event(event_id: &str) -> Result<()>
: イベントを削除
@startuml
package "Google Calendar SDK" {
[CalendarClient]
[EventManager]
[CalendarManager]
[ReminderManager]
[AuthManager]
[HttpClient]
}
[CalendarClient] --> [EventManager]
[CalendarClient] --> [CalendarManager]
[CalendarClient] --> [ReminderManager]
[CalendarClient] --> [AuthManager]
[EventManager] --> [HttpClient]
[CalendarManager] --> [HttpClient]
[ReminderManager] --> [HttpClient]
[AuthManager] --> [HttpClient]
@enduml
この図は、SDK の主要なコンポーネントとその関係を示しています。
目的: Google Calendar のイベントを効率的に管理する
実装タスク:
- ✅ イベントの作成機能の実装
- 📝 イベントの読み取り・更新・削除機能の実装
- 📝 定期的なイベントの管理機能の実装
- 📝 イベント検索機能の実装
- 📝 テストケースの作成
ユースケース例:
- 会議スケジュールの自動登録
- イベントの一括更新
- 定期的なイベントの作成と管理
@startuml
actor User
participant CalendarClient
participant EventManager
participant HttpClient
database "Google Calendar API"
User -> CalendarClient: create_event()
CalendarClient -> EventManager: handle_event_creation()
EventManager -> HttpClient: send_request()
HttpClient -> "Google Calendar API": POST /events
"Google Calendar API" --> HttpClient: Response
HttpClient --> EventManager: Result
EventManager --> CalendarClient: Result
CalendarClient --> User: Created Event
@enduml
目的: Google Calendar の設定と共有を管理する
実装タスク:
- 📝 カレンダーの CRUD 操作の実装
- 📝 共有設定の管理機能の実装
- 📝 テストケースの作成
ユースケース例:
- 新しいカレンダーの作成
- カレンダーの共有設定の変更
- カレンダーリストの取得
@startuml
actor User
participant CalendarClient
participant CalendarManager
participant HttpClient
database "Google Calendar API"
User -> CalendarClient: create_calendar()
CalendarClient -> CalendarManager: handle_calendar_creation()
CalendarManager -> HttpClient: send_request()
HttpClient -> "Google Calendar API": POST /calendars
"Google Calendar API" --> HttpClient: Response
HttpClient --> CalendarManager: Result
CalendarManager --> CalendarClient: Result
CalendarClient --> User: Created Calendar
@enduml
SDKは以下のような構造で設計されています:
@startuml
skinparam componentStyle uml2
package "Google Calendar SDK" {
[CalendarClient]
[Authenticator]
[EventReader]
[EventWriter]
[CalendarReader]
[CalendarWriter]
[Response]
[Error]
}
package "Google Calendar API" {
[Calendar API]
}
CalendarClient --> Authenticator : uses
CalendarClient --> EventReader : uses
CalendarClient --> EventWriter : uses
CalendarClient --> CalendarReader : uses
CalendarClient --> CalendarWriter : uses
EventReader --> Response : returns
EventReader --> Error : returns
EventWriter --> Response : returns
EventWriter --> Error : returns
CalendarReader --> Response : returns
CalendarReader --> Error : returns
CalendarWriter --> Response : returns
CalendarWriter --> Error : returns
CalendarClient --> Response : returns
CalendarClient --> Error : returns
CalendarClient --> [Calendar API] : interacts with
@enduml
- CalendarClient: SDKのメインエントリーポイント。他のコンポーネントを統合し、APIとの対話を管理
- Authenticator: OAuth2.0認証とサービスアカウント認証を処理
- Response: API応答を標準化された形式でラップ
- Error: SDKのエラー型とエラーハンドリングを提供
- EventReader: イベントの読み取り操作(取得、検索、リスト化)を担当
- EventWriter: イベントの書き込み操作(作成、更新、削除)を担当
- CalendarReader: カレンダーの読み取り操作を担当
- CalendarWriter: カレンダーの書き込み操作を担当
- クライアントからの要求は
CalendarClient
で受け付け Authenticator
で認証を処理- 操作の種類に応じて適切なReader/Writerコンポーネントにディスパッチ
- Reader/WriterコンポーネントがGoogle Calendar APIと通信
- 結果を
Response
またはError
型でラップして返却
- 各コンポーネントは
Error
型を使用して一貫したエラーハンドリングを提供 - ネットワークエラー、認証エラー、APIエラーなどを適切に分類
- エラーメッセージは開発者にとって有用な情報を含む
- 環境変数やコンフィグファイルからの設定読み込み
- APIエンドポイント、タイムアウト、リトライ設定などの管理
- 認証情報の安全な管理
開発やテスト時に使用できるテスト用カレンダーID:
5e36da154f2b36a2ad38a79ef17b50626677582ca51d69bf8461003a4a90e20b@group.calendar.google.com
注意: このカレンダーIDはテスト用です。本番環境では適切なカレンダーIDを使用してください。