{}const=>[]async()letfn</>var
開発Web

Web向けRust:WASMの成長とブラウザアプリケーションの未来

この記事では、初心者向けのWASMの簡単な説明、実用的なコード例、JavaScriptとの速度比較、最初のプロジェクトの作成手順を説明します。Figma、Google Earth、1Passwordがこのテクノロジーを選択した理由と、今すぐ使用を開始する方法を分析します。

К

Kodik

著者

3分で読める

プログラミングの旅を始めたばかりの方は、WebアプリケーションがJavaScriptで動作することを聞いたことがあるはずです。これは事実ですが、すべてではありません。今日は、ゲームのルールを変えるテクノロジーについて説明します。 WebAssembly (WASM) および言語 Rustそれが彼女の主なツールとなります。

ブラウザで動作するコードを書くことができると想像してみてください お使いのコンピューター上の通常のプログラムとほぼ同じ速度で魔法のように聞こえますか?これは現実であり、今すぐ利用できます。

WebAssemblyとは何ですか?

WebAssemblyはJavaScriptの代替ではなく、強力な追加機能です。簡単に言うと:

JavaScript — あらゆることを少しずつできる万能な労働者のようなものです
WebAssembly — 特定のタスクをより速く実行するスペシャリストです

なぜこれが重要なのでしょうか?

通常のJavaScript:

  • 速度:🚗

  • 適合:UI、アプリケーションロジック

  • 制限:遅い計算

WebAssembly + Rust:

  • 速度:🚀

  • 適合:データ処理、ゲーム、グラフィックス

  • 機能:ほぼネイティブプログラムと同じ

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

なぜRustなのか?

Rustは、以下のために作成されたプログラミング言語です。 安全生産性。ウェブ開発における主な利点は次のとおりです。

1.妥協のない速度

Rustのコードは、ほぼネイティブの速度で動作するWebAssemblyにコンパイルされます。

2. デフォルトのセキュリティ

Rustは、メモリに関する重大なエラーを犯すことを許しません。コンパイラは、プログラムを実行する前にそれらをキャッチします。

3.最新のツール

Rust には、WASM を操作するための優れたエコシステムがあります。

  • wasm-pack — プロジェクトのアセンブリ用

  • wasm-bindgen — JavaScriptとの通信用

  • web-sysjs-sysは、Web APIを操作するためのものです

実例:最初のアプリケーション

Rust + WASMのパワーを示すシンプルなアプリケーションを作成してみましょう。

ステップ1:ツールのインストール

# Rustのインストール(まだインストールされていない場合)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# WebAssemblyサポートの追加
rustup target add wasm32-unknown-unknown

# Wasm-packのインストール
cargo install wasm-pack

ステップ2:プロジェクトの作成

cargo new --lib rust-wasm-demo
cd rust-wasm-demo

ステップ3:Cargo.tomlを設定する

[package]
name = "rust-wasm-demo"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"

[dependencies.web-sys]
version = "0.3"
features = ["console"]

ステップ4:Rustでコードを書く(src/lib.rs)

use wasm_bindgen::prelude::*;

// フィボナッチ数を計算する関数
#[wasm_bindgen]
pub fn fibonacci(n: u32) -> u32 {
    match n {
        0 => 0,
        1 => 1,
        _ => fibonacci(n - 1) + fibonacci(n - 2),
    }
}

// 配列処理関数
#[wasm_bindgen]
pub fn sum_array(numbers: &[i32]) -> i32 {
    numbers.iter().sum()
}

// Web API を使用した挨拶
#[wasm_bindgen]
pub fn greet(name: &str) -> String {
    web_sys::console::log_1(&"Function called from Rust!".into());
    format!("Hi, {}! This is a message from Rust 🦀", name)
}

ステップ5:組み立て

wasm-pack build --target web

ステップ6:ブラウザでの使用(index.html)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Rust + WASM Demo</title>
</head>
<body>
    <h1>Rust WebAssembly в действии</h1>
    
    <div>
        <button onclick="testFibonacci()">Вычислить Фибоначчи(10)</button>
        <button onclick="testArray()">Сумма массива</button>
        <button onclick="testGreet()">Приветствие</button>
    </div>
    
    <div id="result"></div>

    <script type="module">
        import init, { fibonacci, sum_array, greet } from './pkg/rust_wasm_demo.js';

        await init();

        window.testFibonacci = () => {
            const result = fibonacci(10);
            document.getElementById('result').innerHTML = 
                `Fibonacci(10) = ${result}`;
        };

        window.testArray = () => {
            const numbers = [1, 2, 3, 4, 5];
            const result = sum_array(numbers);
            document.getElementById('result').innerHTML = 
                `Sum [1,2,3,4,5] = ${result}`;
        };

        window.testGreet = () => {
            const result = greet("developer");
            document.getElementById('result').innerHTML = result;
        };
    </script>
</body>
</html>

実際の使用例

1. 画像処理

Figmaのようなアプリケーションは、グラフィックスを高速に処理するためにWASMを使用します。

#[wasm_bindgen]
pub fn apply_grayscale(pixels: &mut [u8]) {
    for chunk in pixels.chunks_mut(4) {
        let gray = (chunk[0] as f32 * 0.299 
                  + chunk[1] as f32 * 0.587 
                  + chunk[2] as f32 * 0.114) as u8;
        chunk[0] = gray;
        chunk[1] = gray;
        chunk[2] = gray;
    }
}

2. ブラウザゲーム

UnityやUnreal Engineなどのゲームエンジンは、ゲームを実行するためにWASMを使用します。

#[wasm_bindgen]
pub struct GameState {
    score: u32,
    player_x: f64,
    player_y: f64,
}

#[wasm_bindgen]
impl GameState {
    pub fn new() -> GameState {
        GameState {
            score: 0,
            player_x: 0.0,
            player_y: 0.0,
        }
    }

    pub fn update(&mut self, delta_time: f64) {
        // 物理の高速計算
        self.player_x += delta_time * 10.0;
        self.player_y += delta_time * 5.0;
    }
}

3. 暗号化と暗号化

ブラウザで直接安全にデータを操作:

use sha2::{Sha256, Digest};

#[wasm_bindgen]
pub fn hash_password(password: &str) -> String {
    let mut hasher = Sha256::new();
    hasher.update(password.as_bytes());
    format!("{:x}", hasher.finalize())
}

パフォーマンスの比較

実際の速度の違いを見てみましょう。

課題: 100万個の数の合計を計算する

JavaScript:

// JavaScript
console.time('JS');
let sum = 0;
for (let i = 0; i < 1000000; i++) {
    sum += i * 2;
}
console.timeEnd('JS');
// 結果:〜3〜5ミリ秒

Rust + WASM:

// Rust + WASM
#[wasm_bindgen]
pub fn calculate_sum(n: u32) -> u64 {
    (0..n).map(|i| i as u64 * 2).sum()
}
// 結果:〜1〜2ミリ秒

WASMは2〜3倍速いです!

そして、より複雑な計算では、その差は10〜20倍になる可能性があります。

Rustの最新フレームワーク

Yew — RustのReact

use yew::prelude::*;

#[function_component(App)]
fn app() -> Html {
    let counter = use_state(|| 0);
    
    let increment = {
        let counter = counter.clone();
        Callback::from(move |_| counter.set(*counter + 1))
    };

    html! {
        <div>
            <h1>{ "Counter in Rust!" }</h1>
            <p>{ format!("Value: {}", *counter) }</p>
            <button onclick={increment}>{ "Enlarge" }</button>
        </div>
    }
}

Leptos — モダンで高速

use leptos::*;

#[component]
fn Counter() -> impl IntoView {
    let (count, set_count) = create_signal(0);

    view! {
        <div>
            <button on:click=move |_| set_count.update(|n| *n += 1)>
                "Clicks: " {count}
            </button>
        </div>
    }
}

結論

RustとWebAssemblyは単なる誇大広告ではなく、Web開発の真の未来です。これらのツールを使用すると、 高速, 安全強力な ブラウザで直接アプリケーションを実行します。

始めるのに専門家である必要はありません。重要なのは、最初のステップを踏み出すことです。ツールをインストールし、最初の関数を書いて、それがどのように機能するかを確認します。

これらすべて、そしてさらに多くのことをKodikプラットフォームで学ぶことができます!

当社では以下のものをご用意しています。

📖 詳細なコース 基礎から高度なトピックまで

💻 実践課題 資料の固定用

🎯 実際のプロジェクト ポートフォリオ用

🏆 進捗システム 経験と実績

各テーマを詳しく解説し、一緒にコードを書いて、実際に練習します。

💬 サポートが必要ですか?

私たちの アクティブ Telegramチャンネル - 既に 2000人以上の志を同じくする人々 お互いに助け合い、経験を共有し、開発の世界の新製品について話し合います!

👉 今すぐ、現代のWeb開発の世界への旅を始めましょう!

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要