Rust + Actix-Web + Handlebars + MysqlでWebアプリケーションの開発

Rust言語でWebアプリケーションを開発してみた。
WebクレートにはActix-web、template-engineはHandlebars、データベースにはmysql(diesel経由)を利用した。
アプリの内容はフリースタイルのブログサイトのようなもので、名称/分類の2階層のページ指定で自由にMyページを作成して、DBに記録できる。
ドラえもんの風呂敷みたいなもので、なんでも入れて使える。
例えばタイトルページの"夜は千の眼を持つ。昼飲みは桜木町で"のメッセージは
横浜/XXXX ページに投稿した内容をランダムに表示したものです。
SNS、社内コミュニケーションツール、ブログ、TODOリスト、日記、連絡帳、備忘録、メモ帳、終活ノートなど色んな利用法がある。

使い方はシンプルで、例えば山田さんがブログページを作りたい場合は、
山田/ブログ とページを入力するだけで、あとはこのページに記事をどんどん投稿するとページが蓄積されます。
データベースと連動しているので、投稿された記事の内容は記録されて、データベースに保存されます。
日記帳の場合は
山田/日記帳 でOKです。
名称/分類 は任意ですので、誰でも、なんでもフレキシブルに使えます。

以下の例は
横浜/居酒屋 がテーマです。

静的なHTML,cssファイルも使っています。
HTMLにはプログラムから、Template-engineを使ってパラメータ{{name}}などを渡せます。
<h1><font color="white">{{name}} へようこそ</font></h1></br>
今回は使用してないが、javascriptも利用できます。
いわゆるLAMP(Linux+Apache+Mysql+PHP)アプリと比較しても、非同期で安全な、マルチコア、マルチスレッドCPU対応アプリになります。
スクリプト言語(インタープリター)ではなく、コンパイルされたバイナリで直接に高速に実行できるところが特長でしょう。
Rust言語が対応するLinux,Windows,Macなどでソースコードレベルで互換性があります。
プログラムは様々なツールを使っていて、比較的に複雑なのでいつかそのうち、Step By Stepで書かれたコードの内容を説明したいと思います。
また、raspberry Pi 4などのARM系SBC(single board computer)での動作を確認して見たいと思います。 

Rust 2021 Editionのリリースが待ち遠しいな。
 
プログラムの通信状態は常時モニタリングできます。


ホームページは外部に公開できます。今はPrivate LAN内で公開してます。
Web DB管理用のページです。管理ツールも特定のページに割り付けています。


データベースは2つのuserとtypeテーブルでInner Join(内部結合)して管理しています。
Rustのdieselクレートでは直でSQL文を使用することもできます。
impl User {
    pub fn all() -> Vec<UserFull> {    
    let connection: MysqlConnection = establish_connection();  
    let all_users: Vec<UserFull> = sql_query(  
      "
        SELECT
            u.id,
            u.name,
            u.type_id,
            u.description,
            t.type_name As type_name
         FROM
            users u
         LEFT JOIN
            type_table t
         ON
            u.type_id = t.id
        ",
    )
    .load(&connection)
    .unwrap();
    all_users
   }