書籍「Google Apps Script クイックリファレンス」は大変心強い!

「Google Apps Script クイックリファレンス」(横山隆司・秀和システム刊)という書籍が2013年2月に発刊されているようなので入手しました。

国内初の本格的なGASのリファレンスブックです。いわゆる「逆引きGoogle Apps Script」とでもいうべき書籍ですね。

http://www.shuwasystem.co.jp/products/7980html/3675.html

ものすごくボリュームがあります。507ページ!

特に興味深いのは、以下の項目ですね…。Googleの公式APIドキュメントには記載がありますが、学生さんに読んでもらって分かりそうな「具体的なサンプル」は滅多に存在しませんので…。

  • 5-4 開始時間と終了時間を指定してイベントを追加するには
  • 6-14 ダッシュボードを作成するには
  • 6-17 文字列フィルタを作成するには
  • 7-12 連絡先から取得/設定できる値は
  • 8-1 テキストコンテンツを出力するには
  • 10-8 ドキュメントの末尾にリストのアイテムを追加するには
  • 10-9 ドキュメントの末尾に表を追加するには
  • 12-34 Gmailのメールから取得できる値は
  • 14-2 HTML文字列を出力するには
  • 15-1 文字列を翻訳するには
  • 17-2 1日に送信できるメールのクォータを取得するには
  • 18-21 座標から住所の情報を取得するには
  • 21-3 ScriptDbにデータを保存するには
  • 22-8 サイトにファイルキャビネットページを追加するには
  • 24-49 セルを結合するには
  • 25-9 UiInstanceを使って生成できるウィジェットは
  • 25-14 DatePickerを利用するには
  • 25-15 DateBoxを利用するには
  • 26-1 外部サイトのURLにアクセスするには
  • 26-2 OAuth設定を取得するには
  • 26-3 OAuth設定に設定する値は
  • 26-4 HTTPResponseから取得できる値は
  • 27-1 書式文字列を指定して日付を文字列に変換するには
  • 27-2 JSON文字列をオブジェクトに変換するには
  • 27-3 オブジェクトをJSON文字列に変換するには
  • 27-4 Blobオブジェクトを作成するには
  • 28-1 XML文字列を解析するには
  • 29-2 キャッシュにデータを保存するには
  • 29-3 キャッシュに保存されているデータを取り出すには
  • 30-1 Google Cloud SQLを利用するには
  • 31-2 Google Apps ScriptでBigQueryを利用するには

Google Apps Scriptクイックリファレンス

以下、公式から引用した目次です。

Chapter 1 Google Apps Scriptの概要
1-1 Google Appsとは
1-2 Google Apps Scriptとは
1-3 Google Apps Scriptでできることは
1-4 Google SpreadSheetでスクリプトを作成するには
1-5 Google Siteでスクリプトを作成するには
1-6 Google Apps Script単体プロジェクトを作成するには
Chapter 2 スクリプトエディタ
2-1 スクリプトを作成するには
2-2 スクリプトを実行するには
2-3 スクリプトの実行ログを表示するには
2-4 スクリプトをデバッグ実行するには
2-5 ブレークポイントを設定するには
2-6 作成したスクリプトをデバッグするには
2-7 スクリプトエディタで補完機能を利用するには
2-8 スクリプトエディタでプロジェクトのプロパティを編集するには
2-9 スクリプトの変更履歴を表示するには
2-10 開発したプロジェクトのスナップショットを取るには
2-11 作成したプロジェクトのプログラムをライブラリとして利用するには
2-12 ライブラリプロジェクトにコメントを反映させるには
2-13 ライブラリプロジェクトのドキュメントを見るには
Chapter 3 トリガー
3-1 トリガーとは
3-2 特定の日時にトリガーを起動するには
3-3 定期的に実行するトリガーを登録するには
3-4 スプレッドシートを開いた時に実行するトリガーを設定するには
3-5 スプレッドシートの保存時に実行するトリガーを設定するには
3-6 スプレッドシートのフォームから登録された時に実行するトリガーを設定するには
Chapter 4 Baseサービス
4-1 実行ログを出力するには
4-2 実行ログをクリアするには
4-3 現在の実行ログを取得するには
4-4 ダイアログボックスを表示するには
4-5 入力ボックスを表示するには
4-6 ログインしているユーザを取得するには
4-7 スクリプトを実行しているユーザを取得するには
4-8 スクリプトのタイムゾーンを取得するには
4-9 ユーザのメールアドレスを取得するには
4-10 ユーザのログインIDを取得するには
Chapter 5 Calendar
5-1 任意の日に終日のイベントを登録するには
5-2 任意の日に終日の拡張オプション付きイベントを追加するには
5-3 定期的な終日のイベントを追加するには
5-4 開始時間と終了時間を指定してイベントを追加するには
5-5 タイトル文字列からのquick-add機能を利用するには
5-6 開始時間と終了時間を指定した定期的なイベントを追加するには
5-7 カレンダーを作成するには
5-8 Google Calendarに設定したすべてのカレンダーを取得するには
5-9 Google Calendarに設定したすべてのマイカレンダーを取得するには
5-10 カレンダーの名前を指定してGoogle Calendarに設定したカレンダーを取得するには
5-11 IDを指定してGoogle Calendarに設定したカレンダーを取得するには
5-12 カレンダーの名前を指定してGoogle Calendarに設定したマイカレンダーのカレンダーを取得するには
5-13 カレンダーのIDを指定してGoogle Calendarに設定したマイカレンダーのカレンダーを取得するには
5-14 プライマリカレンダーを取得するには
5-15 繰り返しイベントのルールを作るには
5-16 Google Calendarに登録されているカレンダーの予定を取得するには
5-17 カレンダーに設定している色を取得するには
5-18 カレンダーの説明を取得するには
5-19 カレンダーを削除するには
5-20 終日のイベントを取得するには
5-21 IDを指定して、定期的なイベントを取得するには
5-22 カレンダーのIDを取得するには
5-23 カレンダーの名前を取得するには
5-24 カレンダーのタイムゾーンを取得するには
5-25 カレンダー設定の「リストに表示」にチェックがあるかどうかを確認するには
5-26 カレンダーがプライマリカレンダーかどうかを確認するには
5-27 カレンダーの所有者が現在のアカウントかどうかを確認するには
5-28 カレンダーの表示状態を確認するには
5-29 カレンダーの色を設定するには
5-30 カレンダーの詳細説明を設定するには
5-31 カレンダーの「リストに表示」設定を変更するには
5-32 カレンダーの名前を設定するには
5-33 カレンダーの表示状態を設定するには
5-34 カレンダーのタイムゾーンを設定するには
5-35 定期的なイベントで1日毎の繰り返し設定を作成するには
5-36 定期的なイベントで指定した回数分登録されるのを除外するには
5-37 定期的なイベントの終了日を指定するには
5-38 定期的なイベントで特定の日付には登録されないようにするには
5-39 定期的なイベントで1ヶ月毎の繰り返し設定を作成するには
5-40 定期的なイベントで1ヶ月毎の繰り返し設定を指定した回数分除外するには
5-41 定期的なイベントで1週間毎の繰り返し設定を作成するには
5-42 定期的なイベントで1週間毎の繰り返し設定を指定した回数分除外するには
5-43 定期的なイベントで1年毎の繰り返し設定を作成するには
5-44 定期的なイベントで1年毎の繰り返し設定を指定した回数分除外するには
5-45 イベントの詳細情報を取得、設定するには
5-46 定期的なイベントの詳細情報を取得、設定するには
5-47 イベントを削除するには
Chapter 6 Charts
6-1 データテーブルを作成するには
6-2 面グラフを作成するには
6-3 棒グラフを作成するには
6-4 横向きの棒グラフを作成するには
6-5 折れ線グラフを作成するには
6-6 円グラフを作成するには
6-7 散布図を作成するには
6-8 表を作成するには
6-9 グラフの表示を変更するには
6-10 グラフの表示サイズを変更するには
6-11 折れ線グラフをなめらかな曲線で表示するには
6-12 円グラフを3D表示にするには
6-13 テキストのスタイルを生成するには
6-14 ダッシュボードを作成するには
6-15 数値の範囲フィルタを作成するには
6-16 カテゴリフィルタを作成するには
6-17 文字列フィルタを作成するには
6-18 グラフのカラムを表示するかどうかを制御するには
Chapter 7 Contacts
7-1 連絡先を作成するには
7-2 連絡先グループを作成するには
7-3 連絡先を取得するには
7-4 連絡先を削除するには
7-5 すべての連絡先を取得するには
7-6 連絡先にメールアドレスを追加するには
7-7 連絡先に電話番号を追加するには
7-8 連絡先にインスタントメッセンジャーのアカウントを追加するには
7-9 連絡先にURLを追加するには
7-10 連絡先に勤務先を追加するには
7-11 連絡先に誕生日を追加するには
7-12 連絡先から取得/設定できる値は
Chapter 8 Content
8-1 テキストコンテンツを出力するには
8-2 テキストコンテンツに文字列を追加するには
8-3 テキストコンテンツに追加した文字列をクリアするには
8-4 テキストコンテンツをファイルとしてダウンロードさせるには
8-5 テキストコンテンツに文字列を設定するには
8-6 テキストコンテンツのMimeTypeを設定するには
8-7 TextOutputから取得できる値は
8-8 設定できるMimeTypeは
Chapter 9 DocsList
9-1 ファイルを作成するには
9-2 フォルダを作成するには
9-3 ファイルを取得するには
9-4 フォルダを取得するには
9-5 ファイルを検索するには
9-6 ファイルの共同編集者を追加するには
9-7 ファイルの閲覧者を追加するには
9-8 ファイルの共同編集者を削除するには
9-9 ファイルの閲覧者を削除するには
9-10 ファイルのコピーを作成するには
9-11 ファイル名を変更するには
9-12 ファイルの詳細情報を取得するには
9-13 ファイルに文字列を追加するには
9-14 ファイルに追加した文字列をクリアするには
9-15 ファイルの中身を置き換えるには
Chapter 10 Document
10-1 ドキュメントを作成するには
10-2 IDを指定してドキュメントを取得するには
10-3 アクティブなドキュメントを取得するには
10-4 ドキュメントにフッターを追加するには
10-5 ドキュメントにヘッダーを追加するには
10-6 ドキュメントの末尾に区切り線を追加するには
10-7 ドキュメントの末尾に段落を追加するには
10-8 ドキュメントの末尾にリストのアイテムを追加するには
10-9 ドキュメントの末尾に表を追加するには
10-10 ドキュメントの末尾に改ページを追加するには
10-11 ドキュメントの末尾に画像を追加するには
10-12 ドキュメントに区切り線を挿入するには
10-13 ドキュメントに段落を挿入するには
10-14 ドキュメントにリストのアイテムを挿入するには
10-15 ドキュメントに表を挿入するには
10-16 ドキュメントに改ページを挿入するには
10-17 ドキュメントに画像を挿入するには
10-18 ドキュメントの編集内容を保存するには
10-19 ドキュメントのテキストオブジェクトを取得するには
10-20 ドキュメントの本文を置換するには
10-21 ドキュメントの各種情報を取得、設定するには
10-22 ヘッダーを細かく編集するには
10-23 フッターを細かく編集するには
10-24 段落を細かく編集するには
10-25 画像を細かく編集するには
10-26 テキストを細かく編集するには
Chapter 11 Finance
11-1 株価の履歴を取得するには
11-2 株価情報の詳細を取得するには
11-3 取引データの詳細を取得するには
Chapter 12 Gmail
12-1 ラベルを作成するには
12-2 ラベル名を指定してラベルを取得するには
12-3 全てのラベルを取得するには
12-4 ラベルを削除するには
12-5 チャットの履歴を取得するには
12-6 Gmailの受信トレイのメールを取得するには
12-7 Gmailの受信トレイにある重要なメールを取得するには
12-8 Gmailのスター付きメールを取得するには
12-9 Gmailの迷惑メールを取得するには
12-10 Gmailのゴミ箱にあるメールを取得するには
12-11 Gmailのメールのスレッドを取得するには
12-12 GmailのメールIDからメールを取得するには
12-13 Gmailのメールを既読にするには
12-14 Gmailのメールを未読にするには
12-15 Gmailのスレッドを既読にするには
12-16 Gmailのスレッドを未読にするには
12-17 Gmailのスレッドを重要なスレッドにするには
12-18 Gmailのスレッドを普通のスレッドにするには
12-19 Gmailのメールをゴミ箱に移動するには
12-20 Gmailのスレッドをアーカイブ化するには
12-21 GmailのスレッドをSpamに設定するには
12-22 Gmailのスレッドを受信トレイに移動するには
12-23 Gmailのメールをリフレッシュするには
12-24 Gmailメールを検索するには
12-25 Gmailのメールをスター付きにするには
12-26 Gmailのスター付きメールのスターを外すには
12-27 Gmailのメールの件数を取得するには
12-28 Gmailのラベルにスレッドを追加するには
12-29 Gmailのラベル内のスレッドを取得するには
12-30 Gmailのラベルからスレッドを削除するには
12-31 Gmailのラベルから取得できる値は
12-32 Gmailのスレッドのメールに返信するには
12-33 Gmailのスレッドから取得できる値は
12-34 Gmailのメールから取得できる値は
12-35 Gmailのメールを転送するには
Chapter 13 Group
13-1 ログインしているユーザが所属しているGoogle Groupを取得するには
13-2 Google Groupのメールアドレスからグループを取得するには
13-3 Google Groupから取得できる値は
Chapter 14 HTML
14-1 htmlファイルを作成するには
14-2 HTML文字列を出力するには
14-3 HTML出力にコンテンツを追加するには
14-4 HtmlOutputでタイトルを設定するには
14-5 HtmlOutputのコンテンツをクリアするには
14-6 HtmlOutputで取得、設定できる値は
14-7 HTMLテンプレートを作成するには
14-8 HTMLテンプレートからHTML出力を生成するには
14-9 HTMLテンプレートから出力されるJavaScriptコードを取得するには
14-10 HTMLテンプレートに設定したコンテンツをそのまま取得するには
Chapter 15 Language
15-1 文字列を翻訳するには
Chapter 16 Lock
16-1 ユーザのみ有効なでプライベートロックを取得するには
16-2 すべてのユーザで有効なパブリックロックを取得するには
16-3 ロックを取得するには
16-4 ロックを解放するには
16-5 ロックを取得しているかどうかを確認するには
Chapter 17 Mail
17-1 メールを送信するには
17-2 1日に送信できるメールのクォータを取得するには
Chapter 18 Maps
18-1 静的なマップオブジェクトを取得するには
18-2 特定の住所のマップオブジェクトを取得するには
18-3 特定の住所にマーカーをセットするには
18-4 地図の中に直線を引くには
18-5 地図に表示する直線の定義を開始するには
18-6 直線の頂点を追加するには
18-7 地図に表示する直線の定義を終了するには
18-8 設定したマーカーをクリアするには
18-9 設定した直線をクリアするには
18-10 地図の中心を設定するには
18-11 表示されるマーカーにカスタムスタイルを適用するには
18-12 地図の画像フォーマットを設定するには
18-13 地図の言語を設定するには
18-14 地図の種類を変更するには
18-15 地図に表示されるマーカーを変更するには
18-16 モバイル向けの地図を出力するには
18-17 直線のスタイルを設定するには
18-18 地図のサイズを設定するには
18-19 地図を拡大縮小するには
18-20 住所からGeocodeを取得するには
18-21 座標から住所の情報を取得するには
18-22 Geocodeの言語を指定するには
18-23 Geocodeのリージョンを指定するには
18-24 2点間のルートを計算するには
18-25 指定した場所の高度データを取得するには
Chapter 19 Properties
19-1 スクリプトのプロパティにキーをセットするには
19-2 スクリプトのプロパティに複数のキーを一括でプロパティを設定するには
19-3 スクリプトのプロパティを取得するには
19-4 スクリプトのプロパティを一括で取得するには
19-5 スクリプトのプロパティのキーの一覧を取得するには
19-6 スクリプトのプロパティを削除するには
19-7 スクリプトのプロパティを全て削除するには
19-8 ユーザプロパティにキーをセットするには
19-9 ユーザプロパティに複数のキーを一括でセットするには
19-10 ユーザプロパティを取得するには
19-11 ユーザプロパティを一括で取得するには
19-12 ユーザプロパティのキーの一覧を取得するには
19-13 ユーザプロパティを削除するには
19-14 ユーザプロパティを全て削除するには
Chapter 20 Script
20-1 トリガーオブジェクトを生成するには
20-2 登録されているトリガーの一覧を取得するには
20-3 登録されているトリガーを削除するには
20-4 登録されているサービスを取得するには
20-5 承認を解除するには
20-6 SpreadSheet用トリガー作成オブジェクトを生成するには
20-7 時間主導型トリガー作成オブジェクトを生成するには
20-8 時間主導型トリガーに毎日起動することを指定するには
20-9 時間主導型トリガーに毎時間起動することを指定するには
20-10 時間主導型トリガーに毎分起動することを指定するには
20-11 時間主導型トリガーに毎週起動することを指定するには
20-12 時間主導型トリガーに毎月何日に起動することを指定するには
20-13 時間主導型トリガーに「何時に実行するか」を指定するには
20-14 時間主導型トリガーに特定の日時を指定するには
20-15 時間主導型トリガーに細かい起動時間(分)を指定するには
20-16 時間主導型トリガーにタイムゾーンを指定するには
20-17 時間主導型トリガーを登録するには
Chapter 21 ScriptDb
21-1 ScriptDbとは
21-2 ScriptDbにアクセスするためのインスタンスを取得するには
21-3 ScriptDbにデータを保存するには
21-4 ScriptDbに複数のデータを一気に保存するには
21-5 ScriptDbからデータを取得するには
21-6 特定の検索条件を指定して、ScriptDbからデータを取得するには
21-7 ScriptDbに保存したデータを削除するには
21-8 ScriptDbに保存したデータを一括で削除するには
21-9 ScriptDbに保存したデータのIDを指定して削除するには
21-10 ScriptDbに保存したデータのIDを指定して一括で削除するには
21-11 特定の検索条件を指定して、ScriptDbに保存されているデータ件数を取得するには
21-12 一括更新時に全ての処理が成功したかどうかを確認するには
21-13 ScriptDbからデータを取得するクエリの条件指定の仕方は
21-14 ScriptDbから取得したデータをソートするには
21-15 クエリの取得結果の件数の上限を指定するには
21-16 クエリの取得結果の開始位置を指定するには
21-17 クエリの取得結果をページ指定で取得するには
21-18 クエリの取得結果の件数を取得するには
21-19 クエリの取得結果から、データを1件取得するには
21-20 クエリの取得結果で、次のデータがあるかどうかを確認するには
21-21 キーの読み出しやクエリで取得したデータをJSON形式の文字列で出力するには
21-22 キーの読み出しやクエリで取得したデータのIDを取得するには
21-23 キーの読み出しやクエリで取得したデータのプロパティを参照するには
Chapter 22 Sites
22-1 Google Siteにサイトを作成するには
22-2 サイトを取得するには
22-3 URLを指定してサイトを取得するには
22-4 作成したサイトを一括で取得するには
22-5 アクティブなSiteを取得するには
22-6 アクティブなPageを取得するには
22-7 サイトにアナウンス用ページを追加するには
22-8 サイトにファイルキャビネットページを追加するには
22-9 サイトにリストページを追加するには
22-10 サイトにWebページを追加するには
22-11 サイトの共同編集者を追加するには
22-12 サイトのオーナーを追加するには
22-13 サイトの閲覧者を追加するには
22-14 サイトの共同編集者を削除するには
22-15 サイトのオーナーを削除するには
22-16 サイトの閲覧者を削除するには
22-17 サイトのページを検索するには
22-18 サイトから取得できる情報は
22-19 リストページのリストに列を追加するには
22-20 ページにコメントを追加するには
22-21 ページに添付ファイルを追加するには
22-22 リストページのリストに行を追加するには
22-23 ファイルキャビネットページのリストにリンクを追加するには
22-24 アナウンスページにアナウンスを追加するには
22-25 テンプレートページを作成するには
22-26 テンプレートからページを作成するには
22-27 ページを削除するには
22-28 ページから取得できる情報は
22-29 コメントを削除するには
22-30 コメントから取得できる値は
22-31 リストページの行から取得できる値は
22-32 リストページの列から取得できる値は
22-33 添付ファイルを削除するには
22-34 ページの添付ファイルから取得できる値は
22-35 ページの種類と添付ファイルの種類は
Chapter 23 SOAP
23-1 WSDLファイルを取得するには
23-2 WSDLのサービス名を取得するには
23-3 WSDLServiceから取得できる値は
Chapter 24 Spreadsheet
24-1 アクティブなスプレッドシートを取得するには
24-2 アクティブなシートを取得するには
24-3 アクティブなRangeを取得するには
24-4 スプレッドシートを開くには
24-5 スプレッドシートを作成するには
24-6 スプレッドシートに対する変更を適用するには
24-7 スプレッドシートに共同編集者を追加するには
24-8 スプレッドシートに閲覧者を追加するには
24-9 スプレッドシートにカスタムメニューを追加するには
24-10 スプレッドシートに追加したカスタムメニューを削除するには
24-11 アクティブなシートに行のデータを追加するには
24-12 アクティブなシートを削除するには
24-13 アクティブなシートをコピーするには
24-14 シートを追加するには
24-15 アクティブなシートを移動させるには
24-16 スプレッドシートの共同編集者を削除するには
24-17 スプレッドシートの閲覧者を削除するには
24-18 スプレッドシートにカスタムUIのダイアログを表示させるには
24-19 スプレッドシートに通知ウインドウを表示させるには
24-20 シートの最下行にデータを追加するには
24-21 シートの値、書式を全てクリアするには
24-22 シートのコメントを削除するには
24-23 シートの全てのセルの値を削除するには
24-24 シートの全てのセルの書式を削除するには
24-25 シートを他のスプレッドシートにコピーするには
24-26 シートの列を削除するには
24-27 シートの行を削除するには
24-28 シートの行を隠すには
24-29 シートの列を隠すには
24-30 シートにグラフを追加するには
24-31 シートのグラフを削除するには
24-32 シートに行を挿入するには
24-33 シートに列を挿入するには
24-34 シートに画像を追加するには
24-35 非表示にした列を表示させるには
24-36 非表示にした行を表示させるには
24-37 セルの値を並び替えるには
24-38 Spreadsheetから取得できる値は
24-39 Sheetから取得できる値は
24-40 範囲を選択するには
24-41 結合したセルを分割するには
24-42 特定範囲の値、書式を全てクリアするには
24-43 特定範囲のコメントを削除するには
24-44 特定範囲のセルの値を削除するには
24-45 特定範囲のセルの書式を削除するには
24-46 特定範囲のセルの書式をコピーするには
24-47 特定範囲のセルの値をコピーするには
24-48 特定範囲のセル(値、書式全て)をコピーするには
24-49 セルを結合するには
24-50 セルの値を移動するには
24-51 指定範囲をオフセットを指定して変更するには
24-52 Range内のセルの値をソートするには
24-53 Rangeから取得できる値は
24-54 シートの保護を行うには
24-55 シートの保護中に編集可能なユーザを追加するには
24-56 シートの保護中に編集可能なユーザを削除するには
24-57 シートの保護中に編集可能なユーザを取得するには
24-58 シートが保護されているかどうかを取得するには
24-59 グラフを作成するときに範囲を指定するには
24-60 グラフで指定した範囲を削除するには
24-61 グラフのオプションを設定するには
24-62 グラフの種類を指定するには
24-63 グラフの表示位置を指定するには
24-64 グラフオブジェクトを作成するには
24-65 作成したグラフオブジェクトを編集するには
24-66 作成したグラフから取得できる値は
24-67 グラフの詳細情報から取得できる値は
Chapter 25 Ui
25-1 Google Apps ScriptでUIを利用するには
25-2 UIを構成するためのインスタンスを生成するには
25-3 生成したUiInstanceを取得するには
25-4 UIを画面に追加するには
25-5 ウィジェットにタイトルを設定するには
25-6 UiInstanceに設定できる値は
25-7 GUI Builderで作成したUIをロードするには
25-8 ウィジェットのIDを指定してオブジェクトを取得するには
25-9 UiInstanceを使って生成できるウィジェットは
25-10 アンカーを利用するには
25-11 ボタンを利用するには
25-12 キャプション付きパネルを利用するには
25-13 チェックボックスを利用するには
25-14 DatePickerを利用するには
25-15 DateBoxを利用するには
25-16 サーバ側で動作するイベントハンドラを利用するには
25-17 クライアント側で動作するイベントハンドラを生成するには
25-18 メニューを利用するには
25-19 タブを利用するには
25-20 SubmitButtonを利用するには
Chapter 26 UrlFetch
26-1 外部サイトのURLにアクセスするには
26-2 OAuth設定を取得するには
26-3 OAuth設定に設定する値は
26-4 HTTPResponseから取得できる値は
Chapter 27 Utilities
27-1 書式文字列を指定して日付を文字列に変換するには
27-2 JSON文字列をオブジェクトに変換するには
27-3 オブジェクトをJSON文字列に変換するには
27-4 Blobオブジェクトを作成するには
27-5 スクリプトの実行中にSleepさせるには
Chapter 28 Xml
28-1 XML文字列を解析するには
28-2 XML要素を生成するには
28-3 XML属性を生成するには
28-4 XmlAttributeから取得できる値は
28-5 XmlElementからXML文字列を出力するには
28-6 XmlElementから取得できる値は
28-7 XmlDocumentからXML文字列を出力するには
28-8 XmlDocumentの最上位の要素を取得するには
28-9 XmlNameから取得できる値は
Chapter 29 Cache
29-1 キャッシュを取得するには
29-2 キャッシュにデータを保存するには
29-3 キャッシュに保存されているデータを取り出すには
29-4 キャッシュに保存されているデータを削除するには
Chapter 30 JDBC
30-1 Google Cloud SQLを利用するには
30-2 データベースに接続するには
30-3 接続をクローズするには
30-4 AutoCommitを制御するには
30-5 Statementを生成するには
30-6 PreparedStatementを生成するには
30-7 select文を実行するには
30-8 PreparedStatementのプレースホルダーに値を設定するには
30-9 select文の結果を1行取得するには
30-10 select文の結果の列の値を取得するには
30-11 更新系SQL文を実行するには
30-12 行数を返さないSQL文を実行するには
30-13 実行するSQL文をバッチ登録するには
30-14 登録された複数のSQL文をバッチ実行させるには
30-15 データベースへの変更をコミットするには
30-16 データベースへの変更をロールバックするには
30-17 Statementをクローズするには
30-18 プレースホルダーに設定するための特殊なオブジェクトを生成するには
Chapter 31 BigQuery
31-1 BigQueryとは
31-2 Google Apps ScriptでBigQueryを利用するには
31-3 BigQueryのクエリの書き方は
31-4 BigQueryで実行するクエリで使える関数は
31-5 BigQueryでクエリを実行するには
31-6 BigQueryで実行しているクエリの終了を確認するには
31-7 BigQueryのテーブルのデータを取得するには
31-8 テーブルやクエリの実行結果から行データを取得するには
31-9 取得した行データから列のデータを取得するには
31-10 BigQueryに行を追加するには
A Appendix
A-1 Google Apps Scriptに関する参考資料について
A-2 外部JavaScriptライブラリをGoogle Apps Scriptに取り込む

おわりに

欲を言えば25章のUIで、ファイルアップロードについても解説していただければよかったかな、と。

でも使える情報が多くて助かります。突破力のあるコードを書かねばならないときに、見通しが出る書籍があるのは大変心強いです。
■Google Apps Scriptクイックリファレンス

卒論が1ミリも進まない4年生におくる,TeX卒論サンプル

この記事は古い記事です(2013年初稿執筆)

関連情報

2013年度版加筆を計画中

INDEX

  • 序文
  • まずは読んでいただきたい完成版
  • TeXサンプルに書かれている日本語から…
  • はじめに
  • 卒論とは何なのか
  • TIPSと更新
  • 関連リンク

待つ身はつらいものです

(2013年初頭のお話)研究室内での卒論提出締め切りまであと10日ほどだというのに,いまだに毎日学校に来ない4年生がいらっしゃいます.

年末年始も,この成人式の連休も,私は彼の言葉を信じ,適切な課題(これも今の段階では絶体絶命ラインを大きく下回っているが)を設定し,呼びかけ,時には直電もし,待っているのですが,見事に裏切られます.

(私がなめられているのかもしれませんが,社会もナメているのかもしれませんが)

彼らはきっと自分の卒業を信じていないのでしょう.

しかし待つ身というのはつらいものです.K君、R君、S君、N君…はやく論文構成を出していただきたいのですが…。

…と学生に無理な負荷をかけても仕方ないので,自分自身でもどれぐらい時間がかかるか体験してみようと思いました.

研究室内でのTeXによる卒論のサンプルを丁寧に作って,サンプルがてらの未推敲の文章をモリモリと書いてみます.
(本当はやらねばならない事務仕事や執筆仕事があるのですが)
2時間もするうちに10ページはかけたので以下,公開してみます.

まずは読んでいただきたい完成版

Sotsuron(PDF)

卒論が1ミリも進まない4年生におくる,卒論サンプル (27442 ダウンロード) (TeX一式)

#卒論が1ミリも進まない4年生におくる,卒論サンプル README

Version 1.1 20:07 2013/01/15

【執筆に使用した環境】

執筆に使用した環境としては,LabEditorとTeXインストーラ3もしくはLabTeX Installerだけです.

■Lab Editor
http://www.labeditor.com/

□LabTeX Installer
http://www.labeditor.com/labtexinst.html
もしくは

□TeXインストーラ3
http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html

最近の国際会議などでよく使われるifxetexを通したい人はTexインストーラ3のほうがおすすめかも.

【使い方】
TeXインストーラ3をインストールし,LabEditorをインストールし,セットアップ後,
Sotsuron.texをLabEditorで開いてビルド(F12)します.

基本的にはLabEditorのマニュアルに従ってください.
図はコマンドラインでebb filename.pngして,bbサイズを取得します.

【おことわり -disclaimer-】
著作権は白井暁彦に帰属します.将来的に更新します(推敲していないので).
また本稿の内容は神奈川工科大学や白井研究室の特定の人物や特定の研究とは全く関係ありません.
どちらかというと,いままでの研究者人生,教育者,執筆者としての経験に基づいていますので,
中身的な保証もありません.フィードバックをいただけるのであれば幸いですが下の方法でお願いします.

【お問い合わせ】
メールは日に3桁超えるので,役に立ちません.
Twitter(@o_ob)ぐらいなら反応するかもしれません.
いずれにせよボランティアですから.
最新情報などはこちらへ

卒論が1ミリも進まない4年生におくる,TeX卒論サンプル


【謝辞】
ベースはこちらのyosshi71jpによるTeX解説から作っています.ゼロから作りたい人はこちらをどうぞ.
そのほうが絶対勉強になりますって!
http://d.hatena.ne.jp/yosshi71jp/20101210/1292005429

TeXサンプルに書かれている日本語から…

<以下,駄サンプル文から引用,改訂予定,上記PDFのほうが読み物としては読みやすいはず.以下,論述なので基本は「である調」であるべきだが、意図的に口語が混ざっていることに注意>

はじめに

本論文はドラゴンクエストにおける魔法の命名規則におけるユーザビリティにおける雑文から,TeXを使った卒論執筆手法を整理するものである.
論文の要旨とは,その論文の主題や前提となる背景,論文の構成,研究の成果や価値を特徴付ける実験手法や結果について1ページ程度で凝縮して表現するものである.

文体として「まず1章では…,
次に2章では…,最後に3章では…,
以上のような構成において,新しい視点を整理した.」といったテンプレートに沿った文体になるべきで,随筆調になったり,(たとえ本当に精神的な支えであったとしても)家族や恋人,指導教官への愛敬の念を述べてはいけない.

執筆順としては,完璧に書けないまでも,論文要旨は「卒業するぞ」と心に近い,指導教員と論文のストラテジを相談した直後に書いてしまうのが良い.後から『う~ん,ここはどうかな~』といって直されてはたまったものではないだろう(先生もたまったものではないのだ).

もちろん最初から完璧な論文要旨などかけるわけがない,しかし,骨子となる流れはできているべきなのだ.論文を「序論,本論,結論の3パートに分けよ」という指定がある大学もある.その場合は,どのパートが何章にあたるのか,示せる場所はここしかないし,ページボリュームを考える上でも,執筆終了できるまでの体力・時間配分もこの段階で設計されるべきなのである.
そして,最後に結論パートを書き終わった段階で,再度この要旨を推敲すれば良いのである.

本サンプルではドラゴンクエストにおける魔法の命名規則が出現するが,間違っても神奈川工科大学ではこのような学位論文を受け付けてはいないことを注記しておく.
また各大学・研究室では脈々と引き継がれてきた先輩方のテンプレや,先生方の指導方針があるはずである.そちらのほうが優先であることは間違いない.

%%% 目次
\tableofcontents
\mainmatter %%% 本文ここから

\part{序論} %3部構成を取る必要がない場合もあります
\chapter{はじめに}

\section{卒論とは何なのか}

卒業論文とは,大学を卒業するものが得る学士という称号と引き換えに書くものである.修士は修士論文,博士号あれば博士論文.
通常,「学位論文」と呼ぶ場合は博士論文を指すことが多い.

人によっては一生に一度の「名前の残る著作」であり,書く前と書いたあとでは,何かが違うはずである.

博士論文にもなれば数百ページを超える.人間として大切なものの1つや2つぐらい失う覚悟でなければ到底書ききれない.

学位論文は指導教員の指導に従い,フォーマットに沿った研究や執筆を行うことで,なんとか形になるものである.
修士論文では,学部時代に求められた問題解決能力に加えて,修士にふさわしい問題発見能力が備わっているかどうか,という点が多く見られるはずである.つまり研究として,本当に新規性があるかどうか(引用や予備調査など),客観的な品質が保たれているか(実験方法や誤差の扱い,再現性)などが重要である.

博士論文についてはここでは多くは語らない,ただ言えることは修士論文にページ数だけ多くなれば学位がもらえると言うことではないことである.
簡単にいえば,この学位論文を通して,人類の歴史にどのような意味をもたせ,新たな学際分野を創出していけるのか,といった点を示すための「点や直線ではない面積」が必要であることが多い.

こういった博士論文はすべて,大学の図書館および国立大学であれば国会図書館に収蔵されているはずである.
一方で,自信を持って「博士論文はこう書け!」といったお手本のようなものがないのも現実である.
誰もがそんな風に自信を持って博士号がとれるわけではない,本当に生きるか死ぬかのギリギリでもらえるラインであることが多いからである.

本サンプルではそのような切羽詰まった世界ではなく,
単なる\textbf{TeXで書く大きめの論文}を示すにとどまる.そのうち,気が向けば筆を執ることもあるかもしれないが,それはこれを活用した読者各位の心がけ次第といったところだろうか.

本サンプルが読者各位の人生の糧になる事を願ってやまない.

\section{課題の設定}
卒業研究において,最も最初に取り組むべき事はなんだろうか.

『就活が忙しくてそんなどころじゃなかったッス』という卒研生も多いだろう.
しかしながら,就活中の面接で「キミはどんな研究をしているのだね?」と聞かれなかった4年生はいないはずである.

その面接官は君に『マイクロソフトの新しいゲーム用コントローラであるKinect\texttrademark を使った,新奇なVRエンタテイメントシステムを開発しています』といった,超専門的で価値があるのかないのかわからない話をして貰いたいとは微塵も思っていないはずである.

問題は,その研究が
\begin{enumerate} %番号付き列挙.便利なので覚えるべし
\item 『どんな課題を解決しようとしているのか?』%ここに項目を書く
\item 『その課題解決はうちの業務に役に立ちそうか?』
\item 仮に役に立たなくても『そのガンバリはうちの業務に役に立ちそうか?』
\end{enumerate}

といった程度のことを聞いているに過ぎない.

このような背景において,間違っても

\begin{itemize} %ただの箇条書き,これも便利なので覚えるべし.
\item c++とC\#ではC\#のほうが得意です
\item Processingしか書けません
\item KinectはOpenNIもMicrosoft KinectSDKでもどっちでもいけます
\item 処理はGPU上で動いてます
\end{itemize}

なんていう話をしても仕方がないのである.
上記に列挙したような要素は,開発の中身であって,先端の研究をしている人間が,採用担当者や他の研究室の先生に『わかってもらおう』などという態度で前提をすっ飛ばして語っては,失礼千万あまりあまって,ただのギークと思われても仕方がない.

論文というものは,残念ながらインタラクティブ性をもたせることが難しい.
しかしながら,想定した読者に対して段階を踏ませることは可能である.
つまり,この章では『なんでそもそもこんな研究しとるねん』という「課題の設定」を行うべきなのである.
英語でわかりやすく言えば,\textit{motivation}である.
モチベーションがなければ,研究する意味もない.

そして,読み手にもそのモチベーションを共有させる必要があるのだ.

\section{陥りやすい罠}

この時期(論文執筆時点:2013年1月上旬),序論において陥りやすい過ちがある.
それはこのパートを「一番最初に書く」ということである.

%クォーテーションはこう書く↓
『なんだよさっき,“一番最初に”って言ったじゃないか!』とお怒りを受けそうだが,研究(\textit{re-search})を進める上で調査(\textit{search})をせよ,つまり先人の研究や論文検索をせよ,という前期のゼミで先生方が課しているようなアタリマエのことを述べただけであり,最初に書くのはせいぜいメモ程度,論文要旨程度の分量で構わない.

このパートは年末年始のコタツでTVなど見ながら書いていては,完全な随筆となってしまう.
資料として図書館で借りてきた図書をモクモク読みながら書いていても,
『ああ!俺の研究はどこまでもダメ研究だ!』という気持ちになってくる.

そしてどこまで書いても,
『ああ!この論文はこのペースで行くと100ページ超えてしまう……!今年は卒業無理かもしれない』という絶望感で覆われることになる.

だから書いてはいけないのだ.

もちろん,資料は借り給え.借りたら,有益そうなものはまず書名を文末にある引用文献リストに載せ給え.引用する必要があれば\ref{tex}といった形で本文で引用すれば良い.
図版なども同様である.
まずはスキャナでもスマホでもガラケーでもいいから図版を撮影し,画像の入れ方を学ぶべきである.
PNG図の入れ方がわかれば,あとからPowerPointでいくらでも清書したら良い.

書物を進める順番については次の章で述べる.

\chapter{執筆順序}

卒業論文に定められた執筆順序というものはない.
読み手からすれば「第1ページ,第1章から読むであろう」というナンバリングは存在するが,それも厳格に定められたルールではないだろう.

\fbox{読み手が正しく理解できるか},という品質の問題と,\fbox{読み手と同じ順序で書く}という方法は一致している必要がない.

つまり,第1章から書くのは間違いである.
第1章は,読み手の第一印象である書き手の丁寧さや,前提知識の共有,課題の共有を行うべき,大事な章である.
初めて卒業論文を書くであろう,君がいきなり書いても,論文を書き終わる頃にはもっと大きくなった君がいる.
絶対に推敲したくなるに違いない.

では,どこの章から書くべきなのだろうか?
筆者おすすめの方法は以下のとおりである.

おすすめの執筆順序
下のTeXソースをコンパイルするとこのような美しい表になる

% 表の挿入
\begin{table}[h]
\caption{おすすめの執筆順序}% {}内に表題を書く
\begin{center}
\begin{tabular}{|c|c|l|} %セル内の位置{c:センタリング,l:左寄せ},パイプ「|」縦罫線
\hline
1 & 4章 & 開発の中身,実験方法となんとなく見えている(or 予想される)結果 \\
\hline
2 & 3章 & 理論と仮説,この段階ではだいたいでいい,上記実験のベースになっている素案ぐらいでも. \\
\hline
3 & 5章 & 結果のグラフ,理解できるグラフを描きなおすために実験をやり直してもいい.チート厳禁. \\
\hline
4 & 2章+3章 & 関連研究,課題設定→理論までの展開を整理しながら \\
\hline
5 & 1章+6章 & できた結果について素直に受け止められるよう,風呂敷を広げすぎずに. \\
\hline
6 & 論文概要 & 章構成を再度見直し,推敲時にブレないように,ここで固める. \\
\hline
7 & 全章推敲 & このあたりでやっと先輩や先生に見せられるレベル,ただし卒業は見通しが出る. \\
\hline
\end{tabular}
\end{center}
\end{table}

以上のような流れで書いて見ることをおすすめする.

この流れは特に工学をベースとする学問を想定している.

\subsection{4章は“君なら書ける”}

4章は「動いているもんがあるんだから,書けるだろ」という考えでいい.
プログラミングをやめて,コメントやWikiを書くつもりで,コードの設計や,開発環境のセットアップなどを書き始めるのもエンジンがかかる.\footnote{実際には「開発環境などは付録に書け」と指導教員の指導を受けるだろう.だとしても,冬休み期間中に1ミリも執筆が進まないよりは,先生の血圧計は高まらないことが経験的に報告されている.}

\subsection{写真を撮れ}
まずは動いているものがあれば,写真を撮ろう.スクリーンショットを撮ろう.ソースコードの大事な場所や体験者の様子など,わかりやすい図(\textit{key figure})を配置して,キャプションに,言いたかったことをしっかりメモしておこう.
先生にそれを見てもらえば大体のあらすじはわかる.言葉尻は優しくなり,血圧計の針も下がろうというものだ.

『動いているプログラムすらないんです……』という学生もいるだろう.
そんな時は引きこもりなどする必要はない.アンケートを作ればよいのだ.

\subsubsection{予備調査:アンケートを作り,結果を示す}
研究の核である実験に入る前に「予備調査」を行うべきである.

例えばコンピュータサイエンスに関わる研究分野でも,人間が関わる研究は多い.
しかし,『被験者』とあっさり述べたとしても,誰が被験者なのか,予備調査をしているのだろうか?

例えば『○○を用いたコミュニケーション支援の研究』といった研究テーマがあったとする.
しかし論文のどこを読んでも『誰が』,『誰を支援するのか』,『どのような人がその支援を必要としているのか』が明確にされていない論文を書くことはたやすい.

本人は2章の「先行研究」で述べたつもりである.
もしくは『先生の言うとおりにすすめたんですぅ……』という話かもしれない.
仮に引用があったとしても,時代も,対象も,コンテキストも違うのである.
被験者の予備調査,文系的には「マーケットリサーチ」ぐらいはしても良いだろう.

今日ではGoogle Docsを用いたGoogle Formによるアンケート作成が便利である.
先生に見せてみる事で,研究手法の前提を確認する事もできる.被験者依頼の事前入力にも使える.

何より,プログラミングを1行もしなくても,このアンケート作成をして家族だろうがバイト仲間だろうが彼女の友達だろうが入力してもらえば『それらしいグラフ』は誕生する.

最終的に先生が「そんなデータはこの論文に含めてはいけないよ」とおっしゃるかもしれない.
しかし,卒論が1ミリも進まない君にとっては重要なことではないだろうか.

\subsection{5章は分解すれば書ける}

次に「5章のグラフ」は価値が大きい.グラフは0.3~0.5ページに換算できる.学会発表やゼミなどでPowerPoint用にコチョコチョとした凝縮したスクリーンプレゼンテーション用の図を書いている学生がいるが,この際なので,そのPPTXファイルを論文執筆用にスライドページコピーを使って「分解」しよう.

例えば,ある実験のパラメータを$\left\{X,Y\right\}$とし,被験者が5名 $\left\{A,B,C,D,E\right\}$といたとしよう.
スクリーンプレゼンテーションでは1ページで終わらせる内容かもしれないが,今回の論文ではそれはいけない.
そんな濃縮度では読み手は全く理解できない.

まずパラメータX,次にY,被験者の年令や性別などの分類も「分解」する必要があるかもしれない.

単位や背景となる補足情報を含めて考えれば,それぐらいの希釈は必要である.
そもそもこれはスクリーンプレゼンテーションではなく,「紙媒体」なのである.
凝縮して見せることに意味はなく,またアニメーションも使えない.カラー印刷だって使えない可能性もある.

例えば,データ点「▲」などが詰まりすぎて見えないグラフなどはPowerPointでは許されるかもしれない.
しかし学位論文ではそのページが全てなのである.許される許されない以前の問題で,読めない.

\subsection{2章+3章はひとつの章}
セオリー通り書くと,2章は「先行研究」であり,3章は「理論」である.

しかし,理論も先行研究も,初学者の端くれである4年生にはなんとハードルの高いことか.

先行研究の調査は日々の習慣である.
図書館に通い,学会に通い,ゼミに真剣に取り組み,足繁く論文や,先端の研究者をウォッチしてこそ,先行研究リストやBibtexのデータベースを構築できるものである.

しかし,冬休みに至るまで,動画ウォッチ三昧の日々を送ってきた君にとって,そんな蓄積を求めるのは『何かのハラスメントか』と思うに違いない.

\subsubsection{2章が書けない動画中毒者向けマッピング手法}

では,考え方を変えてみてはどうだろうか.
動画をウォッチしているのであれば,現在取り組むべき問題を見つかるはずである.最先端の「やってみた」ではこんなことが起きている,こんな動画が流行った,そんなポインタから,どんな研究者がこれをやっているのか,それは本当に新しいのか,など調査を始めればよいのである.

もちろんニコ動やYouTubeの動画URLは参考文献にはならない.しかし動画URLの引用1に対して,似たような分野の論文が2~3件は見つけられるはずだ.見つけられないなら君は情弱者だ.
いや百歩譲ってIPDLやUSPTOといった特許検索(最近はGoogleでもパテントサーチできる)を使えば,絶対に何か出てくるものである.

それらの要素をまずは紙に書き出してマップにしてみよう.
十字線を引いて,君の研究テーマの軸を適当に用意して,マッピングすればいい.

例えば最初は『重い/軽い』,『無意識/意識』といった適当な軸で構わない.
さらに何度かシャッフルして,先生や先輩に一度見せて,助けを求めながら,他者の研究をぶった切るラインを見つければ良い.

最後に,この論文,君の研究テーマにおいて「この課題について解決する」という結び方で語れるように,2章を配置すれば良い.
もちろん要素は3つぐらいあっても良い.この3要素は「解決すべき課題」として3章の「理論」で述べれば良い.

\subsubsection{3章はアルゴリズムがあれば書ける}

仮説や理論など,最初から書けるはずがない.

心配することはない,まずは上記の3要素が見つかれば,一旦4章と5章に戻り,実験を増やして,ちゃんと要素ごと解決すればよいのだ.

例えば解決すべき課題が3つあれば,3-1,3-2,3-3という構成になる,実験方法や開発物として4-1,4-2,4-3が生まれる.この中にスピンアウト作品が含まれることもある.
そして結果が5-1,5-2,5-3,さらに5-4として,別の意味を持った視点も生まれてくるだろう.

ではここで振り返って「3章で書くべきこと」は何なのだろうか?

それは「アルゴリズム」である.

理論化しづらい複雑で整理されていない現象を,その開発したシステムや仮説は整理してくれる.
式やフローチャートで表現出来れば十分アルゴリズム化することはできるだろう.
逆に,不確定な要素が残っているなら,もういちど実験方法から見なおしたほうがいい.

逆にここで,アルゴリズムに落とせないと,何の研究をしているのか全くわからない.
うまく,法則性や傾向などを語ることができれば,かなりの快感があるので頑張って欲しい.

ここでの頑張りは,見返りが大きい.

もしどうしても「言語的にしか表現できない現象」なのであれば,それは,仮説として論調を整えるしかない.
仮説として,誰も唱えていないことを2章で明らかにしておこう.
その仮説を裏付ける「当たり前の結果」を5章で示す準備も忘れずに.

\section{1+6章は最後に書け}

さて,3章で理論や仮説が成立すれば論文はひとつに繋がる.

\subsection{6章は“軽い妄想”でいい,将来的な意味を書こう}

おそらくこの段階の論文は,4章と5章が分厚く育ち,場合によっては「まだ開発と実験を繰り返している」という状態かもしれない.
このフェーズに入れば,論文はどんどんとページを増やすことができる.まずは写真を撮りまくってほしい.

しかしタイムリミットまであと数日という段階までこれを続けてはいけない.徹夜続きもそろそろ限界だろう.
「撮れない写真」を撮るために頑張るのではなく「\textit{ここは一旦筆を置く}」という姿勢をとるために,まずは開発を終わろう.

そして,将来的な開発要素を6章に書き連ねよう.
こんなことを実装したかった,こうあるべきだ,ここの最低品質なコードをどうにかしたい,その辺りは箇条書きメモ程度で書いて,あとで先生に表現を助けてもらえば良い.
どちらかというと,将来的にどうなるか,スケーラビリティが大きくなればどうなるか?といった事を書けば良い.

たとえば君の研究テーマが数年後に「Googleがはじめた」としたらどうだろうか?
君は悔しいかもしれないが,どうやったら「それを予測し得たか?」のほうが重要ではないか?

おすすめの方法は『予想図』をイラストレーションすることだ.
Google画像検索では出てこないぞ,自分で撮影するか,描くしかない.
ただし,動いているもので描写する必要は,ここではない.
フェイクでいいとは言わない,読み手が想像できる程度のリアリティがあればいい.

「軽い妄想」でいいので,将来的な意味を教えてほしい,という章であるべき.

\subsection{ついに1章に!}

なんだかおかしな話だが,これでやっと1章を書くだけのすべてが揃ったわけだ.
君はこの研究論文についてのすべてを知っている.
みんなが知っているあの研究,あの動画のあの技術,実はそうではない,こうすることでありえないことが起きる……
度重なる苦難,ありえない実装方法,裏付ける被験者データ……よくできた学位論文はよくできた長編SF小説のような読後感がある.

それを「あたかも想定内」であるかのように書くことができる時がきた.

さあ,1章を残り時間の「半分」をかけて,書けば良い.

\section{論文概要ふたたび}

言うまでもなく,ここで論文概要を加筆・推敲しよう.
間違っても途中で修正してはいけない,論文がブレると周りで巻き込まれる先生や先輩が可哀想だ.
できればA4いっぱいいっぱいに熱意を持って書こう.

\section{全章推敲}

全章推敲は100ページ近くになった論文に対して,無駄な紙の山ができ,本当に心苦しい.エコでないので一刻もはやく終わらせたいところである.
残念ながら,この作業は通常,時間終了まで何回やっても終わらないループである.

大事なことは以下のポイントだろうか.
\begin{enumerate}
\item たまには印刷してみる.紙のほうがはるかにはかどる(A5サイズなどでよい).
\item 先生が修正指摘した箇所は二度と修正候補にならないように確実に修正する
\item 日付等のバージョン番号で管理し,古いバージョンのTeXは削除や変更ではなく保存しておく
\item 本気で最終版ならバインダーに入れて
\item 先生がブレることもある
\end{enumerate}

(1)は電車移動中やファミレスなどで気分転換作業するのに適している.

(2)は,学生は軽い気持ちで修正を反映し忘れるが,先生からすると\underline{一気に血圧が上がる反逆行為}である.本当に完全に修正完了しているならもう手を加えず,バインダーに入れ,TeXファイルはinputコマンドを使い分割してしまおう(本稿ではドラクエ魔法部分がそれにあたるので参考にされたし).

(3)長い時間徹夜で校正作業を行なっていると,見落としも多くなる.表紙をうまく使うと日付で見分けることができる.そして古いものは箱にでも入れて視界から消そう.Amazon箱などが便利である.

(4)バインダーに入れて,表紙をつけるとそれらしくなる.卒業への実感がみえてくる.とおもいきや,表紙を糊付けしようにも,ノリが乾かない,最終タイトルそもそも決まってない,といった絶望的な「不測の事態」が目の前に明らかになるので,まちがっても締め切り当日朝などに作業してはいけない.もし締め切り直前に作業するなら「先生が設定した締め切り」の前日にこっそり作業し,先生の出勤前に机上に“耳を揃えて”提出しておくのがカッコイイ.その際に間違えても,捨て台詞的なことを言ってはいけない.

先生と君はバディのようなものだ.自分からラインを切るようなことは自殺行為である.君の学位審査が終わるまでは.

★そんな先生の指導ストレスを少しでも軽減するために書いたエントリー「Kindle Paperwhiteは論文校正に使えるか?」もどうぞ.

% 図の挿入
\begin{figure}[htbp]
\begin{center}
\includegraphics[bb=0 0 432 576,width=5cm]{figall/phd101212s.png}
\end{center}
\caption{Piled Higher and Deeper:「“FINAL”.doc」(10/12/2012)より http://www.phdcomics.com/ 参照}
\label{http://www.phdcomics.com/comics/archive.php?comicid=1531}
\end{figure}

(5)最後に,先生も人間である.沢山の学生を同時に指導し,若い君たちの勢いに押されて何日も徹夜していれば,間違いもある.
そんな時には怒号に怒号や号泣で返すのではなく,まずは確かな方針に従うことだ.
そんな時に,論文概要は君を助けてくれるだろう.
だから今,卒論が1ミリも進まないい君は,いますぐ,先生と論文概要と章構成については合意を得て置かなければならない.

\section{一旦筆を置く前に}

以上の通り,一気に書き綴って見たが,お役に立てたら幸いである.

「右を左に,左を右に……」としている時間は,今はない.
いままで寝て過ごしてきたツケは,君が払わなければならない.
君の卒論を指導する先生も“もちろん”心中するつもりだが,同じ勢いで闘えば,若い君よりも先に倒れることは間違いないのだから.

ちなみに君が先に倒れるなら,先生は安心して家族のいる家に帰ることができる.
果たしてそれは幸せな終わり方だろうか?

代わりに,君の卒業は1年遠のき,就職先も失う.君は来年も同じ研究室にいられるかどうかもわからない.
君の親御さんの経済的ダメージもある.
どんなにお金持ちだったとしても,老後に予定されていた海外旅行は1回はなくなるだろう.
年下の兄弟がいれば,彼らは進学を諦めるかもしれない.
それは君の最後の踏ん張り次第なのである.

『先生,ここの直しは明日までに仕上げておきます!今日は帰ってお休みください!』
というセリフが自然と出てくれば一人前である.
一方で,
『先生,なんだか研究,面白くなってきちゃいました』
なんてセリフを1月の下旬に聞く絶望感は,正直殺人的である.

このサンプルを見て,少しでも良い学士が誕生することを願ってやまない.

TIPSと更新

・目次にサブセクションまで含ませたい


デフォルトのままでは目次には「1.1」までは含まれても「1.1.1」までは含まれません.大学のフォーマットによっては「サブセクションまで目次に含める」などあると思いますので,

\setcounter{tocdepth}{2}

をプリアンブル部に加えて下さい.プリアンブルとはTeXファイル冒頭の「\documentclass[]{}」から「\begin{document}」までの間です.

・章タイトルを中央揃えしたい

未確認情報ですが,うちの学生いわく:
こちらのコードをプリアンブルに配置してください.こちらは,章番号が振られている標題のみセンタリングを行います.

\def\@makechapterhead#1{\hbox{}%
\vskip2\Cvs
{\parindent\z@
% \raggedright% オリジナルの定義(左揃え)
\centering% 中央揃え
% \raggedleft% 右揃え
\reset@font\huge\bfseries
\ifnum \c@secnumdepth >\m@ne
\setlength\@tempdima{\linewidth}%
\vtop{\hsize\@tempdima%
\if@mainmatter% ← report クラスの場合この行不要
\@chapapp\thechapter\@chappos\\%
\fi% ← report クラスの場合この行不要
#1}%
\else
#1\relax
\fi}\nobreak\vskip3\Cvs}

参考文献が[1]形式ではなく「上付きカッコ1)」だった

\usepackage{makeidx}の下,\makeindexの上に以下を書くと良いそうです.

\makeatletter
\DeclareRobustCommand\cite{\unskip
\@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
\def\@cite#1#2{$^{\hbox{\scriptsize{#1\if@tempswa , #2\fi})}}$}
\def\@biblabel#1{#1)}
\makeatother 

関連リンク

お茶の水女子大・伊藤先生による「修士論文の作り方」およびそこから他の先生方へのリンク

http://itolab.is.ocha.ac.jp/~itot/lecture/msthesis.html

【関連】

卒論、そろそろ図書館を本気で活用すべき時期。

卒論、そろそろ図書館を本気で活用すべき時期。