見出し画像

TWLogAIAN:Wails v2+ SvelteにApache echartsを組み込んでグラフ表示できた

昨日からログ分析ツールの開発を始めました。まずはWails v2


でテンプレートにSvelte

を使った環境で他のパッケージが動作するかテストしています。
使いたいパッケージを全部組み込んでしまうと問題が起こった時に調べるのが難しくなってしまうので1つづつ組み込んで簡単なサンプルを動かしています。
最初はグラフを表示するためのライブラリApache echarts

です。最初に連携するnpmパッケージ

を見つけて、これは楽勝かと思ったのですが、残念ながら使えませんでした。よく見るとのパッケージは2年前からメンテナスされていないようです。対応しているechartsのバージョンもv3.0 & v4.0です。今はv5.2です。
便利そうですが、これを使うのは諦めました
結局 echartsだけを組み込む方法にしました。その方法は、

wails v2でプロジェクトを作成

テンプレートにsvelteを選んで作成します。gitも使います。

$wails init -t svelte -n echarts -g
....
$cd echarts

npmで追加パッケージをインストール

echarts本体とエラー対策のために@rollup/plugin-replaceをインストールします。

$cd frontend
$npm i echarts
$npm i -D @rollup/plugin-replace

rollup.config.jsにエラー対策のための行を追加

import replace from '@rollup/plugin-replace';
...

plugins: [
...
    replace({
      'process.env.NODE_ENV': JSON.stringify( 'development' )
    }),

のような部分です。ファイル添付しておきます。

やっていることは、echartsのソースコードの中に

process.env.NODE_ENV

という部分がでてきたら書き換えるということだと思います。そうしないとprocessが未定義というエラーでechartsが使えないためです。

App.svelteをグラフ表示のサンプルに書き換える

<!-- App.svelte -->
<script>
  import { onMount } from "svelte";
  // Import the main module of echarts.
  import * as echarts from "echarts";
  // Render line chart and components.
  onMount(async () => {
    echarts.init(document.getElementById("main")).setOption({
      title: { text: "Test Chart" },
      backgroundColor: "#eee",
      tooltip: {},
      xAxis: {},
      yAxis: {},
      series: [
        {
          type: "line",
          smooth: true,
          data: [
            [12, 5],
            [24, 20],
            [36, 36],
            [48, 10],
            [60, 10],
            [72, 20],
          ],
        },
      ],
    });
  });

  console.log(echarts);
</script>

<div id="main" />

<style>
  #main {
    width: 600px;
    height: 400px;
    margin: 5% auto;
  }
</style>

のように書き換えます。ポイントはonMountの中でechartsを初期化するとことです。そうしないと表示されません。画面の幅と高さが0になるためだと思います。

wails devで試してみる

$wails dev

で起動すれば、

Wails + Svelte + Apache echarts

のように表示されます。

いいなと思ったら応援しよう!

twsnmp
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。