お絵描きアプリをグレードアップさせよう!Tauri 2.0でアンドゥとリドゥを実装
フロントエンジニアのための「Tauri 2.0」ではじめるRustプログラミング 第5回
ダウンロード 第5回 サンプルファイル (427.2 KB)
本連載では、ベジェ曲線でお絵描きするデスクトップアプリを開発しながら、「Rust」と「Tauri 2.0」について学んでいきます。連載第5回は、お絵描きアプリをアップグレードさせます。マウスホイールでアンドゥやリドゥできるようにして、サンプルのトイプードルを表示できるように解説します。
はじめに
前回は本連載で作るお絵描きアプリのプロジェクトを新規作成し、一筆書きでお絵描きをできるようにしました。
今回は前回に引き続き追記して行って、お絵描きアプリをグレードアップさせます。<canvas>タグは、幅の高さをリサイズや、マウスホイールでアンドゥやリドゥしたり、サンプル画像を表示したりします。今回もまだバックエンドのRustは書き換えません。

描画矩形をリサイズする
前回のコードに続けて、次のサンプルコードを追記します。
次のコマンドを実行しプロジェクトをデバッグビルドしたら、お絵描きする<canvas>タグの描画領域が画面幅いっぱいになります。<canvas>タグはウィンドウがリサイズされるたびに同時にリサイズします。
最初<canvas>タグの高さをウィンドウの内高さと同じ高さにセットして、ウィンドウの内いっぱいに<canvas>を広げようとしたところ、ウィンドウにスクロールバーが出てしまいました。そこで仕方なく<canvas>の高さを少し減算して、代わりにそこに説明文を追加しました。
$ cargo-tauri dev
(前略)
// 全てのDOMが読み込み完了したら
window.addEventListener("DOMContentLoaded", () => {
(中略)
window.addEventListener("resize", resize, false);
resize();
});
// キャンバスリサイズ
function resize() {
_canvas.width = window.innerWidth;
_canvas.height = window.innerHeight-40;
line();
}
(後略)
サンプルコードの解説
ウィンドウのリサイズイベントが起こったら、「resize」関数の呼び出しをフックします。その後、htmlファイルのDOMが読み込み完了したらresize関数を呼び出します。
resize関数で<canvas>タグの幅をウィンドウの内幅と同じにセットして、<canvas>タグの高さをウィンドウ内高さから40減算したサイズにセットします。
コラム:ESモジュールはWebサーバ上でしか動作しない!

従来のHTMLではJavaScriptはローカルのWebブラウザでもほとんどの機能が動作していました。しかし最新のESモジュールのJavaScriptはWebサーバ上でしか動作しません。ただしTauri 2.0上ではHTML5+CSS+JavaScriptをWebサーバ上で動かしているのと同じなので動作します。
またTauri 2.0のデフォルトのテンプレートではJavaScriptはESモジュールになっていますが、従来のJavaScriptももちろん動作します。
コラム:Tauri 2.0向けのWebページだけをWebブラウザでテストするには?
Tauri 2.0向けのWebページはhtmlファイルとcssファイルはそのままでも動作します。問題はjsファイルです。
ESモジュール(type="module")を使わなければ、JavaScriptの「window.__TAURI__」がつくコードをコメントアウトして、処理に合わせて代入する値などを変えることで、Webサーバ上じゃなくてもローカルのWebブラウザで動作テストができます。
この記事は参考になりましたか?
- フロントエンジニアのためのTauri 2.0ではじめるRustプログラミング連載記事一覧
-
- Rustを使って「名前を付けて保存」メニューとファイルを保存する機能を実装しよう!
- デスクトップアプリのメニュー機能を作ろう!「Rust」を使ってバックエンドを動かす方法
- お絵描きアプリをグレードアップさせよう!Tauri 2.0でアンドゥとリドゥを実装
- この記事の著者
-
大西 武(オオニシ タケシ)
1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営する開発者のための情報メディアです。日々の開発に取り組むエンジニアやテクノロジーを学びたい方に向けて、プログラミングやAI活用、開発ツール、エンジニアの学びとキャリアに関する記事をお届けしています。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
