

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# の基礎 AWS SDK for Rust
<a name="fundamentals"></a>

Rust プログラミング言語の基礎 AWS SDK for Rust、 SDK for Rust クレートに関する情報、プロジェクト設定、SDK for Rust による Tokio ランタイムの使用など、 を使用したプログラミングの基本について説明します。

## 前提条件
<a name="prerequisites"></a>

を使用するには AWS SDK for Rust、Rust と Cargo がインストールされている必要があります。
+ Rust ツールチェーン: [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install) をインストールします。
+ `cargo install cargo-component` コマンドを実行して、`cargo-component` [ツール](https://github.com/bytecodealliance/cargo-component)をインストールします

### 推奨ツール:
<a name="recommended-tools"></a>

次のオプションツールを IDE にインストールすると、コード補完やトラブルシューティングに役立てることができます。
+ rust-analyzer 拡張機能については、「[Rust in Visual Studio Code](https://code.visualstudio.com/docs/languages/rust)」を参照してください。
+ Amazon Q Developer については、「[IDE に Amazon Q Developer 拡張機能またはプラグインをインストールする](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html)」を参照してください。

## Rust の基礎
<a name="rust-fundamentals"></a>

以下は、知っておくと役立つ Rust プログラミング言語の基本です。詳細に情報についてはすべての参照先は、「[Rust プログラミング言語](https://doc.rust-lang.org/book/title-page.html#the-rust-programming-language)」です。
+ `Cargo.toml` は標準の Rust プロジェクト設定ファイルで、プロジェクトに関する依存関係とメタデータが含まれています。Rust ソースファイルには、`.rs` ファイル拡張子があります。「[Hello, Cargo\$1](https://doc.rust-lang.org/book/ch01-03-hello-cargo.html)」を参照してください。
  + `Cargo.toml` はプロファイルでカスタマイズできます。「[リリースプロファイルを使用したビルドのカスタマイズ](https://doc.rust-lang.org/book/ch14-01-release-profiles.html)」を参照してください。これらのプロファイルは、共有 AWS `config`ファイル内のプロファイルの使用とは完全に無関係であり AWS、独立しています。
  + ライブラリの依存関係をプロジェクトに追加する一般的な方法は、`cargo add` を使用することです。「[https://doc.rust-lang.org/cargo/commands/cargo-add.html](https://doc.rust-lang.org/cargo/commands/cargo-add.html)」を参照してください。
+ Rust には、次のような基本的な関数構造があります。`let` キーワードは変数を宣言し、割り当て (=) とペアになる場合があります。`let` の後に型を指定しない場合、コンパイラは型を推測します。「[変数と可変性](https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html)」を参照してください。

  ```
  fn main() {
      let w = "world";
      println!("Hello {}!", w);
  }
  ```
+ 明示的な型 `T` を持つ変数 `x` を宣言するために、Rust は `x: T` 構文を使用します。「[データ型](https://doc.rust-lang.org/book/ch03-02-data-types.html)」を参照してください。
+ `struct X {}` は新しい型 `X` を定義します。メソッドは、カスタム構造体の型 `X` に実装されます。型 `X` のメソッドは、キーワード `impl` のプレフィックスが付いた実装ブロックで宣言されます。実装ブロック内では、`self` はメソッドが呼び出された構造体のインスタンスを参照します。「[キーワード `impl`](https://doc.rust-lang.org/std/keyword.impl.html)」および「[メソッド構文](https://doc.rust-lang.org/book/ch05-03-method-syntax.html)」を参照してください。
+ 関数定義または関数呼び出しと思われる文の後に感嘆符 (\$1) が続く場合、そのコードはマクロを定義または呼び出しています。「[マクロ](https://doc.rust-lang.org/book/ch19-06-macros.html?highlight=macro#macros)」を参照してください。
+ Rust では、回復不能なエラーは `panic!` マクロによって表されます。プログラムで `panic!` が発生すると、失敗メッセージを出力して、アンワインドし、スタックをクリーンアップして終了します。「[`panic!` による回復不可能なエラー](https://doc.rust-lang.org/book/ch09-01-unrecoverable-errors-with-panic.html)」を参照してください。
+ Rust は、他のプログラミング言語のようにベースクラスからの機能の継承をサポートしていません。`traits` こそが Rust がメソッドのオーバーロードを実行する手段です。トレイトは、概念的にはインターフェイスに似ていると考えることができます。ただし、トレイトと真のインターフェイスには違いがあり、多くの場合、設計プロセスで異なる方法で使用されます。「[トレイト: 共通の振る舞いを定義する](https://doc.rust-lang.org/book/ch10-02-traits.html)」を参照してください。
  + 多相とは、個々のデータ型を個別に記述することなく、複数のデータ型に対応する機能をサポートするコードのことです。Rust は、列挙型、トレイト、ジェネリクスを通じて多相をサポートしています。「[型システム、およびコード共有としての継承](https://doc.rust-lang.org/book/ch17-01-what-is-oo.html?#inheritance-as-a-type-system-and-as-code-sharing)」を参照してください。
+ Rust は、メモリについて非常に明示的です。スマートポインタは、「ポインタのように振る舞うが、追加のメタデータと機能を持つデータ構造」です。「[スマートポインタ](https://doc.rust-lang.org/book/ch15-00-smart-pointers.html)」を参照してください。
  + `Cow` 型はクローンオンライトのスマートポインタであり、必要に応じてメモリの所有権を呼び出し元に転送するのに役立ちます。「[https://doc.rust-lang.org/std/borrow/enum.Cow.html](https://doc.rust-lang.org/std/borrow/enum.Cow.html)」を参照してください。
  + `Arc` 型は、割り当てられたインスタンスをカウントするアトミック参照カウント型スマートポインタです。「[https://doc.rust-lang.org/std/sync/struct.Arc.html](https://doc.rust-lang.org/std/sync/struct.Arc.html)」を参照してください。
+ SDK for Rust は、複雑な型を構築するためにビルダーパターンを頻繁に使用します。

## AWS SDK for Rust 木箱の基礎
<a name="aws-sdk-crate-fundamentals"></a>
+ SDK for Rust 機能のプライマリコアクレートは `aws-config` です。これは、環境から設定を読み取る機能があるため、ほとんどのプロジェクトに含まれています。

  ```
  $ cargo add aws-config
  ```
  + これを AWS のサービス と呼ばれる と混同しないでください AWS Config。これがサービスであるため、 AWS のサービス クレートの標準規則に従い、 と呼ばれます`aws-sdk-config`。
+ SDK for Rust ライブラリは、それぞれ異なるライブラリクレートに分割されます AWS のサービス。これらのクレートは [https://docs.rs/](https://docs.rs/) で入手できます。
+ AWS のサービス crates は、 `aws-sdk-s3`や `aws-sdk-[servicename]`などの の命名規則に従います`aws-sdk-dynamodb`。

## を操作するためのプロジェクト設定 AWS のサービス
<a name="project-configuration-for-working-with-aws-services"></a>
+  AWS のサービス アプリケーションで使用する各プロジェクトに木箱を追加する必要があります。
+ プロジェクトディレクトリ内でコマンドラインを使用して、`cargo add aws-sdk-s3` などの `cargo add [crateName]` を実行してクレートを追加する方法が推奨されます。
  + これにより、`Cargo.toml` の下のプロジェクトの `[dependencies]` に行が追加されます。
  + デフォルトでは、これによりクレートの最新バージョンがプロジェクトに追加されます。
+ ソースファイルで、`use` ステートメントを使用して、クレートの項目をスコープ内に取り込みます。Rust プログラミング言語ウェブサイトの「[外部のパッケージを使う](https://doc.rust-lang.org/book/ch07-04-bringing-paths-into-scope-with-the-use-keyword.html#using-external-packages)」を参照してください。
  + クレート名はハイフンで区切られることがよくありますが、実際にクレートを使用する際にはハイフンがアンダースコアに変換されます。例えば、`aws-config` クレートはコード `use` ステートメントで `use aws_config` として使用されます。
+ 設定は複雑なトピックです。設定はコードで直接行うことも、環境変数や設定ファイルの外部で指定することもできます。詳細については、「[外部で AWS SDK for Rust サービスクライアントを設定する](config-external.md)」を参照してください。
  + SDK によって設定を読み込むと、ほとんどの設定に妥当なデフォルトが存在するため、無効な値は実行を停止せずログに記録されます。ログ記録を有効にする方法については、「[AWS SDK for Rust でのログ記録の設定と使用](logging.md)」を参照してください。
  + 大部分の環境変数と設定ファイル設定は、プログラムの開始時に 1 回ロードされます。値の更新は、プログラムを再起動するまで表示されません。

## Tokio ランタイム
<a name="tokio-runtime"></a>
+ Tokio は SDK for Rust プログラミング言語の非同期ランタイムであり、`async` タスクを実行します。「[tokio.rs](http://tokio.rs/)」および「[docs.rs/tokio](http://docs.rs/tokio)」を参照してください。
+ SDK for Rust には非同期ランタイムが必要です。次のクレートをプロジェクトに追加することをお勧めします。

  ```
  $ cargo add tokio --features=full
  ```
+ `tokio::main` 属性マクロは、プログラムへの非同期メインエントリポイントを作成します。このマクロを使用するには、次に示すように、`main` メソッドの前の行に追加します。

  ```
  #[tokio::main]
  async fn main() -> Result<(), Error> {
  ```