Compare commits

...

27 Commits

Author SHA1 Message Date
Yoichiro Tanaka bb1a2867f4
Merge f2000c5544 into a2977762e1 2025-05-30 17:42:54 +00:00
Lemo-nade-room f2000c5544 Fix mismatched heading IDs in Release Notes documentation 2025-05-31 02:42:45 +09:00
Lemo-nade-room 12d9bd6b52 Fix mismatched heading IDs in Upgrading documentation 2025-05-31 02:41:34 +09:00
Lemo-nade-room 359f89b2b8 Remove incorrect markdown underscores in middleware insertion description 2025-05-31 02:33:16 +09:00
Lemo-nade-room 4c8ff6f0b0 Fix mismatched heading IDs in Passwords documentation 2025-05-31 02:30:13 +09:00
Lemo-nade-room 053a46f953 Update Crypto docs link to Japanese version 2025-05-31 02:29:08 +09:00
Lemo-nade-room 9dc39172b7 Fix mismatched heading IDs in Redis Overview documentation 2025-05-31 02:17:25 +09:00
Lemo-nade-room 151df13e6b Fix mismatched heading IDs in Transaction documentation 2025-05-31 02:03:46 +09:00
Lemo-nade-room 89abfe99ea Update head to use “Update, Delete” instead of “更新, 削除” 2025-05-31 02:01:22 +09:00
Lemo-nade-room 4e6c15f3c5 Update head to use “論理削除” instead of “ソフト削除” 2025-05-31 01:49:48 +09:00
Lemo-nade-room a3501f9221 Update head to use “Save, Create, Update, Delete, Find” instead of “保存, 作成, 更新, 削除, 検索” 2025-05-31 01:46:39 +09:00
Lemo-nade-room 40b992beab Fix mismatched heading IDs in Models documentation 2025-05-31 01:43:35 +09:00
Lemo-nade-room 6af2df1fba Update head to use “Join” instead of “結合” 2025-05-31 01:43:18 +09:00
Lemo-nade-room 1661adfc5c Update head to use “Parentドキュメント” instead of “親ドキュメント” 2025-05-31 01:41:20 +09:00
Lemo-nade-room f37592046a Update head to use “Enum” instead of “列挙型” 2025-05-31 01:38:17 +09:00
Lemo-nade-room 3029c8eab1 Update head to use “論理削除” instead of “ソフトデリート” 2025-05-31 01:34:12 +09:00
Lemo-nade-room 7eaebe178a Fix mismatched heading IDs in Supervisor documentation 2025-05-31 01:27:28 +09:00
Lemo-nade-room 42dae97fe6 Update Nginx docs link to Japanese version 2025-05-31 01:23:59 +09:00
Lemo-nade-room 2305ddc577 Fix mismatched heading IDs in Nginx documentation 2025-05-31 01:21:46 +09:00
Lemo-nade-room 3a5cb02e93 Update Nginx docs link to Japanese version 2025-05-31 01:21:31 +09:00
Lemo-nade-room b828c9f568 Fix mismatched heading IDs in Heroku documentation 2025-05-31 01:16:32 +09:00
Lemo-nade-room 16021e2d82 Update head to use “接続” instead of “Android” 2025-05-31 01:07:46 +09:00
Lemo-nade-room b7a745481b Update Docker docs link to Japanese version 2025-05-31 00:59:00 +09:00
Lemo-nade-room 961c886b28 Update Contributing docs link to Japanese version 2025-05-30 22:16:48 +09:00
Lemo-nade-room 27446a3441 Update Websockets docs link to Japanese version 2025-05-30 22:08:39 +09:00
Lemo-nade-room 9bc3acd019 Update OpenTelemetry docs link to Japanese version 2025-05-30 22:03:43 +09:00
Lemo-nade-room 6faa8ea64d Fix mismatched heading IDs in Testing documentation 2025-05-30 22:00:17 +09:00
19 changed files with 56 additions and 56 deletions

View File

@ -166,7 +166,7 @@ private func withApp(_ test: (Application) async throws -> ()) async throws {
Vaporには`XCTVapor`というモジュールが含まれており、`XCTest`をベースとしたテストヘルパーを提供しています。これらのテストヘルパーを使用すると、Vaporアプリケーションにプログラムでテストリクエストを送信したり、HTTPサーバー経由で実行したりできます。
### はじめに {#getting-started-1}
### はじめに {#getting-started_1}
`XCTVapor`モジュールを使用するには、パッケージのテストターゲットに追加されていることを確認してください。
@ -200,7 +200,7 @@ final class MyTests: XCTestCase {
`test`で始まる各関数は、アプリがテストされるときに自動的に実行されます。
### テスト可能なアプリケーション {#testable-application-1}
### テスト可能なアプリケーション {#testable-application_1}
`.testing`環境を使用して`Application`のインスタンスを初期化します。このアプリケーションがdeinitializeされる前に`app.shutdown()`を呼び出す必要があります。
@ -214,7 +214,7 @@ try configure(app)
設定を適用するために、`Application`をパッケージの`configure(_:)`メソッドに渡します。テスト専用の設定は後で適用できます。
#### リクエストの送信 {#send-request-1}
#### リクエストの送信 {#send-request_1}
アプリケーションにテストリクエストを送信するには、`test`メソッドを使用します。

View File

@ -4,7 +4,7 @@
Vaporのトレーシング APIは[swift-distributed-tracing](https://github.com/apple/swift-distributed-tracing)の上に構築されているため、swift-distributed-tracingのすべての[バックエンド実装](https://github.com/apple/swift-distributed-tracing/blob/main/README.md#tracing-backends)と互換性があります。
Swiftでのトレーシングとスパンに馴染みがない場合は、[OpenTelemetryトレースドキュメント](https://opentelemetry.io/docs/concepts/signals/traces/)と[swift-distributed-tracingドキュメント](https://swiftpackageindex.com/apple/swift-distributed-tracing/main/documentation/tracing)を確認してください。
Swiftでのトレーシングとスパンに馴染みがない場合は、[OpenTelemetryトレースドキュメント](https://opentelemetry.io/ja/docs/concepts/signals/traces/)と[swift-distributed-tracingドキュメント](https://swiftpackageindex.com/apple/swift-distributed-tracing/main/documentation/tracing)を確認してください。
## TracingMiddleware {#tracingmiddleware}

View File

@ -1,6 +1,6 @@
# WebSockets
[WebSockets](https://en.wikipedia.org/wiki/WebSocket)は、クライアントとサーバー間の双方向通信を可能にします。リクエストとレスポンスのパターンを持つHTTPとは異なり、WebSocketのピアは任意の数のメッセージを双方向に送信できます。VaporのWebSocket APIを使用すると、メッセージを非同期に処理するクライアントとサーバーの両方を作成できます。
[WebSockets](https://ja.wikipedia.org/wiki/WebSocket)は、クライアントとサーバー間の双方向通信を可能にします。リクエストとレスポンスのパターンを持つHTTPとは異なり、WebSocketのピアは任意の数のメッセージを双方向に送信できます。VaporのWebSocket APIを使用すると、メッセージを非同期に処理するクライアントとサーバーの両方を作成できます。
## サーバー {#server}

View File

@ -42,7 +42,7 @@ VaporはSwiftの行動規範を採用しており、[https://www.swift.org/code-
オープンソースプロジェクトに取り組んだことがない場合、実際に貢献する手順は混乱する可能性がありますが、実際にはとても簡単です。
まず、Vaporまたは作業したいリポジトリをフォークします。これはGitHub UIで行うことができ、GitHubには[これを行う方法に関する優れたドキュメント](https://docs.github.com/en/get-started/quickstart/fork-a-repo)があります。
まず、Vaporまたは作業したいリポジトリをフォークします。これはGitHub UIで行うことができ、GitHubには[これを行う方法に関する優れたドキュメント](https://docs.github.com/ja/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)があります。
その後、通常のコミットとプッシュのプロセスで、フォークで変更を加えることができます。修正を提出する準備ができたら、VaporのリポジトリにPRを作成できます。ここでも、GitHubには[これを行う方法に関する優れたドキュメント](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)があります。

View File

@ -18,7 +18,7 @@ Docker を実行するための開発環境をセットアップし、Docker ス
### Docker のインストール {#install-docker}
開発環境用に Docker をインストールする必要があります。Docker Engine Overview の [Supported Platforms](https://docs.docker.com/install/#supported-platforms) セクションで、任意のプラットフォームの情報を見つけることができます。Mac OS を使用している場合は、[Docker for Mac](https://docs.docker.com/docker-for-mac/install/) のインストールページに直接ジャンプできます。
開発環境用に Docker をインストールする必要があります。Docker Engine Overview の [Supported Platforms](https://docs.docker.jp/get-docker.html) セクションで、任意のプラットフォームの情報を見つけることができます。Mac OS を使用している場合は、[Docker for Mac](https://docs.docker.jp/desktop/install/mac-install.html) のインストールページに直接ジャンプできます。
### テンプレートの生成 {#generate-template}
@ -29,19 +29,19 @@ Vapor テンプレートを出発点として使用することをお勧めし
## Docker リソース {#docker-resources}
今すぐでも近い将来でも、[Docker Overview](https://docs.docker.com/engine/docker-overview/) に慣れることは価値があります。概要では、このガイドで使用するいくつかの重要な用語が説明されています。
今すぐでも近い将来でも、[Docker Overview](https://docs.docker.jp/get-started/overview.html) に慣れることは価値があります。概要では、このガイドで使用するいくつかの重要な用語が説明されています。
テンプレート Vapor アプリには、2つの重要な Docker 固有のリソースがあります:**Dockerfile** と **docker-compose** ファイルです。
### Dockerfile
Dockerfile は、Docker 化されたアプリのイメージをビルドする方法を Docker に指示します。そのイメージには、アプリの実行可能ファイルと、それを実行するために必要なすべての依存関係が含まれています。Dockerfile をカスタマイズする際は、[完全なリファレンス](https://docs.docker.com/engine/reference/builder/)を開いておくことをお勧めします。
Dockerfile は、Docker 化されたアプリのイメージをビルドする方法を Docker に指示します。そのイメージには、アプリの実行可能ファイルと、それを実行するために必要なすべての依存関係が含まれています。Dockerfile をカスタマイズする際は、[完全なリファレンス](https://docs.docker.jp/engine/reference/builder.html)を開いておくことをお勧めします。
Vapor アプリ用に生成された Dockerfile には2つのステージがあります。最初のステージはアプリをビルドし、結果を含む保持領域を設定します。2番目のステージは、安全なランタイム環境の基本を設定し、保持領域内のすべてを最終イメージ内の配置場所に転送し、デフォルトポート8080でプロダクションモードでアプリを実行するデフォルトのエントリポイントとコマンドを設定します。この設定は、イメージを使用するときに上書きできます。
### Docker Compose ファイル {#docker-compose-file}
Docker Compose ファイルは、Docker が複数のサービスを相互に関連付けてビルドする方法を定義します。Vapor アプリテンプレートの Docker Compose ファイルは、アプリをデプロイするために必要な機能を提供しますが、詳細を学びたい場合は、利用可能なすべてのオプションの詳細が記載されている[完全なリファレンス](https://docs.docker.com/compose/compose-file/)を参照してください。
Docker Compose ファイルは、Docker が複数のサービスを相互に関連付けてビルドする方法を定義します。Vapor アプリテンプレートの Docker Compose ファイルは、アプリをデプロイするために必要な機能を提供しますが、詳細を学びたい場合は、利用可能なすべてのオプションの詳細が記載されている[完全なリファレンス](https://docs.docker.jp/reference/compose-file/toc.html)を参照してください。
!!! note
最終的に Kubernetes を使用してアプリをオーケストレーションする予定がある場合、Docker Compose ファイルは直接関係ありません。ただし、Kubernetes マニフェストファイルは概念的に似ており、[Docker Compose ファイルの移植](https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/)を目的としたプロジェクトもあります。

View File

@ -108,7 +108,7 @@ Postgresアプリの名前がわからない場合は、`fly pg list`で確認
!!! note
`fly pg create`と`fly pg attach`の違いは、前者がPostgresデータベースをホストできるFlyアプリを割り当てて設定するのに対し、後者は選択したアプリ用の実際のデータベースとユーザーを作成することです。要件に適合する場合、単一のPostgres Flyアプリが様々なアプリで使用される複数のデータベースをホストできます。`fly launch`でFlyにデータベースアプリの作成を依頼すると、`fly pg create`と`fly pg attach`の両方を呼び出すのと同等の処理が行われます。
### VaporアプリをデータベースにAndroidする {#connecting-your-vapor-app-to-the-database}
### Vaporアプリをデータベースに接続する {#connecting-your-vapor-app-to-the-database}
アプリがデータベースにアタッチされると、Flyは`DATABASE_URL`環境変数に資格情報を含む接続URLを設定します機密情報として扱う必要があります
最も一般的なVaporプロジェクトの設定では、`configure.swift`でデータベースを設定します。以下は設定例です:

View File

@ -133,7 +133,7 @@ echo "web: App serve --env production" \
"--hostname 0.0.0.0 --port \$PORT" > Procfile
```
### 変更のコミット {#commit-changes-2}
### 変更のコミット {#commit-changes_1}
これらのファイルを追加しましたが、まだコミットされていません。プッシュしてもHerokuはそれらを見つけられません。

View File

@ -30,7 +30,7 @@ Vaporが`80`または`443`以外のポートにバインドされている場合
チュートリアル:
- [Ubuntu 20.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04)
- [Ubuntu 20.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04-ja)
- [Ubuntu 18.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04)
- [CentOS 8にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-8)
- [Ubuntu 16.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04)
@ -47,7 +47,7 @@ sudo apt-get update
sudo apt-get install nginx
```
#### CentOSとAmazon Linux
#### CentOSとAmazon Linux {#centos-and-amazon-linux}
```sh
sudo yum install nginx
@ -133,7 +133,7 @@ server {
### TLS
証明書が適切に生成されていれば、TLSの追加は比較的簡単です。無料でTLS証明書を生成するには、[Let's Encrypt](https://letsencrypt.org/getting-started/)を確認してください。
証明書が適切に生成されていれば、TLSの追加は比較的簡単です。無料でTLS証明書を生成するには、[Let's Encrypt](https://letsencrypt.org/ja/getting-started/)を確認してください。
```sh
server {

View File

@ -13,7 +13,7 @@ sudo apt-get update
sudo apt-get install supervisor
```
### CentOSとAmazon Linux
### CentOSとAmazon Linux {#centos-and-amazon-linux}
```sh
sudo yum install supervisor

View File

@ -1,4 +1,4 @@
# モデル
# モデル {#models}
モデルは、データベースのテーブルやコレクションに格納されたデータを表現します。モデルは、コード化可能な値を格納する1つ以上のフィールドを持ちます。すべてのモデルには一意の識別子があります。プロパティラッパーは、識別子、フィールド、リレーションを示すために使用されます。
@ -188,7 +188,7 @@ final class Planet: Model {
|-|-|
|`.create`|新しいモデルインスタンスがデータベースに保存されるときに設定される|
|`.update`|既存のモデルインスタンスがデータベースに保存されるときに設定される|
|`.delete`|モデルがデータベースから削除されるときに設定される。[ソフトデリート](#soft-delete)を参照|
|`.delete`|モデルがデータベースから削除されるときに設定される。[論理削除](#soft-delete)を参照|
`@Timestamp`の日付値はオプショナルで、新しいモデルを初期化するときは`nil`に設定する必要があります。
@ -225,9 +225,9 @@ var updatedAt: Date?
model.$updatedAt.timestamp = "2020-06-03T16:20:14+00:00"
```
### ソフトデリート {#soft-delete}
### 論理削除 {#soft-delete}
`.delete`トリガーを使用する`@Timestamp`をモデルに追加すると、ソフトデリートが有効になります。
`.delete`トリガーを使用する`@Timestamp`をモデルに追加すると、論理削除が有効になります。
```swift
final class Planet: Model {
@ -237,20 +237,20 @@ final class Planet: Model {
}
```
ソフトデリートされたモデルは削除後もデータベースに存在しますが、クエリでは返されません。
論理削除されたモデルは削除後もデータベースに存在しますが、クエリでは返されません。
!!! tip
削除時のタイムスタンプを将来の日付に手動で設定できます。これは有効期限として使用できます。
ソフトデリート可能なモデルをデータベースから強制的に削除するには、`delete`の`force`パラメータを使用します。
論理削除可能なモデルをデータベースから強制的に削除するには、`delete`の`force`パラメータを使用します。
```swift
// モデルがソフトデリート可能であっても
// モデルが論理削除可能であっても
// データベースから削除する
model.delete(force: true, on: database)
```
ソフトデリートされたモデルを復元するには、`restore`メソッドを使用します。
論理削除されたモデルを復元するには、`restore`メソッドを使用します。
```swift
// 削除時のタイムスタンプをクリアして、
@ -258,14 +258,14 @@ model.delete(force: true, on: database)
model.restore(on: database)
```
クエリにソフトデリートされたモデルを含めるには、`withDeleted`を使用します。
クエリに論理削除されたモデルを含めるには、`withDeleted`を使用します。
```swift
// ソフトデリートされたものを含むすべての惑星を取得
// 論理削除されたものを含むすべての惑星を取得
Planet.query(on: database).withDeleted().all()
```
## 列挙型 {#enum}
## Enum
`@Enum`は、文字列表現可能な型をネイティブデータベース列挙型として格納する特別な種類の`@Field`です。ネイティブデータベース列挙型は、データベースに型安全性の追加レイヤーを提供し、生の列挙型よりもパフォーマンスが向上する可能性があります。
@ -286,7 +286,7 @@ final class Pet: Model {
オプショナルの列挙型を格納するには、`@OptionalEnum`を使用します。
データベースは、マイグレーションを介して列挙型を処理する準備が必要です。詳細については[列挙型](schema.md#enum)を参照してください。
データベースは、マイグレーションを介して列挙型を処理する準備が必要です。詳細については[Enum](schema.md#enum)を参照してください。
### 生の列挙型 {#raw-enums}
@ -436,15 +436,15 @@ app.get("users") { req async throws -> [GetUser] in
}
```
もう1つの一般的な使用例は、親リレーションや子リレーションなどのリレーションを扱う場合です。`@Parent`リレーションを持つモデルを簡単にデコードするためのDTOの使用例については、[ドキュメント](relations.md##encoding-and-decoding-of-parents)を参照してください。
もう1つの一般的な使用例は、親リレーションや子リレーションなどのリレーションを扱う場合です。`@Parent`リレーションを持つモデルを簡単にデコードするためのDTOの使用例については、[Parentドキュメント](relations.md##encoding-and-decoding-of-parents)を参照してください。
DTOの構造がモデルの`Codable`準拠と同じであっても、別の型として持つことで大規模なプロジェクトを整理できます。モデルのプロパティに変更を加える必要がある場合でも、アプリの公開APIを破壊する心配はありません。また、DTOをAPIの利用者と共有できる別のパッケージに配置し、VaporアプリでContent準拠を追加することも検討できます。
## エイリアス {#alias}
`ModelAlias`プロトコルを使用すると、クエリで複数回結合されるモデルを一意に識別できます。詳細については、[結合](query.md#join)を参照してください。
`ModelAlias`プロトコルを使用すると、クエリで複数回結合されるモデルを一意に識別できます。詳細については、[Join](query.md#join)を参照してください。
## 保存 {#save}
## Save
モデルをデータベースに保存するには、`save(on:)`メソッドを使用します。
@ -454,7 +454,7 @@ planet.save(on: database)
このメソッドは、モデルがすでにデータベースに存在するかどうかに応じて、内部的に`create`または`update`を呼び出します。
### 作成 {#create}
### Create
新しいモデルをデータベースに保存するには、`create`メソッドを呼び出します。
@ -490,7 +490,7 @@ await withThrowingTaskGroup(of: Void.self) { taskGroup in
}
```
### 更新 {#update}
### Update
データベースから取得したモデルを保存するには、`update`メソッドを呼び出します。
@ -521,7 +521,7 @@ Planet.query(on: database).all()
クエリの詳細については、[クエリ](query.md)セクションを参照してください。
## 検索 {#find}
## Find
モデルには、識別子でモデルインスタンスを検索するための静的`find(_:on:)`メソッドがあります。
@ -540,8 +540,8 @@ Planet.find(req.parameters.get("id"), on: database)
|`create`|モデルが作成される前に実行される|
|`update`|モデルが更新される前に実行される|
|`delete(force:)`|モデルが削除される前に実行される|
|`softDelete`|モデルがソフト削除される前に実行される|
|`restore`|モデルが復元される前に実行される(ソフト削除の反対)|
|`softDelete`|モデルが論理削除される前に実行される|
|`restore`|モデルが復元される前に実行される(論理削除の反対)|
モデルミドルウェアは、`ModelMiddleware`または`AsyncModelMiddleware`プロトコルを使用して宣言されます。すべてのライフサイクルメソッドにはデフォルトの実装があるため、必要なメソッドのみを実装する必要があります。各メソッドは、対象のモデル、データベースへの参照、チェーン内の次のアクションを受け入れます。ミドルウェアは、早期に返す、失敗したfutureを返す、または次のアクションを呼び出して通常どおり続行することを選択できます。

View File

@ -235,7 +235,7 @@ Planet.query(on: self.database)
.range(2...)
```
## 結合 {#join}
## Join
クエリビルダーの`join`メソッドを使用すると、結果セットに別のモデルのフィールドを含めることができます。クエリに複数のモデルを結合できます。
@ -301,7 +301,7 @@ let home = try match.joined(HomeTeam.self)
print(home.name)
```
## 更新 {#update}
## Update
クエリビルダーは、`update`メソッドを使用して一度に複数のモデルを更新することをサポートしています。
@ -315,7 +315,7 @@ Planet.query(on: database)
`update`は`set`、`filter`、`range`メソッドをサポートしています。
## 削除 {#delete}
## Delete
クエリビルダーは、`delete`メソッドを使用して一度に複数のモデルを削除することをサポートしています。

View File

@ -216,7 +216,7 @@ Fluentはデフォルトでユニーク制約名を生成します。ただし
!!! warning
外部キーアクションはデータベース内でのみ発生し、Fluentをバイパスします。
これは、モデルミドルウェアやソフトデリートなどが正しく動作しない可能性があることを意味します。
これは、モデルミドルウェアや論理削除などが正しく動作しない可能性があることを意味します。
## SQL {#sql}

View File

@ -32,7 +32,7 @@ return req.db.transaction { database in
}.transform(to: HTTPStatus.ok)
```
## `async`/`await` {#async-await}
## `async`/`await`
`async`/`await`を使用する場合、コードを以下のようにリファクタリングできます:

View File

@ -138,7 +138,7 @@ print(res)
// "hello"
```
## Pub/Subモード {#pub-sub-mode}
## Pub/Subモード {#pubsub-mode}
Redisは、接続が特定の「チャンネル」をリッスンし、購読したチャンネルが「メッセージ」何らかのデータ値をパブリッシュしたときに特定のクロージャを実行できる[「Pub/Sub」モード](https://redis.io/topics/pubsub)をサポートしています。

View File

@ -1,4 +1,4 @@
# Vapor リリースノート
# Vapor リリースノート {#vapor-release-notes}
ドキュメントを常に最新の状態に保つことは困難、あるいは不可能であるため、ここでは Vapor エコシステムに関連する様々なパッケージのリリースノートをご覧いただけます。

View File

@ -1,6 +1,6 @@
# 暗号 {#crypto}
Vapor には [SwiftCrypto](https://github.com/apple/swift-crypto/) が含まれており、これは Apple の CryptoKit ライブラリの Linux 互換ポートです。SwiftCrypto がまだサポートしていない [Bcrypt](https://en.wikipedia.org/wiki/Bcrypt) や [TOTP](https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm) のような追加の暗号 API も公開されています。
Vapor には [SwiftCrypto](https://github.com/apple/swift-crypto/) が含まれており、これは Apple の CryptoKit ライブラリの Linux 互換ポートです。SwiftCrypto がまだサポートしていない [Bcrypt](https://ja.wikipedia.org/wiki/Bcrypt) や [TOTP](https://ja.wikipedia.org/wiki/Time-based_One-time_Password) のような追加の暗号 API も公開されています。
## SwiftCrypto {#swiftcrypto}

View File

@ -54,7 +54,7 @@ await app.jwt.keys.add(hmac: "secret", digestAlgorithm: .sha256)
### 署名 {#signing}
追加されたキーは JWT の署名に使用できます。これを行うには、まず署名する_もの_、つまり「ペイロード」が必要です。
追加されたキーは JWT の署名に使用できます。これを行うには、まず署名するもの、つまり「ペイロード」が必要です。
このペイロードは、送信したいデータを含む単純な JSON オブジェクトです。`JWTPayload` プロトコルに準拠する構造体を作成することで、カスタムペイロードを作成できます:
```swift

View File

@ -1,4 +1,4 @@
# パスワード
# パスワード {#passwords}
Vaporには、パスワードを安全に保存・検証するためのパスワードハッシュAPIが含まれています。このAPIは環境に基づいて設定可能で、非同期ハッシュ化をサポートしています。

View File

@ -8,7 +8,7 @@ Vapor 4を使用するには、Xcode 11.4およびmacOS 10.15以上が必要で
ドキュメントのインストールセクションで依存関係のインストールについて説明しています。
## Package.swift {#package-swift}
## Package.swift
Vapor 4へのアップグレードの最初のステップは、パッケージの依存関係を更新することです。以下は更新されたPackage.swiftファイルの例です。更新された[テンプレートPackage.swift](https://github.com/vapor/template/blob/main/Package.swift)も確認できます。
@ -93,7 +93,7 @@ Vaporのパッケージマニフェストは、macOS 10.15以上を明示的に
将来的にVaporは追加のサポートプラットフォームを追加する可能性があります。あなたのパッケージは、バージョン番号がVaporの最小バージョン要件以上である限り、これらのプラットフォームの任意のサブセットをサポートできます。
### Xcode {#xcode}
### Xcode
Vapor 4はXcode 11のネイティブSPMサポートを利用しています。これにより、`.xcodeproj`ファイルを生成する必要がなくなりました。Xcodeでプロジェクトのフォルダーを開くと、自動的にSPMが認識され、依存関係が取得されます。
@ -108,7 +108,7 @@ Package.swiftを更新したら、Xcodeを閉じてルートディレクトリ
更新されたパッケージが正常に解決されると、コンパイラエラーが表示されるはずです--おそらくかなりの数です。心配しないでください!修正方法をお見せします。
## Run {#run}
## Run
最初に行うべきことは、Runモジュールの`main.swift`ファイルを新しい形式に更新することです。
@ -126,11 +126,11 @@ try app.run()
`main.swift`ファイルの内容はAppモジュールの`app.swift`を置き換えるため、そのファイルは削除できます。
## App {#app}
## App
基本的なAppモジュール構造の更新方法を見てみましょう。
### configure.swift {#configure-swift}
### configure.swift
`configure`メソッドは`Application`のインスタンスを受け入れるように変更する必要があります。
@ -162,11 +162,11 @@ public func configure(_ app: Application) throws {
ルーティング、ミドルウェア、Fluentなどの設定に関する構文の変更は以下で説明します。
### boot.swift {#boot-swift}
### boot.swift
`boot`の内容は、アプリケーションインスタンスを受け入れるようになったため、`configure`メソッドに配置できます。
### routes.swift {#routes-swift}
### routes.swift
`routes`メソッドは`Application`のインスタンスを受け入れるように変更する必要があります。
@ -312,7 +312,7 @@ app.myNumber = 42
print(app.myNumber) // 42
```
## NIO {#nio}
## NIO
Vapor 4はSwiftNIOの非同期APIを直接公開するようになり、`map`や`flatMap`のようなメソッドをオーバーロードしたり、`EventLoopFuture`のようなタイプをエイリアスしたりしようとしなくなりました。Vapor 3は、SwiftNIOが存在する前にリリースされた初期ベータバージョンとの下位互換性のためにオーバーロードとエイリアスを提供していました。これらは、他のSwiftNIO互換パッケージとの混乱を減らし、SwiftNIOのベストプラクティスの推奨事項により良く従うために削除されました。
@ -345,7 +345,7 @@ Vapor 4はSwiftNIOの非同期APIを直接公開するようになり、`map`や
}
```
### ByteBuffer {#bytebuffer}
### ByteBuffer
以前は`Data`を使用していた多くのメソッドとプロパティは、NIOの`ByteBuffer`を使用するようになりました。このタイプは、より強力で高性能なバイトストレージタイプです。APIの詳細については、[SwiftNIOのByteBufferドキュメント](https://swiftpackageindex.com/apple/swift-nio/main/documentation/niocore/bytebuffer)を参照してください。
@ -499,7 +499,7 @@ let corsMiddleware = CORSMiddleware(configuration: ...)
app.middleware = .init()
```
## Fluent {#fluent}
## Fluent
FluentのAPIはデータベースに依存しなくなりました。`Fluent`だけをインポートできます。