Original image by martarey84 from Pixabay and modified by author

最小限の知識で入門する Google Apps Script〜Google ドキュメント編-1〜

これまで数回の記事で、高齢の親に子供などの親族が付き添ってクリニックへ行くということを想定し、報告を行い情報共有をするシステムを作成する話をしてきました。今回の記事もその続きです。

報告を入力、送信するためには Googleフォームを使うことにして、回答者から送信されてきた内容を Google スプレッドシートに記録することにしました。そして 前回の記事では、Google Apps Script でスプレッドシートを操作し、記録された内容を取り出して二次元配列に格納することを行うプログラムを書きました。

今回の記事では、二次元配列に格納されている内容を Google ドキュメントへ書き出すために必要となる知識をまとめておくことにします。

目次

Google ドキュメントのオブジェクト

Google ドキュメントというアプリとそこで扱われる文書は次のような階層構造を持っていると考えることができます。

  • Google ドキュメントアプリは一般に複数の Google ドキュメントファイルを管理し、Google ドキュメントファイルの作成、削除などを行います。
  • Google ドキュメントファイルはタブが集まってできています。(タブは1つのドキュメントファイルの中に複数の文書を作ることができる機能で、それぞれの文書はタブとして管理されます。これは、2024年10月に追加された新しい機能とのことです。)
  • タブはドキュメントタブとして扱われます。
  • ドキュメントタブは本文、ヘッダー、フッター、脚注が集まってできています。(また、タブの中にタブをつくることもでき、これはサブタブと呼ばれます。)
  • 本文は段落、表などが集まってできています。
  • 段落は文字の色、フォント、サイズなどの書式が設定されたテキストから構成されています。
ドキュメントの構造について詳しいことは…

Google Apps Script のヘルプページ からの引用です。

ドキュメントの構造

ドキュメント
    タブ
        DocumentTab
            本文
                ListItem
                    式
                        EquationFunction
                            EquationFunction...
                            EquationFunctionArgumentSeparator
                            EquationSymbol
                            テキスト
                        EquationSymbol
                        テキスト
                    脚注
                    HorizontalRule
                    InlineDrawing
                    InlineImage
                    PageBreak
                    テキスト
                段落
                    式
                        EquationFunction
                            EquationFunction...
                            EquationFunctionArgumentSeparator
                            EquationSymbol
                            テキスト
                        EquationSymbol
                        テキスト
                    脚注
                    HorizontalRule
                    InlineDrawing
                    InlineImage
                    PageBreak
                    テキスト
                表
                    TableRow
                        TableCell
                            段落...
                            ListItem...
                            テーブル...
                TableOfContents
                    段落...
                    ListItem...
                    テーブル...
            HeaderSection
                ListItem
                    HorizontalRule
                    InlineDrawing
                    InlineImage
                    テキスト
                    UnsupportedElement(ページ番号など)
                段落
                    HorizontalRule
                    InlineDrawing
                    InlineImage
                    テキスト
                    UnsupportedElement(ページ番号など)
                表
                    TableRow
                        TableCell
                            段落...
                            ListItem...
                            テーブル...
            FooterSection
                ListItem
                    HorizontalRule
                    InlineDrawing
                    InlineImage
                    テキスト
                    UnsupportedElement(ページ番号など)
                段落
                    HorizontalRule
                    InlineDrawing
                    InlineImage
                    テキスト
                    UnsupportedElement(ページ番号など)
                表
                    TableRow
                        TableCell
                            段落...
                            ListItem...
                            テーブル...
            FootnoteSection
                ListItem
                    HorizontalRule
                    テキスト
                段落
                    HorizontalRule
                    テキスト

Google Apps Script というプログラミング言語では、このような階層構造に対応して Google ドキュメント用の様々なオブジェクトが用意されています。

根幹となるオブジェクトは次のとおりです。

  • DocumentApp オブジェクト:Google document サービスのトップレベルのオブジェクト(つまり Google ドキュメントアプリ自体)
  • Document オブジェクト:Google ドキュメントファイル
  • Tab オブジェクト:Google ドキュメントファイル内のタブ。
  • DocumentTab オブジェクト:本文、ヘッダー、フッターを含むオブジェクト
  • Body オブジェクト : 段落、表などを含む本文をあらわすオブジェクト
  • Paragraph オブジェクト : それぞれの段落をあらわすオブジェクト
  • Text オブジェクト : 文字の色、フォント、サイズなどの書式が設定された本文や段落中のテキストを扱うオブジェクト

Google Apps Script では、これらのオブジェクトに対して仕事を依頼するという形でプログラムを作っていきます。このとき、それぞれのオブジェクトに仕事をしてもらうために、それぞれのオブジェクトが持つ様々なメソッドを使ってもらうわけです。それぞれのオブジェクトがどのようなメソッドを持っているのかということは後に説明します。

オブジェクトやメソッドの使い方についてのごく簡単な説明として、以前の記事「最小限の知識で入門する Google Apps Script〜文法編〜 」のオブジェクトという項目も参考にしてください。

ドキュメント ID とタブ ID

それぞれの Google ドキュメントファイルにはファイルを一意に識別するための ID が与えられています。また、Google ドキュメントファイルに含まれるそれぞれのタブにも ID が与えられています。これらの ID は文字、数字、特殊文字を含む文字列で、スプレッドシートの URL を見るとわかるようになっています。

Google ドキュメント ID は、ドキュメントファイル名が変更されても変わりません。また、タブ ID は、タブ名が変更されても変わりません

Google ドキュメントの URL はブラウザでそのドキュメントを開いたときにアドレスバーに表示されます。そして、次のような形をしています。

https://docs.google.com/document/d/ドキュメントID/edit?tab=タブのID

ここからドキュメント ID と タブ ID を知ることがでます。

Google ドキュメントの各オブジェクトのメソッド

ではこれから、それぞれのオブジェクトが持っているメソッドをいくつか紹介します。

これから説明するメソッド以外にも数多くのメソッドがあります。詳しいことは Google Apps Script の公式ヘルプページ の Document Service 以下の解説 を見てください。

この記事では、プログラミングに不慣れな人でもプログラムの流れや関数、メソッドの引数と戻り値がどんな型やオブジェクトになっているのかということがたどれるように、くどい記述のプログラムを書いています。そのため、無駄な変数を用意していたり、1行で書けるところでも数行に渡って書くいうことをしています。

DocumentApp オブジェクトのメソッド

getActiveDocument メソッド

コンテナバインドスクリプトで使うことができるメソッドです。引数はありません。戻り値として Apps Script が紐付けられている Document オブジェクトが取得できます。

const doc = DocumentApp.getActiveDocument();

このコードでは、DocumentApp オブジェクトに紐付けられているGoogle ドキュメント

ファイルを Document オブジェクトとして取得させ変数 doc に代入しています。

例えば、「sample_doc」というファイル名の Google ドキュメントファイルがあり、そのファイルがコンテナとしてこの Apps Script に紐付けられている場合、宣言された変数 doc には「sample_doc」が Google ドキュメントオブジェクトとして代入されます。そして、変数 doc に対して様々な操作を行うコードを書くことにより、Google ドキュメントファイル「sample_doc」をプログラムによって操作ができるようになります。

openById メソッド

Google ドキュメントファイルの ID を引数に与えると、戻り値としてその ID を持つ Google ドキュメントファイルを Document オブジェクトとして取得できます。

const doc = DocumentApp.openById('1Yc216Jl9');

ここでは変数 doc を宣言し、DocumentApp オブジェクトに ID が 1Yc216Jl9 の Google ドキュメントファイルを Document オブジェクトとして取得させ変数 doc に代入しています。

もし、ある Google ドキュメントファイル「sample_doc」の ID が「1Yc216Jl9」ならば、Google ドキュメントファイル「sample_doc」が Document オブジェクトとして取得され、変数 doc に代入されます。(ID を使って明示的にGoogle ドキュメントファイルを指定しているため、コンテナバインドスクリプトでなくても構いません。)そして、変数 doc に対して様々な操作を行うコードを書くことにより、Google ドキュメントファイル「sample_doc」をプログラムによって操作ができるようになります。

Document オブジェクトのメソッド

DocumentApp オブジェクトの getActiveDocument メソッドや openById メソッドなどを使って Google ドキュメントファイルに対応している Document オブジェクトが得られると、今度は Document オブジェクトのメソッドを使ってその Google ドキュメントファイルに含まれる各タブに対応する Tab オブジェクトや、さらにその下の階層にある本文に対応する Body オブジェクトなどを(Tab オブジェクトを飛び越えて直接)取得することができます。

getActiveTab メソッド

コンテナバインドスクリプトで使うことができるメソッドです。

引数はありません。

戻り値として Apps Script が紐付けられている Google ドキュメントに含まれるアクティブな Tab オブジェクトが取得できます。

const doc = DocumentApp.getActiveDocument();
const tab = doc.getActiveTab();

このコードの2行目では変数 tab を宣言し、1行目で変数 doc に代入された Document オブジェクトに含まれているアクティブなタブに対応する Tab オブジェクトを取得させ、変数 tab に代入しています。

getTab メソッド

Google ドキュメントファイルに含まれるタブの ID を引数に与えると、戻り値としてその ID をもつタブに対応する Tab オブジェクトが取得できます。

const doc = DocumentApp.getActiveDocument();
const tab = doc.getTab('t.w0eb');

このコードの2行目では変数 tab を宣言し、1行目で変数 doc に代入された Document オブジェクトに含まれているタブのうち、 ID が「t.w0eb」であるものに対応する Tab オブジェクトを取得させ、変数 tab に代入しています。

getBody メソッド

Google ドキュメントファイル中の最初のタブの中にある本文に対応する Body オブジェクトが取得できます。コンテナバインドスクリプトで使う場合は、アクティブなタブの中にある本文に対応する Body オブジェクトを取得します。

const doc = DocumentApp.openById('1Yc216Jl9');
const body = doc.getBody();

このコードの2行目では変数 body を宣言し、1行目で変数 doc に代入された Document オブジェクトに最初のタブ中の本文に対応する Body オブジェクトを取得させ、変数 tab に代入しています。

getName メソッド

Google ドキュメントファイルの名前を取得します。
引数はありません。
戻り値は Google ドキュメントファイルの名前をあらわす文字列です。

const doc = DocumentApp.openById('1Yc216Jl9');
const  doc_name = doc.getName();

このコードの2行目では、1行目で取得した Document オブジェクト doc に getName メソッドで Googleドキュメントファイルの名前を取得させ、変数 doc_name に代入しています。

Tab オブジェクトのメソッド

asDocumentTab メソッド

引数はありません。

戻り値としてタブの内容を装飾付きの文書として扱う DocumentTab オブジェクトを取得します。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();

このコードの3行目では、2行目に取得した Tab オブジェクトである tab に asDocumentTab メソッドで DocumentTab オブジェクトを取得させ、変数 documentTab に代入しています。 

DocumentTab オブジェクトのメソッド

getBody メソッド

引数はありません。

戻り値としてタブ中の本文に対応する Body オブジェクトを取得します。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();

このコードの4行目では、3行目で取得した DocumentTab オブジェクトである documentTab に getBody メソッドでタブ中の本文を Body オブジェクトとして取得させ、変数 body に代入しています。

Body オブジェクトのメソッド

insertParagraph メソッド

本文中の指定した位置に、指定した内容のテキストまたは段落を挿入するメソッドです。

位置の指定はインデックス(ここでは何番目の段落のあとに挿入するのかということを表す番号)で行います。

挿入する内容はテキスト(つまり文字列)でも良いですし、何かしらの内容を含んでいる段落を扱う Paragraph オブジェクトでも構いません。

引数は2つで、一番目の引数はインデックス、二番目の引数は テキスト(つまり文字列)または Paragraph オブジェクトです。

戻り値として新しく挿入された段落に対応する Paragraph オブジェクトが返されます。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = 'あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。';
body.insertParagraph(2, text);

このコードの5行目では、3行目で取得した Body オブジェクトである body に insertParagraph メソッドで、本文の2番目の段落の後に、4行目で変数 text に代入されたテキスト(’あのイーハトーブの…’)を段落として挿入させています。

appendParagraph メソッド

本文の最後に指定した内容のテキストまたは段落を追加するメソッドです。

追加する内容はテキスト(つまり文字列)でも良いですし、何かしらの内容を含んでいる段落を扱う Paragraph オブジェクトでも構いません。

引数は1つでテキスト(つまり文字列)または Paragraph オブジェクトです。

戻り値として新しく追加された段落に対応する Paragraph オブジェクトが返されます。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = 'あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。';
body.appendParagraphh(text);

このコードの5行目では、3行目で取得した Body オブジェクトである body に 、appendParagraph メソッドで、本文のすべての段落の後に、4行目で変数 text に代入されたテキスト(’あのイーハトーブの…’)を段落として挿入させています。

clear メソッド

本文の内容を消去するメソッドです。
引数はありません。
戻り値として内容がすべて消去された本文となる Body オブジェクトを返します。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
body.clear();

このコードの5行目では、3行目で取得した Body オブジェクトである body に clear メソッドで本文の内容をすべて消去させています。

editAsText メソッド

本文中のテキストの文字色、フォント、サイズなどを編集可能な状態へ変換するためのメソッドです。(Paragraph オブジェクトにも同じメソッドがあります。)

引数はありません。

戻り値は Text オブジェクト ( 文字色、フォント、サイズなどが編集可能な状態になったテキストを扱うオブジェクト)です。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = body.editAsText();

Paragraph オブジェクトのメソッド

setHeading メソッド

段落のレベルを設定するメソッドです。ここで言うレベルとは、「タイトル」、「見出し 1」、「見出し 2」、「見出し 3」、「見出し 4」、「見出し 5」、「見出し 6」、「標準テキスト」というように、段落にレベルを付け、文書に階層構造を持たせるためのものです。

引数は1つで、段落のレベルを表す値です。
段落のレベルを表す値として、次のようなものが用意されています。

  • DocumentApp.ParagraphHeading.TITLE
  • DocumentApp.ParagraphHeading.HEADING1
  • DocumentApp.ParagraphHeading.HEADING2
  • DocumentApp.ParagraphHeading.HEADING3
  • DocumentApp.ParagraphHeading.HEADING4
  • DocumentApp.ParagraphHeading.HEADING5
  • DocumentApp.ParagraphHeading.HEADING6
  • DocumentApp.ParagraphHeading.NORMAL

これらの値は上から順に、「タイトル」、「見出し 1」、「見出し 2」、「見出し 3」、「見出し 4」、「見出し 5」、「見出し 6」、「標準テキスト」に対応しています。

例えば、setHeading メソッドの引数に DocumentApp.ParagraphHeading.HEADING1 という値を渡すと、その段落は「見出し 1」のレベルの段落として扱われます。

また、戻り値は操作対象の Paragraph オブジェクト(つまり自分自身)です。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = '次回予定日時';
const paragraph = body.appendParagraphh(text);
paragraph.setHeading(DocumentApp.ParagraphHeading.HEADING1);

このコードでは、7行目で ’次回予定日時’ というテキストをもつ段落を「見出し1」のレベルに設定しています。

setAlignment メソッド

段落を水平方向の配置を操作するメソッドです。

つまり、段落の位置を左揃え、右揃え、中央揃え、両端揃えのいずれかに指定することができるメソッドです。

引数は1つで、次のいずれかです。

  • DocumentApp.HorizontalAlignment.LEFT
  • DocumentApp.HorizontalAlignment.CENTER
  • DocumentApp.HorizontalAlignment.RIGHT
  • DocumentApp.HorizontalAlignment.JUSTIFY

これらの値は上から順に、「左揃え」、「中央揃え」、「右揃え」、「両端揃え」に対応しています。

例えば、setAlignment メソッドの引数に DocumentApp.HorizontalAlignment.CENTER という値を渡すと、その段落は「中央揃え」で表示されます。

また、戻り値は操作対象の Paragraph オブジェクト(つまり自分自身)です。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = '次回予定日時';
const paragraph = body.appendParagraphh(text);
paragraph.setAlignment(DocumentApp.HorizontalAlignment.CENTER);

このコードでは、7行目で、’次回予定日時’ というテキストを持つ段落を「中央揃え」に設定しています。

setLineSpacing メソッド

段落の行間隔を設定するメソッドです。

引数は1つで、標準の行間隔に対する倍率です。

また、戻り値は操作対象の Paragraph オブジェクト(つまり自分自身)です。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text =  'あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。';
const paragraph = body.appendParagraphh(text);
paragraph.setLineSpacing(1.7);

このコードでは、7行目で、’あのイーハトーブの…’ という文が書かれた段落の行間をデフォルトの 1.7 倍に設定しています。

appendText メソッド

段落に新たに文や文章を追加するときに使うメソッドです。

引数は1つで、追加したい文や文章です。

また、戻り値は操作対象の Paragraph オブジェクト(つまり自分自身)です。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = 'ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。';
const paragraph = body.appendParagraphh(text);
const text_to_add = '広い門の下には、この男のほかに誰もいない。';
paragraph.appendText(text_to_add);

このコードでは、8行目で、すでに作成されている段落 ‘ある日の暮方の事である。一人の下人が…’ の後に、’広い門の下には、この男のほかに誰もいない。’ という段落を追加しています。

appendPageBreak メソッド

段落の終わりで改ページを行いたいときに使うメソッドです。

引数はありません。

戻り値は PageBreak オブジェクトです。これは「改行」をあらわすオブジェクトで、段落の中に存在できる要素の1つとして扱われています。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = 'ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。';
const paragraph = body.appendParagraphh(text);
const text_to_add = '広い門の下には、この男のほかに誰もいない。';
paragraph.appendText(text_to_add);
paragraph.appendPageBreak();

このコードでは、9行目で改ページを挿入しています。

editAsText メソッド

段落中のテキストの文字色、フォント、サイズなどを編集可能な状態へ変換するためのメソッドです。(Body オブジェクトにも同じメソッドがあります。)

引数はありません。

戻り値は Text オブジェクト ( 文字色、フォント、サイズなどが編集可能な状態になったテキストを扱うオブジェクト)です。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const text = 'ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。';
const paragraph = body.appendParagraphh(text);
const text = paragraph.editAsText();

このコードでは、最後の行で、’ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。’ という文が書かれている段落を、編集可能なテキスト(Text オブジェクト)へ変換しています。

Text オブジェクトのメソッド

setForegroundColor メソッド

テキストの文字色を設定するメソッドです。

引数は1つで、テキストの色をあらわす値です。

戻り値は操作対象の Text オブジェクト(つまり自分自身)です。

色は記号「#」とその後に続く 6桁の 16進数であらわされます。

私達が普段使っている10進数では数をあらわすために使うことができる文字は 0、1、2、3、4、5、6、7、8、9 の10個ですが、16進数では 0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f の 16個を使います。(16進数では 9 を超えても繰り上がることはなく、15を超えると初めて繰り上がります。そのために a、b、c、d、e、f を数をあらわす文字として追加して使います。a、b、c、d、e、f は 10進数でそれぞれ 10、11、12、13、14、15 に対応します。)

さまざまな色を光の三原色である「赤」「緑」「青」をもとにして考えるとき、三原色のそれぞれの色がどのぐらいの強さで混ざっているのかというあらわし方をします。また、このときそれぞれの三原色の強さを 2桁の 16進数を使って 00 から ff までの強さとしてあらわし「赤」「緑」「青」の順で並べます。

例えば、#ff0000 は「赤の強さが ff」「緑の強さが 00」「青の強さが 00」の色という意味ですから「赤」をあらわします。

また例えば、#e6f4f7 は「赤の強さが e6」「緑の強さが f4」「青の強さが f7」の色で、この文の背景に使われている色です。

このような色のあらわし方は日常生活では馴染みのないもので、よくなれた人でないと直感的にどんな色なのかを想像することは難しいでしょう。検索エンジンで「カラーコード一覧」といったキーワードで検索すると、色の名前とカラーコードを色見本として掲載しているサイトがいくつか見つかるので、参考にしてみると良いでしょう。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const heading = '次回予定日時';
const paragraph = body.appendParagraphh(heading);
paragraph.setHeading(DocumentApp.ParagraphHeading.HEADING1);
const text = paragraph.editAsText();
text.setFontColor('#6495ed');

このコードでは、8行目で ‘次回予定日時’ という言葉が書かれている段落を編集可能な Text オブジェクトに変換し、9行目でフォントの色を #6495ed に設定しています。

setFontSize メソッド

テキストのフォントサイズを設定するメソッドです。

引数は1つで、テキストのフォントサイズをあらわす数値(単位はポイント)です。

戻り値は操作対象の Text オブジェクト(つまり自分自身)です。

Googleドキュメントはデフォルトでフォントサイズは 11ポイントです。

const doc = DocumentApp.openById('1Yc216Jl9');
const tab = doc.getTab('t.w0eb');
const documentTab = tab.asDocumentTab();
const body = documentTab.getBody();
const heading = '次回予定日時';
const paragraph = body.appendParagraphh(heading);
paragraph.setHeading(DocumentApp.ParagraphHeading.HEADING1);
const text = paragraph.editAsText()
text.setFontSize(16);

このコードでは、8行目で ‘次回予定日時’ という言葉が書かれている段落を編集可能な Text オブジェクトに変換し、9行目でフォントサイズを 16 ポイントに設定しています。

JavaScript から

Google Apps Script はJavaScript の文法にしたがって拡張されたプログラミング言語ですから、もちろんもとになっている JavaScript も使います。ここでは、JavaScript から、とりあえず必要となる文法事項をいくつか説明しておきます。

インクリメント

変数に数値が代入されていて、変数の値の数を 1 増やすということはよく行われる操作の1つです。例えば、次のコードでは、初めに 変数 n に 12 を代入し、そして n の値を 1 増やし、コンソールに出力します。

let n = 12;
n = n + 1;
console.log(n);

このコードの n = n +1 の部分では

  1. n+1 を計算
  2. n に n+1 の計算結果を代入

というようなことが実行されています。その結果、最終的に、変数 n には 13 が代入されていていることになります。

実は、変数の値の数を 1 増やすための専用の演算子が用意されていて、インクリメント演算子と呼ばれています。

例えば、n++ と書くと変数 n の値が 1 増えます。n の後についている 「++」がインクリメント演算子です。

また、++n と書いても変数 n の値が 1 増えます。 n の前についている「++」がインクリメント演算子です。

ですから、先のコードは、例えば次のように書くことができます。

let n = 12;
n++;
console.log(n);

実は ++ を前につけるか後につけるかによって処理の結果が違うことがあります。以下のコードを見てください。

let n = 12;
let m = n++;

この場合、まずはじめに m に n が代入され、その結果 m は 12 となり、その次に n の値が 1 増え n は13 になります。

let n =12;
let m = ++n;

この場合、まずはじめに n の値が 1 増え n は 13 になり、その次に m に n が代入され m は 13 となります。

文字列の連結

2つの文字列を結合する方法はいくつかありますが、例えば「+」という演算子を使う方法があります。

例えば、変数 str1 に代入された文字列 ‘xyz’ と変数 str2 に代入された文字列 ‘uvw’ があるとします。このとき str1 + str2 と書くことで2つの文字列を連結することができます。

const str1 = 'xyz';
const str2 = 'uvw';
const str = str1 + str2;
console.log(str);

このコードを実行すると、コンソールに’ xyzuvw’ という文字列が出力されます。

配列のインデックスと長さ

例えば、人の名前を要素にもつ配列 [‘佐藤’, ‘鈴木’,’田中’] のことを考えてみることにします。

そして、プログラム中で扱いやすくするために、a という変数を用意して、この配列を a に代入しておくことにします。

 const a =  ['佐藤', '鈴木','田中'] ;

配列のインデックス

配列の各要素には左から順に 0、1、2 … というようにしてインデックスと呼ばれる番号がついています。

つまり、[‘佐藤’, ‘鈴木’,’田中’] では、

‘佐藤’ はインデックスが 0 の要素

‘鈴木’ はインデックスが 1 の要素

‘田中’ はインデックスが 2 の要素

ということです。

今、配列 [‘佐藤’, ‘鈴木’,’田中’] は変数 a に代入されています。

また、配列 a のインデックスが 0 の要素は a[0]、インデックスが 1 の要素は a[1]、インデックスが 2 の要素は a[2] のように書くことで取得できるのでした。

ですから、a[0] には ‘佐藤’ が、a[1] には ‘鈴木’ が、a[2] には ‘田中’ が代入されています。

配列の長さ

配列に格納されている要素の数を「配列の長さ」といいます。例えば、配列 [‘佐藤’, ‘鈴木’,’田中’] の長さは 3 です。

配列 a の要素の数は 配列に備わっている length というプロパティを使って a.length と書くことで取得できます。

ですから、変数 a に代入された配列 [‘佐藤’, ‘鈴木’,’田中’] では a.length の値は 3 です。

const a = ['佐藤', '鈴木','田中'] ;
console.log(a.length);

このコードを実行すると、コンソールに配列 a の長さ 3 が出力されます。

繰り返し処理を行う for 文

複数の操作対象があり、これらの操作対象には番号が付けられているとします。そしてこれらの操作対象のすべてに対して、同じ処理を行いたいという状況を考えてみることにしましょう。

例えば、「人の名前を要素にもつ配列 [‘佐藤’, ‘鈴木’,’田中’] のそれぞれの名前の後ろに’様’ を付けてコンソールに出力する」という処理を考えてみましょう。

操作対象は [‘佐藤’, ‘鈴木’,’田中’] という配列で、配列の各要素には左から順に 0、1、2 … というようにしてインデックスと呼ばれる番号がついています。

これらすべての要素に対して、「後ろに’様’ を付けてコンソールに出力する」という処理を行うという話です。

このような処理は、それぞれの操作対象に対して同じ処理を繰り返すので「繰り返し処理」などと呼ばれます。

そして、大抵のプログラミング言語には、繰り返し処理を簡潔に記述するために、for 文と呼ばれるものが用意されています。

JavaScript でこの例の繰り返し処理を for 文で書くと次のようになります。

// 変数 a を宣言し、操作対象の配列を a に代入
const a = ['佐藤', '鈴木', '田中'];

// for 文を使った繰り返し処理
// インデックスをあらわす変数 i を宣言し、初期値として 0 を代入
// 処理を続ける条件:インデックス i が配列 a の「長さ」未満である
// 1つ1つの処理を行ったあとに実行すること:インデックス i の値を 1 増やす
for (let i=0; i<a.length; i++){
  let str = a[i] + '様';
  console.log(str);
}

for 文は次のように書きます。

for (初期化式; 条件式; 後実行式) {
  実行したい処理
}

初期化式

操作対象が配列のようにインデックスをもつ場合、インデックスとして使う変数を宣言し初期値を代入するということがよく行われます。

例えばインデックスとして使う変数として i を使い初期値を 0 にする場合、let i = 0 と書きます。

条件式

繰り返し処理を続けて良いかどうかを判定する条件を式であらわしたものです。

例えば配列の a の要素全てに対して処理を続ける場合、インデックスが「配列の長さ-1」になるまで処理を続けるわけですから、i<a.length と書きます。

後実行式

それぞれの要素に対する処理が終わったあとに行うことをあらわした式です。

配列のインデックスを1つ1つ増やしながら繰り返し処理を行いたい場合は、それぞれの要素に対する処理が終わるたびにインデックスを 1 増やせば良いということになります。ですから、インデックスをあらわす変数として i を使っているならば、後実行式として i++ と書けばよいということになります。

今回の記事では、Google Apps Script で Google ドキュメントを操作する準備として、Google ドキュメントで用意されているオブジェクトとそのメソッド、また、これから使うことになる JavaScript の基本的事項について説明しました。次回は今回説明した事柄を使って Google ドキュメントをプログラムで作成してみたいと思います。

上部へスクロール