{"id":12180,"date":"2025-04-10T23:40:00","date_gmt":"2025-04-10T14:40:00","guid":{"rendered":"https:\/\/www.webcyou.com\/?p=12180"},"modified":"2025-04-10T23:40:00","modified_gmt":"2025-04-10T14:40:00","slug":"taurirust-x-ai-%e3%81%a7%e4%bd%9c%e3%82%8b-gitgui%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e3%82%a2%e3%83%97%e3%83%aa-%e3%81%9d%e3%81%ae4","status":"publish","type":"post","link":"https:\/\/www.webcyou.com\/?p=12180","title":{"rendered":"Tauri(Rust) \u00d7 AI \u3067\u4f5c\u308b GitGUI\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea \u305d\u306e4"},"content":{"rendered":"\n<p>\u3069\u3082\u3067\u3059\u3002<\/p>\n<p>\u71b1\u306f\u6cbb\u307e\u308a\u4f53\u8abf\u3082\u5f90\u3005\u306b\u56de\u5fa9\u3057\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u4eca\u56de\u306f\u524d\u56de\u306e\u300c<a href=\"https:\/\/www.webcyou.com\/?p=12173\">Tauri(Rust) \u00d7 AI \u3067\u4f5c\u308b GitGUI\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea \u305d\u306e3<\/a>\u300d\u306e\u7d9a\u304d\u3068\u306a\u308a\u3001Rust\u5074\u306e\u51e6\u7406\u3082\u8ffd\u52a0\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u307e\u305a\u306f\u3001<span data-lexical-text=\"true\">\u30ed\u30b0\u30a4\u30f3\u30d5\u30a9\u30fc\u30e0\u3088\u308a\u3001Username\u3068Password\u3092\u53d6\u5f97\u3057\u3001<\/span><span data-lexical-text=\"true\"><a href=\"https:\/\/docs.rs\/keyring\/latest\/keyring\/\" target=\"_blank\" rel=\"noopener\">keyring-rs<\/a>\u30af\u30ec\u30fc\u30c8\u3092\u7528\u3044\u3066\u305d\u308c\u3089\u3092\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u767b\u9332\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/span><\/p>\n<p>\u4eca\u56de\u3082\u6975\u529b\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u305b\u305a\u30ce\u30fc\u30b3\u30fc\u30c9\u3067\u3001<\/p>\n<p>\u305d\u306e\u307e\u307e\u306e\u601d\u3044\u3092Cursor\u306b\u3002<\/p>\n<h4>\u30ed\u30b0\u30a4\u30f3\u60c5\u5831\u767b\u9332<\/h4>\n<p>\u300c<span data-lexical-text=\"true\">Rust\u5074\u306e\u51e6\u7406\u3092\u4f5c\u3063\u3066\u3044\u3053\u3046\u304b\u306a\u3002<\/span><br \/><span data-lexical-text=\"true\">\u307e\u305a\u306f\u30d5\u30a9\u30fc\u30e0\u3088\u308a\u3001Username\u3068Password\u3092\u53d7\u53d6\u308a<\/span><br \/><span data-lexical-text=\"true\">keyring-rs \u30af\u30ec\u30fc\u30c8\u3092\u7528\u3044\u3066\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u767b\u9332\u3059\u308b\u51e6\u7406\u304c\u6b32\u3057\u3044\u300d<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u306f\u3044\u3001Rust\u5074\u3067\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u8a8d\u8a3c\u60c5\u5831\u3092\u4fdd\u5b58\u3059\u308b\u51e6\u7406\u3092\u5b9f\u88c5\u3057\u307e\u3057\u3087\u3046\u3002\n\u307e\u305a\u3001\u5fc5\u8981\u306a\u30af\u30ec\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/pre>\n<p>\u305d\u308c\u304b\u3089Cursor\u3055\u3093\u304c\u3042\u3041\u3060\u3053\u3046\u3060\u8a00\u3063\u305f\u5f8c\u3001<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">keyring = \"2.3.2\"<\/pre>\n<p><span data-lexical-text=\"true\">keyring\u30af\u30ec\u30fc\u30c8\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u304c\u3001ChatGPT\u306e\u6642\u3082\u305d\u3046\u306a\u306e\u3067\u3059\u304c\u3001\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306f3.6.2\u306a\u306e\u3067\u3059\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f32.3.2\u3092\u4f7f\u3044\u305f\u304c\u308a\u307e\u3059\u3002<\/span><\/p>\n<p>\u4e00\u65e6\u3001\u305d\u306e\u307e\u307e\u9032\u3081\u308b\u3068\u3057\u3001<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">use serde::{Deserialize, Serialize};\nuse keyring::Entry;\n\n#[derive(Debug, Serialize, Deserialize)]\nstruct Credentials {\n    username: String,\n    password: String,\n}\n\n#[tauri::command]\nfn save_credentials(credentials: Credentials) -&gt; Result&lt;(), String&gt; {\n    let entry = Entry::new(\"branchie\", &amp;credentials.username)\n        .map_err(|e| e.to_string())?;\n    \n    entry.set_password(&amp;credentials.password)\n        .map_err(|e| e.to_string())?;\n    \n    Ok(())\n}\n\n#[tauri::command]\nfn get_credentials(username: String) -&gt; Result&lt;String, String&gt; {\n    let entry = Entry::new(\"branchie\", &amp;username)\n        .map_err(|e| e.to_string())?;\n    \n    entry.get_password()\n        .map_err(|e| e.to_string())\n}<\/pre>\n<p>\u3068\u3001\u51e6\u7406\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">tauri::Builder::default()\n    .invoke_handler(tauri::generate_handler![save_credentials, get_credentials])\n    .run(tauri::generate_context!())\n    .expect(\"error while running tauri application\");<\/pre>\n<p>invoke handler\u306b\u3082\u305d\u308c\u3089\u306e\u95a2\u6570\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u3053\u308c\u3067\u3001\u4ee5\u4e0b\u306e\u6a5f\u80fd\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\uff1a\n1.save_credentials\u30b3\u30de\u30f3\u30c9\uff1a\n  \u30fb\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u53d7\u3051\u53d6\u308a\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u4fdd\u5b58\n  \u30fb\u30b5\u30fc\u30d3\u30b9\u540d\u306f\"branchie\"\u3068\u3057\u3066\u767b\u9332\n  \u30fb\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8fd4\u3059\n2.get_credentials\u30b3\u30de\u30f3\u30c9\uff1a\n  \u30fb\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u6307\u5b9a\u3057\u3066\u3001\u4fdd\u5b58\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u53d6\u5f97\n  \u30fb\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8fd4\u3059\n\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5074\u304b\u3089\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ \u8a8d\u8a3c\u60c5\u5831\u306e\u4fdd\u5b58\nawait invoke('save_credentials', {\n  credentials: {\n    username: '\u30e6\u30fc\u30b6\u30fc\u540d',\n    password: '\u30d1\u30b9\u30ef\u30fc\u30c9'\n  }\n});\n\n\/\/ \u8a8d\u8a3c\u60c5\u5831\u306e\u53d6\u5f97\nconst password = await invoke('get_credentials', {\n  username: '\u30e6\u30fc\u30b6\u30fc\u540d'\n});<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u3053\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u30bb\u30ad\u30e5\u30a2\u306a\u65b9\u6cd5\u3067\u8a8d\u8a3c\u60c5\u5831\u3092\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306fOS\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3092\u5229\u7528\u3057\u3066\u3001\u8a8d\u8a3c\u60c5\u5831\u3092\u5b89\u5168\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002\n\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306eLogin.vue\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u66f4\u65b0\u3057\u3066\u3001\u3053\u308c\u3089\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u3087\u3046\u304b\uff1f<\/pre>\n<p>\u305d\u3046\u3067\u3059\u306d\u3002<\/p>\n<p>Login.vue\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3082\u4fee\u6b63\u3057\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u30fc\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u3067\u306f\u3001Login.vue\u3092\u7de8\u96c6\u3057\u3066\u3001Rust\u5074\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u5b9f\u88c5\u3057\u307e\u3057\u3087\u3046\uff1a<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import { invoke } from \"@tauri-apps\/api\/tauri\";\u3068<\/pre>\n<p>\u3068\u3002\u3053\u3053\u3067\u4e00\u3064\u9593\u9055\u3044\u3092\u51fa\u3059\u3002<\/p>\n<p>import { invoke } from &#8220;@tauri-apps\/api\/core&#8221;;\u306a\u306e\u3067\u9593\u9055\u3044\u3092\u6307\u6458\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u3053\u308c\u3067\u3001\u5fc5\u8981\u306a\u5b9f\u88c5\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a\n1.Rust\u5074\uff1a\n  \u30fbkeyring\u30af\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u8a8d\u8a3c\u60c5\u5831\u3092\u4fdd\u5b58\u30fb\u53d6\u5f97\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u88c5\n  \u30fb\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\n2.\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5074\uff1a\n  \u30fb@tauri-apps\/api\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n  \u30fb\u30ed\u30b0\u30a4\u30f3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u8a8d\u8a3c\u60c5\u5831\u306e\u4fdd\u5b58\u6a5f\u80fd\u3092\u8ffd\u52a0\n  \u30fb\u30a8\u30e9\u30fc\u8868\u793a\u3068\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u72b6\u614b\u306e\u7ba1\u7406\u3092\u8ffd\u52a0\n\u3053\u308c\u3067\u3001\u4ee5\u4e0b\u306e\u6a5f\u80fd\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\uff1a\n1.\u30e6\u30fc\u30b6\u30fc\u304c\u30ed\u30b0\u30a4\u30f3\u30d5\u30a9\u30fc\u30e0\u306b\u8a8d\u8a3c\u60c5\u5831\u3092\u5165\u529b\n2.\u8a8d\u8a3c\u60c5\u5831\u304c\u30b7\u30b9\u30c6\u30e0\u306e\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u5b89\u5168\u306b\u4fdd\u5b58\u3055\u308c\u308b\n3.\u4fdd\u5b58\u3055\u308c\u305f\u8a8d\u8a3c\u60c5\u5831\u306f\u5f8c\u3067\u53d6\u5f97\u53ef\u80fd\n4.\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u30e6\u30fc\u30b6\u30fc\u306b\u901a\u77e5\n5.\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u4e2d\u306f\u9069\u5207\u306aUI\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u8868\u793a\n\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a\n1.\u8a8d\u8a3c\u60c5\u5831\u306e\u524a\u9664\u6a5f\u80fd\n2.\u8a8d\u8a3c\u60c5\u5831\u306e\u66f4\u65b0\u6a5f\u80fd\n3.\u8907\u6570\u306e\u8a8d\u8a3c\u60c5\u5831\u306e\u7ba1\u7406\n4.\u8a8d\u8a3c\u60c5\u5831\u306e\u6697\u53f7\u5316\n\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f<\/pre>\n<p>\u3044\u3044\u3067\u3059\u306d\u3002\u3067\u306f\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u30fc\u3002<\/p>\n<p>Username\u3068Password\u3092\u5165\u529b\u5f8c\u300cLogin\u300d\u30dc\u30bf\u30f3\u62bc\u4e0b\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-12181\" src=\"https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_1-1024x799.png\" alt=\"\" width=\"476\" height=\"371\" srcset=\"https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_1-1024x799.png 1024w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_1-300x234.png 300w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_1-768x600.png 768w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_1-1536x1199.png 1536w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_1.png 1824w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/p>\n<p>\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-12182\" src=\"https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_2.png\" alt=\"\" width=\"262\" height=\"103\" srcset=\"https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_2.png 534w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_2-300x118.png 300w\" sizes=\"auto, (max-width: 262px) 100vw, 262px\" \/><\/p>\n<p>\u826f\u3044\u3067\u3059\u306d\u3002\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u307e\u307e\u3067\u3082\u826f\u3044\u306e\u3067\u3059\u304c\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u53e4\u3044\u3053\u3068\u3082\u3042\u308a\u30013\u306b\u3042\u3052\u305f\u3044\u306e\u3067\u524d\u56de\u306e\u8a18\u4e8b\u300c<a href=\"https:\/\/www.webcyou.com\/?p=12133\">keyring-rs\u3067\u3001Mac\u306e\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u767b\u9332\u3059\u308b\u3002<\/a>\u300d\u3067\u3001\u8a18\u8ff0\u3055\u305b\u3066\u3044\u305f\u3060\u3044\u305f\u3088\u3046\u306b\u3001<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">keyring = { version = \"3\", features = [\"apple-native\", \"windows-native\"] }<\/pre>\n<p>features\u304c\u5fc5\u8981\u3068\u306a\u308b\u306e\u3067\u305d\u3061\u3089\u3082\u8a18\u8ff0\u3002<\/p>\n<p>Cargo.toml\u3092\u5909\u66f4\u3057\u305f\u5f8c\u3001\u518d\u5ea6\u52d5\u4f5c\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u554f\u984c\u306a\u304f\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u4fdd\u5b58\u3055\u308c\u3066\u304a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u3082\u3046\u4e00\u3064\u3060\u3051\u51e6\u7406\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>\u73fe\u72b6\u3001\u30ed\u30b0\u30a4\u30f3\u60c5\u5831\u3092\u5165\u529b\u3059\u308b\u3068Username\u3068Password\u306f\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u4fdd\u5b58\u3055\u308c\u308b\u306e\u3067\u3059\u304c\u3001Tauri\u3092\u518d\u5ea6\u8d77\u52d5\u3057\u3066\u3057\u307e\u3046\u3068\u3001Username\u304c\u5b58\u5728\u3057\u306a\u3044\u306e\u3067\u3001\u518d\u3073\u30ed\u30b0\u30a4\u30f3\u30d5\u30a9\u30fc\u30e0\u304c\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u306a\u306e\u3067\u3001Username\u3092\u4f55\u51e6\u304b\u306b\u4fdd\u5b58\u3057\u305f\u3044\u306e\u3067\u3059\u304c\u3002\u3002\u3002<\/p>\n<p>\u300c\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u969b\u3001\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u60c5\u5831\u304c\u3042\u308b\u5834\u5408\u306f\u30ed\u30b0\u30a4\u30f3\u30d5\u30a9\u30fc\u30e0\u306f\u30b9\u30ad\u30c3\u30d7\u3057\u305f\u3044\u3002\u300d<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u306f\u3044\u3001\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u8a8d\u8a3c\u60c5\u5831\u304c\u3042\u308b\u5834\u5408\u306f\u81ea\u52d5\u7684\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3088\u3046\u306b\u5b9f\u88c5\u3057\u307e\u3057\u3087\u3046\u3002\n\u307e\u305a\u3001Login.vue\u3092\u4fee\u6b63\u3057\u3066\u3001\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u6642\u306b\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u304b\u3089\u8a8d\u8a3c\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3059\uff1a<br \/><br \/><\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">const handleSubmit = async () =&gt; {\n    try {\n        isLoading.value = true;\n        error.value = \"\";\n\n        \/\/ \u8a8d\u8a3c\u60c5\u5831\u3092\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u4fdd\u5b58\n        await invoke(\"save_credentials\", {\n            credentials: {\n                username: username.value,\n                password: password.value,\n            },\n        });\n\n        \/\/ \u6700\u5f8c\u306b\u4f7f\u7528\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u4fdd\u5b58\n        localStorage.setItem(\"lastUsername\", username.value);\n\n        \/\/ \u89aa\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u8a8d\u8a3c\u60c5\u5831\u3092\u6e21\u3059\n        emit(\"login\", {\n            username: username.value,\n            password: password.value,\n        });\n    } catch (e) {\n        error.value =\n            e instanceof Error ? e.message : \"\u8a8d\u8a3c\u60c5\u5831\u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n    } finally {\n        isLoading.value = false;\n    }\n};\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u00a0<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30de\u30a6\u30f3\u30c8\u6642\u306b\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u304b\u3089\u8a8d\u8a3c\u60c5\u5831\u3092\u53d6\u5f97\nonMounted(async () =&gt; {\n    try {\n        isLoading.value = true;\n        \/\/ \u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u304b\u3089\u8a8d\u8a3c\u60c5\u5831\u3092\u53d6\u5f97\n        const savedUsername = await invoke(\"get_credentials\", {\n            username: username.value,\n        });\n        \n        if (savedUsername) {\n            \/\/ \u8a8d\u8a3c\u60c5\u5831\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u81ea\u52d5\u7684\u306b\u30ed\u30b0\u30a4\u30f3\n            emit(\"login\", {\n                username: username.value,\n                password: savedUsername,\n            });\n        }\n    } catch (e) {\n        \/\/ \u30a8\u30e9\u30fc\u306f\u7121\u8996\uff08\u8a8d\u8a3c\u60c5\u5831\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\uff09\n        console.log(\"\u8a8d\u8a3c\u60c5\u5831\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\");\n    } finally {\n        isLoading.value = false;\n    }\n});<\/pre>\n<p>\u3068\u3001\u3044\u3063\u305f\u611f\u3058\u306b Username\u3092localStorage\u306b\u4fdd\u5b58\u3057\u3066\u30012\u56de\u76ee\u306f\u305d\u306e\u4fdd\u5b58\u3057\u305fUsername\u3092\u53c2\u7167\u3057\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u305d\u3046\u3057\u305f\u3068\u3053\u308d\u30012\u56de\u76ee\u306f\u7121\u4e8b Git\u30af\u30ed\u30fc\u30f3\u3092\u6307\u5b9a\u3059\u308b\u753b\u9762\u304b\u3089\u59cb\u307e\u308a\u307e\u3057\u305f\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-12183\" src=\"https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_3-1024x799.png\" alt=\"\" width=\"527\" height=\"411\" srcset=\"https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_3-1024x799.png 1024w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_3-300x234.png 300w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_3-768x600.png 768w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_3-1536x1199.png 1536w, https:\/\/www.webcyou.com\/wp-content\/uploads\/2025\/04\/tauri20250410_3.png 1824w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/p>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u4eca\u56de\u306f\u3053\u3053\u307e\u3067\u3067\u3001\u6b21\u56de\u306f\u3053\u3061\u3089\u306e\u30af\u30ed\u30fc\u30f3URL\u306e\u5165\u529b\u306a\u3069\u3092\u5b9f\u88c5\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\u3002\u4eca\u56de\u306e\u4fee\u6b63\u5206\u306f<a href=\"https:\/\/github.com\/webcyou-org\/branchie\/commit\/90a9f1875673ca51315319b03a2f55c237e62507\" target=\"_blank\" rel=\"noopener\">\u3053\u3061\u3089<\/a>\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u3067\u306f\u3067\u306f\u3041\u3002<\/p>\n<p>\u307e\u305f\u307e\u305f\u3041\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3069\u3082\u3067\u3059\u3002 \u71b1\u306f\u6cbb\u307e\u308a\u4f53\u8abf\u3082\u5f90\u3005\u306b\u56de\u5fa9\u3057\u3066\u304d\u307e\u3057\u305f\u3002 \u4eca\u56de\u306f\u524d\u56de\u306e\u300cTauri(Rust) \u00d7 AI \u3067\u4f5c\u308b GitGUI\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea \u305d\u306e3\u300d\u306e\u7d9a\u304d\u3068\u306a\u308a\u3001Rust\u5074\u306e\u51e6\u7406\u3082\u8ffd\u52a0\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\u3002 \u307e\u305a\u306f\u3001\u30ed [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11849,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[299],"tags":[182,140,176,166,37,359,358,327,365,178,78,118],"class_list":["post-12180","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rust","tag-git","tag-github","tag-html5","tag-iphone","tag-iphone-","tag-keyring","tag-keyring-rs","tag-rust","tag-tauri","tag-178","tag-78","tag-118"],"_links":{"self":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts\/12180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12180"}],"version-history":[{"count":1,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts\/12180\/revisions"}],"predecessor-version":[{"id":12184,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/posts\/12180\/revisions\/12184"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=\/wp\/v2\/media\/11849"}],"wp:attachment":[{"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcyou.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}