「TAURI」で「簡易RSSリーダー」を開発してみよう

はじめに
今回は、図1のように「RSSフィード」のビューアである「簡易RSSリーダー」を作ります。RSSフィードは「XML」形式のファイルフォーマットで、要するにHTMLのように「<>」のタグを入れ子で囲って列記するテキスト形式のマークアップ言語の一種です。
サンプルでは「Think IT」の「RSSフィード」をWebから取得して一覧表示します。一覧には新着記事のリンクが列挙され、そのリンクがクリックされると新規ウィンドウを作ります。この際、新規ウィンドウはフロントエンド(Webページ)の機能ではなく、バックエンド(Rust)の機能で作成します。
TAURIプロジェクトの作成
それでは、いつものようにTAURIプロジェクトを「$ cargo create-tauri-app rss」のように新規作成し、カレントディレクトリを「rss」フォルダに変更します。
今回はRSSフィードを扱うために「rss」クレートと、Webに「リクエスト(データを取得するように要求)」するために「reqwest」クレートを使うので、「Cargo.toml」ファイルに追記します。さらに「reqwest」クレートでは「同期」してリクエストするための“blocking”をフィーチャーします。
・「src-tauri」→「Cargo.toml」ファイルのサンプルコード[package]
name = "rss"
version = "0.0.0"
description = "A Tauri App"
authors = ["you"]
license = ""
repository = ""
edition = "2021"
[build-dependencies]
tauri-build = { version = "1.2", features = [] }
[dependencies]
tauri = { version = "1.2", features = ["shell-open"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
rss = "2.0.7" # RSSを扱う
reqwest = { version = "0.12.2", features = ["blocking"] } # Webにリクエストする
[features]
custom-protocol = ["tauri/custom-protocol"]
RSSフィードを一覧表示するための
Webページをデザインする
まず、RSSフィードの新着記事を一覧表示するWebページをデザインします。「本文(body)」には「ul」タグと「li」タグしか使わない、とてもシンプルなWebデザインです。
なお、今はまだRSSフィードを読み込んでいないので、「$ cargo-tauri dev」コマンドを実行しても図2のように何もないWebページが表示されるだけです。
HTMLのコーディング
HTMLファイルでは、スタイルシートとJavaScriptを読み込んで「ul」タグにします。ほとんどテンプレートからコードを削っただけです。
・「src」→「index.html」ファイルのサンプルコード<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="styles.css" />
<title>Tauri App</title>
<script type="module" src="/main.js" defer></script>
</head>
<body>
<ul>
</ul>
</body>
</html>
【サンプルコードの解説】
スタイルシートとして「styles.css」を読み込みます。
JavaScriptとして「main.js」ファイルを読み込みます。
「ul」タグを追記します。
JavaScriptのコーディング
JavaScriptファイルでは、HTMLファイルのDOMが全て読み込まれたら「rssFeed」関数を呼び出してRSSフィードを読み込み、RSSフィードの新着記事にリンクしたら新規ウィンドウを開きます。一応それらのメッセージをバックエンドに送っていますが、まだバックエンドでそれらのTAURIコマンド関数を実装していないので何も実行されません。
・「src」→「main.js」ファイルのサンプルコードconst { invoke } = window.__TAURI__.tauri;
// ulタグ
let ul;
// DOMがすべて読み込まれた場合
window.addEventListener("DOMContentLoaded", () => {
ul = document.querySelector("ul");
rssFeed("https://thinkit.co.jp/rss.xml");
});
// RSSフィードをバックエンドから読み込む関数
async function rssFeed(url) {
// RSSフィードを読み込み、array配列に代入
let array = await invoke("rss_feed",{url: url});
// ulタグにliリストを追加
for (let i = 0; i < array.length; i++ ) {
ul.innerHTML += "<li><a href=# id=link"+i+">"+array[i][0]+"</a></li>";
}
// 新着記事のリンクをクリックした場合
for (let i = 0; i < array.length; i++ ) {
let a = document.getElementById("link"+i);
a.addEventListener('click', function() {
invoke('new_window',{url: array[i][1]});
}, false);
}
}
【サンプルコードの解説】
HTMLファイルのDOMが全て読み込まれたら「ul」タグを「ul」変数に代入します。
Webサイト「Think IT」のRSSフィードのURLを引数にして「rssFeed」関数を呼び出します。
「rssFeed」関数でバックエンドに「url」引数でTAURIコマンド“rss_feed”関数を呼び出し、新着記事を「array」配列に代入します。
ulタグ内に新着記事を書いた「li」タグをHTML文字列として「innerHTML」プロパティに代入します。
「アンカー」の「id」属性でセレクタを取得し、“click”されたときのイベントリスナーを登録してTAURIコマンド“new_window”関数を呼び出します。
スタイルシートのコーディング
今回のWebページはリストを表示してそこにリンクを書くだけなので、スタイルシートはほとんどデフォルトのままです。これまでで一番装飾することが少ないですね。
・「src」→「styles.css」ファイルのサンプルコードa {
color: #00f;
}
【サンプルコードの解説】
既読のアンカー(aタグ)も未読も、常に真っ青にします。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「Ace」を使って「TAURI」で「テキストエディタ」アプリを作ろう
- 「TAURI」でデータベースを使ってみよう
- 「TAURI」で「ピアノ音楽」アプリを作ろう
- 「TAURI」にも必要な「Rust」の「クレート」を使う
- 「TAURI」で「画像ビューア」のサンプルアプリを作ろう
- 「TAURI」でExcelのデータを読み書きしてWebページに表示してみよう
- 「TAURI」で気象庁の「CSVデータ」を解析する
- 「TAURI」と「Rust」の「Option型」と「Result型」を使いこなそう
- 「TAURI」で「丸アートお絵描き」アプリを作ろう
- 「TAURI」と「Rust」の「テスト」機能を試してみよう




