タグ: GAS

  • GASからCloud SQL(MySQL)に接続するコード

    Google Apps Scripsから、Google Cloud SQLのMySQLに接続するコードのサンプル。このとき、Cloud SQLのMySQLは、MySQL 5.7よりも古くないと接続できない。

    DBへの接続は、JDBCを使用する。このとき、JDBCの読み込みは必要なく、GASのエディタ上で直接記述してよい。このサンプルでは、SSL(TLS)を使わないバージョン。通信経路が暗号化されないので、注意が必要。

    接続のチェックのため、コンソールログに、いろいろと書き出すようにしている。Logの部分はなくても、問題なし。

    function myFunction() {
      dbConnection();
    }
    // --------------------------------
    // SSL 接続なしで接続する
    // --------------------------------
    function dbConnection(){
      Logger.log('start dbConnection function.');
      // 接続先設定
      var connectionIp = 'xxx.xxx.xxx.xxx'; // 接続のMysqlのIPアドレス(ホスト名があれば、ホスト名も可)
      var userName = 'user'; // 接続で使うユーザ名
      var passwd = 'password'; // 接続で使うパスワード 変数名をpasswdにしているのは、コネクションInfoの作成時にキーワードと変数が同じになるのを避けるため。
      var databaseName = 'dbname'; // データベース名
      var addr = 'jdbc:mysql://' + connectionIp + '/' + databaseName;
      Logger.log('start mysql con');
      Logger.log(addr);
      var connectionInfo = {
        user: userName,
        password: passwd
      }
      var connection = Jdbc.getConnection(addr, connectionInfo);
      // 接続できたことを確かめるために、ログにDB名を出力。
      Logger.log(connection.getCatalog());
      // コネクションを閉じる
      connection.close();
      Logger.log('end');
    }
  • 2021年12月の時点でも、GASのJDBCからMySQL8.0に接続できない。

    昨年、Google App Scriptから、JDBC経由で、Google CloudのCloud SQL のMySQL 8.0のインスタンスに接続を試して、失敗した。JDBCがMySQL 8.0  に対応しておらず、接続エラーになるというものだった。

    あれから1年がたち、もう一度、試してみたが、Google App ScriptからJDBCを使って、MySQL 8.0のインスタンスに接続することはできなかった。まだ、MySQL 5.7のインスタンスまでしか対応していない。

    MySQL 5.7 のインスタンスには、GASから正常にアクセスできていることも、ついでに確認した。

  • Google ChatのチャットボットのAPIのリファレンス

    Google ChatのチャットボットのAPIのGoogleの公式リファレンスのURL。

    https://developers.google.com/chat/concepts

    カード形式のやり方とか、Node.jsでwebhookとか、いろいろな使い方が掲載されている。

  • GASで作ったWebアプリでBootstrapを使う

    GAS(Google App Script)で作ったWebアプリ上で、BootstrapとJQueryを使う方法のメモ。

    GASのWebアプリでは、テンプレートをつかうことが多いので、そのテンプレートにBootstrapとJQueryを読み込む記述を書く。JQueryなどの読み込みは、/bodyタグの の前にいれることが多いが、そこに置いたところ、読み込み順番の問題で、正常に動作しなかった。そのため、headの中に入れている。

    テンプレートファイルのサンプルとしては、こんな感じ。

    
    
      
        
        
        
        
        
        
        
      
      
        

    Hello!

    これは、テンプレートから作成したページです。

  • GoogleがExcelマクロをGASに変換するアドオンを公開したが。

    Google、「Microsoft Excel」マクロを「Google スプレッドシート」向けに変換するアドオンを公開したけれど、Google Workspace Enterprise PlusとEducationのみという狭さ。

    Apps Scriptに変換されたコードは完全に互換があるか、互換に問題がある場合にはレポートを出してくれるというので、便利そうではある。ちょっと試してみたかったのだが、Enterprise Plusだけなので試すことはできず。そのまま動くわけではなく、変換されてしまうので、囲い込みになるという意味では変わらないか。

    Google、「Microsoft Excel」マクロを「Google スプレッドシート」向けに変換するアドオンを公開 – 窓の杜 (impress.co.jp)
    https://forest.watch.impress.co.jp/docs/news/1294539.html

  • GASのGoogle ChatのChat Botを作成して公開する手順

    久しぶりにGASで書いたChatbotのテストをしようとしたら、デプロイ方法が変わっていたので、書き直し。

    作成フェーズ

    1. Chat Bot のサンプルプロジェクトのファイルを開く
    2. プロジェクト名をつけて保存する
    3. GASのコードを書く

    デプロイ1(スクリプトエディタ側)

    1. GASのスクリプトエディタで、「公開」→「マニフェストから配置」の順にクリックする。
    2. どのバージョンをデプロイするのかを聞かれるので、「最新」を選び「Get ID」をクリックする。
    3. 表示された「Deployment ID」の値をコピーしておく(テキストに張り付けておくとよい)。
    4. 「Close」をクリックして閉じる。

    デプロイ2(Google Cloud Platform側)

    1. GASのスクリプトエディタとは別のタブで、Cloud Platformを開く。( https://console.cloud.google.com/ )
    2. Cloud Platformにログインする。
    3. 上部のメニュー部分のプロジェクト選択の部分をクリックして、ポップアップされた画面で、「新しいプロジェクト」を選択する。
    4. プロジェクト名などを入力して作成する。
    5. 左上のナビゲーションメニュから「APIとサービス」を選択する。
    6. 「+APIとサービスの有効化」をクリックする。
    7. 検索で、「chat」を入力する。
    8. 「Hangouts Chat API」を選択する(ここは、まだ古い名称のままだった)。
    9. 「有効にする」をクリックする。
    10. 左のメニューから「認証情報」をクリックする。
    11. 「+認証情報を作成」をクリックする。
    12. 「サービスアカウント」を選択する。
    13. サービスアカウントの名前などを入力して、作成する。
    14. 権限をクリックする。
    15. 「アクセスを許可」をクリックし、作成したサービスアカウントに「Project」の「オーナー」の権限をつける。
    16. (IAMの画面になっている場合は)左上のナビゲーションメニュから「APIとサービス」を選択する。
    17. 表示されているAPIの中から「Hangouts Chat API」をクリックする。
    18. 左のメニューから「設定」をクリックする。
    19. ボットの名前を入力する
    20. アバターのURLを入力する(https://goo.gl/yKKjbw)
    21. 説明を入力する。
    22. 機能を選択する(用途に合わせて選択する)
    23. 接続設定で、「Apps script project」を選択する。
    24. デプロイIDに、上記で取得した「Deployment ID」の値を入れる。
    25. 権限を選択する。
    26. 保存をクリックする。

    以上で、公開は完了。

    あとは、Google Chatからボットを検索して利用する。

  • GASからJDBCでCloud SQLに接続しようとすると接続が確立できない

    GAS(Google Apps Script)から、Cloud SQLに接続をJDBCから行ったのだが、下記のエラーが出て接続できない。

    Exception: データベース接続を確立できませんでした。接続文字列、ユーザー名、パスワードを確認してください。

    接続先の環境は、Cloud SQL(Google Cloud Platform SQL)上で新しく作ったインスタンスで、第2世代で、MySQL8.0のインスタンス。

    GASのソースコードとしては、下記。

    function dbConn() {
      var dbConnectName = "プロジェクト名:us-central1:インスタンス名"; // GCP上で表示される接続名
      var user = "ユーザ名";
      var password = "パスワード";
      var dbName = "DB名";
      
      var conURL = "jdbc:google:mysql://" + dbConnectName + "/" + dbName;
      Logger.log(conURL);
      
      var dbCon = Jdbc.getCloudSqlConnection(conURL, user, password);
      Logger.log(dbCon.getCatalog());
      
      return dbCon;
    }

    いろいろと調べて、JDBCの`Jdbc.getConnection`でも試したが、接続できず。

    原因として、わかったことは、GASから呼び出されるJDBCは、MySQL8.0へのインスタンスへの接続に対応していないということ。MySQL5.7で新しくインスタンスを作り直して、`Jdbc.getCloudSqlConnection`を行ったところ、あっさりと接続できた。

    まさか、JDBCが対応していないとは。

  • GASで求められるexternal_requestの権限について

    GASで、プロジェクトのプロパティのスコープに下記の権限があったとき、これが何の権限を求めているのか。

     https://www.googleapis.com/auth/script.external_request

    この権限は、UrlFetchAppを使用するために使用される。

     //例えば、このようなコードを書いたときに必要になる。
     var response = UrlFetchApp.fetch( "http://www.google.com/");
     Logger.log(response.getContentText()); 
    

    参考:

    https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

  • GASのウェブアプリをIEで使うと、POSTしたデータが文字化けする

    Google Apps Scripts(GAS)で、ウェブアプリを作成できる。 IEでそのフォームを使って、Spreadsheetにデータの書き込みをすると文字化けする。 Chromeだと、問題なく文字化けせず書き込める。

    GASのウェブアプリなので、いろいろと制限だらけなので、HTMLの文字コードの指定などもうまくいかず。 ブラウザでの文字コードの認識を確認してみると、ChromeではUTF-8、IE11はUTF-8以外で認識されていた。 GASのウェブアプリにアクセスした際に、ブラウザをみて文字コードを変えているようで、IE11でUTF-8を指定すると文字化けする。

    GASのコードで文字コードの指定をしたが、UTF-8で指定されず。 いろいろと試した結果、フォームに送信するときの文字コード指定するコードして、UTF-8でPOSTすることにより、IE11でもPOSTしたデータの文字化けを防ぐことができた。

    formタグで、「accept-charset=”utf-8″」を指定することで、データ送信時の文字コードをUTF-8(それ以外も可)にすることができる。

  • GASでセッションからユーザのEmailアドレスを取得する

    G Suiteの環境でGAS(Google Apps Script)を動作させる場合、セッションから実行・アクセスしているユーザのEmailアドレスを取得することができる。

      // セッションからユーザのEmailアドレスを取得する
      var userEmail = Session.getActiveUser().getEmail();
    

    なお、取得できるのはEmailアドレスのみ。ユーザの名前などを取得できないかどうかを探したができなかった。