プアに生きてみる - ローエンドタブレット活用、安価サービス活用、あと微妙にIT開発関連など

色々買い過ぎて端末が溢れちゃったんですが、「もしかして今使ってないコレとコレの組み合わせでも出費半分で目的は達成できたんじゃね」みたいな発見がいっぱいあったので、そのへんの視点からまとめてみました。お金のない学生さんやお小遣いの少ないサラリーマンなんかに活用してもらえると嬉しいかな。 近いコンセプトとして、開発環境やプログラム環境のサービスのうち無料で学習・開発できるものについても触れています(これはただの趣味)。

無料でサーバレス - google app script

google docsgoogle アカウントがあれば無料で利用できます。
実はこの google docs 、中に自動処理を埋め込んで定時実行させたり、ボタンを配置して押したらインターネット上から情報を取得してきたり、みたいな事もできるんです。要するにサーバレスで結構な事ができてしまう。

私は Spreadsheet 上で使う事が多いので、そのへんの使い方を備忘録を兼ねて書いてみます。
なお、WindowsMacgoogle chrome 以外では確認していませんので、他環境では動作しないかもしれません。

スクリプトエディタの起動方法

単独で使う場合は、「新規」作成時に「Google app script」を選びます。

Spreadsheetとの組み合わせで使う場合は、こんなかんじです。
google drive から spreadsheet を作成する or 既存spreadsheet を開き、「ツール」から「スクリプトエディタ」を選択する。
f:id:dosimplestupit:20181018111832p:plain

すると、こんなかんじのブラウザベースのIDEが起動します。 f:id:dosimplestupit:20181018111929p:plain

あとは、普通のIDEのつもりで Google App Script 言語でコードを書けばOK。
(いちおう google app script という言語ではありますが、中身はちょっと古めの JavaScript ですので、C系開発言語の経験者なら直感でかけると思います)

特徴

  • 無料
  • 事実上JavaScriptで書ける
  • ブラウザ上のIDEで開発可能。ステップ実行等もできる
  • 作ったものを定時実行できる
  • 作ったものをAPIとかWebアプリケーションとして公開できる
  • Spreadsheetなどのgoogle docs への読み書きが出来る(要・権限設定)

IDE上でよく使う操作

  • 上の画像で「myFunction」となっている箇所で、宣言済み関数を選択できます。
  • 横向きの▲マークで、指定した関数を実行します。
  • 虫マークで、指定した関数をデバッグ実行します。
  • 行数表示のあたりを左クリックするとブレイクポイントを設定できます。
  • 「表示」>「ログ」で、最後に実行した際のログを表示します。
  • 「編集」>「現在のプロジェクトのトリガー」で、トリガー設定を行えます。例えば毎日1時間ごとに自動実行したいみたいな場合はこれを使います。
  • APIとして公開したりしたい場合は「公開」メニューから設定します。

よく使うコード

ほぼJavaScriptですが、厳密にはJavaScriptではなく Google app script なので、微妙に違います。
あと、ブラウザ上でよく使う組み込み関数や組み込みメンバーが使えなかったり、独自の組み込み関数が存在したりします。
なので、組み込み関数に関していくつかメモを残しておきます。

具体例

ログ出力

    Logger.log("ログとして出力したい文字列");

HTTPでコンテンツを取得する

urlにGETリクエストを飛ばして、応答を UTF-8 として解釈したのち、本文として得られた JSON 電文をオブジェクトにパースするコード。

  var response = UrlFetchApp.fetch(url);
  var content = response.getContentText("UTF-8");
  var data = JSON.parse(content);

Spreadsheetを読んでセル内容を取得したりするコード

  // URLから Spreadsheetを取得する。
  var spreadSheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/xxxxxxxxxx");

  // 指定のタブのシートを取得する。
  var sheet = spreadSheet.getSheetByName("シート1");

  // 指定のインデックス(左から何番目か)のシートを取得する。
  var sheet = spreadSheet.getSheets()[LOG_SHEET_INDEX];

  // Spreadsheetの名前を取得してみる
  var sheetName = sheet.getName();

  // Spreadsheetの最大行数を取得してみる
  var maxRow = sheet.getLastRow();

  // 左上を(1,1)とした場合の座標(2,3)にあるセルを取得する。
  var cell = sheet.getRange(2, 3);    // セルのオブジェクトを取得
  var cellValue = cell.getValue();      // セルの値を文字列として取得

  // セルに書き込む
  sheet.getRange(3, 4).setValue("文字列");

他にも、セルの色を変えたりサイズを変更したりもできる。

日付関連

  // 現在日時を指定のフォーマットの文字列に変換
  value = Utilities.formatDate(new Date(),"JST","yyyy/MM/dd HH:mm:ss");

  // 日付の形をした文字列を指定のフォーマットの文字列に変換
  value = Utilities.formatDate(cell.getValue(),"JST","yyyy/MM/dd"); 

その他

// alert("文字列")の代わり。
Browser.msgBox("文字列");

// alert("文字列")の代わり。(スプレットシート上で出したい)
// SpreadsheetAppの部分を DocumentAppとかFormApp に変えると他のサービスでも使えます。
SpreadsheetApp.getUi().alert("文字列");

あとは普通の JavaScript のつもりでコードを書けばOK。