SHOEISHA iD

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

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

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

JavaScriptライブラリ「Wijmo」のさまざまな部品を徹底活用!~まずは表とチャートから解説~

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

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

今回の目標:表とチャートを表示

 ここまでで生成したプロジェクトをもとに、今回は図3のうち大きな割合を占める表とチャートを実装します。今回の作業を行うと、図7のWebページが完成します。

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

表とチャートを表示する下準備

 まずindex.htmlの<body>内に、表とチャートを表示するリスト3の記述を追加します。

[リスト3]表とチャートを表示するindex.htmlの記述(p001-wijmo/index.html)
<div id="horizontal-container">
    <div id="grid-container">
        <h3>FlexGrid</h3>
        <div id="grid1"></div><!-- 表を表示 -->
    </div>
    <div id="chart-container">
        <h3>FlexChart</h3>
        <div id="chart1"></div><!-- チャートを表示 -->
    </div>
</div>

 ここでindex.cssファイルにはリスト4の通り記述します。(1)はCSSのFlexboxを利用して表とチャートを横並びにする指定、(2)は表とチャートの幅と余白の指定、(3)(4)は表とチャートの高さの指定です。

[リスト4]リスト3に対応するCSSの記述(p001-wijmo/index.css)
/* (1) */
#horizontal-container {
    display: flex;
    flex-direction: row;
}
/* (2) */
#grid-container,
#chart-container {
    width: 100%;
    padding: 10px;
}
/* (3) */
#grid1 {
    height: 550px;
}
/* (4) */
#chart1 {
    height: 500px;
}

 Wijmoの実装を行うJavaScriptファイルindex.jsの冒頭にリスト5の記述を行って、Wijmoのライセンスキーを設定します。ライセンスキーを設定しないとWijmoはトライアル版として動作し、その旨がWebページに表示されます。

[リスト5]Wijmoのライセンスキーを設定する記述(p001-wijmo/index.js)
wijmo.setLicenseKey('<ライセンスキー>');

データの表をグリッド(FlexGrid)で実装

 表(FlexGrid)を表示する処理の実装はリスト6の通りです。

[リスト6]FlexGridを表示する処理の実装(p001-wijmo/index.js)
const grid1 = new wijmo.grid.FlexGrid('#grid1', {
  autoGenerateColumns: false,
  isReadOnly: true,
  columns: [
    { binding: 'date', header: '日時', allowSorting: false },
    { binding: 'maxTemperature', header: '最高気温', allowSorting: false, format: 'F1' },
    { binding: 'minTemperature', header: '最低気温', allowSorting: false, format: 'F1' },
  ],
});

 グリッドを表示する要素のCSSセレクター「#grid1」(idが「grid1」の要素に対応)を第1引数に指定してwijmo.grid.FlexGridクラスのコンストラクターを実行すると、FlexGridを表示できます。第2引数はグリッドのオプションで、指定内容は表の通りです。

表3 FlexGridに指定するオプション(p001-wijmo/index.js)
No. ファイル名 役割

設定値

1 autoGenerateColumns データに合わせて列を自動生成するか false(生成しない)
2 isReadOnly 読み取り専用にするか true(読み取り専用にする)
3 columns 表示する列の定義 (表4参照)

columnsの配列には、表示する列の定義を指定するJavaScriptオブジェクトを、列の数だけ記述します。設定するJavaScriptの属性は表4の通りです。

表4 columnsに指定するJavaScriptオブジェクトの属性(p001-wijmo/index.js)
No. 名前 意味
1 binding     列に対応するデータの名前
2 header 列ヘッダーに表示する文言
3 allowSorting 並び替えを許可(ここでは許可しない)
4 format 列の表示形式(「F1」は小数第1位まで表示の意味)

データのグラフをチャート(FlexChart)で実装

 チャート(FlexChart)を表示する処理の実装はリスト7の通りです。

[リスト7]FlexChartを表示する処理の実装(p001-wijmo/index.js)
const chart1 = new wijmo.chart.FlexChart('#chart1', {
  header: '北海道',
  chartType: wijmo.chart.ChartType.Line,
  axisX: {
    format: 'MM/dd'
  },
  bindingX: 'date',
  series: [
    { binding: 'maxTemperature', name: '最高気温' },
    { binding: 'minTemperature', name: '最低気温' },
  ],
});

 FlexGrid同様、CSSセレクター「#chart1」を第1引数に指定してwijmo.grid.FlexChartクラスのコンストラクターを実行します。第2引数に指定するオプションは表5の通りです。

表5 FlexChartに指定するオプション(p001-wijmo/index.js)
No. ファイル名 役割

設定値

1 header チャートのヘッダー 「北海道」
2 chartType

チャートの種類

wijmo.chart.ChartType.Line(線グラフ)
3 axisX X軸の指定 子要素にformat(フォーマット)「MM/dd」を指定
4 bindingX X軸に対応させる要素 date
5 series 表示する系列の定義 (表6参照)

 ここでseriesはチャートに表示する系列(グラフそれぞれの線に対応)のオプションを指定するJavaScriptオブジェクトの配列で、設定するJavaScriptの属性は表6の通りです。

表6 seriesに指定するJavaScriptオブジェクトの属性(p001-wijmo/index.js)
No. 名前 意味
1 binding     系列に対応するデータの名前
2 name チャートに表示される系列の名前

データを取得して表やチャートに設定

 データを取得して表やチャートに表示する処理は、リスト8の通り実装します。

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

 (1)のfetchメソッドでデータファイルdata/data.csvを取得します。取得したデータはres.text()で文字列として解釈した後、(2)でcsv_parse.parseメソッドを利用してCSV文字列を解析します。このメソッドは図6で導入したnode-csvライブラリが提供するもので、第1引数に文字列、第2引数にオプションを指定すると、CSV文字列をJavaScriptオブジェクトの配列に変換します。ここで指定しているオプションは表7の通りです。なお、利用できるすべてのオプションはnode-csvの公式ドキュメントにリストされています。

表7 csv_parse.parseメソッドに指定するオプション(p001-wijmo/index.js)
No. ファイル名 役割

設定値

1 columns ヘッダー行から列名を解釈するか true(解釈する)
2 cast

文字列を数値として解釈するか

true(解釈する)
3 cast_date 文字列を日時として解釈するか true(解釈する)

 解析して得られたデータ変数recordを、(3)でgrid1(FlexGrid)とchart1(FlexChart)のitemsSourceプロパティに設定すると、recordのデータが表とチャートに描画されます。以上のfetchAndApplyメソッドをWebページ読み込み時に実行して、データ取得~表示の処理を行います。

 なお、リスト8(1)で取得するdata/data.csvは、気象庁の「過去の気象データ・ダウンロード」から、2022年10月の札幌の最高気温と最低気温データをダウンロード後、図8の状態に加工したものです。

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

 FlexGridやFlexChartでは、binding属性(FlexGridでは表4のNo.1、FlexChartでは表6のNo.1)に指定されたデータ項目名と、データのヘッダーに付与された「date」「maxTemperature」「minTemperature」の指定を紐づけて、表やチャートを描画します。

まとめ

 本連載では、全4回にわたり、Wijmoが提供するUI部品を複数組み合わせて本格的なWebページを作成します。初回となる今回は、CSVファイルから取得したデータをグリッド(FlexGrid)とチャート(FlexChart)に表示しました。

 今回表示したのは最低気温と最高気温のみでしたが、次回は表示項目を増やしていきます。ただ表示項目を増やしただけではチャートの表示が煩雑になるので、各項目を複数のチャートに分けて表示して、タブパネルで切替表示できるように改造します。

参考資料

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
JavaScriptライブラリ「Wijmo」のさまざまな部品を徹底活用連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/16990 2023/01/30 19:24

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング