Google Apps ScriptとVis.jsでタイムラインを作る【GAS】

前回、Google Apps ScriptとTimelineのライブラリを使って、スプレッドシート連動のタイムラインを描くことが出来ました。しかし、前回のライブラリは弱点があり、日付のパーツを上部に固定化したり、またタイムラインのメイン部分だけを縦スクロールさせるといった事ができない為、データ量が多くなると色々と弊害もありました。

その後継ライブラリであるVis.jsではこの辺りが解消されてると聞いたので、今回はVis.jsでタイムラインを描いてみたいと思います。

Googleスプレッドシート連携タイムラインを作る【GAS】

今回利用するスプレッドシート等

今回のライブラリは前回のものとは異なり、Visualization APIを利用していませんので、あえて追加する必要はありません。今回のライブラリを使って解決したい前回の課題は

  1. タイムライン部分の縦スクロールを実現
  2. 同時に日付部分を上部に固定化
  3. 左側の項目部分をグループに割り当てたIDでソート

になります。

Vis.jsはタイムラインを描く機能を持っていますがそれだけでなくネットワーク図や通常の2Dグラフを描いたり、3Dグラフも描ける総合グラフライブラリになっていますので、他の用途でも利用が可能です。

図:タイムライン表示してみた

データ構造

今回はグループでまとめる機能も利用しています。そのため前回のタイムラインよりもデータ構造が複雑になっています。よって実際に運用する場合にはタスクの作成部分に於いて、入力を簡単にするUIを別途用意したほうが良いのではないかと思います。

グループシート

グループシートはVis.jsの左サイドの項目リストで利用するグループを規定するものになります。

  • ID列でソートが掛かるように設計しています。
  • 大分類が項目名になるのですがこれは必ず1つ中分類の無いレコードで用意する必要があります。
  • 中分類に値が入ってる場合、大分類にぶら下がるグループとしてサブグループの項目名になります。
  • 同じ大分類が複数ある場合はネストしてくれます。無い場合にはネストの無いグループ項目になります。

タスクシート

今回のアプリの一番中心になるタスク一覧。1つずつセットしていきます。

  • グループIDがグループシートのどこの項目にぶら下がるのかを指定します。
  • ネストグループのあるもののみ、大分類のみのレコードを用意し、その大分類にぶら下がる子グループの最小開始日と最大終了日を入れておくと良いです。
  • 開始日と終了日のレンジでタイムラインのバーが表示されるようになっています
  • カラーで色を選択することでタイムラインのカラーを指定できます。

図:グループIDとタスク名のセット方法がポイント

設定シート

設定シートはタスクシートでの担当者割当で使ってるだけのセレクトオプションのリストになります。今回はこの値は特に何も利用していないので空っぽでも何ら問題ありません。

classシート

classシートはタスクシートのカラーで利用してるセレクトオプションのリストになります。それぞれの色の名前がHTML側のCSSで設定してるものと対応しており、タイムラインのバーの色に反映されます。

ソースコード

GAS側

  • メインの関数はrequery関数です。シートから取得したデータよりグループとアイテムを作成する関数を呼び出します。
  • makeGroup関数はグループシートよりVis.jsで利用するグループデータを生成します。親グループにぶら下がる子グループがある場合にだけnestedGroupsを追加し、対象の子グループのIDを配列で追加します。
  • makeItems関数はタスクシートのデータを単純にVis.jsで使うアイテムデータを生成します。classNameがタスクの色指定です。
  • 実際に利用する場合はスプシのメニューよりタイムライン=>セットアップをクリックしてスプシのIDをスクリプトプロパティに格納する必要があります(初回クリックで認証時は格納されないので注意。もう一度実行しよう)

HTML側

  • cssにて各カラーのClassに対する色設定を追加しています。
  • ウィンドウリサイズ時に実行するsetGridHeight関数では、生成したTimelineに対してsetOptionで正しい高さを再指定します。
  • Vis.jsはオリジナルはLocaleに日本語が無いため、「moment-with-locales.min.js」を読み込ませています。
  • optionsのverticalScrollをtrueにすることで縦スクロール対応になります。
  • optionsのorientationをtopにすることで日付エリアが上に固定化されます。
  • optionsのformatでLocaleの日本の場合の置き換える単語を列挙しています。
  • optionsのgroupOrderにてオリジナルにはないグループのIDで項目をソートしています。
  • データをGAS側から取得し、groupとItemのそれぞれに値をはめ込んだら、最後にsetGroupsやsetItemsにて反映します。

サンプル表示

  • 左サイドの項目エリアはグループシートのIDを基準にソートが掛かっています
  • また項目エリアでスクロールをすると縦にスクロール出来るため、サイズ固定の場合に下の方が表示できないといった事がありません。
  • 上部に日付エリアを固定化
  • 日本語化してあるので、使う上で英語UIではないため馴染みやすい
  • 各タスクの色は指定したclassの名前で色指定が反映されている
  • ウィンドウをリサイズしても描画エリアもきちんとリサイズするように調整出来ています。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)