<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=Tauri%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0</id>
	<title>Tauriの基礎 - ファイルシステム - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=Tauri%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0"/>
	<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=Tauri%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;action=history"/>
	<updated>2026-09-02T11:42:35Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=Tauri%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=14530&amp;oldid=prev</id>
		<title>2026年3月4日 (水) 17:05にWikiによる</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=Tauri%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=14530&amp;oldid=prev"/>
		<updated>2026-03-04T17:05:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年3月5日 (木) 02:05時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l116&quot;&gt;116行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;116行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;readDir&amp;lt;/code&amp;gt; 関数を使用して、ディレクトリ内のファイルとサブディレクトリの一覧を取得できる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;readDir&amp;lt;/code&amp;gt; 関数を使用して、ディレクトリ内のファイルとサブディレクトリの一覧を取得できる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tsx&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;typescript&lt;/ins&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  import { readDir, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  import { readDir, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiuwiki:diff:1.41:old-14529:rev-14530:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=Tauri%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=14529&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == Tauri v2のファイルシステムプラグイン (fs) は、デスクトップアプリケーションからローカルファイルシステムに安全にアクセスするための機能を提供する。&lt;br&gt; このプラグインは、テキストファイルやバイナリファイルの読み書き、ディレクトリの操作、ファイルの存在確認等の基本的なファイル操作をサポートしている。&lt;br&gt; &lt;br&gt; セキュリ…」</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=Tauri%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=14529&amp;oldid=prev"/>
		<updated>2026-03-04T17:04:56Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == Tauri v2のファイルシステムプラグイン (fs) は、デスクトップアプリケーションからローカルファイルシステムに安全にアクセスするための機能を提供する。&amp;lt;br&amp;gt; このプラグインは、テキストファイルやバイナリファイルの読み書き、ディレクトリの操作、ファイルの存在確認等の基本的なファイル操作をサポートしている。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; セキュリ…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
Tauri v2のファイルシステムプラグイン (fs) は、デスクトップアプリケーションからローカルファイルシステムに安全にアクセスするための機能を提供する。&amp;lt;br&amp;gt;&lt;br /&gt;
このプラグインは、テキストファイルやバイナリファイルの読み書き、ディレクトリの操作、ファイルの存在確認等の基本的なファイル操作をサポートしている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
セキュリティを考慮して、デフォルトではアプリケーション専用のディレクトリ内のみにアクセスが制限されており、Capabilities設定でスコープを拡張することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ベースディレクトリという概念により、プラットフォーム間で異なるファイルパスを抽象化し、クロスプラットフォームなファイル操作を容易にしている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
主な機能には、&amp;lt;code&amp;gt;readTextFile&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;writeTextFile&amp;lt;/code&amp;gt; によるテキストファイルの読み書き、&amp;lt;code&amp;gt;readDir&amp;lt;/code&amp;gt; によるディレクトリ一覧の取得、&amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt; によるディレクトリ操作がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
非同期APIとして設計されており、React等のモダンなフロントエンドフレームワークと組み合わせて使用するのに適している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 基本的なファイル操作 ==&lt;br /&gt;
==== インストール ====&lt;br /&gt;
ファイルシステムプラグインを使用するには、まずインストールを行う。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 npm run tauri add fs&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== テキストファイルの読み込み =====&lt;br /&gt;
&amp;lt;code&amp;gt;readTextFile&amp;lt;/code&amp;gt; 関数を使用して、テキストファイルの内容を読み込むことができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { readTextFile, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // ファイルを読み込む関数&lt;br /&gt;
 async function loadConfig(): Promise&amp;lt;string&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     // アプリケーション設定ディレクトリから設定ファイルを読み込む&lt;br /&gt;
     const content = await readTextFile(&amp;#039;config.json&amp;#039;, {&lt;br /&gt;
       baseDir: BaseDirectory.AppConfig&lt;br /&gt;
     });&lt;br /&gt;
     console.log(&amp;#039;設定を読み込みました:&amp;#039;, content);&lt;br /&gt;
     return content;&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     console.error(&amp;#039;設定ファイルの読み込みに失敗しました:&amp;#039;, error);&lt;br /&gt;
     throw error;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== テキストファイルの書き込み ====&lt;br /&gt;
&amp;lt;code&amp;gt;writeTextFile&amp;lt;/code&amp;gt; 関数を使用して、テキストファイルに内容を書き込むことができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { writeTextFile, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // 設定を保存する関数&lt;br /&gt;
 async function saveConfig(config: object): Promise&amp;lt;void&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     const content = JSON.stringify(config, null, 2);&lt;br /&gt;
 &lt;br /&gt;
     // アプリケーションデータディレクトリに設定ファイルを保存&lt;br /&gt;
     await writeTextFile(&amp;#039;settings.json&amp;#039;, content, {&lt;br /&gt;
       baseDir: BaseDirectory.AppData&lt;br /&gt;
     });&lt;br /&gt;
     console.log(&amp;#039;設定を保存しました&amp;#039;);&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     console.error(&amp;#039;設定ファイルの保存に失敗しました:&amp;#039;, error);&lt;br /&gt;
     throw error;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ファイルの存在確認 ====&lt;br /&gt;
&amp;lt;code&amp;gt;exists&amp;lt;/code&amp;gt; 関数を使用して、ファイルまたはディレクトリが存在するかどうかを確認できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { exists, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // 設定ファイルの存在を確認する関数&lt;br /&gt;
 async function checkConfigExists(): Promise&amp;lt;boolean&amp;gt; {&lt;br /&gt;
   const fileExists = await exists(&amp;#039;config.json&amp;#039;, {&lt;br /&gt;
     baseDir: BaseDirectory.AppConfig&lt;br /&gt;
   });&lt;br /&gt;
 &lt;br /&gt;
   if (fileExists) {&lt;br /&gt;
     console.log(&amp;#039;設定ファイルが存在します&amp;#039;);&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     console.log(&amp;#039;設定ファイルが存在しません。デフォルト設定を使用します。&amp;#039;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   return fileExists;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ディレクトリ操作 ==&lt;br /&gt;
==== ディレクトリの作成 ====&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; 関数を使用して、新しいディレクトリを作成できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { mkdir, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // キャッシュディレクトリを作成する関数&lt;br /&gt;
 async function createCacheDir(): Promise&amp;lt;void&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     // 再帰的にディレクトリを作成&lt;br /&gt;
     await mkdir(&amp;#039;cache/images/thumbnails&amp;#039;, {&lt;br /&gt;
       baseDir: BaseDirectory.AppCache,&lt;br /&gt;
       recursive: true  // 親ディレクトリも必要に応じて作成&lt;br /&gt;
     });&lt;br /&gt;
     console.log(&amp;#039;キャッシュディレクトリを作成しました&amp;#039;);&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     console.error(&amp;#039;ディレクトリの作成に失敗しました:&amp;#039;, error);&lt;br /&gt;
     throw error;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ディレクトリ内容の読み込み ====&lt;br /&gt;
&amp;lt;code&amp;gt;readDir&amp;lt;/code&amp;gt; 関数を使用して、ディレクトリ内のファイルとサブディレクトリの一覧を取得できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;tsx&amp;quot;&amp;gt;&lt;br /&gt;
 import { readDir, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // ドキュメントディレクトリの内容を一覧表示する関数&lt;br /&gt;
 async function listDocuments(): Promise&amp;lt;void&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     const entries = await readDir(&amp;#039;documents&amp;#039;, {&lt;br /&gt;
       baseDir: BaseDirectory.AppData&lt;br /&gt;
     });&lt;br /&gt;
 &lt;br /&gt;
     for (const entry of entries) {&lt;br /&gt;
       if (entry.isFile) {&lt;br /&gt;
         console.log(`ファイル: ${entry.name}`);&lt;br /&gt;
       }&lt;br /&gt;
       else if (entry.isDirectory) {&lt;br /&gt;
         console.log(`ディレクトリ: ${entry.name}/`);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     console.error(&amp;#039;ディレクトリの読み込みに失敗しました:&amp;#039;, error);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ファイルとディレクトリの削除 ====&lt;br /&gt;
&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt; 関数を使用して、ファイルまたはディレクトリを削除できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { remove, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // 一時ファイルを削除する関数&lt;br /&gt;
 async function cleanupTempFiles(): Promise&amp;lt;void&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     // 単一のファイルを削除&lt;br /&gt;
     await remove(&amp;#039;temp/cache.tmp&amp;#039;, {&lt;br /&gt;
       baseDir: BaseDirectory.Temp&lt;br /&gt;
     });&lt;br /&gt;
 &lt;br /&gt;
     // ディレクトリを再帰的に削除&lt;br /&gt;
     await remove(&amp;#039;temp/old-cache&amp;#039;, {&lt;br /&gt;
       baseDir: BaseDirectory.Temp,&lt;br /&gt;
       recursive: true  // 中身ごと削除&lt;br /&gt;
     });&lt;br /&gt;
 &lt;br /&gt;
     console.log(&amp;#039;一時ファイルを削除しました&amp;#039;);&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     console.error(&amp;#039;削除に失敗しました:&amp;#039;, error);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BaseDirectory (ベースディレクトリ) ==&lt;br /&gt;
BaseDirectoryは、ファイル操作の基準となるディレクトリを指定するための仕組みである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
これにより、プラットフォーム間で異なるパスを意識せずにファイル操作を行うことができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 利用可能なBaseDirectoryの一覧 ====&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ BaseDirectoryの一覧&lt;br /&gt;
|-&lt;br /&gt;
! 定数 !! 説明 !! Windowsのパス例 !! MacOS / Linuxのパス例&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AppConfig&amp;lt;/code&amp;gt; || アプリケーション設定ディレクトリ || %APPDATA%/{app} || ~/.config/{app}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AppData&amp;lt;/code&amp;gt; || アプリケーションデータディレクトリ || %APPDATA%/{app} || ~/.local/share/{app}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AppLocalData&amp;lt;/code&amp;gt; || ローカルアプリケーションデータ || %LOCALAPPDATA%/{app} || ~/.local/share/{app}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AppCache&amp;lt;/code&amp;gt; || アプリケーションキャッシュディレクトリ || %LOCALAPPDATA%/{app}/cache || ~/.cache/{app}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AppLog&amp;lt;/code&amp;gt; || アプリケーションログディレクトリ || %LOCALAPPDATA%/{app}/logs || ~/.local/state/{app}/logs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Resource&amp;lt;/code&amp;gt; || アプリケーションリソースディレクトリ || (実行ファイルと同階層) || (アプリバンドル内)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Temp&amp;lt;/code&amp;gt; || 一時ディレクトリ || %TEMP% || /tmp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Desktop&amp;lt;/code&amp;gt; || デスクトップディレクトリ || %USERPROFILE%/Desktop || ~/Desktop&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Document&amp;lt;/code&amp;gt; || ドキュメントディレクトリ || %USERPROFILE%/Documents || ~/Documents&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Download&amp;lt;/code&amp;gt; || ダウンロードディレクトリ || %USERPROFILE%/Downloads || ~/Downloads&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Picture&amp;lt;/code&amp;gt; || ピクチャディレクトリ || %USERPROFILE%/Pictures || ~/Pictures&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Public&amp;lt;/code&amp;gt; || パブリックディレクトリ || %PUBLIC% || ~/Public&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Video&amp;lt;/code&amp;gt; || ビデオディレクトリ || %USERPROFILE%/Videos || ~/Videos&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Audio&amp;lt;/code&amp;gt; || オーディオディレクトリ || %USERPROFILE%/Music || ~/Music&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Font&amp;lt;/code&amp;gt; || フォントディレクトリ || %LOCALAPPDATA%/Microsoft/Windows/Fonts || ~/.fonts&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Home&amp;lt;/code&amp;gt; || ホームディレクトリ || %USERPROFILE% || ~&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Runtime&amp;lt;/code&amp;gt; || ランタイムディレクトリ || (なし) || $XDG_RUNTIME_DIR&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;{app}&amp;lt;/u&amp;gt; はアプリケーションの識別子で、&amp;lt;u&amp;gt;tauri.conf.json&amp;lt;/u&amp;gt; ファイルの &amp;lt;code&amp;gt;productName&amp;lt;/code&amp;gt; に基づく。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 使用例 ====&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { readTextFile, writeTextFile, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // ユーザのドキュメントディレクトリにファイルを保存&lt;br /&gt;
 async function saveToDocuments(content: string): Promise&amp;lt;void&amp;gt; {&lt;br /&gt;
   await writeTextFile(&amp;#039;my-app/export.txt&amp;#039;, content, {&lt;br /&gt;
     baseDir: BaseDirectory.Document&lt;br /&gt;
   });&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // デスクトップからファイルを読み込む&lt;br /&gt;
 async function loadFromDesktop(): Promise&amp;lt;string&amp;gt; {&lt;br /&gt;
   return await readTextFile(&amp;#039;notes.txt&amp;#039;, {&lt;br /&gt;
     baseDir: BaseDirectory.Desktop&lt;br /&gt;
   });&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== パーミッションスコープ設定 ==&lt;br /&gt;
ファイルシステムプラグインは、セキュリティのためにCapabilities設定でアクセス範囲を制御する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== デフォルトパーミッション ====&lt;br /&gt;
&amp;lt;code&amp;gt;fs:default&amp;lt;/code&amp;gt; パーミッションは、アプリケーション専用ディレクトリへの読み取りアクセスと、ディレクトリの作成を許可する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;permissions&amp;quot;: [&lt;br /&gt;
     &amp;quot;fs:default&amp;quot;&lt;br /&gt;
   ]&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 個別パーミッション ====&lt;br /&gt;
より詳細な制御が必要な場合は、個別のパーミッションを指定できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fs プラグインのパーミッション一覧&lt;br /&gt;
|-&lt;br /&gt;
! パーミッション !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fs:default&amp;lt;/code&amp;gt; || デフォルトのパーミッションセット&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fs:allow-read&amp;lt;/code&amp;gt; || ファイルの読み取りを許可&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fs:allow-write&amp;lt;/code&amp;gt; || ファイルの書き込みを許可&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fs:allow-exists&amp;lt;/code&amp;gt; || ファイル存在確認を許可&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fs:allow-mkdir&amp;lt;/code&amp;gt; || ディレクトリ作成を許可&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fs:allow-read-dir&amp;lt;/code&amp;gt; || ディレクトリ読み込みを許可&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fs:allow-remove&amp;lt;/code&amp;gt; || ファイル削除を許可&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== スコープ設定 ====&lt;br /&gt;
特定のパスへのみアクセスを許可する場合、スコープ設定を使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;permissions&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;identifier&amp;quot;: &amp;quot;fs:allow-read&amp;quot;,&lt;br /&gt;
       &amp;quot;allow&amp;quot;: [&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$APPDATA/**&amp;quot; },&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$RESOURCE/**&amp;quot; }&lt;br /&gt;
       ]&lt;br /&gt;
     },&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;identifier&amp;quot;: &amp;quot;fs:allow-write&amp;quot;,&lt;br /&gt;
       &amp;quot;allow&amp;quot;: [&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$APPDATA&amp;quot; },&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$APPDATA/**&amp;quot; }&lt;br /&gt;
       ]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
下表に、パスパターンの説明を示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ パスパターンの説明&lt;br /&gt;
! パターン !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| $APPDATA || アプリケーションデータディレクトリを表す変数。&lt;br /&gt;
|-&lt;br /&gt;
| ** || 任意の深さのサブディレクトリとファイルにマッチする。&lt;br /&gt;
|-&lt;br /&gt;
| * || 単一レベルのディレクトリまたはファイルにマッチする。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 包括的な設定例 ====&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;$schema&amp;quot;: &amp;quot;../gen/schemas/desktop-schema.json&amp;quot;,&lt;br /&gt;
   &amp;quot;identifier&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
   &amp;quot;description&amp;quot;: &amp;quot;File system access capability&amp;quot;,&lt;br /&gt;
   &amp;quot;windows&amp;quot;: [&amp;quot;main&amp;quot;],&lt;br /&gt;
   &amp;quot;permissions&amp;quot;: [&lt;br /&gt;
     &amp;quot;fs:default&amp;quot;,&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;identifier&amp;quot;: &amp;quot;fs:scope&amp;quot;,&lt;br /&gt;
       &amp;quot;allow&amp;quot;: [&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$APPDATA&amp;quot; },&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$APPDATA/**&amp;quot; },&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$RESOURCE&amp;quot; },&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$RESOURCE/**&amp;quot; },&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$TEMP&amp;quot; },&lt;br /&gt;
         { &amp;quot;path&amp;quot;: &amp;quot;$TEMP/**&amp;quot; }&lt;br /&gt;
       ]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== バイナリファイルの操作 ==&lt;br /&gt;
テキストファイル以外にも、バイナリファイルの読み書きが可能である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== バイナリファイルの読み込み ====&lt;br /&gt;
&amp;lt;code&amp;gt;readFile&amp;lt;/code&amp;gt; 関数は、ファイルの内容を &amp;lt;code&amp;gt;Uint8Array&amp;lt;/code&amp;gt; として返す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { readFile, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // 画像ファイルを読み込む関数&lt;br /&gt;
 async function loadImage(imagePath: string): Promise&amp;lt;Uint8Array&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     const imageData = await readFile(imagePath, {&lt;br /&gt;
       baseDir: BaseDirectory.Resource&lt;br /&gt;
     });&lt;br /&gt;
     console.log(`画像を読み込みました: ${imageData.length} bytes`);&lt;br /&gt;
     return imageData;&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     console.error(&amp;#039;画像の読み込みに失敗しました:&amp;#039;, error);&lt;br /&gt;
     throw error;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Data URLとして使用する例&lt;br /&gt;
 async function loadImageAsDataUrl(path: string): Promise&amp;lt;string&amp;gt; {&lt;br /&gt;
   const data = await readFile(path, { baseDir: BaseDirectory.Resource });&lt;br /&gt;
   const base64 = btoa(String.fromCharCode(...data));&lt;br /&gt;
   return `data:image/png;base64,${base64}`;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== バイナリファイルの書き込み ====&lt;br /&gt;
&amp;lt;code&amp;gt;writeFile&amp;lt;/code&amp;gt; 関数は、&amp;lt;code&amp;gt;Uint8Array&amp;lt;/code&amp;gt; または &amp;lt;code&amp;gt;ArrayBuffer&amp;lt;/code&amp;gt; をファイルに書き込む。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { writeFile, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // ダウンロードしたデータを保存する関数&lt;br /&gt;
 async function saveDownloadedFile(&lt;br /&gt;
   filename: string,&lt;br /&gt;
   data: Uint8Array&lt;br /&gt;
 ): Promise&amp;lt;void&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     await writeFile(`downloads/${filename}`, data, {&lt;br /&gt;
       baseDir: BaseDirectory.AppData&lt;br /&gt;
     });&lt;br /&gt;
     console.log(`ファイルを保存しました: ${filename}`);&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     console.error(&amp;#039;ファイルの保存に失敗しました:&amp;#039;, error);&lt;br /&gt;
     throw error;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== サンプルコード ==&lt;br /&gt;
==== 設定管理クラス ====&lt;br /&gt;
アプリケーションの設定を管理するクラスの定義例を示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { readTextFile, writeTextFile, exists, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // アプリケーション設定の型定義&lt;br /&gt;
 interface AppConfig {&lt;br /&gt;
   theme: &amp;#039;light&amp;#039; | &amp;#039;dark&amp;#039;;&lt;br /&gt;
   language: string;&lt;br /&gt;
   autoSave: boolean;&lt;br /&gt;
   recentFiles: string[];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // デフォルト設定&lt;br /&gt;
 const defaultConfig: AppConfig = {&lt;br /&gt;
   theme: &amp;#039;light&amp;#039;,&lt;br /&gt;
   language: &amp;#039;ja&amp;#039;,&lt;br /&gt;
   autoSave: true,&lt;br /&gt;
   recentFiles: []&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 // 設定管理クラス&lt;br /&gt;
 class ConfigManager {&lt;br /&gt;
   private configPath = &amp;#039;config.json&amp;#039;;&lt;br /&gt;
   private config: AppConfig | null = null;&lt;br /&gt;
 &lt;br /&gt;
   // 設定を読み込む&lt;br /&gt;
   async load(): Promise&amp;lt;AppConfig&amp;gt; {&lt;br /&gt;
     // 既に読み込み済みの場合はキャッシュを返す&lt;br /&gt;
     if (this.config) {&lt;br /&gt;
       return this.config;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     // 設定ファイルが存在するか確認&lt;br /&gt;
     const configExists = await exists(this.configPath, {&lt;br /&gt;
       baseDir: BaseDirectory.AppConfig&lt;br /&gt;
     });&lt;br /&gt;
 &lt;br /&gt;
     if (configExists) {&lt;br /&gt;
       try {&lt;br /&gt;
         const content = await readTextFile(this.configPath, {&lt;br /&gt;
           baseDir: BaseDirectory.AppConfig&lt;br /&gt;
         });&lt;br /&gt;
         this.config = { ...defaultConfig, ...JSON.parse(content) };&lt;br /&gt;
       }&lt;br /&gt;
       catch (error) {&lt;br /&gt;
         console.warn(&amp;#039;設定ファイルの読み込みに失敗。デフォルトを使用:&amp;#039;, error);&lt;br /&gt;
         this.config = { ...defaultConfig };&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       this.config = { ...defaultConfig };&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     return this.config;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   // 設定を保存する&lt;br /&gt;
   async save(config: Partial&amp;lt;AppConfig&amp;gt;): Promise&amp;lt;void&amp;gt; {&lt;br /&gt;
     if (!this.config) {&lt;br /&gt;
       await this.load();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     // 設定をマージ&lt;br /&gt;
     this.config = { ...this.config!, ...config };&lt;br /&gt;
 &lt;br /&gt;
     // ファイルに書き込む&lt;br /&gt;
     await writeTextFile(&lt;br /&gt;
       this.configPath,&lt;br /&gt;
       JSON.stringify(this.config, null, 2),&lt;br /&gt;
       { baseDir: BaseDirectory.AppConfig }&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   // 現在の設定を取得&lt;br /&gt;
   get(): AppConfig | null {&lt;br /&gt;
     return this.config;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // シングルトンとしてエクスポート&lt;br /&gt;
 export const configManager = new ConfigManager();&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Reactコンポーネントでの使用 ====&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { useEffect, useState } from &amp;#039;react&amp;#039;;&lt;br /&gt;
 import { configManager, AppConfig } from &amp;#039;./config-manager&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // 設定パネルコンポーネント&lt;br /&gt;
 function SettingsPanel() {&lt;br /&gt;
   const [config, setConfig] = useState&amp;lt;AppConfig | null&amp;gt;(null);&lt;br /&gt;
   const [saving, setSaving] = useState(false);&lt;br /&gt;
 &lt;br /&gt;
   // 初期読み込み&lt;br /&gt;
   useEffect(() =&amp;gt; {&lt;br /&gt;
     configManager.load().then(setConfig);&lt;br /&gt;
   }, []);&lt;br /&gt;
 &lt;br /&gt;
   // 設定を変更して保存&lt;br /&gt;
   const updateConfig = async (updates: Partial&amp;lt;AppConfig&amp;gt;) =&amp;gt; {&lt;br /&gt;
     setSaving(true);&lt;br /&gt;
     try {&lt;br /&gt;
       await configManager.save(updates);&lt;br /&gt;
       setConfig(prev =&amp;gt; prev ? { ...prev, ...updates } : null);&lt;br /&gt;
     }&lt;br /&gt;
     catch (error) {&lt;br /&gt;
       console.error(&amp;#039;設定の保存に失敗しました:&amp;#039;, error);&lt;br /&gt;
     }&lt;br /&gt;
     finally {&lt;br /&gt;
       setSaving(false);&lt;br /&gt;
     }&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   if (!config) {&lt;br /&gt;
     return &amp;lt;div&amp;gt;読み込み中...&amp;lt;/div&amp;gt;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   return (&lt;br /&gt;
     &amp;lt;div className=&amp;quot;settings-panel&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;h2&amp;gt;設定&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
       &amp;lt;div className=&amp;quot;setting-item&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;label&amp;gt;テーマ&amp;lt;/label&amp;gt;&lt;br /&gt;
         &amp;lt;select&lt;br /&gt;
           value={config.theme}&lt;br /&gt;
           onChange={(e) =&amp;gt; updateConfig({ &lt;br /&gt;
             theme: e.target.value as &amp;#039;light&amp;#039; | &amp;#039;dark&amp;#039; &lt;br /&gt;
           })}&lt;br /&gt;
           disabled={saving}&lt;br /&gt;
         &amp;gt;&lt;br /&gt;
           &amp;lt;option value=&amp;quot;light&amp;quot;&amp;gt;ライト&amp;lt;/option&amp;gt;&lt;br /&gt;
           &amp;lt;option value=&amp;quot;dark&amp;quot;&amp;gt;ダーク&amp;lt;/option&amp;gt;&lt;br /&gt;
         &amp;lt;/select&amp;gt;&lt;br /&gt;
       &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
       &amp;lt;div className=&amp;quot;setting-item&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;label&amp;gt;自動保存&amp;lt;/label&amp;gt;&lt;br /&gt;
         &amp;lt;input&lt;br /&gt;
           type=&amp;quot;checkbox&amp;quot;&lt;br /&gt;
           checked={config.autoSave}&lt;br /&gt;
           onChange={(e) =&amp;gt; updateConfig({ autoSave: e.target.checked })}&lt;br /&gt;
           disabled={saving}&lt;br /&gt;
         /&amp;gt;&lt;br /&gt;
       &amp;lt;/div&amp;gt;&lt;br /&gt;
     &amp;lt;/div&amp;gt;&lt;br /&gt;
   );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 export default SettingsPanel;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== エラーハンドリング ==&lt;br /&gt;
ファイル操作では、様々なエラーが発生する可能性があるため、適切なエラーハンドリングが重要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== よくあるエラー ====&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ファイル操作のエラー一覧&lt;br /&gt;
|-&lt;br /&gt;
! エラー !! 原因 !! 対処法&lt;br /&gt;
|-&lt;br /&gt;
| NotFound || ファイルまたはディレクトリが存在しない || &amp;lt;code&amp;gt;exists()&amp;lt;/code&amp;gt; で事前に確認する。&lt;br /&gt;
|-&lt;br /&gt;
| PermissionDenied || アクセス権限がない || Capabilities設定を確認する。&lt;br /&gt;
|-&lt;br /&gt;
| AlreadyExists || 作成しようとしたファイルが既に存在する || &amp;lt;code&amp;gt;exists()&amp;lt;/code&amp;gt; で事前に確認する。&lt;br /&gt;
|-&lt;br /&gt;
| InvalidData || ファイルの内容が期待する形式と異なる || データの検証を行う。&lt;br /&gt;
|-&lt;br /&gt;
| StorageFull || ディスク容量が不足している || ユーザに通知する。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== エラーハンドリングの定義例 ====&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
 import { readTextFile, BaseDirectory } from &amp;#039;@tauri-apps/plugin-fs&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // エラーハンドリングを含むファイル読み込み&lt;br /&gt;
 async function safeReadFile(path: string): Promise&amp;lt;string | null&amp;gt; {&lt;br /&gt;
   try {&lt;br /&gt;
     const content = await readTextFile(path, {&lt;br /&gt;
       baseDir: BaseDirectory.AppData&lt;br /&gt;
     });&lt;br /&gt;
     return content;&lt;br /&gt;
   }&lt;br /&gt;
   catch (error) {&lt;br /&gt;
     // エラーの種類に応じた処理&lt;br /&gt;
     if (error instanceof Error) {&lt;br /&gt;
       if (error.message.includes(&amp;#039;not found&amp;#039;)) {&lt;br /&gt;
         console.warn(`ファイルが見つかりません: ${path}`);&lt;br /&gt;
         return null;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       if (error.message.includes(&amp;#039;permission&amp;#039;)) {&lt;br /&gt;
         console.error(`アクセス権限がありません: ${path}`);&lt;br /&gt;
         throw new Error(&amp;#039;このファイルにアクセスする権限がありません。&amp;#039;);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     // 予期しないエラー&lt;br /&gt;
     console.error(&amp;#039;ファイルの読み込み中にエラーが発生しました:&amp;#039;, error);&lt;br /&gt;
     throw error;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
==== ファイルが見つからない (NotFoundエラー) ====&lt;br /&gt;
* パスの確認&lt;br /&gt;
*: ファイルパスが正しいか確認する。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* ベースディレクトリの確認&lt;br /&gt;
*: 正しい &amp;lt;code&amp;gt;baseDir&amp;lt;/code&amp;gt; を指定しているか確認する。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* exists()の使用&lt;br /&gt;
*: ファイル操作の前に &amp;lt;code&amp;gt;exists()&amp;lt;/code&amp;gt; 関数で存在確認を行う。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== パーミッションエラー (PermissionDeniedエラー) ====&lt;br /&gt;
* Capabilities設定の確認&lt;br /&gt;
*: &amp;lt;u&amp;gt;src-tauri/capabilities/default.json&amp;lt;/u&amp;gt; ファイルで適切なパーミッションが設定されているか確認する。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* スコープ設定の確認&lt;br /&gt;
*: アクセスしようとしているパスがスコープに含まれているか確認する。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* 再ビルド&lt;br /&gt;
*: Capabilities設定を変更した後、アプリケーションを再ビルドする。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== エンコーディングの問題 (テキストファイルの読み書きで文字化けが発生) ====&lt;br /&gt;
* ファイルのエンコーディング確認&lt;br /&gt;
*: TauriのfsプラグインはUTF-8を前提としている。&lt;br /&gt;
*: 異なるエンコーディングのファイルは、バイナリとして読み込んで変換する必要がある。&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参考リンク ==&lt;br /&gt;
* [https://v2.tauri.app/plugin/fs/ Tauri公式ドキュメント - File System Plugin]&lt;br /&gt;
* [https://v2.tauri.app/reference/javascript/api/namespacefs/ Tauri API Reference - fs]&lt;br /&gt;
* [https://github.com/tauri-apps/plugins-workspace/tree/v2/plugins/fs Tauri fs Plugin Source (GitHub)]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Tauri,Rust,React,TypeScript,FileSystem,fs,File,Read,Write,Desktop Application&lt;br /&gt;
|description={{PAGENAME}} - Tauri v2のファイルシステムプラグインに関するガイド | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:Rust]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>