{"id":45415,"date":"2023-04-18T18:29:08","date_gmt":"2023-06-16T23:08:15","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/"},"modified":"2024-04-30T00:07:48","modified_gmt":"2024-04-29T16:07:48","slug":"45415-2","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/","title":{"rendered":""},"content":{"rendered":"<p>\u672c\u8a18\u4e8b\u306fRust\u5927\u597d\u304d\u306a\u5c31\u6d3b\u4e2d\u306e\u5927\u5b66\u9662\u751f\u304c\u696d\u52d9\u3067\u3082Rust\u3092\u66f8\u304f\u305f\u3081\u306bRust\u3092\u5e03\u6559\u3059\u3079\u304f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30afTauri\u3092\u4f7f\u3046\u3053\u3068\u3067\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092Rust + Web\u30d5\u30ed\u30f3\u30c8\u6280\u8853\u3067\u7c21\u5358\u306b\u4f5c\u308c\u308b\u3053\u3068\u3092\u7d39\u4ecb\u3059\u308b\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u306a\u308a\u307e\u3059\uff01<\/p>\n<p>\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306fReactPlayer\u3092\u5229\u7528\u3057\u305f\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30cf\u30f3\u30ba\u30aa\u30f3\u306b+\u03b1\u3067UI\u3092\u6574\u3048\u305f\u5b8c\u6210\u54c1\u306f\u4ee5\u4e0b\u306eURL\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30fb\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u5b9f\u969b\u306b\u4f7f\u3048\u307e\u3059!!!!!\u2193<\/p>\n<p>&nbsp;<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/3-0.gif\" alt=\"TauriReactPlayer_demo.gif\" \/><\/div>\n<p>GitHub\u30ea\u30dd\u30b8\u30c8\u30ea: https:\/\/github.com\/anotherhollow1125\/TauriReactPlayer<\/p>\n<p>\u3067\u308f\u65e9\u901f\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u3070&#8230;<\/p>\n<h1>\u306f\u3058\u3081\u306b<\/h1>\n<p>\u30ea\u30ca\u300c\u3061\u3087\u3063\u3068\u5f85\u3061\u306a\u3055\u3044\uff01\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3042\u306a\u305f\u306f\u50d5\u306e\u30d0\u30a4\u30c8\u5148\u306eJS\u4e0a\u53f8\u306e\u4e95\u9593\u6b21\u30ea\u30ca\u3061\u3083\u3093\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u8aac\u660e\u53e3\u8abf\u306e\u7d39\u4ecb\u3069\u3046\u3082\u3002 \u305d\u3057\u3066\u6d41\u884c\u308a\u306e\u66f8\u304d\u65b9\u3092\u53d6\u308a\u5165\u308c\u308b\u3053\u3068\u306b\u7bc0\u64cd\u304c\u306a\u3044\u306e\u306d&#8230; \u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3044\u304d\u306a\u308aTauri\u3068\u304bRust\u3068\u304b\u8a00\u308f\u308c\u3066\u3082\u308f\u304b\u3089\u306a\u3044\u308f\u3002React\u3068\u304b\u306f\u805e\u3044\u305f\u3053\u3068\u3042\u308b\u3051\u3069\u3002\u4f55\u304c\u76ee\u7684\u306e\u8a18\u4e8b\u306a\u306e\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u308c\u306f\u5192\u982d\u306b\u3082\u66f8\u3044\u305f\u901a\u308a&#8230;\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u4e00\u8a00\u3067\uff01\u300d<\/p>\n<p>\u7b46\u8005\u300cReact + Rust + Tauri = \u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3060\u3081\u3060\u3053\u308a\u3083\u3002\u3002\u3084\u3063\u3071\u308a\u305d\u308c\u305e\u308c\u3092\u8efd\u304f\u89e3\u8aac\u3057\u3066\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3067\u306f\u76ee\u7389\u3092\u307e\u3068\u3081\u3066\u304b\u3089\u305d\u308c\u305e\u308c\u7d39\u4ecb\u3057\u307e\u3059\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u300e\u65e9\u304f\u30cf\u30f3\u30ba\u30aa\u30f3\u3057\u3066\uff01\u300f\u3068\u3044\u3046\u4eba\u5411\u3051\u306b\u30ea\u30f3\u30af\u3092\u7f6e\u3044\u3066\u304a\u304d\u307e\u3059\u306d\u300d<\/p>\n<p>\u30cf\u30f3\u30ba\u30aa\u30f3\u3078<\/p>\n<p>\u7b46\u8005\u300c(\u4e0a\u624b\u306b\u307e\u3068\u3081\u3089\u308c\u306a\u3044\u3063\u3066\u601d\u308f\u308c\u3066\u308b?&#8230;)\u300d<\/p>\n<h3>\u8a18\u4e8b\u306e\u30a2\u30d4\u30fc\u30eb\u30dd\u30a4\u30f3\u30c8<\/h3>\n<p>Tauri\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u5f97\u3089\u308c\u307e\u3059\uff01<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Web\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084\u30a4\u30b1\u30a4\u30b1\u306aUI\u3092\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5236\u4f5c\u306b\u4f7f\u3048\u308b\uff01<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ed\u30b8\u30c3\u30af(\u30d0\u30c3\u30af\u30a8\u30f3\u30c9)\u3092Rust\u3067\u3001\u898b\u305f\u76ee(\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9)\u3092JavaScript\/TypeScript\u3067\u66f8\u3051\u308b\uff01<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Chromium\u3092\u540c\u68b1\u3059\u308bElectron\u3068\u6bd4\u3079\u3001OS\u4f9d\u5b58\u306eWebView\u3092\u547c\u3073\u51fa\u3059\u306e\u3067\u8efd\u3044&amp;(WebView\u306fOS\u5074\u3067\u52dd\u624b\u306b\u66f4\u65b0\u3055\u308c\u308b\u306e\u3067)\u30bb\u30ad\u30e5\u30a2<\/ul>\n<h3>Tauri\u3068\u306f\uff1f<\/h3>\n<p>\u516c\u5f0f\u30b5\u30a4\u30c8: https:\/\/tauri.app\/<\/p>\n<p>&nbsp;<\/p>\n<p>Tauri\u306f\u3001Rust\u88fd\u306e\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0GUI\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\uff01\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3042\u308b\u3068\u3044\u3046\u3053\u3068\u306f\u3001\u4e00\u56de\u30a2\u30d7\u30ea\u3092\u66f8\u3044\u3066\u3057\u307e\u3048\u3070\u3001Windows\u3001MacOS\u3001Linux\u3001Android\u306a\u3069\u69d8\u3005\u306a\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3082\u52d5\u304b\u305b\u308b\u3088\u3046\u306b\u306a\u308b1\u3001\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002<\/p>\n<p>Tauri\u306f\u3064\u3044\u5148\u65e5v1.0\u306b\u306a\u3063\u305f\u3068\u3044\u3046\u3053\u3068\u3067\u53d6\u308a\u4e0a\u3052\u3089\u308c\u3066\u304a\u308a\u3001\u3061\u3087\u3046\u3069\u30d0\u30a4\u30c8\u5148\u306b\u3066C#\u3067Windows\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u66f8\u304f\u306e\u306b\u98fd\u304d\u3066\u3044\u305f\u7b46\u8005\u306e\u76ee\u306b\u6b62\u307e\u3063\u305f\u306e\u304c\u672c\u8a18\u4e8b\u8a95\u751f\u306e\u767a\u7aef\u3060\u3063\u305f\u308a\u3057\u307e\u3059\u3002<\/p>\n<p>\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u7a2e\u660e\u304b\u3057\u306fElectron\u3068\u540c\u69d8\u3067\u3001\u5148\u306b\u6319\u3052\u305f\u3069\u306eOS\u306b\u3082\u4f55\u304b\u3057\u3089\u306eWeb\u30d6\u30e9\u30a6\u30b6\u3092\u5b9f\u884c\u3059\u308b\u6a5f\u80fd\u306f\u3042\u308b\u3053\u3068\u3092\u5229\u7528\u3057\u3066\u304a\u308a\u3001GUI\u90e8\u5206\u3092HTML+JS+CSS\u3067\u8868\u73fe\u3059\u308b\u3053\u3068\u3067\u3069\u306eOS\u3067\u3082\u540c\u3058GUI\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u3057\u3066 Web\u6280\u8853\u3067\u66f8\u304b\u308c\u3066\u3044\u308b\u306e\u3067\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5411\u3051\u306eUI\u3092\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u5411\u3051\u306b\u8ee2\u7528\u3067\u304d\u307e\u3059\uff01 \u96c6\u5ba2\u306e\u305f\u3081\u304b\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eUI\u306f\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u6bd4\u3079\u30ea\u30c3\u30c1\u306a\u3053\u3068\u304c\u3057\u3070\u3057\u3070\u3067\u3059\u304c\u3001\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u3067\u3082\u540c\u69d8\u306e\u65b9\u6cd5\u3067\u540c\u69d8\u306b\u7d20\u6575\u306aUI\u3092\u5b9f\u88c5\u3067\u304d\u308b\u306e\u3067\u3059\uff01\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306eWeb\u4e0a\u306e\u60c5\u5831\u91cf\u306e\u591a\u3055\u3068\u3044\u3046\u30e1\u30ea\u30c3\u30c8\u3092\u9451\u307f\u308b\u3068\u3053\u308c\u306f\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u958b\u767a\u306b\u304a\u3044\u3066\u5927\u304d\u306a\u5229\u70b9\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>Electron\u3088\u308a\u512a\u308c\u3066\u3044\u308b\u3068\u8a00\u308f\u308c\u3066\u3044\u308b\u306e\u306f\u3001Electron\u306fChromium\u3068\u3044\u3046\u30d6\u30e9\u30a6\u30b6\u305d\u306e\u3082\u306e\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u90e8\u3068\u3057\u3066\u5185\u5305\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u5bfe\u3057\u3001Tauri\u306fwry\u3068\u3044\u3046\u5404OS\u306eWebView\u3092\u547c\u3073\u51fa\u3059\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001\u305d\u306e\u305f\u3081\u914d\u5e03\u3055\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u3044\u70b9\u3067\u3059\u3002<\/p>\n<p>\u307e\u305f\u3001\u30d6\u30e9\u30a6\u30b6\u81ea\u4f53\u306e\u8106\u5f31\u6027\u304c\u898b\u3064\u304b\u3063\u305f\u969b\u3001Electron\u306f\u30d6\u30e9\u30a6\u30b6\u3092\u540c\u68b1\u3057\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u305f\u3081\u518d\u914d\u5e03\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001Tauri\u306fOS\u5074\u3067\u30d6\u30e9\u30a6\u30b6\u306e\u307f\u66f4\u65b0\u3059\u308c\u3070\u826f\u3044\u305f\u3081\u3001\u305d\u306e\u3088\u3046\u306a\u8106\u5f31\u6027\u304c\u5c11\u306a\u3044\u3068\u3044\u3046\u5229\u70b9\u3082\u3042\u308b\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u4f55\u3088\u308a\u88cf\u3067Rust\u306b\u91cd\u3044\u51e6\u7406\u3084OS\u4f9d\u5b58\u306e\u51e6\u7406\u3092\u4efb\u305b\u3089\u308c\u308b\u306e\u304c\u6700\u5927\u306e\u5229\u70b9\u3067\u3059\u3002.NET\u3067\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3092\u4f5c\u308b\u5834\u5408\u3001C#\u3060\u3068\u30b7\u30e3\u30ed\u30fc\u30b3\u30d4\u30fc\u3092\u610f\u8b58\u3057\u306a\u304d\u3083\u306a\u3089\u306a\u304b\u3063\u305f\u308a\u975e\u540c\u671f\u51e6\u7406\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u30a8\u30e9\u30fc\u3067\u60a9\u307e\u3055\u308c\u305f\u308aGC\u304c\u5b9f\u884c\u3055\u308c\u306a\u304f\u3066\u91cd\u304f\u306a\u3063\u3066\u8f9b\u304f\u306a\u3063\u305f\u308a\u306a\u3069\u3057\u307e\u3059\u304c\u3001Rust\u3092\u4f7f\u3048\u3070\u305d\u3046\u3044\u3063\u305f\u60a9\u307f\u304b\u3089\u306f\u5168\u3066\u89e3\u653e\u3055\u308c\u307e\u3059\uff01<\/p>\n<p>\u30ea\u30ca\u300c\u8981\u306f\u3042\u306a\u305f\u306fC#\u304c\u66f8\u304d\u305f\u304f\u306a\u3044\u306e\u306d\u3002\u305d\u308c\u3060\u3051\u306f\u4f1d\u308f\u3063\u305f\u308f\u3002\u3067\u3082\u3058\u3083\u3042Rust\u3063\u3066\u305d\u3093\u306a\u306b\u826f\u3044\u8a00\u8a9e\u306a\u306e&#8230;?\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u306a\u3093\u3067\u3059\uff01Rust\u3092\u77e5\u308b\u3068\u305d\u306e\u4ed6\u5168\u3066\u306e\u8a00\u8a9e\u304c\u6050\u308d\u3057\u304f\u3066\u66f8\u3051\u306a\u304f\u306a\u3063\u3066\u3044\u304d\u307e\u3059\uff01\u306a\u305c\u306ar\u300d<\/p>\n<p>\u30ea\u30ca\u300c(\u3057\u307e\u3063\u305f\u3001\u30aa\u30bf\u30af\u30b9\u30a4\u30c3\u30c1\u3092\u5165\u308c\u3066\u3057\u307e\u3063\u305f\u3088\u3046\u3060&#8230;)\u300d<\/p>\n<h3>Rust\u3068\u306f\uff1f<\/h3>\n<p>\u516c\u5f0f\u30b5\u30a4\u30c8: Rust\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e<\/p>\n<p>&nbsp;<\/p>\n<p>Rust\u306f\u9759\u7684\u578b\u4ed8\u3051\u8a00\u8a9e\u3067\u3042\u308a\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7279\u5fb4\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u306a\u3044\u72ec\u81ea\u306e\u30e1\u30e2\u30ea\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3067\u30e1\u30e2\u30ea\u5b89\u5168\u6027\u3092\u78ba\u4fdd\u3057\u3066\u3044\u308b\u3002\u305d\u306e\u305f\u3081C\/C++\u76f8\u5f53\u306e\u901f\u5ea6\u304c\u51fa\u3066\u3068\u3066\u3082\u901f\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u7b49\u3001\u5f37\u3044\u578b\u4ed8\u3051\u306e\u6069\u6075\u306e\u305f\u3081\u306b\u3001Null\u5b89\u5168\u3067\u3042\u308a\u3001\u975e\u540c\u671f\u51e6\u7406\u3084\u4e26\u5217\u51e6\u7406\u306a\u3069\u3082\u5b89\u5fc3\u3057\u3066\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002\u3042\u308b\u3044\u306f\u3001\u5f37\u3044\u578b\u4ed8\u3051\u306e\u304a\u9670\u3067\u4ed6\u306e\u8a00\u8a9e\u3067\u306f\u30e9\u30f3\u30bf\u30a4\u30e0\u30a8\u30e9\u30fc\u306b\u306a\u308b\u3088\u3046\u306a\u51e6\u7406\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u3068\u3057\u3066\u591a\u304f\u6355\u6349\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30af\u30e9\u30b9\u578b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3067\u306f\u306a\u3044\u3001\u30c8\u30ec\u30a4\u30c8(\u4ed6\u8a00\u8a9e\u3067\u3044\u3046\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9)\u3092\u4f7f\u7528\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3067\u3042\u308b\u3002(\u3053\u306e\u305f\u3081\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306b\u3064\u3044\u3066\u30c0\u30c3\u30af\u30bf\u30a4\u30d4\u30f3\u30b0\u7684\u306b\u30b7\u30f3\u30d7\u30eb\u306b\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u3088\u304f\u3042\u308b\u7d99\u627f\u306e\u8ad6\u4e89\u3068\u304b\u306b\u5dfb\u304d\u8fbc\u307e\u308c\u306a\u3044)<\/ul>\n<p>\u305d\u306e\u826f\u3055\u306f\u4e0a\u8ff0\u3067\u306f\u307e\u3060\u307e\u3060\u8a9e\u308a\u5c3d\u304f\u305b\u3066\u3044\u307e\u305b\u3093\u304c\u3001C\/C++\u3067\u30bb\u30b0\u30d5\u30a9\u30925000\u5146\u56de\u51fa\u3057\u305f\u3053\u3068\u304c\u3042\u308b\u4eba\u3084\u3001Python\u306e\u9045\u3055\u306b\u30a4\u30e9\u30a4\u30e9\u3057\u305f\u4eba\u3001\u30ac\u30d9\u30b3\u30ec\u3068\u6c7a\u5225\u3057\u305f\u3044\u4eba\u306f\u7d76\u5bfe\u306b\u3084\u308b\u3079\u304d\u8a00\u8a9e\u3067\u3059\uff01<\/p>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u7ba1\u7406\u8005\u6a29\u9650\u4e0d\u8981\u3067\u5c0e\u5165\u3082\u7c21\u5358\u3067\u3059\uff012<\/p>\n<p>\u95a2\u9023: \u30ef\u30fc\u30eb\u30c9\u30eb\u30fc\u30eb\u30c6\u30c8\u30ea\u30b9\u306e\u4f5c\u308a\u65b9\u307e\u305f\u306fRust\u5165\u9580\u3057\u305f\u611f\u60f3\u7684\u306a\u4f55\u304b &#8211; Qiita (\u5e8f\u76e4\u3067Rust\u306e\u3046\u308c\u3057\u3055\u3092\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002)<\/p>\n<p>\u7b46\u8005\u300c\u50d5\u306fRust\u306e\u305d\u306e\u9ad8\u901f\u3055\u3084\u5b89\u5168\u6027\u3060\u3051\u3067\u306f\u306a\u304f\u3001\u69d8\u3005\u306a\u30d1\u30e9\u30c0\u30a4\u30e0\u3084\u6587\u6cd5\u3001\u66f8\u304d\u3084\u3059\u3055\u306b\u304b\u306a\u308a\u60f9\u304b\u308c\u3066\u304a\u308a\u3001\u30d0\u30a4\u30c8\u3067\u4f5c\u3063\u3066\u308bWindows\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3082\u3044\u3064\u304b\u306f\u5168\u90e8Rust\u3067\u66f8\u304d\u305f\u3044\u306e\u3067\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u4eca\u306fC#\u3067\u66f8\u3044\u3066\u3082\u3089\u3063\u3066\u308b\u308f\u306d\u3002\u5909\u3048\u308b\u6c17\u306a\u3044\u3051\u3069\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3069\u3046\u3057\u3066&#8230;\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3060\u3063\u3066Rust\u3063\u3066\u96e3\u3057\u3044\u3063\u3066\u805e\u304f\u3082\u306e\u3002\u6240\u6709\u6a29\uff1f\u3068\u304b\u30e9\u30a4\u30d5\u30bf\u30a4\u30e0\uff1f\u3068\u304b\u3002\u4ed6\u306e\u793e\u54e1\u304c\u7ba1\u7406\u3067\u304d\u306a\u3044\u308f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u308c\u306f\u305d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3067\u3082\u5b9f\u306fTauri\u306fRust\u3092\u5168\u304f\u66f8\u304b\u306a\u304f\u3066\u30823\u4f7f\u3048\u307e\u3059\u3057\u3001\u30d5\u30ed\u30f3\u30c8\u90e8\u5206\u306f\u5f53\u7136JavaScript\u3084TypeScript\u3067\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\u3068\u3063\u3064\u304d\u3084\u3059\u3044\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u5b9f\u969b\u3001\u3053\u3093\u306a\u306b\u7d39\u4ecb\u3057\u3066\u304a\u304d\u306a\u304c\u3089\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u66f8\u304fRust\u306f\u307b\u3093\u306e\u5341\u6570\u884c\u3067\u3059\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u5f90\u3005\u306bRust\u306b\u6163\u308c\u3055\u305b\u308b&#8230;\u3064\u307e\u308aTauri\u306f\u3042\u306a\u305f\u306b\u3068\u3063\u3066\u306fRust\u5e03\u6559\u306b\u3082\u3082\u3063\u3066\u3053\u3044\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306a\u308f\u3051\u306d\u3002\u300d<\/p>\n<h3>React\u3068\u306f\uff1f\u306a\u3093\u3067React\uff1f<\/h3>\n<p>\u516c\u5f0f\u30b5\u30a4\u30c8: https:\/\/ja.reactjs.org\/<\/p>\n<p>&nbsp;<\/p>\n<p>\u3053\u3053\u307e\u3067\u8a71\u3057\u305f\u901a\u308a\u3001Tauri\u3067\u306f\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3067\u304d\u308b\u306e\u3067\u3001\u4eca\u56de\u306fReact\u3092\u4f7f\u7528\u3057\u307e\u3059\uff01<\/p>\n<p>React\u306b\u3064\u3044\u3066\u306f\u7b46\u8005\u306f\u5165\u9580\u3057\u305f\u3070\u304b\u308a\u306a\u306e\u3067\u3001\u8aad\u8005\u306e\u65b9\u3005\u306e\u307b\u3046\u304c\u8a73\u3057\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u304a\u4ed8\u304d\u5408\u3044\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>React\u306f\u3001UI\u69cb\u7bc9\u306e\u305f\u3081\u306eJavaScript\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002\u305d\u306e\u6700\u305f\u308b\u7279\u5fb4\u306f\u5ba3\u8a00\u7684View\u3067\u3057\u3087\u3046\u304b\u3002\u516c\u5f0f\u306b\u306f\u3053\u306e\u3088\u3046\u306b\u3042\u308a\u307e\u3059<\/p>\n<blockquote><p>React \u306f\u3001\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u30e6\u30fc\u30b6\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u306e\u4f5c\u6210\u306b\u3068\u3082\u306a\u3046\u82e6\u75db\u3092\u53d6\u308a\u9664\u304d\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5404\u72b6\u614b\u306b\u5bfe\u5fdc\u3059\u308b\u30b7\u30f3\u30d7\u30eb\u306a View \u3092\u8a2d\u8a08\u3059\u308b\u3060\u3051\u3067\u3001React \u306f\u30c7\u30fc\u30bf\u306e\u5909\u66f4\u3092\u691c\u77e5\u3057\u3001\u95a2\u9023\u3059\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3060\u3051\u3092\u52b9\u7387\u7684\u306b\u66f4\u65b0\u3001\u63cf\u753b\u3057\u307e\u3059\u3002<\/p><\/blockquote>\n<p>\u5ba3\u8a00\u7684View\u306e\u5b09\u3057\u3055\u306f\u305d\u308c\u307e\u3067\u306e\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u3092\u898b\u3066\u307f\u308b\u3053\u3068\u3067\u308f\u304b\u3063\u305f\u6c17\u306b\u306a\u308c\u308b\u6c17\u304c\u3057\u307e\u3059\u3002\u7b46\u8005\u306fjQuery\u304c\u4e0b\u706b\u306b\u306a\u3063\u305f\u3050\u3089\u3044\u306e\u9803\u306eJS\u3092\u66f8\u3044\u3066\u80b2\u3063\u3066\u6765\u305f\u306e\u3067\u3059\u304c\u3001jQuery\u306f\u5404\u6240\u306b\u72b6\u614b\u304c\u6563\u308a\u3070\u3081\u3089\u308c\u305d\u3057\u3066\u305d\u306e\u5909\u6570\u304c\u3044\u3064\u3069\u3053\u3067UI\u306b\u53cd\u6620\u3055\u308c\u308b\u304b\u308f\u304b\u3089\u305a\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u5168\u3066\u3092\u8aad\u307e\u306a\u3044\u3068\u5168\u8c8c\u304c\u3064\u304b\u3081\u306a\u3044\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306a\u308a\u304c\u3061\u3067\u3057\u305f\u3002React\u3084Vue\u3068\u3044\u3063\u305f\u30e2\u30c0\u30f3\u306a\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30e9\u30a4\u30d6\u30e9\u30ea\u30fb\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001\u30d1\u30fc\u30c4\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u5316\u3068\u3001Flux\u3001MVC\u3084MVVM\u3068\u3044\u3063\u305f\u72b6\u614b\u3068\u671f\u5f85\u3059\u308b\u8868\u73fe\u3092\u5e38\u306b\u4e00\u81f4\u3055\u305b\u308b\u3088\u3046\u306a\u4ed5\u7d44\u307f\u306b\u3088\u3063\u3066\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u898b\u901a\u3057\u3092\u826f\u304f\u3057\u3066\u3044\u308b\u306e\u3060\u3068\u7b46\u8005\u306f\u7406\u89e3\u3057\u3066\u3044\u307e\u30594\u3002<\/p>\n<p>\u30ea\u30ca\u300c\u3067\u3082\u4eca\u56deReact\u3092\u4f7f\u3046\u306e\u306f\u5225\u306b\u5ba3\u8a00\u7684View\u3092\u6d3b\u304b\u3057\u305f\u3044\u304b\u3089\u3068\u3044\u3046\u308f\u3051\u3058\u3083\u306a\u3044\u308f\u3088\u306d\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u5168\u304f\u305d\u306e\u610f\u56f3\u304c\u306a\u3044\u308f\u3051\u3067\u306f\u306a\u3044\u3067\u3059\u304c\u3001\u305d\u306e\u3068\u304a\u308a\u3067\u3059\u3002\u30e2\u30c0\u30f3\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u5bfe\u5fdc\u3059\u308b\u30a4\u30b1\u30a4\u30b1\u306aUI\u3092\u3044\u3063\u3071\u3044\u6301\u3063\u3066\u3044\u3066\u5c0e\u5165\u3082\u697d\u306a\u306e\u3067\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u4eca\u56de\u306f\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u6d41\u7528\u3057\u305f\u304b\u3063\u305f\u304b\u3089\u3067\u3059\u306d\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u306f\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u3082\u3042\u308a\u305d\u3046\u3060\u3051\u3069\u3001Vue\u3084Svelte\u3067\u306f\u306a\u304f\u3066React\u3092\u9078\u3093\u3060\u7406\u7531\u306f\u3042\u308b\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u6700\u521d\u306f\u4f7f\u3063\u305f\u3053\u3068\u304c\u3042\u308bVue\u3067\u3084\u308d\u3046\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\u3001Tauri\u3067\u4f7f\u3046\u5834\u5408\u305d\u306e\u307b\u304b\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u30b3\u30de\u30f3\u30c9\u304c\u9055\u3063\u305f\u308a\u3001\u30de\u30c6\u30ea\u30a2\u30eb\u30c7\u30b6\u30a4\u30f3\u7528\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u6709\u540d\u306aVuetify\u304cVue2\u307e\u3067\u3057\u304b\u5bfe\u5fdc\u3057\u3066\u306a\u304b\u3063\u305f\u308a\u3068\u4f7f\u3044\u52dd\u624b\u304c\u60aa\u304f&#8230;\u305d\u3053\u3067\u524d\u3005\u304b\u3089\u6c17\u306b\u306a\u3063\u3066\u3044\u305f\u3057\u66f8\u3051\u308c\u3070\u5c31\u6d3b\u306b\u6709\u5229\u305d\u3046\u306aReact\u3092\u89e6\u3063\u3066\u307f\u305f\u3044\u3068\u601d\u3044\u3001\u9078\u3073\u307e\u3057\u305f\uff01Svelte\u306f\u4eca\u521d\u3081\u3066\u805e\u304d\u307e\u3057\u305f\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u9577\u3044\uff01\u3064\u307e\u308aReact\u306fTauri\u3068\u76f8\u6027\u304c\u826f\u304f\u3066\u3042\u306a\u305f\u3068\u3057\u3066\u3082\u89e6\u308a\u305f\u304b\u3063\u305f\u304b\u3089\u3068\u3044\u3046\u3060\u3051\u306d\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u3067\u3059\u305d\u3046\u3067\u3059\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u305d\u308c\u305e\u308c\u306b\u3064\u3044\u3066\u306f\u4f55\u3068\u306a\u304f\u96f0\u56f2\u6c17\u306f\u308f\u304b\u3063\u305f\u308f\u3002\u3067\u3082\u305d\u3082\u305d\u3082\u306a\u3093\u3067\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u4f5c\u308b\u306e\u306f\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u306a\u306e\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u4e3b\u306b2\u3064\u7406\u7531\u304c\u3042\u308a\u307e\u3059\u3002\u300d<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u306b\u5b58\u5728\u3059\u308b\u65e2\u5b58\u306e\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u306eUI\u306fYouTube\u7b49\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u3082\u306e\u3068\u6bd4\u3079\u308b\u3068\u304b\u3063\u3053\u3088\u304f\u306a\u3044\u304b\u3089<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ed\u30fc\u30ab\u30eb\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306a\u3089\u3070\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3067\u5b8c\u7d50\u3057\u306a\u30445\u306e\u3067\u3001Tauri\u3092\u4f7f\u3046\u610f\u7fa9\u304c\u5b58\u5728\u3059\u308b\u305f\u3081<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u63a8\u3057\u3066\u3044\u308b\u30a2\u30cb\u30e1\u306e\u30ef\u30f3\u30b7\u30fc\u30f3\u3092\u6d41\u3057\u3066\u5e03\u6559\u3067\u304d\u305d\u3046\u3060\u3063\u305f\u306e\u3067(\u672a\u9042)<\/ul>\n<p>\u30ea\u30ca\u300c(\u4f59\u8a08\u306a3\u3064\u30816\u304c\u6df7\u5165\u3057\u3066\u3044\u308b&#8230;?)\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u306a\u3089\u3001\u300e\u30a4\u30b1\u3066\u308bUI\u3092\u3001\u30ed\u30fc\u30ab\u30eb\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3082\u4f7f\u3048\u308b\u300f\u3068\u3044\u3046\u3053\u3068\u3092\u7d39\u4ecb\u3067\u304d\u308b\u3063\u3066\u3053\u3068\u306d\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u3067\u3059\u3002\u8a18\u4e8b\u306e\u30a2\u30d4\u30fc\u30eb\u30dd\u30a4\u30f3\u30c8\u306b\u3064\u306a\u304c\u3063\u3066\u3044\u307e\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u8a18\u4e8b\u306e\u76ee\u6a19\u306f\u30bf\u30a4\u30c8\u30eb\u901a\u308aTauri\u3092\u4f7f\u3063\u3066\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4f5c\u308b\u3063\u3066\u3053\u3068\u3067\u3088\u3055\u305d\u3046\u306d\u3002\u7d50\u5c40\u66f8\u3044\u305f\u52d5\u6a5f\u306f\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u5c31\u6d3b\u306e\u305f\u3081\u3067\u3059\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u306f\uff1f(\u3046\u3061\u306e\u4f1a\u793e\u306b\u305d\u306e\u307e\u307e\u5c31\u8077\u3059\u308b\u3093\u3060\u3088\u306d\uff1f\uff1f\uff1f\uff1f\uff1f\u306e\u5727)\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3044\u3084\u30cf\u30cf\u30cf\u30cf\u3001Rust\u3092\u5e03\u6559\u3067\u304d\u3066\u3055\u3089\u306b\u307e\u3060\u77e5\u3089\u306a\u304b\u3063\u305fTypeScript\u3084React\u3092\u5b66\u3079\u3066\u4e00\u77f3\u4e8c\u9ce5\u3060\u3063\u305f\u304b\u3089\u3067\u3059\u3088\u3002\u305d\u308c\u3060\u3051\u3067\u3059\u3002\u3067\u306f\u305d\u308d\u305d\u308d\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u5165\u308a\u307e\u3057\u3087\u3046\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3088\u3046\u3084\u304f\u306d\u3002\u300d<\/p>\n<h1>\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u30cf\u30f3\u30ba\u30aa\u30f3<\/h1>\n<p>\u305d\u308c\u3067\u306f\u5b9f\u969b\u306bTauri\u3092\u4f7f\u3063\u3066\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4f5c\u3063\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff01<\/p>\n<p>\u30ea\u30ca\u300c\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306f\u3069\u306eOS\u3067\u884c\u3046\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u30d0\u30a4\u30c8\u5148\u3067Windows\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u66f8\u3044\u3066\u3044\u307e\u3059\u3057\u3001\u3068\u308a\u3042\u3048\u305a\u30bf\u30fc\u30b2\u30c3\u30c8\u306fWindows\u306b\u3057\u307e\u30597\uff01Windows\u3067\u958b\u767a\u3057\u3066\u3082\u3001Tauri Action\u3068\u3044\u3046GitHub Actions\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u3048\u3070\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u30d3\u30eb\u30c9\u304c\u53ef\u80fd\u3067\u3059\u304b\u3089\u3001\u307e\u305a\u306fWindows\u3067\u958b\u767a\u3057\u307e\u3057\u3087\u3046\u300d<\/p>\n<p>\u7b46\u8005\u300c\u4eca\u56de\u306f\u7279\u306bWindows 11\u3067\u958b\u767a\u3059\u308b\u3053\u3068\u3068\u3057\u307e\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u540c\u3058Windows 11\u3067\u3082\u74b0\u5883\u306f\u5343\u5dee\u4e07\u5225\u304b\u3082\u3057\u308c\u306a\u3044\u308f\u3088\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306fWindows 11 Enterprise Version 21H2\u306eWindows\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b98\u3068Windows 10\u306e\u30ce\u30fc\u30c8\u30d1\u30bd\u30b3\u30f3\u3067\u691c\u8a3c\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u5927\u4f53\u306eWindows 11\u74b0\u5883\u306b\u304a\u3044\u3066\u306f\u5927\u4e08\u592b\u3060\u3068\u601d\u3044\u307e\u3059\u3002\u74b0\u5883\u306b\u3088\u3063\u3066\u5143\u304b\u3089\u5165\u3063\u3066\u3044\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u3088\u308b\u5f71\u97ff\u3067\u52d5\u304b\u306a\u304b\u3063\u305f\u308a\u3001\u672c\u8a18\u4e8b\u306e\u60c5\u5831\u304c\u53e4\u304f\u306a\u3063\u3066\u3057\u307e\u3063\u3066\u3046\u307e\u304f\u3044\u304b\u306a\u3044\u90e8\u5206\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u305d\u3046\u3044\u3063\u305f\u70b9\u306f\u3054\u5bb9\u8d66\u3044\u305f\u3060\u3051\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002\u300d<\/p>\n<h2>\u74b0\u5883\u69cb\u7bc9 ~\u5fc5\u9808\u7de8~<\/h2>\n<p>\u307e\u305a\u306f\u3001\u6700\u521d\u306b\u3057\u3066\u6700\u5927\u306e\u96e3\u95a2\u3001\u74b0\u5883\u69cb\u7bc9\u3092\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<p>\u30ea\u30ca\u300c\u8aad\u8005\u7684\u306b\u306f\u3053\u3053\u3067\u30d6\u30e9\u30a6\u30b6\u30d0\u30c3\u30af\u3057\u3061\u3083\u3046\u3093\u3058\u3083\u306a\u3044\u304b\u3057\u3089\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3042\u30fc\u30fc\u5f85\u3063\u3066\u884c\u304b\u306a\u3044\u3067\uff01\uff01\u306a\u308b\u3079\u304f\u9806\u756a\u306b\u4e01\u5be7\u306b\u66f8\u304f\u306e\u3067\uff01\u300d<\/p>\n<p>(\u74b0\u5883\u69cb\u7bc9\u304c\u4ed6\u8a18\u4e8b\u69d8\u306a\u3069\u306e\u304a\u304b\u3052\u3067\u304a\u6e08\u307f\u306e\u65b9\u306f\u3053\u3061\u3089\u3078\u3069\u3046\u305e)<\/p>\n<p>Tauri\u516c\u5f0f\u306b\u3057\u305f\u304c\u3063\u3066\u307e\u305a\u306f\u7d76\u5bfe\u306b\u5fc5\u8981\u306a\u3082\u306e\u3092\u5165\u308c\u307e\u3057\u3087\u3046\uff01<\/p>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Microsoft Visual Studio C++ Build Tools<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">WebView2<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Rust\u672c\u4f53<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Node.js<\/ul>\n<\/li>\n<\/ul>\n<p>yarn<br \/>\ntauri cli<\/p>\n<div>\n<p>chocolatey\u3084winget\u3068\u3044\u3063\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u3092\u901a\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3088\u3046\u306b\u66f8\u3053\u3046\u304b\u975e\u5e38\u306b\u8ff7\u3044\u307e\u3057\u305f\u304c\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u901a\u308a\u306b\u3084\u308a\u305f\u3044\u4eba\u3082\u3044\u308b\u3060\u308d\u3046\u3068\u8003\u3048\u3001\u4eca\u56de\u306f\u7d20\u76f4\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u304f\u65b9\u5f0f\u3092\u53d6\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002<br \/>\nchocolatey\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u6b21\u306e\u8a18\u4e8b\u304c\u8a73\u3057\u304b\u3063\u305f\u3067\u3059\u3002<br \/>\nRust \u306b\u3088\u308b\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u74b0\u5883\u69cb\u7bc9 with Tauri &#8211; Qiita<\/p>\n<\/div>\n<div>\n<p>\u4ee5\u964d\u3067\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u306f\u305a\u306e\u30b3\u30de\u30f3\u30c9\u304c\u306a\u3044\u3068\u8a00\u308f\u308c\u305f\u3068\u304d\u306f\u3001PowerShell\u3084VSCode\u306e\u518d\u8d77\u52d5\u3092\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u5927\u4f53\u306f\u305d\u308c\u3067\u89e3\u6c7a\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n<h3>Microsoft Visual Studio C++ Build Tools<\/h3>\n<p>Rust\u304b\u3089Windows\u306e\u8af8\u3005\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u3001\u307e\u305a\u306fMicrosoft C++ Build Tools\u3092\u5165\u308c\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u3053\u3053\u304b\u3089vs_BuildTools.exe\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u306e\u3061\u3001Desktop development with C++\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u3001\u305d\u3057\u3066\u51fa\u3066\u304f\u308b\u53f3\u306e\u9805\u76ee\u306e\u3046\u3061MSVC v 143 ~\u3068\u3044\u3046\u3082\u306e\u3068Windows 10 SDK\u3068\u3044\u3046\u3082\u306e\u3092\u6b8b\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/94-0.png\" alt=\"MSVC.png\" \/><\/div>\n<p>\u30ea\u30ca\u300cVisual Studio\u3067Windows\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3057\u3066\u3044\u308b\u4eba\u306e\u4e2d\u306b\u306f\u3059\u3067\u306b\u540c\u69d8\u306e\u3082\u306e\u304c\u5165\u3063\u3066\u308b\u3088\uff5e\u3068\u3044\u3046\u4eba\u304c\u591a\u3044\u304b\u3082\u306d\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u306a\u304b\u3063\u305f\u3089\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u8b0e\u306e\u30a8\u30e9\u30fc\u5410\u304f\u3060\u3051\u3067\u3059\u304b\u3089\u305d\u306e\u3068\u304d\u521d\u3081\u3066\u5165\u308c\u308b\u3068\u3044\u3046\u3075\u3046\u306b\u3057\u3066\u3082\u826f\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u300d<\/p>\n<p>MSVC\u5c0e\u5165\u5f8c\u306f\u4e00\u65e6\u30d1\u30bd\u30b3\u30f3\u3092\u518d\u8d77\u52d5\u3059\u308b\u3053\u3068\u3092\u30aa\u30b9\u30b9\u30e1\u3057\u307e\u3059\u3002<\/p>\n<h3>WebView2<\/h3>\n<p>\u65b0\u3057\u3044Windows 11\u306b\u95a2\u3057\u3066\u306f\u3001WebView2\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u540c\u68b1\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002Windows 10\u306f\u5fc5\u305a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u30599\u3002<\/p>\n<p>\u307e\u3060\u5165\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u3001Microsoft\u516c\u5f0f\u304b\u3089Evergreen Bootstrapper\u3068\u66f8\u304b\u308c\u305f\u4e00\u756a\u5de6\u306e\u9805\u76ee\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/102-0.png\" alt=\"evergreen.png\" \/><\/div>\n<h3>Rust<\/h3>\n<p>Rust\u516c\u5f0f\u304b\u3089rustup-init.exe(Windows 11\u306a\u3089\u307064bit\u3067\u3057\u3087\u3046)\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3044\u307e\u3059\u3002\u69cb\u6210\u3092\u805e\u304b\u308c\u307e\u3059\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u307e\u307e\u3067\u5927\u4e08\u592b\u3067\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code>...\u7701\u7565...\r\n\r\n   default host triple: x86_64-pc-windows-msvc\r\n     default toolchain: stable (default)\r\n               profile: default\r\n  modify PATH variable: yes\r\n\r\n1) Proceed with installation (default)\r\n2) Customize installation\r\n3) Cancel installation\r\n&gt;1\r\n\r\n... \u7701\u7565 ...\r\n\r\n  stable-x86_64-pc-windows-msvc installed - rustc 1.62.1 (e092d0b6b 2022-07-16)\r\n\r\n\r\nRust is installed now. Great!\r\n\r\nTo get started you may need to restart your current shell.\r\nThis would reload its PATH environment variable to include\r\nCargo's bin directory (%USERPROFILE%\\.cargo\\bin).\r\n\r\nPress the Enter key to continue.\r\n<\/code><\/pre>\n<p>\u3053\u308c\u3067rustup\u3068cargo\u3068\u3044\u3046\u30b3\u30de\u30f3\u30c9\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002PowerShell\u304b\u3089\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&gt; rustup --version\r\nrustup 1.25.1 (bb60b1e89 2022-07-12)\r\ninfo: This is the version for the rustup toolchain manager, not the rustc compiler.\r\ninfo: The currently active `rustc` version is `rustc 1.62.1 (e092d0b6b 2022-07-16)`\r\n&gt; cargo --version\r\ncargo 1.62.1 (a748cf5a3 2022-06-08)\r\n&gt;\r\n<\/code><\/pre>\n<p>\u30ea\u30ca\u300c\u305d\u308c\u305e\u308c\u306e\u30b3\u30de\u30f3\u30c9\u306b\u306f\u3069\u306e\u3088\u3046\u306a\u5f79\u5272\u304c\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300crustup\u306fRust\u672c\u4f53\u306e\u66f4\u65b0\u3084\u74b0\u5883\u306b\u307e\u3064\u308f\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3001cargo\u306fRust\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u3084\u30d3\u30eb\u30c9\u3001\u30c6\u30b9\u30c8\u3001\u5b9f\u884c\u3001\u7ba1\u7406\u306e\u305f\u3081\u306e\u30b3\u30de\u30f3\u30c9\u3067\u3059\u3002rustc\u3068\u3044\u3046\u30b3\u30f3\u30d1\u30a4\u30eb\u5c02\u7528\u306e\u30b3\u30de\u30f3\u30c9\u3082\u3042\u308a\u307e\u3059\u304c\u3001\u57fa\u672c\u7684\u306b\u306fcargo\u3092\u4f7f\u3048\u3070\u5927\u4e08\u592b\u3067\u3059\u3002\u300d<\/p>\n<h3>Node.js<\/h3>\n<p>Node.js\u516c\u5f0f\u304b\u3089\u6700\u65b0\u724818.6.0\u306eNode.js\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>Rust\u306e\u3068\u304d\u3068\u540c\u3058\u304f\u3001PowerShell\u3067\u8abf\u3079\u308b\u3068node\u30b3\u30de\u30f3\u30c9\u3068npm\u30b3\u30de\u30f3\u30c9\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u6700\u65b0\u7248\u3067\u306f\u3042\u308b\u3068\u601d\u3044\u307e\u3059\u304c\u3001npm\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6539\u3081\u3066\u4e0a\u3052\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&gt; node -v\r\nv18.6.0\r\n&gt; npm -v\r\n8.13.2\r\n&gt; npm install -g npm\r\n\r\nadded 1 package, and audited 202 packages in 4s\r\n\r\n11 packages are looking for funding\r\n  run `npm fund` for details\r\n\r\nfound 0 vulnerabilities\r\n&gt; npm -v\r\n8.15.0\r\n<\/code><\/pre>\n<p>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306b\u308f\u304b\u306a\u306e\u3067npm\u3068\u6bd4\u3079\u3066\u4f55\u304c\u826f\u304f\u306a\u3063\u3066\u3044\u308b\u304b\u306f\u3063\u304d\u308a\u77e5\u3089\u306a\u3044\u306e\u3067\u3059\u304c\u3001yarn\u3092\u4f7f\u7528\u3057\u3066\u3044\u304f\u3053\u3068\u306b\u3057\u307e\u3059\u3002\u3064\u3044\u3067\u306b\u3001Tauri\u7528\u306eCLI\u30c4\u30fc\u30eb\u3082\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&gt; npm install -g yarn\r\n\r\nadded 1 package, and audited 2 packages in 536ms\r\n\r\nfound 0 vulnerabilities\r\n&gt; yarn -v\r\nyarn : File C:\\Users\\yourname\\AppData\\Roaming\\npm\\yarn.ps1 cannot be loaded because running scripts is\r\ndisabled on this system. For more information, see about_Execution_Policies at\r\nhttps:\/go.microsoft.com\/fwlink\/?LinkID=135170.\r\nAt line:1 char:1\r\n+ yarn -v\r\n+ ~~~~\r\n    + CategoryInfo          : SecurityError: (:) [], PSSecurityException\r\n    + FullyQualifiedErrorId : UnauthorizedAccess\r\n<\/code><\/pre>\n<p>\u30ea\u30ca\u300c\u4f55\u304b\u30a8\u30e9\u30fc\u3092\u5410\u3044\u305f\u308f\u3088\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300cPowerShell\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5b9f\u884c\u304c\u3067\u304d\u306a\u3044\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u300d<\/p>\n<pre class=\"post-pre\"><code>&gt; Get-ExecutionPolicy\r\nRestricted\r\n<\/code><\/pre>\n<p>\u7f72\u540d\u304c\u5165\u3063\u3066\u3044\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u5b9f\u884c\u53ef\u306b\u3059\u308b\u305f\u3081\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>&gt; Set-ExecutionPolicy -ExecutionPolicy RemoteSigned\r\n\r\nExecution Policy Change\r\nThe execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose\r\nyou to the security risks described in the about_Execution_Policies help topic at\r\nhttps:\/go.microsoft.com\/fwlink\/?LinkID=135170. Do you want to change the execution policy?\r\n[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is \"N\"): Y\r\n&gt; yarn -v\r\n1.22.19\r\n<\/code><\/pre>\n<p>\u3053\u308c\u3067yarn\u30b3\u30de\u30f3\u30c9\u304c\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002Tauri CLI\u3092\u5165\u308c\u3066\u5fc5\u8981\u306a\u3082\u306e\u306f\u5168\u3066\u63c3\u3044\u307e\u3059\u3002(\u3064\u3044\u3067\u306b\u5148\u7a0b\u5165\u308c\u305fcargo\u304c\u52d5\u304f\u3053\u3068\u3082\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002)<\/p>\n<pre class=\"post-pre\"><code>&gt; cargo install tauri-cli\r\n...\u9577\u3044\u51fa\u529b...\r\n  Installing C:\\Users\\yourname\\.cargo\\bin\\cargo-tauri.exe\r\n   Installed package `tauri-cli v1.0.4` (executable `cargo-tauri.exe`)\r\n&gt; cargo tauri --version\r\ncargo-tauri 1.0.4\r\n<\/code><\/pre>\n<div>\n<p>1.0.4 \u4ee5\u964d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u3064\u3044\u3066<br \/>\n\u306a\u308b\u3079\u304f\u672c\u8a18\u4e8b\u306b\u65b0\u3057\u3044\u60c5\u5831\u3092\u8a18\u8f09\u3057\u305f\u3044\u305f\u3081\u5909\u66f4\u306b\u6c17\u3065\u3044\u305f\u969b\u306f\u305d\u306e\u60c5\u5831\u3092\u8a18\u8f09\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u304a\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u306a\u304c\u3089\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u6319\u52d5\u3092\u3061\u3050\u306f\u3050\u306a\u5834\u6240\u306b\u66f8\u304f\u3068\u8a18\u4e8b\u306e\u6b63\u5f53\u6027\u3092\u62c5\u4fdd\u3067\u304d\u306a\u304f\u306a\u308b\u305f\u3081\u3001\u65b0\u305f\u306b\u5909\u66f4\u304c\u3042\u3063\u305f\u7b87\u6240\u306b\u3064\u3044\u3066\u306fdetails\u30bf\u30b0\u3092\u4f7f\u7528\u3057\u3066\u6298\u308a\u305f\u305f\u3093\u3067\u8ffd\u8a18\u3092\u884c\u3063\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\n\u624b\u9806\u306f\u6708\u65e5\u3068\u3068\u3082\u306b\u5909\u308f\u308b\u3068\u8003\u3048\u3089\u308c\u307e\u3059\u3002 \u3046\u307e\u304f\u884c\u304b\u306a\u3044\u5834\u6240\u304c\u3042\u308c\u3070\u516c\u5f0f\u3084\u4ed6\u306e\u30bd\u30fc\u30b9\u3082\u53c2\u7167\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002(\u307e\u305f\u3082\u3057\u826f\u304b\u3063\u305f\u3089\u30b3\u30e1\u30f3\u30c8\u3092\u3044\u305f\u3060\u3051\u308b\u3068\u5e78\u3044\u3067\u3059\u3002)<\/p>\n<\/div>\n<p>\u5c65\u6b74<\/p>\n<p>\u30aa\u30ea\u30b8\u30ca\u30eb\u6295\u7a3f(2022\/07\/22): 1.0.4<br \/>\n2022\/11\/04: 1.1.1<\/p>\n<h2>\u74b0\u5883\u69cb\u7bc9 ~\u88dc\u52a9\u7de8~<\/h2>\n<p>\u3053\u306e\u7bc0\u3067\u306f\u3059\u3067\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u65b9\u304c\u591a\u3044\u3067\u3042\u308d\u3046\u3082\u306e\u306b\u3064\u3044\u3066\u4e00\u5fdc\u8a00\u53ca\u3057\u307e\u3059\u3002\u3059\u3067\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3060\u3088\u3068\u3044\u3046\u4eba\u306f\u6b21\u306e\u7bc0\u306b\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002VSCode\u5411\u3051\u62e1\u5f35\u306f\u9069\u5b9c\u5165\u308c\u307e\u3057\u3087\u3046\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Visual Studio Code<\/ul>\n<\/li>\n<\/ul>\n<p>\u62e1\u5f35: rust-analyzer, eslint<\/p>\n<p>Git (\u30aa\u30d7\u30b7\u30e7\u30f3)<\/p>\n<p>\u7b46\u8005\u300c\u3053\u306e\u7bc0\u306f\u6b63\u76f4\u306b\u8a00\u3046\u3068\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u3067\u3082\u5c0e\u5165\u3057\u305f\u306e\u3067\u66f8\u3044\u305f\u3068\u3044\u3046\u611f\u3058\u3067\u3059\u3002\u30a8\u30c7\u30a3\u30bf\u306b\u3064\u3044\u3066\u306f\u4efb\u610f\u306e\u3082\u306e\u3067\u306f\u306a\u304fVSCode\u3092\u30aa\u30b9\u30b9\u30e1\u3057\u307e\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u79c0\u4e38\u3084\u30b5\u30af\u30e9\u30a8\u30c7\u30a3\u30bf\u3067\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u53d6\u308a\u7d44\u3093\u3067\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304f\u308c\u306a\u3055\u305d\u3046\u306d\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u6d41\u77f3\u306b\u8ad6\u5916\u3067\u3059\uff01\u300d<\/p>\n<h3>Visual Studio Code<\/h3>\n<p>VSCode\u516c\u5f0f\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30fb\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u5168\u3066\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5927\u4e08\u592b\u3067\u3059\u3002\u7279\u306b\u5f15\u3063\u304b\u304b\u308b\u70b9\u306f\u306a\u3044\u3068\u601d\u3044\u307e\u3059\u3002VSCode\u3092\u7acb\u3061\u4e0a\u3052\u305f\u306e\u3061\u3001Ctrl+@\u3092\u62bc\u3059\u3053\u3068\u3067PowerShell\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u7279\u306b\u4f55\u304c\u5909\u308f\u308b\u3068\u3044\u3046\u308f\u3051\u3067\u306f\u306a\u3044\u3067\u3059\u304c\u3001\u4eca\u5f8cPowerShell\u4e0a\u3067\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u304c\u51fa\u3066\u304d\u305f\u5834\u5408\u306f\u57fa\u672c\u7684\u306bVSCode\u4e0a\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u304b\u3089\u5b9f\u884c\u3057\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/139-0.png\" alt=\"VSCode\u753b\u50cf.png\" \/><\/div>\n<p>\u307e\u305f\u3001Tauri\u306f\u30db\u30c3\u30c8\u30ea\u30ed\u30fc\u30c9\u306b\u5bfe\u5fdc\u3057\u3066\u304a\u308a\u3001\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u90e8\u5206\u306b\u3064\u3044\u3066\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5b9f\u884c\u4e2d\u306b\u7de8\u96c6\u304c\u53ef\u80fd\u3067\u3059\u3002(Rust\u90e8\u5206\u3092\u7de8\u96c6\u3059\u308b\u3068\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u304c\u8d70\u308b\u306e\u3067\u518d\u8d77\u52d5\u3055\u308c\u307e\u3059\u304c\u3001\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u78ba\u8a8d\u3067\u304d\u307e\u3059)<\/p>\n<p>\u305d\u306e\u305f\u3081\u3001\u5b9f\u884c\u4e2d\u306b\u5225\u306a\u30bf\u30d6\u3067\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u958b\u304d\u305f\u304f\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u305d\u306e\u969b\u306f\u53f3\u4e0a\u306b\u3042\u308b+\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u5897\u3084\u305b\u308b\u306e\u3067\u3001\u5b9f\u884c\u4e2d\u306e\u30bf\u30d6\u3068\u306f\u5225\u306e\u30bf\u30d6\u3092\u958b\u304f\u3068\u826f\u3044\u3067\u3057\u3087\u3046\u3002<\/p>\n<h4>rust-analyzer, eslint<\/h4>\n<p>rust-analyzer\u306fRust\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u3001eslint\u306fJavaScript\/TypeScript\u30b3\u30fc\u30c9\u3092VSCode\u4e0a\u3067\u89e3\u6790\u3057\u3066\u304f\u308c\u308b\u62e1\u5f35\u306b\u306a\u308a\u307e\u3059\u3002\u5165\u308c\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002\u62e1\u5f35\u306f4\u3064\u306e\u56db\u89d2\u304c\u66f8\u304b\u308c\u305f\u30dc\u30bf\u30f3\u306e\u30bf\u30d6\u3092\u958b\u304d\u3001\u691c\u7d22\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u307b\u3057\u3044\u62e1\u5f35\u540d\u3092\u5165\u308c\u308b\u3053\u3068\u3067\u305f\u3069\u308a\u7740\u3051\u307e\u3059\u3002\u5165\u308c\u305f\u3044\u62e1\u5f35\u306einstall\u3092\u62bc\u3059\u3053\u3068\u3067\u5c0e\u5165\u3067\u304d\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/144-0.png\" alt=\"VSCode\u62e1\u5f35.png\" \/><\/div>\n<p>\u305d\u306e\u4ed6\u306eVSCode\u62e1\u5f35\u3068\u3057\u3066\u306f\u3001\u4f7f\u7528\u983b\u5ea6\u306f\u305d\u308c\u307b\u3069\u3067\u3082\u7121\u3044\u3067\u3059\u304cCargo.toml\u30d5\u30a1\u30a4\u30eb\u306b\u3066\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30b5\u30b8\u30a7\u30b9\u30c8\u3057\u3066\u304f\u308c\u308bcrates\u3084\u3001\u6709\u659910\u3067GitHub\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u304cGitHub Copilot\u306a\u3069\u304c\u30aa\u30b9\u30b9\u30e1\u3067\u3059\u3002\u9591\u8a71\u4f11\u984c\u3002(\u30cf\u30f3\u30ba\u30aa\u30f3\u306b\u306f\u4e0d\u8981\u3067\u3059\uff01)<\/p>\n<p>\u30ea\u30ca\u300c\u305d\u3046\u3044\u3048\u3070\u3042\u306a\u305f\u306eVSCode\u4f55\u304b\u5909\u3088\u306d\u3002\u4ee5\u524d\u30da\u30a2\u30d7\u30ed\u3057\u305f\u3068\u304d\u306b\u30d5\u30a1\u30a4\u30eb\u4fdd\u5b58\u3057\u3088\u3046\u3068\u3057\u305f\u3089\u4f55\u6545\u304b\u691c\u7d22\u304c\u59cb\u307e\u3063\u305f\u3057\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300cAwesome Emacs Keymap\u306e\u5f71\u97ff\u3067\u3059\u306d\u3002\u3068\u3042\u308b\u4e8b\u60c5\u3067Emacs\u306e\u30ad\u30fc\u30d0\u30a4\u30f3\u30c9\u304c\u624b\u304b\u3089\u96e2\u308c\u306a\u304f\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3067\u5c0e\u5165\u3057\u3066\u3044\u307e\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3046\u308f\u3041&#8230;\u300d<\/p>\n<h3>Git<\/h3>\n<p>\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u76f4\u63a5\u4f7f\u7528\u3059\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001Rust\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u57fa\u672c\u7684\u306bGit\u306e\u4f7f\u7528\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u5165\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5165\u308c\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002\u5fc5\u9808\u3067\u306f\u306a\u3044\u305f\u3081\u5c0e\u5165\u306f\u4ed6\u306e\u8a18\u4e8b\u69d8\u306b\u983c\u308a\u307e\u3059\u3002<\/p>\n<p>Windows\u306bGit\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u624b\u9806(2022\u5e747\u6708\u66f4\u65b0)<\/p>\n<p>\u30c7\u30d5\u30a9\u30eb\u30c8\u30a8\u30c7\u30a3\u30bf\u3092VSCode\u306b\u3059\u308b\u4ee5\u5916\u306f\u57fa\u672c\u7684\u306b\u5168\u90e8\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5927\u4e08\u592b\u3060\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&gt; git --version\r\ngit version 2.37.1.windows.1\r\n<\/code><\/pre>\n<p>\u30ea\u30ca\u300c\u305d\u3046\u3044\u3048\u3070\u4ed6\u4eba\u304c\u4f5c\u3063\u305fTauri\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u304b\u3089\u30af\u30ed\u30fc\u30f3\u3057\u3066\u304d\u305f\u3089\u305d\u306e\u307e\u307e\u52d5\u304f\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3053\u3053\u307e\u3067\u306e\u74b0\u5883\u69cb\u7bc9\u3092\u3057\u305f\u4e0a\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a9\u30eb\u30c0\u306b\u3066yarn\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3066\u3070\u5f8c\u306f\u81ea\u5206\u3067\u958b\u767a\u3057\u3066\u3044\u305f\u3068\u304d\u3068\u540c\u3058\u306b\u306a\u308a\u307e\u3059\uff01\u300d<\/p>\n<h2>Hello, Tauri<\/h2>\n<p>\u30ea\u30ca\u300c\u9577\u3059\u304e\u308b\u308f\uff01\uff01\uff01\u3084\u3063\u3068Hello, World\uff1f\uff01\u300d<\/p>\n<p>\u7b46\u8005\u300c\u4e2d\u9014\u534a\u7aef\u306a\u6982\u8981\u8aac\u660e\u3084\u74b0\u5883\u69cb\u7bc9\u3092\u66f8\u3044\u3066\u8aad\u8005\u3092\u7f6e\u3044\u3066\u3051\u307c\u308a\u306b\u3059\u308b\u3050\u3089\u3044\u306a\u3089\u3001\u3068\u3001\u304b\u306a\u308a\u30e2\u30ea\u30e2\u30ea\u306b\u66f8\u304d\u307e\u3057\u305f\u304c\u3081\u3061\u3083\u304f\u3061\u3083\u9577\u304f\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u306d&#8230;\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3067\u3082\u3053\u3053\u307e\u3067\u6765\u308c\u308c\u3070\u3001\u5c71\u3067\u8a00\u3048\u30708\u5408\u76ee\u3050\u3089\u3044\u307e\u3067\u6765\u305f\u3088\u3046\u306a\u3082\u306e\u3067\u3059\uff01\u300d<\/p>\n<p>\u3067\u306f\u65e9\u901f\u3001Tauri\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\uff01<\/p>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7acb\u3061\u4e0a\u3052\u306f\u516c\u5f0f\u306b\u5f93\u3046\u306e\u304c\u4e00\u756a\u697d\u3067\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code>&gt; cd .\\Desktop\\\r\n&gt; yarn create tauri-app\r\nyarn create v1.22.19\r\n[1\/4] Resolving packages...\r\n[2\/4] Fetching packages...\r\n[3\/4] Linking dependencies...\r\n[4\/4] Building fresh packages...\r\n\r\nsuccess Installed \"create-tauri-app@1.0.2\" with binaries:\r\n      - create-tauri-app\r\n[#################################################################################################] 97\/97\r\nWe hope to help you create something special with Tauri!\r\nYou will have a choice of one of the UI frameworks supported by the greater web tech community.\r\nThis tool should get you quickly started. See our docs at https:\/\/tauri.app\/\r\n\r\nIf you haven't already, please take a moment to setup your system.\r\nYou may find the requirements here: https:\/\/tauri.app\/v1\/guides\/getting-started\/prerequisites\r\n    \r\nPress any key to continue...\r\n? What is your app name? tauri-react-player\r\n? What should the window title be? Tauri React Player\r\n? What UI recipe would you like to add? create-react-app (https:\/\/create-react-app.dev\/)\r\n? Add \"@tauri-apps\/api\" npm package? Yes\r\n? Which create-react-app template would you like to use? create-react-app (Typescript)\r\n<\/code><\/pre>\n<details>1.1.1\u3067\u306e\u8868\u793a<br \/>\n&gt; yarn create tauri-app<br \/>\nyarn create v1.22.19<br \/>\n[1\/4] Resolving packages&#8230;<br \/>\n[2\/4] Fetching packages&#8230;<br \/>\n[3\/4] Linking dependencies&#8230;<br \/>\n[4\/4] Building fresh packages&#8230;success Installed &#8220;create-tauri-app@2.6.1&#8221; with binaries:<br \/>\n&#8211; create-tauri-app<br \/>\n[###] 3\/3<br \/>\n\u2714 Project name \u00b7 tauri-react-player<br \/>\n\u2714 Choose your package manager \u00b7 yarn<br \/>\n\u2714 Choose your UI template \u00b7 react-ts<\/p>\n<p>Please follow https:\/\/tauri.app\/v1\/guides\/getting-started\/prerequisites to install the needed prerequisites, if you haven&#8217;t already.<\/p>\n<p>Done, Now run:<br \/>\ncd tauri-react-player<br \/>\nyarn<br \/>\nyarn tauri dev<\/p>\n<p>Done in 92.65s.<\/p>\n<p>\u6307\u5b9a\u30fb\u9078\u629e\u9805\u76ee\u304c\u5c11\u306a\u304f\u306a\u3063\u305f\u3088\u3046\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3001\u7ba1\u7406\u3059\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u306fyarn\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306freact-ts\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u30cf\u30f3\u30ba\u30aa\u30f3\u5185\u5bb9\u306b\u6cbf\u3048\u307e\u3059\u3002<br \/>\n@kuone4 \u69d8\u3001\u60c5\u5831\u63d0\u4f9b\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002<\/p>\n<\/details>\n<p>\u7b46\u8005\u300c?\u3067\u59cb\u307e\u3063\u3066\u3044\u308b\u884c\u306f\u8cea\u554f\u306b\u306a\u308a\u307e\u3059\u3002\u300d<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">What is your app name?: \u597d\u304d\u306a\u540d\u524d\u306b\u3057\u307e\u3057\u3087\u3046\u3002\u30cf\u30f3\u30ba\u30aa\u30f3\u5185\u3067\u306ftauri-react-player\u3067\u7d71\u4e00\u3057\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">What should the window title be?: Tauri React Player\u7b49\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">What UI recipe would you like to add?: \u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306fReact\u3092\u4f7f\u3046\u306e\u3067create-react-app\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Add &#8220;@tauri-apps\/api&#8221; npm package?: \u5fc5\u8981\u3067\u3059\u3002Y<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Which create-react-app template would you like to use?: JS, TS\u304a\u597d\u304d\u306a\u65b9\u3067\u69cb\u308f\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306fTypeScript\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/ul>\n<p>\u8cea\u554f\u306b\u5168\u3066\u7b54\u3048\u308b\u3068\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u59cb\u307e\u308b\u306e\u3067\u5f85\u3061\u307e\u3057\u3087\u3046\u3002warning\u304c\u7d50\u69cb\u51fa\u307e\u3059\u304c\u69cb\u3063\u3066\u3044\u305f\u3089\u4e00\u751f\u5148\u306b\u9032\u307e\u306a\u3044\u306e\u3067\u7121\u8996\u3057\u3066\u304b\u307e\u308f\u306a\u3044\u3068\u601d\u3044\u307e\u3059\u3002(\u7121\u8996\u305b\u305a\u6e08\u3080\u65b9\u6cd5\u304c\u3042\u3063\u305f\u3089\u6559\u3048\u3066\u307b\u3057\u3044\u3050\u3089\u3044\u3067\u3059\u3002)<\/p>\n<p>\u30ea\u30ca\u300c\u3068\u3053\u308d\u3067\u30c4\u30c3\u30b3\u30df\u304c\u3059\u3054\u3044\u9045\u308c\u305f\u3051\u3069\u6700\u521d\u306bDesktop\u306b\u79fb\u3063\u3066\u308b\u306e\u306b\u306f\u4f55\u304b\u610f\u5473\u304c\u3042\u308b\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7f6e\u304d\u305f\u304f\u306a\u3044\u6d3e\u306a\u306e\u3067\u3001\u3001\u3069\u3053\u304b\u3057\u3089\u306b\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u308a\u305d\u3053\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u7acb\u3061\u4e0a\u3052\u305f\u307b\u3046\u304c\u7ba1\u7406\u304c\u697d\u3067\u3057\u3087\u3046\u3002\u300d<\/p>\n<pre class=\"post-pre\"><code>...\u7701\u7565...\r\nDone in 11.48s.\r\n&gt;&gt; Updating \"package.json\"\r\n&gt;&gt; Running \"tauri init\"\r\nyarn run v1.22.19\r\n$ tauri init --app-name tauri-react-player --window-title \"Tauri React Player\" --dist-dir ..\/build --dev-path http:\/\/localhost:3000\r\nDone in 0.26s.\r\n&gt;&gt; Updating \"tauri.conf.json\"\r\n&gt;&gt; Running final command(s)\r\n\r\n    Your installation completed.\r\n\r\n    $ cd tauri-react-player\r\n    $ yarn tauri dev\r\n\r\nDone in 470.23s.\r\n&gt;\r\n<\/code><\/pre>\n<p>\u6307\u793a\u901a\u308acd\u30b3\u30de\u30f3\u30c9\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u3063\u305f\u5f8c\u3001yarn tauri dev\u3092\u6253\u3061\u307e\u3057\u3087\u3046\uff01\u3059\u308b\u3068Rust\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u304c\u59cb\u307e\u308a\u307e\u3059\u3002\u4f55\u304b\u304c\u8d77\u3053\u308b\u4e88\u611f&#8230;<\/p>\n<p>\u9014\u4e2d\u3067\u7ba1\u7406\u8005\u6a29\u9650\u30c0\u30a4\u30a2\u30ed\u30b0\u307f\u305f\u3044\u306a\u306e\u304c\u51fa\u308b\u306e\u3067\u8a31\u53ef\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>&gt; cd tauri-react-player\r\n&gt; yarn tauri dev\r\n<\/code><\/pre>\n<details>1.1.1\u3067\u306f<br \/>\nyarn create tauri-app\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u5f8c\u306e\u6700\u5f8c\u306b<br \/>\nDone, Now run:<br \/>\ncd tauri-react-player<br \/>\nyarn<br \/>\nyarn tauri dev\u3068\u3044\u3046\u6307\u793a\u304c\u3042\u308b\u901a\u308a yarn \u30b3\u30de\u30f3\u30c9\u3092\u6253\u3064\u3088\u3046\u306b\u5909\u308f\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u3061\u3089\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/details>\n<p>\u30ea\u30ca\u300c\u30b3\u30f3\u30d1\u30a4\u30eb\u9577\u3044\u308f\u306d\u3001\u3001\u30b3\u30fc\u30d2\u30fc\u3067\u3082\u6df9\u308c\u3066\u304f\u308b\u308f\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3053\u304cRust\u306e\u6b20\u70b9\u306a\u3093\u3067\u3059\u3088\u306d&#8230;\u30b3\u30f3\u30d1\u30a4\u30eb\u901f\u5ea6\u3067\u306fGo\u306b\u52dd\u3066\u308b\u65e5\u306f\u306a\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u300d<\/p>\n<p>&#8230;\u6570\u5206\u5f8c&#8230;<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/177-0.png\" alt=\"HelloTauri.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/178-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u30ea\u30ca\u300c\u304a\u304a\uff01React\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30da\u30fc\u30b8\u304c\u3001Windows\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\u51fa\u73fe\u3057\u305f\u308f\uff01\u300d<\/p>\n<p>\u7b46\u8005\u300c\u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01\u9802\u4e0a\u3067\u3059\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u5618\u3092\u3064\u304b\u306a\u3044\u3067\u3002\u3053\u3053\u304b\u3089\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4f5c\u308b\u3093\u3067\u3057\u3087\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u3067\u3057\u305f\u3001\u3067\u306f\u30b3\u30fc\u30c9\u3092\u7de8\u96c6\u3057\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff01\u300d<\/p>\n<p>\u30db\u30c3\u30c8\u30ea\u30ed\u30fc\u30c9\u3067\u3084\u3063\u3066\u3044\u304d\u305f\u3044\u3068\u3053\u308d\u3067\u3059\u304c\u3001\u4e00\u65e6Ctrl+C\u3067\u9589\u3058\u3066\u3057\u307e\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u30ab\u30ec\u30f3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306ftauri-react-player\u306a\u306e\u3067\u3001PowerShell\u3067code .\u3068\u6253\u3061\u307e\u3059\u3002<\/p>\n<p>\u3059\u308b\u3068\u4e0b\u304c\u9752\u3044\u5e2f\u306eVSCode\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u51fa\u73fe\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a9\u30eb\u30c0\u3092\u958b\u3044\u305f\u72b6\u614b\u306eVSCode\u3067\u3059\u3002\u4ee5\u964d\u3001tauri-react-player\u3092\u30d1\u30b9\u306e\u8d77\u70b9\u3068\u3057\u3001\u3053\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3057\u3066\u3044\u304f\u3053\u3068\u3068\u3057\u307e\u3059\u3002<\/p>\n<h2>Hello, React<\/h2>\n<p>\u7b46\u8005\u300c\u30c7\u30d5\u30a9\u30eb\u30c8\u30da\u30fc\u30b8\u3067\u8a00\u308f\u308c\u305f\u901a\u308asrc\/App.tsx\u3092\u7de8\u96c6\u3057\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u305f\u3060\u5909\u3048\u3066\u3082\u3064\u307e\u3089\u306a\u3044\u308f\u306d\u3002useState\u3068\u304b\u4f7f\u3063\u3066\u307f\u305f\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u3067\u3059\u306d\u3002React\u3063\u307d\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u300d<\/p>\n<pre class=\"post-pre\"><code>&gt; code src\/App.tsx\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">App<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">name<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setName<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">anonymous<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>Hello, <span class=\"si\">{<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">input<\/span> <span class=\"na\">type<\/span><span class=\"p\">=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span> <span class=\"na\">onChange<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">e<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setName<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n    <span class=\"p\">&lt;\/&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">App<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\u66f8\u3044\u305f\u3089yarn tauri dev\u3067\u5b9f\u884c\u3067\u3059\u3002\u4eca\u56de\u304b\u3089\u5b9f\u884c\u3057\u305f\u30bf\u30fc\u30df\u30ca\u30eb\u306f\u30db\u30c3\u30c8\u30ea\u30ed\u30fc\u30c9\u7528\u306b\u6b8b\u3057\u3001\u30b3\u30de\u30f3\u30c9\u306f\u65b0\u3057\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u30bf\u30d6\u3067\u6253\u3064\u3068\u3044\u3044\u3067\u3057\u3087\u3046\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/192-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u7b46\u8005\u300c\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u540d\u524d\u3092\u5909\u3048\u308b\u3068\u4e0a\u306eHello, {name}\u306e\u90e8\u5206\u3082\u540c\u6642\u306b\u5909\u308f\u308b\u3068\u3044\u3046\u3081\u3061\u3083\u304f\u3061\u3083\u3088\u304f\u898b\u308b\u3042\u308c\u3067\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u57fa\u672c\u304c\u5927\u4e8b\u3088\u306d\u3002\u300d<\/p>\n<h2>\u767b\u5834 ReactPlayer<\/h2>\n<p>\u7b46\u8005\u300c\u3067\u306f\u7121\u4e8b\u306bHello, React\u304c\u3067\u304d\u305f\u306e\u3067\u3001\u3044\u3088\u3044\u3088\u4eca\u56de\u306e\u4e3b\u5f79\u306eReactPlayer\u3055\u3093\u306b\u767b\u5834\u3057\u3066\u3082\u3089\u3044\u307e\u3057\u3087\u3046\uff01\u300d<\/p>\n<pre class=\"post-pre\"><code>&gt; yarn add react-player\r\nyarn add v1.22.19\r\n[1\/4] Resolving packages...\r\n[2\/4] Fetching packages...\r\n\r\n...\u7701\u7565...\r\n\r\n\u251c\u2500 react-fast-compare@3.2.0\r\n\u2514\u2500 react-player@2.10.1\r\nDone in 11.26s.\r\n&gt; \r\n<\/code><\/pre>\n<p>yarn add\u306e\u5f8c\u306f\u3059\u3050\u306bReactPlayer\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u307e\u305fApp.tsx\u3092\u66f8\u304d\u63db\u3048\u307e\u3057\u3087\u3046\uff01<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">ReactPlayer<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-player<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">App<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setUrl<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">https:\/\/youtu.be\/eqZQbFOhCGI<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">ReactPlayer<\/span> <span class=\"na\">url<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span> <span class=\"na\">controls<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"kc\">true<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">input<\/span> <span class=\"na\">type<\/span><span class=\"p\">=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span> <span class=\"na\">onChange<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">e<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setUrl<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n    <span class=\"p\">&lt;\/&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">App<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/200-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u7b46\u8005\u300c\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u304c\u53ec\u559a\u3055\u308c\u307e\u3057\u305f\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u52d5\u753b\u306f\u4f55\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u50d5\u304c\u30c6\u30ad\u30c8\u30fc\u306b\u4f5c\u3063\u305f\u30ab\u30a6\u30f3\u30c8\u30c0\u30a6\u30f3\u52d5\u753b\u3067\u3059\uff01\u4ed6\u4eba\u306e\u52d5\u753b\u4f7f\u3046\u306e\u3068\u304b\u306f\u8457\u4f5c\u6a29\u3068\u304b\u8003\u3048\u308b\u306e\u9762\u5012\u3060\u3063\u305f\u306e\u3067\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3075\u3001\u3075\u30fc\u3093&#8230;(\u30bb\u30f3\u30b9\u306a\u3055\u3059\u304e&#8230;)\u300d<\/p>\n<p>\u7b46\u8005\u300c\u5f53\u7136\u3001\u8aad\u8005\u306e\u7686\u69d8\u306fURL\u90e8\u5206\u306f\u306a\u3093\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\u304b\u3089\u306d\u3002\u30a2\u30c6\u304c\u306a\u3051\u308c\u3070\u3082\u3046\u4e00\u500b\u4f5c\u3063\u305f\u306e\u3067\u304a\u3044\u3066\u304a\u304d\u307e\u3059\u3002 https:\/\/youtu.be\/VTSfLuYYs4o \u300d<\/p>\n<p>\u30ea\u30ca\u300cinput\u8981\u7d20\u5185\u306eURL\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u5225\u306a\u52d5\u753b\u3092\u8868\u793a\u3055\u305b\u308b\u3053\u3068\u3082\u3067\u304d\u308b\u307f\u305f\u3044\u306d&#8230;\u3067\u3082\u3053\u308c\u306a\u3089\u666e\u901a\u306b\u30d6\u30e9\u30a6\u30b6\u3067\u89b3\u305f\u307b\u3046\u304c\u3088\u304f\u306a\u3044\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u306a\u3093\u3067\u3059\u3002\u3053\u3053\u304b\u3089\u304cTauri\u306e\u51fa\u756a\u3068\u306a\u3063\u3066\u304d\u307e\u3059\u3002\u6b21\u306f\u30ed\u30fc\u30ab\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a\u3057\u3066\u307f\u307e\u3059\uff01\u300d<\/p>\n<h2>\u30ed\u30fc\u30ab\u30eb\u306e\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a\u3055\u305b\u308b<\/h2>\n<p>\u30ea\u30ca\u300c\u30ed\u30fc\u30ab\u30eb\u306a\u3093\u3066\u6982\u5ff5\u306fReact\u306b\u306f\u306a\u3055\u305d\u3046\u3060\u3051\u3069\u3001\u3069\u3046\u3084\u3063\u3066\u8aad\u307f\u8fbc\u307e\u305b\u308b\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300ctauri-apps\/api\u3068\u3044\u3046\u3001Tauri\u3067\u7528\u610f\u3055\u308c\u3066\u3044\u308bAPI\u3092\u901a\u3057\u3066\u3084\u308a\u3068\u308a\u3057\u307e\u3059\uff01\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u4e0a\u306b\u3042\u308b\u52d5\u753b\u3092\u8aad\u307f\u8fbc\u3081\u308b\u3088\u3046\u306b\u66f8\u3044\u3066\u307f\u307e\u3057\u3087\u3046\uff01\u300d<\/p>\n<pre class=\"post-pre\"><code><span class=\"hdl\"><span class=\"o\">- <\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useEffect<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"k\">import<\/span> <span class=\"nx\">ReactPlayer<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-player<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">desktopDir<\/span><span class=\"p\">,<\/span> <span class=\"nx\">join<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api\/path<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">convertFileSrc<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api\/tauri<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">App<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"hdl\"><span class=\"o\">- <\/span> <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setUrl<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">https:\/\/youtu.be\/eqZQbFOhCGI<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setUrl<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">src<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setSrc<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">player<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setPlayer<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">JSX<\/span><span class=\"p\">.<\/span><span class=\"nx\">Element<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">();<\/span>\r\n<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"kd\">const<\/span> <span class=\"nx\">fn<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"kd\">const<\/span> <span class=\"nx\">desktopDirPath<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">desktopDir<\/span><span class=\"p\">();<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"kd\">const<\/span> <span class=\"nx\">new_url<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">convertFileSrc<\/span><span class=\"p\">(<\/span><span class=\"k\">await<\/span> <span class=\"nf\">join<\/span><span class=\"p\">(<\/span><span class=\"nx\">desktopDirPath<\/span><span class=\"p\">,<\/span> <span class=\"nx\">src<\/span><span class=\"p\">));<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"nf\">setUrl<\/span><span class=\"p\">(<\/span><span class=\"nx\">new_url<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"kd\">const<\/span> <span class=\"nx\">player<\/span> <span class=\"o\">=<\/span> <span class=\"p\">&lt;<\/span><span class=\"nc\">ReactPlayer<\/span> <span class=\"na\">url<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">new_url<\/span><span class=\"si\">}<\/span> <span class=\"na\">controls<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"kc\">true<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;;<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"nf\">setPlayer<\/span><span class=\"p\">(<\/span><span class=\"nx\">player<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"p\">};<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"nf\">fn<\/span><span class=\"p\">();<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">src<\/span><span class=\"p\">]);<\/span>\r\n<\/span>\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;&gt;<\/span>\r\n<span class=\"hdl\">-      <span class=\"p\">&lt;<\/span><span class=\"nc\">ReactPlayer<\/span> <span class=\"na\">url<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span> <span class=\"na\">controls<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"kc\">true<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<\/span><span class=\"hdl\">-      <span class=\"p\">&lt;<\/span><span class=\"nt\">input<\/span> <span class=\"na\">type<\/span><span class=\"p\">=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span> <span class=\"na\">onChange<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">e<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setUrl<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"p\">&lt;<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>React Player<span class=\"p\">&lt;\/<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"si\">{<\/span><span class=\"nx\">player<\/span><span class=\"si\">}<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"si\">{<\/span><span class=\"nx\">src<\/span><span class=\"si\">}<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"si\">{<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"p\">&lt;<\/span><span class=\"nt\">input<\/span> <span class=\"na\">type<\/span><span class=\"p\">=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">src<\/span><span class=\"si\">}<\/span> <span class=\"na\">onChange<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">e<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setSrc<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<\/span>    <span class=\"p\">&lt;\/&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">App<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<details>\u30b3\u30d4\u30da\u7528<br \/>\nimport { useState, useEffect } from &#8216;react&#8217;;<br \/>\nimport ReactPlayer from &#8216;react-player&#8217;;<br \/>\nimport { desktopDir, join } from &#8216;@tauri-apps\/api\/path&#8217;;<br \/>\nimport { convertFileSrc } from &#8216;@tauri-apps\/api\/tauri&#8217;;const App = () =&gt; {<br \/>\nconst [url, setUrl] = useState(&#8221;);<br \/>\nconst [src, setSrc] = useState(&#8221;);<br \/>\nconst [player, setPlayer] = useState();<\/p>\n<p>useEffect(() =&gt; {<br \/>\nconst fn = async () =&gt; {<br \/>\nconst desktopDirPath = await desktopDir();<br \/>\nconst new_url = convertFileSrc(await join(desktopDirPath, src));<br \/>\nsetUrl(new_url);<br \/>\nconst player = ;<br \/>\nsetPlayer(player);<br \/>\n};<br \/>\nfn();<br \/>\n}, [src]);<\/p>\n<p>return (<br \/>\n&lt;&gt;<\/p>\n<h1>React Player<\/h1>\n<p>{player}<\/p>\n<p>{src}<\/p>\n<p>{url}<\/p>\n<p><input type=\"text\" value=\"{src}\" \/> setSrc(e.target.value)} \/&gt;<br \/>\n&lt;\/&gt;<br \/>\n);<br \/>\n}<\/p>\n<p>export default App;<\/p>\n<\/details>\n<p>\u305f\u3060\u3057\u3053\u306e\u307e\u307e\u3060\u3068\u52d5\u304d\u307e\u305b\u3093\u3002\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u5236\u7d04\u3088\u308a\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u30ed\u30fc\u30ab\u30eb\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u8a31\u3055\u308c\u3066\u3044\u306a\u3044\u3088\u3046\u3067\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a2d\u5b9a\u3092\u5909\u3048\u308b\u305f\u3081src-tauri\/tauri.conf.json\u30d5\u30a1\u30a4\u30eb\u306etauri.allowlist\u306bprotocol\u3068\u3044\u3046\u9805\u76ee\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p>Configuration | Tauri Apps<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n  <span class=\"nl\">\"$schema\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"..\/node_modules\/@tauri-apps\/cli\/schema.json\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"build\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"err\">\/\/<\/span> <span class=\"err\">...\u7701\u7565...<\/span>\r\n  <span class=\"p\">},<\/span>\r\n  <span class=\"nl\">\"tauri\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nl\">\"allowlist\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nl\">\"all\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n<span class=\"hil\"><span class=\"err\">+<\/span>      <span class=\"nl\">\"protocol\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"err\">+<\/span>        <span class=\"nl\">\"asset\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n<\/span><span class=\"hil\"><span class=\"err\">+<\/span>        <span class=\"nl\">\"assetScope\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"**\"<\/span><span class=\"p\">]<\/span>\r\n<\/span><span class=\"hil\"><span class=\"err\">+<\/span>      <span class=\"p\">}<\/span>\r\n<\/span>    <span class=\"p\">},<\/span>\r\n    <span class=\"err\">\/\/<\/span> <span class=\"err\">...\u7701\u7565...<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306b\u4f55\u304b\u30b5\u30f3\u30d7\u30eb\u52d5\u753b\u3092\u7f6e\u3044\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6253\u3061\u8fbc\u3093\u3067\u307f\u307e\u3057\u3087\u3046\uff01<\/p>\n<p>\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306b\u7f6e\u304f\u7528\u306emp4\u52d5\u753b\u306f\u3053\u3053\u306b\u7528\u610f\u3057\u3066\u304a\u304d\u307e\u3059\u3002(\u30ea\u30f3\u30af\u304c\u5207\u308c\u3066\u3044\u305f\u3089\u7533\u3057\u8a33\u306a\u3044\u3067\u3059\u3002)<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">https:\/\/drive.google.com\/file\/d\/1VRAJfmDmmplvwpzMQ8HKjFVs2m12IAPi\/view?usp=sharing<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">https:\/\/drive.google.com\/file\/d\/1TwEx7MmhaD5hhfcyTQR8CR6y8YODqLcy\/view?usp=sharing<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/220-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u30ea\u30ca\u300cuseEffect\u5185\u3067\u5148\u7a0b\u306eURL\u306b\u76f8\u5f53\u3059\u308b\u3082\u306e\u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\u3068\u3044\u3046\u3053\u3068\u306f\u3001Tauri\u5185\u3067\u4f55\u304b\u7279\u5225\u306aURL\u304c\u767a\u884c\u3055\u308c\u3066\u3044\u308b\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u306f\u3044\u3002\u5b9f\u969b\u306b\u51fa\u529b\u3057\u3066\u307f\u308b\u3068https:\/\/asset.localhost\/C%3A%5CUsers%5Cyourname%5CDesktop%5Csample.mp4\u306e\u3088\u3046\u306aURL\u304c\u767a\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u89b3\u5bdf\u3067\u304d\u307e\u305911\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300cAPI\u3067\u7528\u610f\u3055\u308c\u3066\u3044\u308bconvertFileSrc\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3092\u66f8\u304f\u306e\u3068\u540c\u3058\u3088\u3046\u306b\u30ed\u30fc\u30ab\u30eb\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u306e\u306d\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u3067\u3059\u305d\u3046\u3067\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3068\u3053\u308d\u3067\u53f3\u30af\u30ea\u30c3\u30af\u3067\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u30c4\u30fc\u30eb\u3092\u958b\u3044\u3066\u307f\u305f\u3089\u3082\u306e\u3059\u3054\u3044\u6570\u306e\u30a8\u30e9\u30fc\u51fa\u3066\u308b\u3093\u3060\u3051\u3069&#8230;\u300d<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/226-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u7b46\u8005\u300cReact\u306e\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u5909\u6570\u3092\u305d\u306e\u307e\u307eURL\u306b\u5909\u63db\u3057\u3066\u307e\u3059\u304b\u3089\u306d&#8230;\u5165\u529b\u9014\u4e2d\u3067\u3082\u5bb9\u8d66\u306a\u304f\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306e\u3067404\u304c\u8fd4\u3063\u3066\u3044\u308b\u307f\u305f\u3044\u3067\u3059\u306d\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u305d\u3046\u306a\u308b\u3068\u3001\u4e88\u3081\u8868\u793a\u3067\u304d\u308b\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\u3092\u6319\u3052\u3066\u304a\u3044\u3066\u3001\u305d\u3053\u304b\u3089\u9078\u3070\u305b\u305f\u307b\u3046\u304c\u3044\u3044\u3093\u3058\u3083\u306a\u3044\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u306a\u308a\u307e\u3059\u3002\u305d\u3057\u3066\u3082\u3057\u304b\u3057\u305f\u3089\u305d\u3046\u3044\u3063\u305f\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3059\u308bAPI\u304cTauri\u306b\u3059\u3067\u306b\u5b58\u5728\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u309312\u304c\u3001\u3053\u3053\u3067Rust\u3092\u4f7f\u3063\u3066\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3057\u3066\u307f\u307e\u3059\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300cAPI\u306e\u5b58\u5728\u3092\u8abf\u3079\u308b\u3088\u308a\u3001Rust\u3067\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5185\u5bb9\u3092\u53d6\u5f97\u3059\u308b\u307b\u3046\u304c\u3042\u306a\u305f\u306b\u3068\u3063\u3066\u306f\u624b\u3063\u53d6\u308a\u65e9\u3044\u3001\u307f\u305f\u3044\u306a\u611f\u3058\u306d\u3002\u3067\u3082\u307e\u3041\u78ba\u304b\u306b\u3001\u30ed\u30fc\u30ab\u30eb\u306b\u8fd1\u3044\u51e6\u7406\u3060\u3057\u5408\u7406\u7684\u306a\u306e\u304b\u3082\u3002\u300d<\/p>\n<h2>Hello, Rust<\/h2>\n<details>1.1.1\u306b\u3064\u3044\u3066<br \/>\n\u30c7\u30d5\u30a9\u30eb\u30c8\u3067greet\u30b3\u30de\u30f3\u30c9\u304c\u7528\u610f\u3055\u308c\u308b\u3088\u3046\u306b\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\uff01\u305d\u306e\u305f\u3081\u5fc5\u8981\u306a\u306e\u306fReact\u5074\u306e\u4fee\u6b63\u306e\u307f\u306b\u306a\u308a\u307e\u3059\u3002<\/details>\n<p>\u7b46\u8005\u300c\u3044\u304d\u306a\u308a\u65b0\u3057\u3044\u8981\u7d20\u3092\u8ffd\u52a0\u3057\u3066\u3082\u6df7\u4e71\u3059\u308b\u3060\u3051\u3067\u3059\u304b\u3089\u3001\u307e\u305fTauri\u516c\u5f0f\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u7acb\u3061\u8fd4\u308a\u307e\u3057\u3087\u3046\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300cInvoke Commands\u3068\u66f8\u304b\u308c\u3066\u3044\u308b\u308f\u306d\u3002invoke\u3068\u3044\u3046\u3053\u3068\u306fRust\u304b\u3089TypeScript\u3092\u3001\u3042\u308b\u3044\u306fTypeScript\u304b\u3089Rust\u3092\u547c\u3073\u51fa\u3059\u611f\u3058\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u306f\u3044\u3002TypeScript\u304b\u3089Rust\u306e\u95a2\u6570\u3092\u547c\u3073\u51fa\u305b\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u300d<\/p>\n<p>\u8a18\u8ff0\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306fsrc-tauri\/src\/main.rs\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u30ea\u30ca\u300c\u307e\u3060\u4f55\u306b\u3082\u7de8\u96c6\u3057\u3066\u3044\u306a\u3044\u306e\u306b\u30a8\u30e9\u30fc\u5410\u3044\u3066\u308b\u307f\u305f\u3044\u3060\u3051\u3069&#8230;\u300d<\/p>\n<p>\u7b46\u8005\u300cdistDir\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308bbuild\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u306a\u3044\u306e\u304c\u539f\u56e0\u3067\u3059\u306d\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5410\u304d\u51fa\u3055\u308c\u3066\u3044\u308b\u30a8\u30e9\u30fc\u306a\u306e\u3067\u4f55\u304b\u9593\u9055\u3048\u305f\u3068\u304b\u3067\u306f\u306a\u3044\u3067\u3059\u3002yarn build\u30b3\u30de\u30f3\u30c9\u3092\u6253\u3063\u3066\u6d88\u3057\u307e\u3057\u3087\u3046\u3002\u300d<\/p>\n<pre class=\"post-pre\"><code>&gt; yarn build \r\nyarn run v1.22.19\r\n$ react-scripts build\r\nCreating an optimized production build...\r\nCompiled successfully.\r\n\r\n...\u7701\u7565...\r\n\r\nDone in 10.03s.\r\n<\/code><\/pre>\n<p>1.1.1\u306b\u3064\u3044\u3066: \u540c\u69d8\u306e\u30a8\u30e9\u30fc\u306f\u8d77\u304d\u306a\u3044\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3069\u306e\u307f\u3061\u30ea\u30ea\u30fc\u30b9\u3059\u308b\u969b\u306fyarn build\u3092\u6253\u3064\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u7b46\u8005\u300cVSCode\u3092\u518d\u8aad\u307f\u8fbc\u307f\u3059\u308c\u3070\u30a8\u30e9\u30fc\u304c\u6d88\u3048\u308b\u306f\u305a\u3067\u3059\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u3067\u306f\u3001\u6539\u3081\u3066\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u5f93\u3044main.rs\u306e\u4e2d\u8eab\u3092\u66f8\u304d\u63db\u3048\u307e\u3057\u3087\u3046\uff01\u300d<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">#![cfg_attr(<\/span>\r\n  <span class=\"nd\">all(not(debug_assertions),<\/span> <span class=\"nd\">target_os<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"windows\"<\/span><span class=\"nd\">),<\/span>\r\n  <span class=\"nd\">windows_subsystem<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"windows\"<\/span>\r\n<span class=\"nd\">)]<\/span>\r\n\r\n<span class=\"hil\"><span class=\"o\">+ <\/span><span class=\"nd\">#[tauri::command]<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span><span class=\"k\">fn<\/span> <span class=\"nf\">greet<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">String<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Hello, {}!\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"p\">)<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span><span class=\"p\">}<\/span>\r\n<\/span>\r\n<span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nn\">Builder<\/span><span class=\"p\">::<\/span><span class=\"nf\">default<\/span><span class=\"p\">()<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"nf\">.invoke_handler<\/span><span class=\"p\">(<\/span><span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nd\">generate_handler!<\/span><span class=\"p\">[<\/span><span class=\"n\">greet<\/span><span class=\"p\">])<\/span>\r\n<\/span>    <span class=\"nf\">.run<\/span><span class=\"p\">(<\/span><span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nd\">generate_context!<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"error while running tauri application\"<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u7b46\u8005\u300c\u53d7\u3051\u53d6\u3063\u305f\u6587\u5b57\u5217\u3092\u5143\u306b\u65b0\u305f\u306a\u6587\u5b57\u5217\u3092\u4f5c\u6210\u3057\u3066\u8fd4\u3059greet\u30b3\u30de\u30f3\u30c9\u3092\u4f5c\u6210\u3057\u3001invoke_handler\u306b\u6e21\u3057\u3066\u3001TypeScript\u304b\u3089\u547c\u3073\u51fa\u305b\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3082\u3068\u3082\u3068\u66f8\u304b\u308c\u3066\u3044\u308b\u90e8\u5206\u306b\u306f\u3069\u3046\u3044\u3046\u3053\u3068\u304c\u66f8\u304b\u308c\u3066\u3044\u308b\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u6700\u521d\u306e<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">#![cfg_attr(<\/span>\r\n  <span class=\"nd\">all(not(debug_assertions),<\/span> <span class=\"nd\">target_os<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"windows\"<\/span><span class=\"nd\">),<\/span>\r\n  <span class=\"nd\">windows_subsystem<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"windows\"<\/span>\r\n<span class=\"nd\">)]<\/span>\r\n<\/code><\/pre>\n<p>\u306f\u3001\u30ea\u30ea\u30fc\u30b9\u30d3\u30eb\u30c9\u3067\u30bf\u30fc\u30b2\u30c3\u30c8OS\u304cWindows\u306e\u969b\u3001\u30b3\u30f3\u30bd\u30fc\u30eb\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u51fa\u308b\u306e\u3092\u6291\u6b62\u3059\u308b\u305f\u3081\u306b\u3064\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3044\u308f\u3086\u308b\u304a\u307e\u3058\u306a\u3044\u3068\u8003\u3048\u3066\u3082\u3089\u3063\u3066\u3088\u3044\u3067\u3059\u3002\u5f8c\u534a\u306e<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nn\">Builder<\/span><span class=\"p\">::<\/span><span class=\"nf\">default<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"nf\">.invoke_handler<\/span><span class=\"p\">(<\/span><span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nd\">generate_handler!<\/span><span class=\"p\">[<\/span><span class=\"n\">greet<\/span><span class=\"p\">])<\/span>\r\n    <span class=\"nf\">.run<\/span><span class=\"p\">(<\/span><span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nd\">generate_context!<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"error while running tauri application\"<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u306f\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3067\u3001Tauri\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u672c\u4f53\u306e\u7acb\u3061\u4e0a\u3052\u90e8\u5206\u306b\u306a\u308a\u307e\u3059\u3002\u30b3\u30de\u30f3\u30c9\u3092\u4f5c\u6210\u3059\u308b\u305f\u3073\u306b\u3001invoke_handler\u306etauri::generate_hander![]\u306b\u30b3\u30de\u30f3\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u4ed6\u306fTauri\u306e\u8a2d\u5b9a\u7b49\u3092\u884c\u3046\u306e\u306b\u4f55\u304b\u3057\u3089\u8a18\u8ff0\u3092\u8db3\u3059\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u300d<\/p>\n<p>Rust\u5074\u304c\u66f8\u304d\u7d42\u308f\u3063\u305f\u3089\u3001\u6b21\u306fgreet\u30b3\u30de\u30f3\u30c9\u3092src\/App.tsx\u304b\u3089invoke\u3092\u901a\u3057\u3066\u547c\u3073\u51fa\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useEffect<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">ReactPlayer<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-player<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">desktopDir<\/span><span class=\"p\">,<\/span> <span class=\"nx\">join<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api\/path<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">convertFileSrc<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api\/tauri<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"hil\"><span class=\"o\">+ <\/span><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">invoke<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">App<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setUrl<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">src<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setSrc<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">player<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setPlayer<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">JSX<\/span><span class=\"p\">.<\/span><span class=\"nx\">Element<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">();<\/span>\r\n\r\n<span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">hello<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setHello<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"kd\">const<\/span> <span class=\"nx\">res<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">invoke<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">greet<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Rust<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">});<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>     <span class=\"nf\">setHello<\/span><span class=\"p\">(<\/span><span class=\"nx\">res<\/span><span class=\"p\">);<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span>   <span class=\"p\">})();<\/span>\r\n<\/span><span class=\"hil\"><span class=\"o\">+ <\/span> <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\r\n<\/span>\r\n  <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">fn<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">desktopDirPath<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">desktopDir<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">new_url<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">convertFileSrc<\/span><span class=\"p\">(<\/span><span class=\"k\">await<\/span> <span class=\"nf\">join<\/span><span class=\"p\">(<\/span><span class=\"nx\">desktopDirPath<\/span><span class=\"p\">,<\/span> <span class=\"nx\">src<\/span><span class=\"p\">));<\/span>\r\n      <span class=\"nf\">setUrl<\/span><span class=\"p\">(<\/span><span class=\"nx\">new_url<\/span><span class=\"p\">);<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">player<\/span> <span class=\"o\">=<\/span> <span class=\"p\">&lt;<\/span><span class=\"nc\">ReactPlayer<\/span> <span class=\"na\">url<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">new_url<\/span><span class=\"si\">}<\/span> <span class=\"na\">controls<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"kc\">true<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;;<\/span>\r\n      <span class=\"nf\">setPlayer<\/span><span class=\"p\">(<\/span><span class=\"nx\">player<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">};<\/span>\r\n    <span class=\"nf\">fn<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">src<\/span><span class=\"p\">]);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>React Player<span class=\"p\">&lt;\/<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"si\">{<\/span><span class=\"nx\">player<\/span><span class=\"si\">}<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"si\">{<\/span><span class=\"nx\">src<\/span><span class=\"si\">}<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"si\">{<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">input<\/span> <span class=\"na\">type<\/span><span class=\"p\">=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">src<\/span><span class=\"si\">}<\/span> <span class=\"na\">onChange<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">e<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setSrc<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<span class=\"hil\">+      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n<\/span><span class=\"hil\">+      <span class=\"si\">{<\/span><span class=\"nx\">hello<\/span><span class=\"si\">}<\/span>\r\n<\/span>    <span class=\"p\">&lt;\/&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">App<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\u30ea\u30ca\u300c\u4e00\u756a\u4e0b\u306bHello, Rust\u304c\u8868\u793a\u3055\u308c\u305f\u308f\u3002invoke\u306e\u7b2c\u4e00\u5f15\u6570\u306b\u30b3\u30de\u30f3\u30c9\u540d\u3001\u7b2c\u4e8c\u5f15\u6570\u306b\u306f\u30b3\u30de\u30f3\u30c9\u306b\u6e21\u3059\u5909\u6570\u306e\u8f9e\u66f8\u3092\u8a2d\u5b9a\u3059\u308b\u3088\u3046\u306d\u3002invoke\u306fawait\u3067\u5f85\u3064\u5fc5\u8981\u304c\u3042\u308b\u306e\u304b\u3057\u3089\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300c\u306f\u3044\u3002Rust\u5074\u3067\u540c\u671f\u7684\u306a\u95a2\u6570\u3067\u3042\u3063\u3066\u3082\u3001\u5fc5\u305aPromise\u304c\u8fd4\u3063\u3066\u304f\u308b\u306e\u3067\u3001await\u3067\u5f85\u3064\u3088\u3046\u306b\u66f8\u304f\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u521d\u671f\u5316\u7528\u306euseEffect\u306e\u4e2d\u3067\u547c\u3073\u51fa\u3057\u3066\u3044\u307e\u3059\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u6b21\u7bc0\u306f\u3044\u3088\u3044\u3088\u96c6\u5927\u6210\u3002Rust\u3067\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5185\u5bb9\u3092\u53d6\u5f97\u3057\u3001React\u5074\u3067\u6d3b\u7528\u3057\u307e\u3059\uff01\u300d<\/p>\n<h2>Rust\u3067\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5185\u5bb9\u3092\u53d6\u5f97\u3059\u308b<\/h2>\n<p>\u307e\u305a\u306fRust\u5074\u306e\u5b9f\u88c5\u3067\u3042\u308b\u300c\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d\u304c\u4e0e\u3048\u3089\u308c\u305f\u3089\u305d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5b58\u5728\u3059\u308b\u30a8\u30f3\u30c8\u30ea\u3092\u8fd4\u3059\u300d\u30b3\u30de\u30f3\u30c9\u3092\u4f5c\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u3087\u3046\uff01<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">#![cfg_attr(<\/span>\r\n  <span class=\"nd\">all(not(debug_assertions),<\/span> <span class=\"nd\">target_os<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"windows\"<\/span><span class=\"nd\">),<\/span>\r\n  <span class=\"nd\">windows_subsystem<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"windows\"<\/span>\r\n<span class=\"nd\">)]<\/span>\r\n\r\n<span class=\"nd\">#[macro_use]<\/span>\r\n<span class=\"k\">extern<\/span> <span class=\"k\">crate<\/span> <span class=\"n\">serde<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">use<\/span> <span class=\"nn\">std<\/span><span class=\"p\">::<\/span><span class=\"n\">fs<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nd\">#[derive(Serialize)]<\/span>\r\n<span class=\"nd\">#[serde(tag<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"type\"<\/span><span class=\"nd\">)]<\/span>\r\n<span class=\"k\">enum<\/span> <span class=\"n\">Entry<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nd\">#[serde(rename<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"file\"<\/span><span class=\"nd\">)]<\/span>\r\n  <span class=\"n\">File<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span> <span class=\"p\">},<\/span>\r\n  <span class=\"nd\">#[serde(rename<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"dir\"<\/span><span class=\"nd\">)]<\/span>\r\n  <span class=\"n\">Dir<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span> <span class=\"p\">},<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"nd\">#[tauri::command]<\/span>\r\n<span class=\"k\">fn<\/span> <span class=\"nf\">get_entries<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Entry<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">let<\/span> <span class=\"n\">entries<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">fs<\/span><span class=\"p\">::<\/span><span class=\"nf\">read_dir<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">)<\/span><span class=\"nf\">.map_err<\/span><span class=\"p\">(|<\/span><span class=\"n\">e<\/span><span class=\"p\">|<\/span> <span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">e<\/span><span class=\"p\">))<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"k\">let<\/span> <span class=\"n\">res<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entries<\/span>\r\n      <span class=\"nf\">.filter_map<\/span><span class=\"p\">(|<\/span><span class=\"n\">entry<\/span><span class=\"p\">|<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Option<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Entry<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">entry<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.file_name<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string_lossy<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">();<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.path<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string_lossy<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">();<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">type_<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.file_type<\/span><span class=\"p\">()<\/span><span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\r\n\r\n          <span class=\"k\">if<\/span> <span class=\"n\">type_<\/span><span class=\"nf\">.is_dir<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nf\">Some<\/span><span class=\"p\">(<\/span><span class=\"nn\">Entry<\/span><span class=\"p\">::<\/span><span class=\"n\">Dir<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span> <span class=\"p\">})<\/span>\r\n          <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"n\">type_<\/span><span class=\"nf\">.is_file<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nf\">Some<\/span><span class=\"p\">(<\/span><span class=\"nn\">Entry<\/span><span class=\"p\">::<\/span><span class=\"n\">File<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span> <span class=\"p\">})<\/span>\r\n          <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nb\">None<\/span>\r\n          <span class=\"p\">}<\/span>\r\n      <span class=\"p\">})<\/span>\r\n      <span class=\"nf\">.collect<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">res<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nn\">Builder<\/span><span class=\"p\">::<\/span><span class=\"nf\">default<\/span><span class=\"p\">()<\/span>\r\n      <span class=\"nf\">.invoke_handler<\/span><span class=\"p\">(<\/span><span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nd\">generate_handler!<\/span><span class=\"p\">[<\/span><span class=\"n\">get_entries<\/span><span class=\"p\">])<\/span>\r\n      <span class=\"nf\">.run<\/span><span class=\"p\">(<\/span><span class=\"nn\">tauri<\/span><span class=\"p\">::<\/span><span class=\"nd\">generate_context!<\/span><span class=\"p\">())<\/span>\r\n      <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"error while running tauri application\"<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u30b3\u30d4\u30da\u3067\u304a\uff4b\u3067\u3059\uff01\u304c\u3001\u305d\u308c\u3060\u3068\u4e71\u66b4\u306a\u306e\u3067\u5c11\u3057\u3060\u3051\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">#[derive(Serialize)]<\/span>\r\n<span class=\"nd\">#[serde(tag<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"type\"<\/span><span class=\"nd\">)]<\/span>\r\n<span class=\"k\">enum<\/span> <span class=\"n\">Entry<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nd\">#[serde(rename<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"file\"<\/span><span class=\"nd\">)]<\/span>\r\n  <span class=\"n\">File<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span> <span class=\"p\">},<\/span>\r\n  <span class=\"nd\">#[serde(rename<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"dir\"<\/span><span class=\"nd\">)]<\/span>\r\n  <span class=\"n\">Dir<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span> <span class=\"p\">},<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u306e\u90e8\u5206\u3067\u306f\u3001JSON\u306b\u5909\u63db\u53ef\u80fd\u306a\u30d5\u30a1\u30a4\u30eb\/\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30a8\u30f3\u30c8\u30ea\u578b\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u540c\u4e00\u3067\u3059\u304c\u578b\u30ec\u30d9\u30eb\u3067\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u5206\u3051\u3066\u8003\u3048\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">#[tauri::command]<\/span>\r\n<span class=\"k\">fn<\/span> <span class=\"nf\">get_entries<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Entry<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">let<\/span> <span class=\"n\">entries<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">fs<\/span><span class=\"p\">::<\/span><span class=\"nf\">read_dir<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">)<\/span><span class=\"nf\">.map_err<\/span><span class=\"p\">(|<\/span><span class=\"n\">e<\/span><span class=\"p\">|<\/span> <span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">e<\/span><span class=\"p\">))<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"k\">let<\/span> <span class=\"n\">res<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entries<\/span>\r\n      <span class=\"nf\">.filter_map<\/span><span class=\"p\">(|<\/span><span class=\"n\">entry<\/span><span class=\"p\">|<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Option<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Entry<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">entry<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.file_name<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string_lossy<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">();<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.path<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string_lossy<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">();<\/span>\r\n          <span class=\"k\">let<\/span> <span class=\"n\">type_<\/span> <span class=\"o\">=<\/span> <span class=\"n\">entry<\/span><span class=\"nf\">.file_type<\/span><span class=\"p\">()<\/span><span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\r\n\r\n          <span class=\"k\">if<\/span> <span class=\"n\">type_<\/span><span class=\"nf\">.is_dir<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nf\">Some<\/span><span class=\"p\">(<\/span><span class=\"nn\">Entry<\/span><span class=\"p\">::<\/span><span class=\"n\">Dir<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span> <span class=\"p\">})<\/span>\r\n          <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"n\">type_<\/span><span class=\"nf\">.is_file<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nf\">Some<\/span><span class=\"p\">(<\/span><span class=\"nn\">Entry<\/span><span class=\"p\">::<\/span><span class=\"n\">File<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span> <span class=\"p\">})<\/span>\r\n          <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nb\">None<\/span>\r\n          <span class=\"p\">}<\/span>\r\n      <span class=\"p\">})<\/span>\r\n      <span class=\"nf\">.collect<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">res<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u306eget_entries\u30b3\u30de\u30f3\u30c9\u304cRust\u5074\u306e\u51e6\u7406\u306e\u672c\u4e38\u3067\u3059\u3002\u307e\u305aRust\u306b\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30eastd::fs\u306b\u3042\u308bread_dir\u95a2\u6570\u306b\u3088\u3063\u3066\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u542b\u307e\u308c\u308b\u30a8\u30f3\u30c8\u30ea\u914d\u521713\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u5f8c\u3001filter_map\u5185\u3067\u30d5\u30a1\u30a4\u30eb\u3084\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068\u3057\u3066\u9069\u5207\u306a\u3082\u306e\u3092\u62bd\u51fa\u3057\u3001collect\u3067\u914d\u5217\u306b\u5909\u63db\u3057\u3066\u8fd4\u308a\u5024\u3068\u3057\u3066\u51fa\u529b\u3057\u3066\u3044\u307e\u3059\u3002tauri\u30b3\u30de\u30f3\u30c9\u306e\u8fd4\u308a\u5024(\u4eca\u56de\u306e\u5834\u5408Vec)\u306f\u3001\u6587\u5b57\u5217\u304bJSON\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\u3067\u304d\u308b\u3082\u306e\u3067\u3042\u308c\u3070\u826f\u3044\u307f\u305f\u3044\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u6700\u521d\u306e\u65b9\u3067JSON\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u578b\u3092\u308f\u3056\u308f\u3056\u7528\u610f\u3057\u3066\u3044\u305f\u306e\u3067\u3057\u305f\u3002<\/p>\n<p>\u30ea\u30ca\u300cfilter_map\u3063\u3066\u3044\u304b\u306b\u3082\u95a2\u6570\u578b\u3063\u307d\u3044\u30e1\u30bd\u30c3\u30c9\u306d\u3002\u300d<\/p>\n<p>\u7b46\u8005\u300c\u305d\u3046\u306a\u3093\u3067\u3059\uff01Rust\u306f\u7d50\u69cb\u95a2\u6570\u578b\u8a00\u8a9e\u306e\u8981\u7d20\u3082\u6301\u3061\u5408\u308f\u305b\u3066\u3044\u307e\u3059\u3002map\u3084filter\u304c\u3042\u308b\u306e\u306fJavaScript\u3084TypeScript\u3068\u901a\u3058\u308b\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002\u300d<\/p>\n<p>\u30ea\u30ca\u300cRust\u306e\u826f\u3055\u306f\u307e\u305f\u4eca\u5ea6\u805e\u304b\u305b\u3066\u3082\u3089\u3046\u308f\u3002\u5f8c\u306fReact\u306e\u90e8\u5206\u304b\u3057\u3089\u300d<\/p>\n<p>\u7b46\u8005\u300c\u4e00\u756a\u6700\u5f8c\u306e\u30dc\u30b9\u306b\u306a\u308a\u307e\u3059\uff01\u5927\u5e45\u306b\u6539\u5909\u3057\u3066\u3044\u307e\u3059\u3002\u300d<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useEffect<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">ReactPlayer<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-player<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">homeDir<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api\/path<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">convertFileSrc<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api\/tauri<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">invoke<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@tauri-apps\/api<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">Entry<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">dir<\/span><span class=\"dl\">'<\/span> <span class=\"o\">|<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">file<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nl\">name<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nl\">path<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">Entries<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Array<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">Entry<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">App<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">src<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setSrc<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span> <span class=\"o\">|<\/span> <span class=\"kc\">null<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">dir<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setDir<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span> <span class=\"o\">|<\/span> <span class=\"kc\">null<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">player<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setPlayer<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">JSX<\/span><span class=\"p\">.<\/span><span class=\"nx\">Element<\/span> <span class=\"o\">|<\/span> <span class=\"kc\">null<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">entries<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setEntries<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">Entries<\/span> <span class=\"o\">|<\/span> <span class=\"kc\">null<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">home<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">homeDir<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"nf\">setDir<\/span><span class=\"p\">(<\/span><span class=\"nx\">home<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">})();<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\r\n\r\n  <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">src<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"p\">}<\/span>\r\n\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">url<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">convertFileSrc<\/span><span class=\"p\">(<\/span><span class=\"nx\">src<\/span><span class=\"p\">);<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">player<\/span> <span class=\"o\">=<\/span> <span class=\"p\">&lt;<\/span><span class=\"nc\">ReactPlayer<\/span> <span class=\"na\">url<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span> <span class=\"na\">controls<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"kc\">true<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;;<\/span>\r\n      <span class=\"nf\">setPlayer<\/span><span class=\"p\">(<\/span><span class=\"nx\">player<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">})();<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">src<\/span><span class=\"p\">]);<\/span>\r\n\r\n  <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">entries<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">invoke<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">Entries<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">get_entries<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"nx\">dir<\/span> <span class=\"p\">})<\/span>\r\n        <span class=\"p\">.<\/span><span class=\"k\">catch<\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">);<\/span>\r\n          <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">});<\/span>\r\n\r\n      <span class=\"nf\">setEntries<\/span><span class=\"p\">(<\/span><span class=\"nx\">entries<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">})();<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">dir<\/span><span class=\"p\">]);<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">entry_list<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">entries<\/span> <span class=\"p\">?<\/span> <span class=\"p\">&lt;<\/span><span class=\"nt\">ul<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"si\">{<\/span><span class=\"nx\">entries<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"kd\">type<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">dir<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"p\">&lt;<\/span><span class=\"nt\">li<\/span> <span class=\"na\">key<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"si\">}<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setDir<\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nt\">li<\/span><span class=\"p\">&gt;;<\/span>\r\n      <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"p\">&lt;<\/span><span class=\"nt\">li<\/span> <span class=\"na\">key<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"si\">}<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setSrc<\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nt\">li<\/span><span class=\"p\">&gt;;<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">})<\/span><span class=\"si\">}<\/span>\r\n  <span class=\"p\">&lt;\/<\/span><span class=\"nt\">ul<\/span><span class=\"p\">&gt;<\/span> <span class=\"p\">:<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>React Player<span class=\"p\">&lt;\/<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"si\">{<\/span><span class=\"nx\">player<\/span><span class=\"si\">}<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      src: <span class=\"si\">{<\/span><span class=\"nx\">src<\/span> <span class=\"o\">??<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">(not selected)<\/span><span class=\"dl\">'<\/span><span class=\"si\">}<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      dir: <span class=\"si\">{<\/span><span class=\"nx\">dir<\/span> <span class=\"o\">??<\/span> <span class=\"dl\">''<\/span><span class=\"si\">}<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">br<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"si\">{<\/span><span class=\"nx\">entry_list<\/span><span class=\"si\">}<\/span>\r\n    <span class=\"p\">&lt;\/&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">App<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\u7d30\u304b\u3044\u3068\u3053\u308d\u306f\u9664\u3044\u3066\u3001\u6ce8\u76ee\u3057\u3066\u307b\u3057\u3044\u70b9\u306fRust\u3068\u306e\u3084\u308a\u53d6\u308a\u306b\u95a2\u4fc2\u3059\u308b\u90e8\u5206\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kd\">type<\/span> <span class=\"nx\">Entry<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">dir<\/span><span class=\"dl\">'<\/span> <span class=\"o\">|<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">file<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nl\">name<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nl\">path<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">Entries<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Array<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">Entry<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>Entry\u578b\u306e\u914d\u5217\u578bEntries\u306fRust\u306eVec\u3092\u53d7\u3051\u53d6\u308b\u305f\u3081\u306b\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002Rust\u5074\u306eenum\u305d\u308c\u305e\u308c\u306b\u3064\u3044\u3066\u3044\u308b\u578b\u540d(File, Dir)\u306f\u3001tag = &#8220;type&#8221;\u306e\u6307\u5b9a\u306b\u3088\u3063\u3066JSON\u306b\u304a\u3044\u3066\u306f\u30ea\u30c6\u30e9\u30eb\u578b\u306e\u30e6\u30cb\u30aa\u30f3\u578b\u3068\u306a\u3063\u3066\u3044\u308btype\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u5224\u5225\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>  <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">entries<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">invoke<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">Entries<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">get_entries<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"nx\">dir<\/span> <span class=\"p\">})<\/span>\r\n        <span class=\"p\">.<\/span><span class=\"k\">catch<\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">);<\/span>\r\n          <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">});<\/span>\r\n\r\n      <span class=\"nf\">setEntries<\/span><span class=\"p\">(<\/span><span class=\"nx\">entries<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">})();<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">dir<\/span><span class=\"p\">]);<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u3053\u304c\u5b9f\u969b\u306binvoke\u304c\u547c\u3070\u308c\u3066\u3044\u308b\u7b87\u6240\u3067\u3059\u3002\u3053\u306euseEffect\u95a2\u6570\u306fdir\u306b\u5909\u66f4\u304c\u3042\u3063\u305f\u3068\u304d(setDir\u304c\u547c\u3070\u308c\u305f\u3068\u304d)\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u305d\u308c\u306f\u4e00\u756a\u6700\u521d\u306bhomeDir()\u3092\u547c\u3076\u3068\u304d\u3068\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b\u9650\u5b9a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u305f\u3081\u3001\u5b9f\u884c\u76f4\u5f8c\u306b\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30a8\u30f3\u30c8\u30ea\u304c\u3001\u305d\u3057\u3066\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b\u305d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e2d\u306b\u3042\u308b\u30a8\u30f3\u30c8\u30ea\u304c\u30ea\u30b9\u30c8\u306b\u518d\u63cf\u753b\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306b\u3001\u30a8\u30f3\u30c8\u30ea\u304c\u8868\u793a\u3055\u308c\u308b\u90e8\u5206\u3067\u3042\u308bentry_list\u306b\u3064\u3044\u3066\u306f\u3001\u30ea\u30b9\u30c8entries\u306e\u4e2d\u8eab\u306b\u5bfe\u3057\u3066map\u3092\u304b\u3051\u3001File\u306eli\u8981\u7d20\u3068Dir\u306eli\u8981\u7d20\u306b\u5206\u3051\u3066\u63cf\u753b\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b\u306fsetDir\u304c\u3001File\u306eli\u8981\u7d20\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u3068\u304d\u306fsetSrc\u304c\u305d\u308c\u305e\u308c\u52d5\u304f\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"p\">{<\/span><span class=\"nx\">entries<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"kd\">type<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">dir<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"p\">&lt;<\/span><span class=\"nt\">li<\/span> <span class=\"na\">key<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"si\">}<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setDir<\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nt\">li<\/span><span class=\"p\">&gt;;<\/span>\r\n      <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"p\">&lt;<\/span><span class=\"nt\">li<\/span> <span class=\"na\">key<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"si\">}<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setSrc<\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span><span class=\"si\">{<\/span><span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nt\">li<\/span><span class=\"p\">&gt;;<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">})}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/279-0.gif\" alt=\"simple_TauriReactPlayer_demo2.gif\" \/><\/div>\n<p>\u3053\u3053\u307e\u3067\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u30ed\u30fc\u30ab\u30eb\u306e\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u3092\u518d\u751f\u3067\u304d\u308b\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u304c\u3067\u304d\u307e\u3057\u305f\uff01\uff01\uff01<\/p>\n<p>\u7b46\u8005\u300c\u5b8c\u6210\u3067\u3059\uff01\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c&#8230;\u4e00\u756a\u6700\u521d\u306b\u898b\u305f\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u3068\u9055\u3046\u3051\u3069\u3001\u3060\u3044\u3076\u8a50\u6b3a\u3067\u306f&#8230;\uff1f\u305d\u308c\u306b\u3053\u308c\u3001\u4e00\u5ea6\u9077\u79fb\u3057\u3066\u3057\u307e\u3063\u305f\u3089\u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u623b\u308c\u306a\u304f\u306a\u3044\uff1f\uff1f\u300d<\/p>\n<p>\u7b46\u8005\u300cQNZA OENG SVTHEVAT VG BHG FB DHVPXYL!&#8230;14\u300d<\/p>\n<p>\u30ea\u30ca\u300c&#8230;??\u306a\u3093\u3066??\u300d<\/p>\n<p>\u7b46\u8005\u300c\u53d6\u308a\u4e71\u3057\u307e\u3057\u305f\u3059\u307f\u307e\u305b\u3093\u3002\u3002\u3053\u3053\u304b\u3089\u306fUI\u306e\u7279\u306b\u898b\u305f\u76ee\u3068\u683c\u95d8\u3057\u3066\u3044\u304f\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\u6700\u521d\u306e\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u306e\u3082\u306e\u306f\u30de\u30c6\u30ea\u30a2\u30eb\u30c7\u30b6\u30a4\u30f3\u306b\u3059\u308b\u305f\u3081\u306bmui\u3068\u3044\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3057\u307e\u3057\u305f\u3002mui\u307e\u3067\u53d6\u308a\u7d44\u307f\u59cb\u3081\u308b\u3068\u30cf\u30f3\u30ba\u30aa\u30f3\u304c\u304b\u306a\u308a\u9577\u304f\u306a\u3063\u3066\u3057\u307e\u3046\u306e\u3067\u3001\u4eca\u56de\u306f\u53d6\u308a\u4e0a\u3052\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u307e\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u81ea\u4f53\u306b\u6a5f\u80fd\u9762\u3067\u3044\u304f\u3064\u304b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u300d<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4e0a\u306e\u968e\u5c64\u306b\u623b\u308c\u306a\u3044: \u30ea\u30ca\u3061\u3083\u3093\u306b\u6307\u6458\u3055\u308c\u305f\u901a\u308a\u3001\u30cf\u30f3\u30ba\u30aa\u30f3\u307e\u3067\u306e\u5185\u5bb9\u3067\u306f\u4e0a\u306e\u968e\u5c64\u306b\u623b\u308c\u307e\u305b\u3093\u3002\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u7248\u3067\u306f\u4fee\u6b63\u6e08\u307f\u3067\u3001\u4e0a\u306e\u968e\u5c64\u306b\u623b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5927\u304d\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u3080\u3068\u843d\u3061\u308b: \u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u7248\u3067\u3082\u89e3\u6c7a\u3057\u3066\u3044\u306a\u3044\u8ab2\u984c\u3068\u3057\u3066\u3001\u5de8\u5927\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u3068\u843d\u3061\u3066\u3057\u307e\u3044\u307e\u3059\u3002\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u76f4\u63a5ReactPlayer\u306b\u6e21\u3059\u306e\u3067\u306f\u306a\u304f\u3001Rust\u5074\u3067\u30e1\u30e2\u30ea\u7ba1\u7406\u3092\u884c\u3063\u3066\u30d0\u30c3\u30d5\u30a1\u3092\u78ba\u4fdd\u3059\u308b\u306a\u3069\u306e\u5bfe\u7b56\u304c\u8003\u3048\u3089\u308c\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">D&amp;D\u3067\u958b\u3051\u306a\u3044: \u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e0a\u306bD&amp;D\u3059\u308b\u3053\u3068\u3067\u958b\u304d\u305f\u3044\u3082\u306e\u3067\u3059\u304c\u3001\u305d\u306e\u6a5f\u80fd\u306f\u307e\u3060\u3042\u308a\u307e\u305b\u3093\u3002\u89e3\u6c7a\u7b56\u306f\u306a\u3044\u3068\u3044\u3046\u308f\u3051\u3067\u306f\u306a\u3044\u3088\u3046\u3067\u3059\u3002Getting a real path of file type input \u00b7 Issue #87 \u00b7 tauri-apps\/wry<\/ul>\n<p>\u7b46\u8005\u300c\u3053\u306e\u3088\u3046\u306b\u3001\u672c\u30a2\u30d7\u30ea\u306f\u307e\u3060\u307e\u3060\u4f38\u3073\u3057\u308d\u304c\u3042\u308b\u30a2\u30d7\u30ea\u3067\u3059\u3002\u6b8b\u3055\u308c\u305f\u554f\u984c\u306f\u8aad\u8005\u306e\u7686\u69d8\u3078\u306e\u8ab2\u984c\u3068\u3044\u3046\u3053\u3068\u306b\u3057\u307e\u3059\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c(\u7121\u7406\u3084\u308a\u7d42\u308f\u3089\u305b\u305f\u308f\u306d)\u300d<\/p>\n<h1>\u307e\u3068\u3081\u30fb\u6240\u611f<\/h1>\n<p>\u6700\u5f8c\u304c\u5c11\u3057\u99c6\u3051\u8db3\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u304c\u3001\u52d5\u753b\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4f5c\u6210\u3059\u308b\u672c\u30cf\u30f3\u30ba\u30aa\u30f3\u3092\u901a\u3057\u3066\u3001React+Rust+Tauri\u3067\u305d\u308c\u305e\u308c\u306e\u5f97\u610f\u5206\u91ce\u3092\u5206\u62c5\u3057\u3066\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6bd4\u8f03\u7684\u7c21\u5358\u306b\u4f5c\u308c\u308b\u3053\u3068\u304c\u793a\u305b\u305f\u304b\u306a\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>Tauri\u306f\u74b0\u5883\u69cb\u7bc9\u306e\u65b9\u304c\u5927\u5909\u3060\u3063\u305f\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u305d\u306e\u70b9\u306b\u3064\u3044\u3066\u306f\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u304c\u5341\u5206\u767a\u9054\u3057\u3066\u3044\u308b.NET\u7b49\u306b\u5f8c\u308c\u3092\u53d6\u308b\u90e8\u5206\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u3084\u306f\u308aReact\u3084Vue\u306a\u3069Web\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u6280\u8853\u3092\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5236\u4f5c\u306b\u6d3b\u304b\u305b\u3001\u305d\u3057\u3066\u5805\u7262\u306a\u8a00\u8a9e\u3067\u3042\u308bRust\u306b\u3088\u3063\u3066\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u57fa\u76e4\u3092\u69cb\u7bc9\u3067\u304d\u308b\u3068\u3044\u3046\u306e\u306f\u3001Tauri\u306e\u552f\u4e00\u7121\u4e8c\u306a\u4fa1\u5024\u3067\u3057\u3087\u3046\u3002<\/p>\n<p>\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u89e6\u308c\u3089\u308c\u306a\u304b\u3063\u305f\u3053\u3068\u3082\u305f\u304f\u3055\u3093\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CLI\u3068\u3057\u3066\u5f15\u6570\u3092\u53d7\u3051\u53d6\u308b\u65b9\u6cd5<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30bf\u30b9\u30af\u30c8\u30ec\u30a4<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">GitHub Actions\u306b\u3088\u308b\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u30c7\u30d7\u30ed\u30a4<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">etc..<\/ul>\n<p>Tauri\u306e\u771f\u4fa1\u3092\u77e5\u308b\u3079\u304f\u3001\u4eca\u5f8c\u3082Tauri\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u66f8\u3044\u3066\u307f\u305f\u3044\u6240\u5b58\u3067\u3059\u3002<\/p>\n<p>\u7b46\u8005\u300c\u3068\u3044\u3046\u308f\u3051\u3067\u3001Tauri\u3092\u4f7f\u3048\u3070\u8868\u306f\u30a4\u30b1\u30a4\u30b1\u3001\u88cf\u306f\u5805\u7262\u306a\u7d20\u6674\u3089\u3057\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u4f5c\u308c\u308b\u306e\u3067\u3059\uff01\u305c\u3072\u4eca\u5f8c\u306e\u30d0\u30a4\u30c8\u3067\u4f7f\u308f\u305b\u3066\u3044\u305f\u3060\u304d\u305f\u3044\uff01\u300d<\/p>\n<p>\u30ea\u30ca\u300c\u3044\u3084\u3001\u6b21\u306e\u4ed5\u4e8b\u3067\u306fVisual Basic\u3067\u30a2\u30d7\u30ea\u3092\u66f8\u3044\u3066\u3082\u3089\u3044\u307e\u3059\u3002\u300d<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/297-0.png\" alt=\"image.png\" \/><\/div>\n<p>(\u51fa\u5178: https:\/\/twitter.com\/vitaone_\/status\/924600140416958464?s=20&amp;t=FJYcZk6qzMSkJBOTD2pdjw )<\/p>\n<p>\u3068\u3044\u3046\u308f\u3051\u3067\u50d5Rust\u3067\u304d\u307e\u3059\u8ab0\u304b\u96c7\u3063\u3066\u304f\u3060\u3055\u3044\u304a\u9858\u3044\u3057\u307e\u3059\uff01\uff01\uff01\uff01\uff01\uff01(\u5606\u304d)<\/p>\n<p>fin.<\/p>\n<p>\u203b\u672c\u8a18\u4e8b\u306b\u767b\u5834\u3059\u308b\u4eba\u7269\u30fb\u7d44\u7e54\u30fb\u7269\u8a9e\u306f\u3059\u3079\u3066\u67b6\u7a7a\u306e\u3082\u306e\u3067\u3059\u304c\u3001\u7b46\u8005\u304c\u57f7\u7b46\u6642\u70b9\u3067\u5c31\u6d3b\u4e2d\u3067\u3042\u308b\u3053\u3068\u3060\u3051\u306f\u672c\u5f53\u3067\u3059\u3002 (\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u30b5\u30a4\u30c8)<\/p>\n<p>2022\/11\/30 \u8ffd\u8a18<\/p>\n<p>\u304a\u9670\u69d8\u3067\u3001\u3042\u308b\u4f01\u696d\u69d8\u304b\u3089\u7121\u4e8b\u5185\u5b9a\u3092\u3044\u305f\u3060\u304d\u307e\u3057\u305f\uff01\u5c31\u6d3b\u30a8\u30f3\u30c8\u30ea\u3068\u3057\u3066\u5225\u306b\u307e\u3068\u3081\u308b\u4e88\u5b9a\u3067\u3059\u3002<\/p>\n<p>2023\/03\/23 \u8ffd\u8a18<\/p>\n<p>\u7d9a\u7de8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304cTauri\u306e\u4fbf\u5229\u6a5f\u80fd\u3092\u307e\u3068\u3081\u305f\u8a18\u4e8b\u3092\u51fa\u3057\u307e\u3057\u305f\uff01\u3088\u304b\u3063\u305f\u3089\u8aad\u3093\u3067\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>&nbsp;<\/p>\n<h1>\u5f15\u7528\u30fb\u53c2\u8003<\/h1>\n<p>\u672c\u6587\u4e2d\u306b\u306f\u8f09\u305b\u3066\u3044\u306a\u3044\u3082\u306e\u306e\u53c2\u8003\u306b\u3055\u305b\u3066\u3044\u305f\u3060\u3044\u305f\u30ea\u30f3\u30af\u96c6\u3067\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Windows\u306bTauri\u3092\u5c0e\u5165\u3057\u3066\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3010\u3086\u3063\u304f\u308a\u89e3\u8aac\u3011Rust \u3067\u30a2\u30d7\u30ea\u958b\u767a\uff01Tauri 1.0 \u30ea\u30ea\u30fc\u30b9\uff01<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Tauri \u306e\u6982\u8981\uff5cRust GUI \u306e\u6c7a\u5b9a\u7248\uff01 Tauri \u3092\u4f7f\u3063\u3066\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306a\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3092\u4f5c\u308d\u3046<\/ul>\n<section>Java\u306e\u6642\u4ee3\u306a\u3069\u3067\u306f\u3053\u306e\u3088\u3046\u306a\u7279\u5fb4\u3092WORA(Write Onece, Run Anywhere)\u3068\u547c\u3093\u3067\u3044\u305f\u305d\u3046\u3067\u3059\u306d\u3002 \u21a9<\/p>\n<p>\u305f\u3060\u3057\u4eca\u56de\u306e\u30cf\u30f3\u30ba\u30aa\u30f3\u306fWindows\u3092\u60f3\u5b9a\u3057\u3066\u3044\u308b\u305f\u3081MSVC(Microsoft Visual C++)\u3092\u4f9d\u5b58\u3068\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u4ed6\u306e\u74b0\u5883\u3067\u3082\u52d5\u7684\u30e9\u30a4\u30d6\u30e9\u30ea\u7b49\u3092\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u3067\u5c0e\u5165\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u304c\u3057\u3070\u3057\u3070\u3067\u3059\u3002\u8a73\u3057\u304f\u306f\u5f8c\u8ff0\u3059\u308b\u306e\u3067\u5927\u4e08\u592b\u3067\u3059\u3002 \u21a9<\/p>\n<p>\u30d5\u30ed\u30f3\u30c8\u3067\u5b8c\u7d50\u3059\u308b\u5834\u5408\u306b\u9650\u308a\u307e\u3059\u3002\u3057\u304b\u3057Tauri\u516c\u5f0f\u306f\u69d8\u3005\u306aAPI\u3092\u7528\u610f\u3057\u3066\u304a\u308a\u30d5\u30ed\u30f3\u30c8+\u03b1\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u306f\u5dee\u5225\u5316\u3067\u304d\u307e\u3059\uff01 \u21a9<\/p>\n<p>\u52d8\u9055\u3044\u3057\u3066\u3044\u308b\u90e8\u5206\u3082\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306e\u3067\u30b3\u30e1\u30f3\u30c8\u3067\u306e\u3054\u6307\u6458\u304a\u5f85\u3061\u3057\u3066\u304a\u308a\u307e\u3059\u3002\u3053\u306e\u8fba\u306e\u8a71\u306f\u3001Haskell\u30e9\u30a4\u30af\u306a\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9DSL\u306eElm\u8a00\u8a9e\u304c\u6301\u3064\u3001The Elm Architecture\u3092\u5b66\u3076\u3068\u3088\u308a\u5206\u304b\u308b\u304b\u3082 \u21a9<\/p>\n<p>\u3082\u3061\u308d\u3093Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3082\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u901a\u3057\u3066\u30ed\u30fc\u30ab\u30eb\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3048\u307e\u3059\u304c\u3001\u305d\u3046\u3044\u3063\u305f\u624b\u9593\u3092\u7701\u3051\u308b\u3068\u3044\u3046\u610f\u5473\u3067\u3059\u3002\u5ff5\u306e\u305f\u3081\u3002 \u21a9<\/p>\n<p>\u6d41\u3057\u305f\u304b\u3063\u305f\u306e\u3067\u3059\u304c\u6d41\u77f3\u306b\u8457\u4f5c\u6a29\u7684\u306b\u30a2\u30a6\u30c8\u306a\u306e\u3067\u3084\u3081\u307e\u3057\u305f&#8230;\u3068\u3044\u3046\u308f\u3051\u3067\u3053\u306e\u6ce8\u91c8\u3092\u308f\u3056\u308f\u3056\u898b\u305f\u4eba\u306f \u307e\u3061\u30ab\u30c9\u307e\u305e\u304f \u30fb \u307e\u3061\u30ab\u30c9\u307e\u305e\u304f 2\u4e01\u76ee \u3092\u89b3\u3066\u304f\u3060\u3055\u3044!!!\u304a\u9858\u3044\u3057\u307e\u3059!!! \u4eca\u5b63\u306e\u30a2\u30cb\u30e1\u306e \u30ea\u30b3\u30ea\u30b9\u30fb\u30ea\u30b3\u30a4\u30eb \u3082\u9762\u767d\u3044\u306e\u3067\u305c\u3072\uff01 \u21a9<\/p>\n<p>bash\u304c\u4f7f\u3048\u308b\u7b49\u306e\u5229\u70b9\u304c\u3042\u308b\u305f\u3081\u3001\u306a\u308b\u3079\u304f\u306a\u3089WSL\u3092\u4f7f\u3044\u305f\u304b\u3063\u305f\u306e\u3067\u3059\u304c\u3001ReactPlayer\u3092VcXsrv\u7d4c\u7531\u3067\u8868\u793a\u3055\u305b\u3088\u3046\u3068\u3057\u305f\u3089\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u305f\u3081\u65ad\u5ff5\u3057\u307e\u3057\u305f\u3002 \u21a9<\/p>\n<p>Windows\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u306fMSVC\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u4e0d\u5b8c\u5168\u306b\u306a\u308b\u307f\u305f\u3044\u3067\u3059\u306d\u3002\u4eca\u5f8c\u3053\u3046\u3044\u3063\u305f\u691c\u8a3c\u306e\u305f\u3081\u306b\u5225\u306a\u4eee\u60f3\u74b0\u5883\u7528\u30de\u30b7\u30f3\u3092\u7528\u610f\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3057\u305f\u3002 \u21a9<\/p>\n<p>\u57f7\u7b46\u6642\u70b9\u3067\u306fWindows11\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u306b\u306fWebView2\u306f\u5165\u3063\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3061\u306a\u307f\u306b\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u3068\u30bb\u30c3\u30c8\u3067\u5b8c\u6210\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u914d\u5e03\u3059\u308b\u3068\u3001WebView 2\u306f\u81ea\u52d5\u7684\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u308b\u6a21\u69d8\u3067\u3059\u3002 \u21a9<\/p>\n<p>GitHub\u306e\u5b66\u751f\u30a2\u30ab\u30a6\u30f3\u30c8\u306a\u3089\u3070\u7121\u6599\u306a\u306e\u3067\u3001\u3082\u3057\u3042\u306a\u305f\u304c\u5b66\u751f\u306a\u3089\u662f\u975e\u4f7f\u3044\u307e\u3057\u3087\u3046\uff01 \u21a9<\/p>\n<p>\u30c7\u30d0\u30c3\u30b0\u74b0\u5883\u7528\u306eURL\u3067\u3042\u308a\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u9055\u3046\u53ef\u80fd\u6027\u304c\u9ad8\u3044\u3067\u3059\u3002\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3073\u306bURL\u3092\u5909\u3048\u3066\u3044\u308b\u3068\u3044\u3046\u3088\u3046\u306a\u5642\u3082\u3069\u3053\u304b\u3067\u898b\u307e\u3057\u305f\u3002\u305f\u3060\u3057\u3063\u304b\u308a\u3068\u306f\u8abf\u3079\u3066\u3044\u307e\u305b\u3093\u3002 \u21a9<\/p>\n<p>\u8a18\u4e8b\u57f7\u7b46\u5f8c\u306b\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u5b58\u5728\u3059\u308b\u3088\u3046\u3067\u3059\u3002( fs | Tauri Apps ) \u304c\u3001\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u306f\u305d\u306e\u307e\u307eRust\u3092\u4f7f\u3046\u3053\u3068\u306b\u3057\u307e\u3059\u3002 \u21a9<\/p>\n<p>\u6b63\u78ba\u306b\u306f\u30a4\u30c6\u30ec\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3066\u3044\u307e\u3059\u3002 \u21a9<\/p>\n<p>ROT13\u3060\u3088\uff01\u89e3\u8aad\u3057\u3066\u30b0\u30b0\u3063\u3066\u307f\u3088\u3046 \u21a9<\/p>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u8a18\u4e8b\u306fRust\u5927\u597d\u304d\u306a\u5c31\u6d3b\u4e2d\u306e\u5927\u5b66\u9662\u751f\u304c\u696d\u52d9\u3067\u3082Rust\u3092\u66f8\u304f\u305f\u3081\u306bRust\u3092\u5e03\u6559\u3059\u3079\u304f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30afTa [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-45415","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>- Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:description\" content=\"\u672c\u8a18\u4e8b\u306fRust\u5927\u597d\u304d\u306a\u5c31\u6d3b\u4e2d\u306e\u5927\u5b66\u9662\u751f\u304c\u696d\u52d9\u3067\u3082Rust\u3092\u66f8\u304f\u305f\u3081\u306bRust\u3092\u5e03\u6559\u3059\u3079\u304f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30afTa [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-16T23:08:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T16:07:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/3-0.gif\" \/>\n<meta name=\"author\" content=\"\u79d1, \u9896\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u9896\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/\",\"name\":\"- Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-06-16T23:08:15+00:00\",\"dateModified\":\"2024-04-29T16:07:48+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\",\"name\":\"\u79d1, \u9896\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u9896\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"- Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/","og_locale":"zh_CN","og_type":"article","og_description":"\u672c\u8a18\u4e8b\u306fRust\u5927\u597d\u304d\u306a\u5c31\u6d3b\u4e2d\u306e\u5927\u5b66\u9662\u751f\u304c\u696d\u52d9\u3067\u3082Rust\u3092\u66f8\u304f\u305f\u3081\u306bRust\u3092\u5e03\u6559\u3059\u3079\u304f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30afTa [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-06-16T23:08:15+00:00","article_modified_time":"2024-04-29T16:07:48+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d5f0637434c4406cf6c43\/3-0.gif"}],"author":"\u79d1, \u9896","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u9896","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"13 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/","name":"- Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-06-16T23:08:15+00:00","dateModified":"2024-04-29T16:07:48+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/"]}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e","name":"\u79d1, \u9896","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","caption":"\u79d1, \u9896"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/45415-2\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/45415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=45415"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/45415\/revisions"}],"predecessor-version":[{"id":88475,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/45415\/revisions\/88475"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=45415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=45415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=45415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}