techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

GAS事始め(その2):クラス構成を理解する(スプレッドシート編)

前回の記事では、GAS入門としてGASからスプレッドシートを操作する基本的な方法を紹介しました。

今回はGASのクラス構成をスプレッドシート関連に絞って見ていきます。

クラス概要

スプレッドシート関連の主要なクラスは以下の表のとおりです。他にもいくつかのクラスがありますが、まずは以下の各クラスの概要を押さえておくのが良いでしょう。

クラス名 概要
SpreadsheetApp スプレッドシートを管理するクラス。スプレッドシートファイルを開く、新規作成/削除など、主にファイルそのものの操作を行う。
Spreadsheet スプレッドシートを表すクラス。シートの追加/削除、行・列の追加/削除、編集者の追加/削除など、主にシートそのものに対する操作を行う。
Sheet 各シートを表すクラス。値の追加/削除、指定範囲の取得、グラフの追加など、主にシート内のデータ操作を行う。
Range 各セルを表すクラス。1つのセルだけではなく、範囲を指定することで複数のセルに対してまとめて操作を行うことができる。
NamedRange 名前付き範囲を表すクラス。範囲に名前を付与すると名前を指定して範囲を取得できる。
DataValidationBuilder DataValidationを作る為のFactory。
DataValidation Rangeに対してセットすることで、Rangeに入力制限を課す為のクラス。
EmbeddedChartBuilder EmbeddedChartを作る為のFactory。
EmbeddedChart 指定したRangeのデータから作成したグラフを表すクラス。全てのグラフ種別を表すインタフェース的なクラス。

クラス構成図

先ほどの表の内容を整理してクラス構成図にするとだいたい以下のような感じになります。GASのスプレッドシート関連の全クラスの関係を示しています。

ただしGASのクラスは継承やインタフェースがあるわけではなく基本的にクラス階層がフラットなため、一般的なクラス図のようなクラス間の関連をうまく表現することができませんでした*1

そのため厳密には実態と微妙に異なるところがあるかもしれないので、参考イメージ程度にとらえてください。 f:id:snishimura0926:20160317230409p:plain

クラス間の関連を把握する

GAS(のスプレッドシート)のクラスは大きく以下の4つのブロックに分けることができます。

  1. Spreadsheet(スプレッドシートそのものに対する操作を行うクラス群)
  2. Cell(各セルを表現するクラス群)
  3. Constraint(各種の制限を表すクラス群)
  4. Chart(グラフを表すクラス群)

それぞれのブロック名は私が適当に名付けただけですが、各機能ごとのまとまりを表現できているかと思います。クラス構成図の中でも特に重要と思われるクラスを青色にしています。

図を見ると分かるように、Rangeを中心として様々なクラスが相互作用を行うことでGASは動作します。特にSpreadsheetブロックに属しているクラスがRangeの操作やその他コンポーネントの管理を行っています。

この図を眺めてみると、SpreadsheetブロックとCellブロック間の相互作用を理解することが、GASを使いこなす上で重要そうだということが分かりますね。

参考: https://developers.google.com/apps-script/reference/spreadsheet/#classes

参考書籍

UMLに関しては以下の2冊が勉強になりました。

特に「オブジェクト指向のこころ」はUML(2章)だけではなく「オブジェクト指向とはなんぞや」みたいなところが読みやすく書かれているので、設計の改善にもかなり参考になりました。CompositionとAggregationの違いがよく分からんという人は、この本の2章だけでも目を通すとよいと思います。

UMLモデリングのエッセンス」は200ページ弱と薄いのに主要なUML要素がきっちり抑えられてるので短時間でUMLの基礎をつかめます。

*1:あるいは単にUML力不足か