>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Kotlin

KotlinでAWSを痛苦なく書く方法:Javaレガシーからの解放

KotlinでAWS向けに開発したことがある開発者は、おそらくJava SDK v2を覚えているだろう。Kotlinプロジェクトでの使用は可能だが、CompletableFutureをコルーチンでラップ постоянно и долго、Javaの長いbuilder構文に我慢し、余計な依存関係をビルドにドラッグすることになる。AWSチームはこれを公式プロジェクトaws-sdk-kotlinで解決した — Kotlin向けにゼロから書かれたクライアントだ。

ネイティブKotlin SDKで何が変わるか

このライブラリの主な利点は、ネイティブコルーチンサポートとKotlin Flowだ。コールバックのスパゲッティ性やasyncラッパーは不要。S3、DynamoDB、Lambdaへの呼び出しは、Kotlinの他の非同期コードと同じ方法で書ける。

2番目の重要な点は、マルチプラットフォームのためのアーキテクチャ基盤だ。このライブラリはKotlinマルチプラットフォームをターゲットとし、複数のターゲットプラットフォームでそのまま動作する:

  • JVM — KtorやSpringでのクラシックバックエンド用
  • Android — モバイルアプリケーション用
  • GraalVM Native Image — コンパイル済みバイナリの高速起動用

Smithyによるコード生成とターゲットビルド

AWSには数百ものサービスがある。すべてのサービスのクライアントを単一のライブラリにコンパイルしてパッケージすると、最終成果物のサイズが馬鹿馬鹿しいほど大きくなる。SDK авторы решили эту проблему через генерацию кода на основе декларативного языка Smithy.

リポジトリにはすべてのAWSサービスの事前生成コードは含まれていない。コードはプロジェクトビルド時に生成される。SDKをソースから自分でビルドする場合、アプリケーションで実際に必要なサービスのみを指定できる。

設定のフィルタリングはファイルlocal.propertiesで行われる:

ビルドから特定のサービスを削除する必要がある場合は、マイナス記号を使用する:

コード生成はGradleを通じてトリガーされる:

その後、生成されたモジュールは標準タスクでビルドされる:

このアプローチにより、個々のSDKモジュールのローカル開発とテストの時間が節約される。

Dokkaによるドキュメントビルド

コードのドキュメント化には、Dokka — KDoc形式に対応するJetBrainsの標準ツールが使用されている。

APIリファレンスをローカルで生成するために、リポジトリは以下のコマンドを提供している:

完成したHTMLドキュメントはディレクトリbuild/dokka/htmlMultiModuleに出力される。ブラウザで開くには、IntelliJ IDEAに組み込まれたものなど、シンプルなHTTPサーバーなら何でもよい:

Kotlin SDKへの移行は值得か

リポジトリにはGitHubで約500個のスターがある。この数字は比較的少ないが、プロジェクトが長い間アクティブ開発ステータスにあったことと、多くのチームが慣れたJava SDK v2を使用しているからだ。それでも、このライブラリはすでに本番対応であり、Amazonによって正式にサポートされている。

このライブラリは以下の4つのシナリオで役立つ:

  • 重いJava依存関係をドラッグせずにAWSサービスへの直接アクセスが必要なAndroidアプリを作成している場合。
  • コールドスタート速度が重要なGraalVM Native Imageコンパイルを伴うAWS Lambda用のKotlinサーバーレス関数を書いている場合。
  • バックエンド全体がコルーチンとKtorで構築されており、一貫した非同期コードスタイルを維持したい場合。
  • モバイルとサーバーのロジックを組み合わせたマルチプラットフォームモジュールを作成している場合。

古いJava SDKを使用したSpring Bootの大型レガシープロジェクトが既に存在する場合、急いで書き換える意味はない。しかし、Kotlinでの新しいサービスやアプリケーションには、このSDKが論理的な選択に見える。

関連プロジェクト