Skip to content
/ rff Public

クロスプラットフォーム対応のデスクトップGUIアプリをJavascriptで書くためのRust製の軽量ライブラリ。

License

Notifications You must be signed in to change notification settings

0x79756b69/rff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust Friendly Framework (RFF)

概要

現状、Rustにはtauri など多くのGUIフレームワークが存在しますが、あまり美しいとは思えません。 そこで、現状で機能は少ないですが、GUIアプリケーション作成のためのライブラリを制作しました。 このライブラリは次のような特徴を持ちます。

  • ほとんどJavascriptの知識のみでつくれる。
  • Mac, Linux, Windowsに対応したGUIのソフトウェアを爆速でつくれる。
  • Web-viewやtauriよりも美しいインターフェイスを提供。
  • 他のライブラリには多くの依存関係がありますが、このライブラリは以下のインポートのみで完結します。

rff = {git = "https://github.com/0x79756b69/rff", branch = "main"}

どのように書けるか

アプリケーション本体。

use rff::{AppConfig, Color};

static HTML: &'static str = include_str!("index.html");

fn main() {
    let config = AppConfig {
        window_width: 800,
        window_height: 800,
        window_resizable: true,
        app_debug: false,
        window_rgba: Color {
            r: 123,
            g: 213,
            b: 213,
            a: 225
        },
        window_frameless: false,
      db_path: "db_path".to_string()
    };
  // ウィンドウの作成
  let mut wv = rff::make_gui(config, HTML, "Title");
  // アプリの開始
  wv.run().unwrap();
}

尚、一つのhtmlファイルにJS, CSS, 画像を詰める必要があります。 そのため、HTMLのビルド(ひとつのファイルにまとめる)時のヘルパーを用意しています。

use rff::html::{load_css_files, load_js_files, build_html};
use rff::data::create_file;
use std::fs::read_to_string;

fn main() {
    let html = read_to_string("./src/view/index.html").unwrap_or("".to_string());
    let css = load_css_files(["./src/view/lib/css", "./src/view/my_lib/css"].to_vec());
    let js = load_js_files(["./src/view/lib/js", "./src/view/my_lib/js"].to_vec());
    let contents = build_html(html, css, js);
    create_file("./src/index.html", contents);
}

使い方

  • データやウィンドウの操作については、JS側からAPIを叩く。
  • 上で読み込んでいるindex.html内には、{LOAD_JS}{LOAD_CSS}があり、そこにjsとcssが挿入される。
  • 詳細はexamplesディレクトリを参照。

提供API

file

Notice: Not safety.

let file = new Cmd.file();
file.save("filepath/filename.txt", "DATA")

sql

外部MySQL、MariaDBサーバーへのクエリ。

let sql = new Cmd.sql();
let callbackfn = function(data, param) {
  alert(data); // Alert a value from DB
  alert(param); // Alert a passed value
}
sql.query(
        "mysql://{USER}:{PASSWORD}@{SERVER}:{PORT}/{DB_NAME}",
        "SELECT * FROM users WHERE user_id=? AND password = ?",
        ["admin", "password_123"],
        callbackfn,
        "callback params")

data

組み込み型のKVストア。

  • 追加
  • 選択
  • 削除

insert

let d = new Cmd.data();
d.insert("KEY", "VALUE");

select

let callbackfn = function(data, param) {
    alert(data); // Alert a value from DB
    alert(param); // Alert a passed value
}
let value = "Hi, this is passed value";
d.select("KEY", callbackfn, value);

delete

d.delete("KEY");

window

  • Fullscreen
  • Notify(予定)

fullscreen

let w = new Cmd.window();
w.set_fullscreen(true) // boolで指定

コードの比較

このライブラリのシンプルさに関しては、以下で書かれているコードと比較してください。 このライブラリはWeb-viewを利用してつくられています。

Web-view

Web-viewのExamplesディテクトリ下のToDoアプリ や有志によるQiitaでの紹介記事

tauri

tauriのexamples

Notice & ToDo

このソフトウェアはまだ開発段階です。

  • 暇なときに、パニックをおこなさいようにします。
  • 暇なときに、次のAPIを追加する予定です。
    • ウィンドウ関係
  • コードを整理する
    • アプリのBuilderかく
  • セキュリティの検証がまだです。(が、誰かが書いたJSファイルを読み込むようなソフトウェア向けにはつくっていません。

About

クロスプラットフォーム対応のデスクトップGUIアプリをJavascriptで書くためのRust製の軽量ライブラリ。

Resources

License

Stars

Watchers

Forks