Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i18n(ja): "Quick Start" Section #3111

Merged
merged 63 commits into from
Feb 25, 2025
Merged
Show file tree
Hide file tree
Changes from 51 commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
7f20c38
Japanese translation
J1-takai Nov 28, 2024
92f0d33
Add Japanese Translation
J1-takai Dec 2, 2024
0c06f4a
Add Japanese Translation
J1-takai Dec 2, 2024
45d02dd
Add Japanese Translation
J1-takai Dec 3, 2024
c38075c
Add JP translation
J1-takai Dec 6, 2024
b6c58ab
amended JP translation
J1-takai Dec 7, 2024
79dc093
Add JP page of create-project.mdx
J1-takai Dec 8, 2024
3f32029
Add JP text for Frontend/index.mdx
J1-takai Dec 9, 2024
066852a
Merge branch 'tauri-apps:v2' into v2
J1-takai Dec 11, 2024
7833058
Add JP translation to Frontend
J1-takai Dec 17, 2024
67fc45e
i18n (ja-JP): Added JP translation
J1-takai Dec 30, 2024
52b9b87
Merge branch 'tauri-apps:v2' into v2
J1-takai Dec 30, 2024
74505aa
Merge branch 'tauri-apps:v2' into v2
J1-takai Jan 1, 2025
8b47339
Merge branch 'tauri-apps:v2' into v2
J1-takai Jan 4, 2025
83ee768
i18n (JP) Add JP traslation
J1-takai Jan 5, 2025
71cdbf5
Merge remote-tracking branch 'refs/remotes/origin/v2' into v2
J1-takai Jan 5, 2025
06b7489
i18n (JP) Add JP translation
J1-takai Jan 6, 2025
ff0075a
Merge branch 'tauri-apps:v2' into v2
J1-takai Jan 7, 2025
6454f3e
i18n (JP) Add JP translation
J1-takai Jan 7, 2025
7a15c7c
i18n (JP) Add JP transration
J1-takai Jan 7, 2025
5bba6a3
i18n (JP) Add JP translation
J1-takai Jan 8, 2025
3fe7e1f
i18n (JP) Add JP translation
J1-takai Jan 8, 2025
4131e6a
Merge branch 'tauri-apps:v2' into v2
J1-takai Jan 8, 2025
ae0befd
Merge branch 'tauri-apps:v2' into v2
J1-takai Jan 15, 2025
db0db6c
Merge branch 'tauri-apps:v2' into v2
J1-takai Jan 18, 2025
42ef930
i18n(JP) Doc-JP correction
J1-takai Jan 19, 2025
6a56564
Merge remote-tracking branch 'refs/remotes/origin/v2' into v2
J1-takai Jan 19, 2025
b87e0a4
Merge branch 'tauri-apps:v2' into v2
J1-takai Jan 27, 2025
d94cdfe
Merge branch 'v2' into v2
tweidinger Jan 31, 2025
4baf095
fix summary tag
vasfvitor Feb 1, 2025
8bbc30b
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 3, 2025
aa284a9
Update doc-JP Rev Control.md
J1-takai Feb 3, 2025
6e1052e
Update prerequisites.mdx
J1-takai Feb 3, 2025
f57914b
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 4, 2025
fd496ca
Merge branch 'v2' into v2
vasfvitor Feb 4, 2025
54a23f6
wip: fix building + broken links + urls
vasfvitor Feb 4, 2025
26e8a34
fix hashes
vasfvitor Feb 4, 2025
335cfa6
fix hash
vasfvitor Feb 4, 2025
f51f047
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 7, 2025
bb2d450
format
vasfvitor Feb 8, 2025
2b39512
fix format
vasfvitor Feb 8, 2025
8d04831
change "jp" to "ja"
vasfvitor Feb 8, 2025
e588619
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 9, 2025
cf7c6b3
fix lunaria config
vasfvitor Feb 9, 2025
cab5ade
format
vasfvitor Feb 9, 2025
694dda0
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 10, 2025
a4c72f5
Update as of 25/02/10
J1-takai Feb 10, 2025
26fb977
update as of 25/02/10
J1-takai Feb 10, 2025
20ed621
Merge remote-tracking branch 'refs/remotes/origin/v2' into v2
J1-takai Feb 10, 2025
a539629
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 11, 2025
74e2185
Merge branch 'v2' into v2
vasfvitor Feb 11, 2025
64ec196
Update src/content/docs/ja/rss.mdx
J1-takai Feb 12, 2025
6ef1f26
Update src/content/docs/ja/rss.mdx
J1-takai Feb 12, 2025
df0d05e
Update src/content/docs/ja/rss.mdx
J1-takai Feb 12, 2025
d0eb007
Update src/content/docs/ja/rss.mdx
J1-takai Feb 12, 2025
73d9fb9
Corrected missing </p> tag in 404.md
J1-takai Feb 12, 2025
a74969d
Revert "update as of 25/02/10"
vasfvitor Feb 13, 2025
e16c586
undo unrelated
vasfvitor Feb 13, 2025
0009e22
format
vasfvitor Feb 13, 2025
6204b80
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 19, 2025
ebe1844
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 22, 2025
fb0b17a
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 24, 2025
8dda9e2
Merge branch 'tauri-apps:v2' into v2
J1-takai Feb 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ src/content/docs/learn/Security/using-plugin-permissions.mdx
src/content/docs/learn/Security/writing-plugin-permissions.mdx
src/content/docs/start/frontend/qwik.mdx
src/content/docs/zh-cn/start/frontend/qwik.mdx
src/content/docs/ja/start/frontend/qwik.mdx
src/content/docs/es/start/frontend/qwik.mdx
src/content/docs/learn/splashscreen.mdx
src/content/docs/security/http-headers.mdx
20 changes: 20 additions & 0 deletions src/content/docs/ja/404.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
title: '404'
template: doc
editUrl: false
tableOfContents: false
lastUpdated: false
pagefind: false
next: false
prev: false
hero:
title: '404'
tagline: お探しのページは見つかりません。URL を確認するか、検索バーから再検索してください。
---

<p>
検索上で問題がある場合には、<a href="https://github.com/tauri-apps/tauri-docs/issues/new/choose">GitHub 上でレポートの提出</a> または <a href="https://discord.com/invite/tauri">Discord での問題報告</a> を行なって下さい。

<div style="text-align: right;">
Doc-JP 2.00.00
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: ブラウンフィールド型(Brownfield Pattern)
---

_**デフォルトの IPC パターンです**_

このパターンは、Tauri を使用する上で最も簡単で分かりやすいものです。というのも、既存のフロントエンド・プロジェクトと可能な限り互換性を持たせようとしているからです。つまり、既存の Web フロントエンドがブラウザー内で使用するもの以外には、他に何も必要としないということです。
既存のブラウザー・アプリケーションで動作する _**すべて**_ が、そのまま動作するというわけではありません。

一般的な「ブラウンフィールド」型のソフトウェア開発について馴染みがない場合は、Wikipedia の記事 [Brownfield Wikipedia article](日本語版なし)に判りやすい概説があります。
Tauri の場合、(ブラウンフィールド型開発の対象となる)既存のソフトウェアとは、レガシー・システムではなく、現行ブラウザーのサポートと動作です。

## 設定

ブラウンフィールド型開発はデフォルトのパターンなので、設定オプションを指定する必要はありません。
明示的に設定するには、`tauri.conf.json` 構成ファイル内の `tauri > pattern` オブジェクトを使用します。

```json
{
"tauri": {
"pattern": {
"use": "brownfield"
}
}
}
```

_**ブラウンフィールド型では追加の設定オプションはありません。**_

[brownfield wikipedia article]: https://en.wikipedia.org/wiki/Brownfield_(software_development)


<div style="text-align:right">
【※ この日本語版は、「Oct 01, 2024 英語版」に基づいています】<br>
Doc-JP 2.00.00
</div>
99 changes: 99 additions & 0 deletions src/content/docs/ja/concept/Inter-Process Communication/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
title: プロセス間通信
sidebar:
label: Overview
order: 1
---

import { CardGrid, LinkCard } from '@astrojs/starlight/components';

「プロセス間通信」(IPC)は、単独のプロセスが安全に通信することを可能にし、より複雑なアプリケーションを構築するための鍵となります。

具体的な IPC のパターンについては、次のガイドを参照してください:

<CardGrid>
<LinkCard
title="Brownfield<br>ブラウンフィールド"
href="/concept/inter-process-communication/brownfield/"
/>
<LinkCard
title="Isolation<br>アイソレーション"
href="/concept/inter-process-communication/isolation/"
/>
</CardGrid>

Tauri は、[Asynchronous Message Passing](非同期メッセージ・パッシング、[日本語版リンク](https://ja.wikipedia.org/wiki/メッセージ_(コンピュータ)))と呼ばれる特別なスタイルのプロセス間通信を使用します。この方法では、プロセス同士が単純なデータ表現を使用してシリアル化された「_リクエスト_(要求)」と「_レスポンス_(応答)」をやり取りします。メッセージ・パッシングは、インターネット上のクライアント・サーバー通信に使用される仕組みであるため、Web 開発の経験がある人なら誰でも馴染みがあるはずです。

メッセージ・パッシングは、受信者が必要に応じて「リクエスト」を拒否または破棄できるため、共有メモリ方式や直接関数アクセス方式よりも安全な手法です。たとえば、Tauri コア・プロセスが「リクエスト」が悪意のあるものであると判断した場合、そのリクエストは破棄され、対応する関数処理は実行されません。

以下では、Tauri の二つの IPC プリミティブ(同期基本命令)である「イベント `Events` 」と「コマンド `Commands` 」について詳しく説明します。

## イベント

「イベント」は、自動追尾型・一方向性の IPC メッセージで、ライフサイクル中の各イベントと状態の変化を伝達するのに最適です。
[コマンド](#コマンド) とは異なり、「イベント」はフロントエンドと Tauri コアの両方から発行できます。

<figure>

```d2 sketch pad=50
shape: sequence_diagram

Frontend: {
shape: rectangle
label: "Webview\nFrontend"
}
Core: {
shape: rectangle
label: "Core\nBackend"
}

Frontend -> Core: "イベント"{style.animated: true}
Core -> Frontend: "イベント"{style.animated: true}
```

<figcaption>コアと Webview 間をやり取りされるイベント</figcaption>
</figure>

## コマンド

Tauri は、IPC メッセージに加えて、[foreign function interface](外部関数インターフェース、[日本語版リンク](https://ja.wikipedia.org/wiki/Foreign_function_interface))のような抽象化も提供します[^1]。基本主要 API である `invoke` は、ブラウザの `fetch` API に似ており、フロントエンドが Rust 関数を呼び出し、引数を渡して、データを受信できるようにします。

このメカニズムは、内部で [JSON-RPC] のようなプロトコルを使用してリクエストとレスポンスをシリアル化するので、すべての引数と戻りデータは JSON の規格に従ってシリアル化可能である必要があります。

<figure>

```d2 sketch pad=50
shape: sequence_diagram


Frontend: {
label: "Webview\nFrontend"
}

Core: {
label: "Core\nBackend"
}
InvokeHandler: {
label: "Invoke\nHandler"
}

Frontend -> Core: "IPC リクエスト"{style.animated: true}
Core -> InvokeHandler: "コマンド 呼び出し"{style.animated: true}
InvokeHandler -> Core: "戻り値 シリアル化"{style.animated: true}
Core -> Frontend: "レスポンス"{style.animated: true}
```

<figcaption>コマンド呼び出しに関与する IPC メッセージ</figcaption>
</figure>

[^1]: コマンドは、内部でメッセージ・パッシングを使用しているため、実際の「外部関数インターフェース」と同じようなセキュリティ上の落とし穴はありません。

[Asynchronous Message Passing]: https://en.wikipedia.org/wiki/Message_passing#Asynchronous_message_passing
[json-rpc]: https://www.jsonrpc.org
[foreign function interface]: https://en.wikipedia.org/wiki/Foreign_function_interface


<div style="text-align:right">
【※ この日本語版は、「Nov 27, 2024 英語版」に基づいています】<br>
Doc-JP 2.00.00
</div>
121 changes: 121 additions & 0 deletions src/content/docs/ja/concept/Inter-Process Communication/isolation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
---
title: アイソレーション型(Isolation Pattern)
---

アイソレーション(分離・隔絶)型は、フロントエンドから送信された Tauri API メッセージが Tauri コア部に到達する前に、JavaScript を使用して傍受・変更する方法です。アイソレーション型で挿入される安全な JavaScript コードは、アイソレーション・アプリケーションと呼ばれます。

## アイソレーション型の必要性

アイソレーション型の目的は、Tauri コア部への望ましくないあるいは悪意のあるフロントエンドからの呼び出しから、アプリケーションを保護するためのメカニズムを開発者に提供することです。アイソレーション型の必要性は、フロントエンドで実行されている信頼できないコンテンツから生じる脅威、このような脅威は多くの依存関係を持つアプリケーションによくあるケースですが、そこから生まれました。アプリケーションが遭遇する可能性のある多くの脅威源のリストについては、[セキュリティ:脅威モデル] を参照してください。

アイソレーション型を設計する上で考慮された、上記で記述された最大の脅威モデルは「開発の脅威」でした。多くのフロントエンドのビルド・ツールが、しばしば深くネスト化された数十(もしくは数百)の依存関係で成り立っているだけではなく、複雑なアプリケーションにも、最終出力版にバンドルされる大量の(これも深くネスト化された)依存関係がある場合があります。

## アイソレーション型を使用する局面

Tauri は、アイソレーション型が使用できる場合には常に使用することを強く推奨しています。アイソレーション型のアプリケーションではフロントエンドからの _**すべての**_ メッセージを「捕捉」(インターセプト)するため、アイソレーション型が _常に_ 使用されます。

さらに Tauri では、外部の Tauri API を使用するときは常に、アプリケーションを「封鎖」(ロックダウン)することを強く推奨しています。アプリの開発者は、安全なアイソレーション・アプリケーション(分離アプリケーション)を利用して IPC 入力を検証し、その入力内容が確実に想定されるパラメータの範囲内にあることを確かめます。事例としては、ファイルの読み取りまたは書き込みの呼び出しが、そのアプリケーションの想定外の場所へのパスにアクセスしようとしていないかを確認したり、あるいは、Tauri API の「HTTP フェッチコール」が 「Origin ヘッダー」をそのアプリケーションが想定しているもののみに設定しているかを確認したりすることです。

とはいえ、フロントエンドからの _**すべての**_ メッセージを捕捉するため、[Events] などの常時動作 API でも動作します。一部のイベントでは、アプリ独自の Rust コードにアクションを実行させる可能性があるので、同様の検証手法で対応することができます。

## アイソレーション型の適用

アイソレーション型で重要なのは、フロントエンドと Tauri コアの間に安全なアプリケーションを挿入して、IPC 受信メッセージを捕捉し修正することです。これは、`<iframe>` のサンドボックス機能(隔離機能)を使用して、メインのフロントエンド・アプリケーションと並行して JavaScript を安全に実行することで実現します。Tauri は、ページの読み込み中にアイソレーション型を発動し、Tauri コアに対するすべての IPC 呼び出しを、直接ではなく、サンドボックス化(隔離化)されたアイソレーション・アプリケーション経由で行なうように強制的にルートを切り替えます。Tauri コアに渡されるメッセージの準備が整うと、メッセージはブラウザ実装の [SubtleCrypto] を使用して暗号化され、メインのフロントエンド・アプリケーションに返されます。
フロントエンドに戻されるとすぐに、メッセージは直接 Tauri コアに渡され、そこで通常どおりに復号化されて読み取られます。

誰かがアプリケーションの特定のバージョンのキーを手動で読み取り、暗号化後にそのキーをメッセージの変更に利用できないようにするために、アプリケーションが実行されるたびに新しいキーが生成されます。

### IPC メッセージのおおよその手順

動作の流れを判りやすくするために、アイソレーション型の IPC メッセージが Tauri コアに送信されるときに実行されるおおよその手順を、順序付きリストで以下に示します:

1. Tauri の IPC ハンドラーがメッセージを受け取ります
2. IPC ハンドラー → アイソレーション・アプリケーション
3. `[sandbox]` アイソレーション・アプリケーションのフックが実行され、メッセージの変更を行なう可能性があります。
4. `[sandbox]` メッセージは「実行時に生成されるキー」を使用して AES-GCM で暗号化されます
5. `[encrypted]` アイソレーション・アプリケーション → IPC ハンドラー
6. `[encrypted]` IPC ハンドラー → Tauri コア

_注記: 矢印(→)は、メッセージ・パッシング(受け渡し)を示します。_

### パフォーマンスへの影響

メッセージの暗号化が行なわれるため、安全なアイソレーション・アプリケーションが何も行なわない場合ですら、[ブラウンフィールド型] と比較して追加のオーバーヘッド・コストが発生します。(適切なパフォーマンスを維持するために、慎重に保守され依存関係も少ないであろう)パフォーマンス重視のアプリケーションを除いて、ほとんどのアプリケーションは比較的小型で AES-GCM も比較的高速であるため、IPC メッセージの暗号化/復号化の実行時コストを意識する必要はありません。もし AES-GCM について馴染みがないとしても、ここで関連するのは、それが [SubtleCrypto] に含まれる唯一の認証モード・アルゴリズムであり、おそらく [TLS][transport_layer_security] の内部で既に毎日使用しているということだけです。

Tauri アプリケーションが起動されるたびに一回、暗号化された安全なキーも生成されますが、システムがすでに十分なエントロピー(ランダム性)を備えていて、即座に十分な乱数を返すのであれば、この処理には通常気付きません。これは「デスクトップ環境」では極めて一般的です。「ヘッドレス環境」で [WebDriver との統合テスト] などを実行する場合で、オペレーティング・システムにエントロピー生成サービス《訳注: 「乱数生成」機能》が含まれていない場合には、`haveged` などの何らかのエントロピー生成サービスをインストールすることをお勧めします。<sup>Linux 5.6 (March 2020) 版から、投機的実行によるエントロピー生成が含まれるようになりました。</sup>

### 制限事項

アイソレーション型には、プラットフォームとの不整合から生じる制限事項がいくつかあります。最も重大な制限は、Windows 上のサンドボックス化された `<iframes>` 内で外部ファイルが正しく読み込まれないことによるものです。このため、アイソレーション・アプリケーションに関連するスクリプトの内容を取得してインラインに挿入する、ビルド時の簡単なスクリプト・インライン化手順を実装しました。つまりこれは、`<script src="index.js"></script>` のようなファイルの典型的なバンドル、あるいは単純な挿入は依然として正常に機能しますが、ES Modules(ECMAScript Modules)などの新しいメカニズムは上手く読み込ま*ない*ということを意味します。

## 推奨事項

アイソレーション・アプリケーションの目的は開発の脅威から保護することであるため、アイソレーション・アプリケーションはできる限り簡素化しておくことを強くお勧めします。依存関係を最小限に抑えるよう努めるだけでなく、必要なビルド手順を最小限に抑えることも検討する必要があります。これにより、フロントエンド・アプリケーションを覆うアイソレーション・アプリケーションに対するサプライ・チェーン攻撃を心配する必要がなくなります。

## アイソレーション・アプリケーションの作成

次の例では、小さな「hello-world」のようなアイソレーション・アプリケーションを作成し、それを仮に既存の Tauri アプリケーションに接続することを考えます。そこでは、通過するメッセージの検証は行なわれず、WebView コンソールに内容が出力されるだけです。

この事例では、`tauri.conf.json` と同じディレクトリにいると仮定します。既存の Tauri アプリケーションの `distDir` は `../dist` に設定されています。

`../dist-isolation/index.html`:

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Isolation Secure Script</title>
</head>
<body>
<script src="index.js"></script>
</body>
</html>
```

`../dist-isolation/index.js`:

```javascript
window.__TAURI_ISOLATION_HOOK__ = (payload) => {
// 何も検証や修正せず、ただ hook から内容を印字するだけです。
console.log('hook', payload);
return payload;
};
```

あとは、アイソレーション・パターンを使用するように `tauri.conf.json` の[設定](#設定) を変更し、ブート処理経路を [ブラウンフィールド型] からアイソレーション型に切り替えるだけです。

## 設定

メインのフロントエンド `distDir` が `../dist` に設定されていると仮定します。また、アイソレーション・アプリケーションを `../dist-isolation` に出力します。

```json
{
"build": {
"distDir": "../dist"
},
"app": {
"security": {
"pattern": {
"use": "isolation",
"options": {
"dir": "../dist-isolation"
}
}
}
}
}
```

[transport_layer_security]: https://ja.wikipedia.org/wiki/Transport_Layer_Security
[セキュリティ:脅威モデル]: ../security/lifecycle/
[events]: ../reference/javascript/api/namespaceevent/
[subtlecrypto]: https://developer.mozilla.org/ja-JP/docs/Web/API/SubtleCrypto
[ブラウンフィールド型]: ../concept/inter-process-communication/brownfield/
[integration testing with webdriver]: ../develop/tests/webdriver/


<div style="text-align:right">
【※ この日本語版は、「Oct 01, 2024 英語版」に基づいています】<br>
Doc-JP 2.00.00
</div>
Loading