Googleドキュメントで図表番号を使用する方法

## Googleドキュメントと言えば、ほら、あれですよあれ

Googleドキュメントをよく使用しているGoogleドキュメントの民は常々Microsoft Wordのあの機能が欲しいと思うことがあるとかないとか。その代表格（今回のトピックなので主語をでっかく）として図表番号とその参照機能だとGoogleドキュメント民がX（エックス。めんどいな）の過疎ってる垢でこっそり誰の目にも触れることなく呟いているようです。そしてそんな民は今日もGoogle検索を手にネットの広大な海へ答えを求め虚しい後悔、いや航海の旅へ乗り出しているんじゃないでしょうか。

しかし民の一人である私がGoogleドキュメントアプリの機能を彷徨った果てについに答えを見つけ出しました（←第一発見者にでもなったつもりか？┐(´д｀)┌ﾔﾚﾔﾚ。）。それが使えるかどうかは知らんがレッドペッパーだろうとこれはペッパーだと言い張る気満々です。

それはさておきGoogleドキュメントで図表番号を使用する方法をご紹介していきます。

## いつからそこにあるのか人知れず存在するスマートチップ

自己主張弱め[^1]の癖強[^2]なスマートチップの変数を使うことで図表番号の付与とその参照を実現することができます。ほらここ、ここ！![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481340/1e91a83e-e91a-f827-eaf6-662afae9b30a.png)
スマートチップ機能は"@"を入力することでも呼び出すことができます。

## スマートチップを使った図表番号の付与と相互参照の様子

スマートチップを使って図表番号の付与と参照した様子はこんな感じです。角が丸い四角で縁取られたものがスマートチップです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481340/974d4cc3-fc8b-99bf-9613-860f26ab8ae3.png)

このときに作成した変数の一覧はこんな感じです。この後説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481340/642dd74e-43aa-678b-e8a8-d9c8b65725e9.png)

## 図表番号にスマートチップを使用する際のルール

変数のスマートチップを使って図表番号を実現する場合、以下のようなちょっとした工夫が必要になります。

1. 変数名は図表のタイトルにする。  
これは相互参照する際に変数一覧から選択しやすいようにするためです。
1. 変数の値は"図1-1"など図表番号にする。図表タイトルなど図表番号以外は設定しない。  
これは参照個所で図表番号のみを文章中に入れるようにするためです。
1. 図表のラベル（図表番号とタイトル）のタイトルはスマートチップを使用せず直接記述する。  
これは変数にタイトルを設定しないことの代わりです。タイトルはタイトルで変数を作る案もありますが管理が面倒になり、直接記述でもタイトルを変更したい場合は文字列置換すればいいと思います。一方で図表番号は途中に図表が追加されたり、移動したりした場合など番号の振り直しがたびたび発生するため文字列置換では対応が難しいです。番号を振りなおす場合は変数一覧から変更したほうが確実です。また後述しますが自動採番するGoogle Apps Scriptを作成しました。

## 図表に番号を付与する

新たな図表に番号を付与する場合は、スマートチップのメニューから変数を作成します。変数名には前述のルールの通り、図表のタイトルを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481340/06c82d3d-d4f4-793f-2e5b-beefa3d9cc73.png)

## 図表番号を相互参照する

図表番号を相互参照する場合も参照個所に変数のスマートチップを作成します。この時新規作成ではなく、既に作成済みの一覧から目的のものを選択します。ここでルール１が効いてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481340/ab16980d-1faf-7dc5-9060-0a0c2ced1286.png)
そうするとこのように変数の値である図表番号が参照されます。これがルール２と３です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481340/3eef2ce7-eed7-e807-7d21-749f68ac5eaa.png)

いかがでしたでしょうか。スマートチップを使用することでMicrosoft Wordの図表番号の機能のようなことが実現できたと思います。しかしまだ面倒な手順が残っています。それは自分で採番し、手で図表番号を入力しなければならないという問題です。次はこの問題の解決としてGoogle Apps Scriptを使って自動採番できるようにしていきます。

## 図表番号を自動採番する

図表番号を自動採番するGoogle Apps Scriptを作ります。作ったものは[こちらのGitHub](https://github.com/Reiji-Nishiyama/auto-labeling/tree/main)[^3]にあります。

自動採番する場合、もう一つ追加のルールが必要となります。
- 図表番号の変数に”図”または”表”を設定しておく。  
これは図、表でシリーズ番号を分けるためです。

使い方はGoolgeドキュメントのメニューからApps Scriptを呼び出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481340/9d001bce-72c7-6a24-a499-cc5c594169e2.png)
Apps Scriptの画面でGitHubからコードをコピーして貼り付けます。貼り付けたらプロジェクトを保存します。保存したらGoogleドキュメントに戻って再ロードします。そうするとメニューに”図表番号”が現れます。図表番号メニューから自動採番を選択すると自動採番が行われます。

使い方は以上となります。

## 最後に

自動採番について、あれ？と思うだろうことを残しておきます。

### 他のGoogleドキュメントで使えないんだけど。  

残念ながらアドオンとして開発、提供していないため、各GoogleドキュメントでApps Scriptの設定が必要になります。アドオンを開発するにはGCPアカウントが必要になるのが理由です。すんません。なのでバインド型での利用となります。
タブン、ダレカガニタヨウナキノウノアドオンヲテイキョウスルトオモイマス。ソレマデオマチクダサイ。

### あれ？自動採番しても参照個所が変わってないんだけど。  

ワタシジャアリマセン。スマートチップノセイデス。タブン。
この問題を実装で回避するにはApps Scriptから変数名が取得できれば何とかなると思いますが、現状では取得できません。Apps Scriptのリファレンスマニュアルにはスマートチップのクラスについての説明がないのです。console.logでインターフェイスをダンプしてもやはりそれらしいAPIがありません。

しかし以下の手順を踏むことで寝坊した変数をたたき起こして更新することができます。それは相互参照側の変数ではなく、図表番号側の変数をクリックすることです。それで相互参照側も表示が更新されます。

### 図表番号の変数を自動挿入するメニューをつくってほしいんだけど。

ソレハグーグルニイッテクダサイ。
変数をドキュメントに挿入するAPIが無いのでどうすることもできません。アドオンならできる？。"@"入力で多少なりとも楽になると思うのでそれでお願いします。

### なんでGoogleドキュメント使ってるの？Word使えば？

ホオッテオイテクダサイ。

[^1]:Google Apps ScriptリファレンスのElementTypeに載っていない。
[^2]:Apps Scriptから変数名を取得できなかったり、値を書き換えても参照個所の変数がクリックしないと更新されないなど、動きが？な部分がある。
[^3]:自動採番のApps ScriptコードのGitHubレポジトリはhttps://github.com/Reiji-Nishiyama/auto-labeling/tree/main