SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

JavaScriptライブラリ「Wijmo」のさまざまな部品を徹底活用(AD)

JavaScriptライブラリ「Wijmo」のさまざまな部品を徹底活用!~複数チャートをタブパネルで切り替え表示~

JavaScriptライブラリ「Wijmo」のさまざまな部品を徹底活用 第2回

  • このエントリーをはてなブックマークに追加

 本連載ではグレープシティのJavaScriptライブラリ「Wijmo(ウィジモ)」の部品を複数組み合わせて利用する例を、複数回にわたって紹介していきます。初回となる前回は、Webページの最終的な完成イメージを示し、プロジェクトの生成やWijmoの基本的な設定方法を説明するとともに、FlexGridの表とFlexChartのチャートにデータを表示させました。今回はデータの種類を増やして複数のチャートを作成し、タブパネルで切り替え表示できるようにしていきます。

  • このエントリーをはてなブックマークに追加

はじめに

 Wijmo(ウィジモ)は、グレープシティがHTML/JavaScript環境に向けて提供しているJavaScriptライブラリで、WebサイトやWebアプリケーションで活用できるUI部品を利用者に提供します。現状の最新版は「2022J v2」です。

図1 Wijmoの製品ページ(https://www.grapecity.co.jp/developer/wijmo)
図1 Wijmoの製品ページ

 本連載では、Wijmoが提供するさまざまな部品を組み合わせて利用する例を、全4回に分けて紹介します。最終的な完成イメージは、都道府県ごとの気象データを表とチャートで表示する、図2のWebページです。

図2 本連載で作成する気象データWebページの完成イメージ
図2 本連載で作成する気象データWebページの完成イメージ

 前回記事は初回として、プロジェクトの生成方法やWijmoの基本的な設定方法を説明するとともに、図2③の表を表示するFlexGridと、④のチャートを表示するFlexChartを利用して、図3の状態まで実装しました。

図3 前回までに実装したWebページ
図3 前回までに実装したWebページ

 今回は図3の実装をもとに、図2⑤のタブパネルを導入して、複数のチャートを切り替え表示できるように実装していきます。

対象読者

  • UI部品としてWijmoの利用を検討されている方
  • Wijmoのさまざまな機能を使ってみたい方
  • 一部のUI部品しか使ったことのないWijmoユーザーの方

必要な環境

 本記事のサンプルコードは、以下の環境で動作を確認しています。

  • Windows 10 64bit版
  • Wijmo 5.20221.857
  • Node.js 18.12.1 64bit版
  • Microsoft Edge 108.0.1462.54

 サンプルコードでは、Webページを表示するため、Node.js上で動作する簡易Webサーバーlite-serverを利用しています。サンプルコードを実行するには、プロジェクトフォルダーにWijmoの配布物をコピーして、「npm install」コマンドでlite-serverなどをインストール後、「npm run start」コマンドを実行すると、Webブラウザーで「http://localhost:3000」がロードされてWebページが表示されます。

 プロジェクトの構成や、前回までの実装内容については、過去記事(第1回)を参照してください。

タブパネルによる切り替え表示を実装(1)

 図3の実装をもとに今回の実装作業を行うと、図4のWebページが完成します。チャートの上にタブパネルが表示されます。

図4 今回実装するWebページ(p001-wijmo)
図4 今回実装するWebページ(p001-wijmo)

 タブパネルをクリックすると、図5の通り、「気温」「降水量」「日照時間」「風速」「湿度」のチャートを切り替えて表示できます。

図5 タブパネルでチャートを切り替える様子(p001-wijmo)

図5 タブパネルでチャートを切り替える様子(p001-wijmo)

 このタブパネルを実装する手順を、以下で順に説明していきます。

データ項目の追加

 Webページで表示するデータは、data/data.csvファイルに記述されています。前回は気象庁の「過去の気象データ・ダウンロード」から、2022年10月の札幌の最高気温と最低気温データをダウンロードして利用しましたが、今回はさらに降水量、日照時間、風速、湿度のデータ項目を追加して、図6の状態に加工して利用します。

図6 Webページに表示するデータのCSV(p001-wijmo/data/data.csv)
図6 Webページに表示するデータのCSV(p001-wijmo/data/data.csv)

 各データの項目名と内容を、表1に示します。後述する表やチャートの実装では、表示するデータを表1の項目名で指定します。

表1 data.csvのデータ項目名と内容(p001-wijmo/data/data.csv)
No. 項目名 内容
1 date 日時
2 maxTemperature 最高気温(℃)
3 minTemperature 最低気温(℃)
4 precipitation 降水量(mm)
5 sunshineHours 日照時間(時間)
6 windSpeed 風速(m/s)
7 humidity 湿度(%)

タブパネルによる切り替え表示を実装(2)

index.htmlにおけるタブパネルの記述

 Webページのファイル(index.html)では、WijmoのCSSやJavaScriptファイルを参照して利用できるようにしていました。このうちWijmoのJavaScriptを参照する記述を、リスト1の通り修正します。

[リスト1]WijmoのJavaScriptを参照するHTMLの記述(p001-wijmo/index.html)
<script src="wijmo/controls/wijmo.min.js"></script>
<script src="wijmo/controls/cultures/wijmo.culture.ja.min.js"></script>
<script src="wijmo/controls/wijmo.chart.min.js"></script>
<script src="wijmo/controls/wijmo.grid.min.js"></script>
<script src="wijmo/controls/wijmo.nav.min.js"></script> <!-- 追加 -->

 リスト1で参照しているWijmoのJavaScriptファイルを表2に示します。No.5が今回追加したファイルです。タブパネルはwijmo.navモジュールに含まれるため、wijmo.nav.min.jsの参照を追加します。

表2 index.htmlから参照するWijmoのJavaScriptファイル(p001-wijmo/index.html)
No. ファイル名 役割
1 wijmo/controls/wijmo.min.js Wijmo本体
2 wijmo/controls/cultures/wijmo.culture.ja.min.js カルチャ(日本語)ファイル
3 wijmo/controls/wijmo.chart.min.js チャート(FlexChart)のファイル
4 wijmo/controls/wijmo.grid.min.js グリッド(FlexGrid)のファイル
5 wijmo/controls/wijmo.nav.min.js タブパネルなどナビゲーション部品のファイル

 次に、タブパネルを表示するようにindex.htmlのHTML記述を修正していきます。修正前は1個のFlexChartを表示していた箇所を、リスト2の通り変更します。

[リスト2]タブパネルを表示するHTMLの記述(p001-wijmo/index.html)
<div id="tab-panel"><!-- タブパネル ...(1)-->
    <div class="tab-wrapper"><!-- タブの1項目 ...(2)-->
        <a>気温</a><!-- タブの名称 ...(3)-->
        <div class="tab-page"><!-- タブの1ページ ...(4)-->
            <div id="chart1" class="chart"></div><!-- チャート1 -->
        </div>
    </div>
    <div class="tab-wrapper">
        <a>降水量</a>
        <div class="tab-page">
            <div id="chart2" class="chart"></div><!-- チャート2 -->
        </div>
    </div>
(略:チャート3~チャート5の記述)
</div>

 (1)の<div id="tab-panel">要素にタブパネルを表示します。この中には、タブの1項目に対応する(2)の<div class="tab-wrapper">要素を、タブの個数だけ記述します。この内側には(3)の<a>要素でタブの名称を、(4)の<div class="tab-page">要素でタブの1ページの内容を、それぞれ記述します。ここでは気温のほか、降水量、日照時間、風速、湿度のチャートを含んだ、計5個のタブを記述します。

index.jsにおけるタブパネルと各チャート描画の実装

 次にindex.jsで、タブパネルと、その中に表示する各要素を実装していきます。

 まず、リスト2の記述をタブパネルとして表示する処理はリスト3の通りです。IDが「tab-panel」の要素、つまりリスト2(1)の要素を表すCSSセレクター「#tab-panel」を指定してwijmo.nav.TabPanelのコンストラクターを実行すると、その要素がタブパネルとして表示されるようになります。

[リスト3]タブパネルを表示するJavaScriptの実装(p001-wijmo/index.js)
const tabPanel = new wijmo.nav.TabPanel('#tab-panel');

 今回タブパネルに表示するのは、項目別のチャートです。そこで、従来1つしかなかったチャートの処理を増やして、リスト4の通り5つのチャートを表示するようにします。

[リスト4]各タブのチャートを表示するJavaScriptの実装(p001-wijmo/index.js)
// 気温のチャート ...(1)
const chart1 = new wijmo.chart.FlexChart('#chart1', {
  header: '北海道',
  chartType: wijmo.chart.ChartType.Line, // ...(1a)
  axisX: {
    format: 'MM/dd'
  },
  bindingX: 'date',
  series: [ // ...(1b)
    { binding: 'maxTemperature', name: '最高気温' },
    { binding: 'minTemperature', name: '最低気温' }
  ],
  legend: { // ...(1c)
    orientation: wijmo.chart.Orientation.Horizontal,
    position: wijmo.chart.Position.Bottom
  }
});
// 降水量のチャート ...(2)
const chart2 = new wijmo.chart.FlexChart('#chart2', {
  header: '北海道',
  chartType: wijmo.chart.ChartType.Column, // ...(2a)
  axisX: {
    format: 'MM/dd'
  },
  bindingX: 'date',
  series: [ // ...(2b)
    { binding: 'precipitation', name: '降水量' }
  ],
  legend: { // ...(2c)
    orientation: wijmo.chart.Orientation.Horizontal,
    position: wijmo.chart.Position.Bottom
  }
});
(以下略 chart3:日照時間、chart4:風速、chart5:湿度)

 (1)が気温を表示する(従来の)チャート、(2)は今回追加した降水量のチャートを表示する処理です。以下類似の実装で、日照時間、風速、湿度の各チャートを表示する処理を記述していきます。

 チャートの種類は(1a)(2a)のchartType属性に指定します。今回はチャートごとに表3のchartTypeを指定しました。Wijmoで利用できるすべてのチャート種類は、公式のドキュメントや実際に動作を試せるデモサイトを参照してください。

表3 各チャートに指定するチャートの種類(p001-wijmo/index.js)
No. チャート chartType

チャートの種類

1 chart1(気温) wijmo.chart.ChartType.Line 折れ線
2 chart2(降水量) wijmo.chart.ChartType.Column 縦棒
3 chart3(日照時間) wijmo.chart.ChartType.Area 折れ線(線の下を塗りつぶして表示)
4 chart4(風速) wijmo.chart.ChartType.LineSymbols 折れ線(データ点にシンボルを表示)
5 chart5(湿度) wijmo.chart.ChartType.Spline 折れ線(曲線で表示)

 チャートに表示するデータは、各チャート(1b)(2b)のseries配列で指定します。データの項目名(表1参照)をbinding属性に、データの名前をname属性に指定します。また、(1c)(2c)のlegendは表の凡例に関する設定で、ここではorientation属性に凡例の方向をwijmo.chart.Orientation.Horizontal(=横並び)、position属性に凡例の表示位置をwijmo.chart.Position.Bottom(=チャートの下)と指定しています。凡例で指定できるすべてのパラメーターは、Wijmoの公式ドキュメントに記載されています。

タブパネルによる切り替え表示を実装(3)

index.jsにおけるFlexGridの実装

 これまで表(FlexGrid)には、日時、最高気温、最低気温だけが表示されていましたが、今回追加したデータ項目もまとめて表示するため、リスト5(1)のcolumns配列にデータ項目を追加します。データの項目名(表1参照)をbinding属性に、ヘッダーに表示するデータ名をheader属性に指定します。allowSortingはその項目での並び替えを許可するか(ここでは許可しない)、formatは値の表示フォーマット(ここではF1=小数第1位まで表示)を指定します。

[リスト5]表(FlexGrid)を表示するJavaScriptの実装(p001-wijmo/index.js)
const grid1 = new wijmo.grid.FlexGrid('#grid1', {
  autoGenerateColumns: false,
  isReadOnly: true,
  columns: [ // ...(1)
    { binding: 'date', header: '日時', allowSorting: false },
    { binding: 'maxTemperature', header: '最高気温', allowSorting: false, format: 'F1' },
    { binding: 'minTemperature', header: '最低気温', allowSorting: false, format: 'F1' },
    { binding: 'precipitation', header: '降水量', allowSorting: false, format: 'F1' },
    { binding: 'sunshineHours', header: '日照時間', allowSorting: false, format: 'F1' },
    { binding: 'windSpeed', header: '風速', allowSorting: false, format: 'F1' },
    { binding: 'humidity', header: '湿度', allowSorting: false, format: 'F1' }
  ]
});

表やチャートに表示するデータを取得する処理

 表やチャートに表示するデータ(図6のdata.csv)を取得する処理をリスト6に示します。処理内容は前回記事と同一ですが、取得したデータの変数recordsは、(1)の通り、今回設定した5つのチャート(chart1~chart5)と表(grid1)それぞれのitemsSourceプロパティに設定するようにします。

[リスト6]表やチャートに表示するデータを取得する処理(p001-wijmo/index.js)
function fetchAndApply() {
  // CSVファイルを読み込み
  fetch('data/data.csv')
    .then(res => res.text())
    .then(text => {
      // CSVファイルを解析
      csv_parse.parse(text, {
        columns: true,
        cast: true,
        cast_date: true
      }, (err, records) => {
        // 解析したデータをFlexGridとFlexChartのitemsSourceに設定 ...(1)
        grid1.itemsSource =
        chart1.itemsSource =
        chart2.itemsSource =
        chart3.itemsSource =
        chart4.itemsSource =
        chart5.itemsSource = records;
      })
    });
}

スタイルシートでレイアウトを微調整

 タブパネルのほか、表のデータ項目やチャートの数が増えたのに対応して、スタイルシートindex.cssをリスト7の通り調整します。表とチャートを横方向に半分ずつ表示するため、(1)のwidthに50%を設定します。また、複数のチャートそれぞれに高さを調整する必要があるため、(2)のchartクラスを各チャートに付与して、高さを500pxに設定しました。

[リスト7]スタイルシートの調整(p001-wijmo/index.css)
#horizontal-container {
    display: flex;
    flex-direction: row;
}

#grid-container,
#chart-container {
    width: 50%; /* (1) */
    padding: 10px;
}

#grid1 {
    height: 550px;
}

.chart { /* (2) */
    height: 500px;
}

 図3の状態をベースに以上の改造を行うと、タブパネルで複数のチャートを切り替え表示する図4のWebページが実装できます。

まとめ

 本連載では、全4回にわたり、Wijmoが提供するUI部品を複数組み合わせて本格的なWebページを作成します。第2回となる今回は、タブパネルを利用して、複数種類のチャートを切替表示できるようにしました。

 今回の改造で表示されるデータ項目が増えたとはいえ、これらはすべて北海道のデータでした、次回はWebページに図2②のドロップダウンを加えて、リストからの選択や部分一致検索で都道府県を指定して、対応するデータを表やチャートに表示するよう実装していきます。

参考資料

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17180 2023/02/14 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング