TypescriptでGoogle Apps Script開発をする

前回の続きです。

claspを使うとGoogle Apps Scriptを快適にローカルで開発することができますが、
さらにclaspは、v1.5.0からTypescriptに対応しているので、typescirptで開発することができるんです。

claspが対応する前も、TypescirptをwebpackやBabelを使って、トランスパイルして、pushすることは出来ていたのですが、
正式にサポートされたおかげで、clasp pushすれば、自動的にトランスパイルされて、Google Apps Scirpt側にpushされるんです。

では、さっそく試してみましょう。

$mkdir ts-gas-sample
$cd ts-gas-sample
$npm init -y

LinterとFormatterも導入しておきましょう。

$npm install --save-dev tslint
$npm install --save-dev prettier
# tslintの設定ファイル(tslint.json)を作成する
$tslint --init

TSLintとprettierが競合してしまうことがあるので、下記のモジュールもインストールしておきます。

$npm install --save-dev tslint-config-prettier
$npm install --save-dev tslint-plugin-prettier

ちなみにTypescriptで開発をするならVSCodeがオススメです。

Visual Studio Code – Code Editing. Redefined

VSCodeでコード補完してもらえるように「@type/google-apps-script」もインストールしておきましょう。

$npm install --save-dev @types/google-apps-script

新規スクリプトを作成していきましょう。

オプションとして–rootDirを指定しておくのがオススメです。
rootDirを指定すると、claspのpullとpushの対象が指定したディレクトリ下になります。

clasp create --title ts-gas-sample --rootDir ./src

ファイル構成はこのようになっているはずです。

.
├── .clasp.json
├── node_modules/
├── package-lock.json
├── package.json
└── src
    └── appsscript.json

では、さっそくTypescriptでコードを書いてみましょう。

srcディレクトリにCode.tsを作成します。

たとえば、こんな感じのコードを書いたとします。

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

function myFunction() {
    let user = { firstName: "tarou", lastName: "yamada" };
    Logger.log(greeter(user));
}

これをclasp pushしてみます。

$clasp push
$clasp open

ブラウザ上のスクリプトエディタをみると、トランスパイルされていることがわかります。

var exports = exports || {};
var module = module || { exports: exports };
function greeter(person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}
function myFunction() {
    var user = { firstName: "tarou", lastName: "yamada" };
    Logger.log(greeter(user));
}

今回は以上です。

Google Apps Scriptのローカル開発には「clasp」導入がオススメ

Google Apps Scriptってご存知ですか?
その名の通り、Googleが提供しているプログラミング言語のことです。
略してGAS(「ガス」)といいます。

Google Apps Scriptは無料で利用することができ、
Googleのアカウントさえあればすぐに書き始めて、プログラムを実行することができます。
環境構築も必要なく、非常に手軽なので、初心者向けのプログラミング言語だと言えます。

初心者向けとはいえ、Googleの他のサービス、
たとえばGmailやGoogleカレンダー等をプログラミングで操作することができるので、
手軽に作業を自動化することも可能です。

続きを読む

自作キーボードを作るために最低限必要な工具について

今、エンジニア界隈でブームになりつつある自作キーボードですが、調べ出したら最後、その魅力に取り憑かれ、作ってみたくなりました。

自作キーボードのキットは、先日、秋葉原にオープンした自作キーボード専門店「遊舎工房」で購入できます。

自作キーボードのキットはどれも魅力ですが、「Corne Cherry」を購入することにしました。

ただ、自作キーボードを作るとなると工具が必要ですよね。

ですので、自作キーボードの作成に最低限必要なものを整理してみました。

続きを読む

【Mac】PyAutoGUIが正常に動作しない場合の対応方法について

PyAutoGUIってご存知ですか。

PyAutoGUIは、PythonのGUI自動化モジュールです。
これを利用すれば、マウスとキーボードの動きをプログラムで制御することができるので、
マウスとキーボードで操作するものについては、ほぼ自動化することができます。

RPAツールを導入すれば、簡単にPCの自動化はできますが、PyAutoGUIならば無料で使うことができます。

動作確認環境

  • OS:OS X Mojave 10.14.3
  • Python: 3.6.3

続きを読む

【Mac】Raspberry Pi 3 Model BへのOS再インストールについて

以前、本ブログで、Raspberry Pi3 Model BにOSをインストールしてMacからSSH接続するまでの過程を記事にしましたが、
今回はRaspberry Pi3 Model BへOSを再インストールする手順を記事にしたいと思います。

microSDカードをフォーマットする

まずは、microSDカードをフォーマットしましょう。

公式によるとWindowsの場合と同様にSD Memory Card Formatterの利用がオススメされているので、こちらのツールを利用してもいいのですが、Macの場合は、ディスクユーティリティからもフォーマットできるので、そちらの方法でフォーマットしていきたいと思います。

続きを読む

Dockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part 2

Dockerを利用してPHPの開発環境を用意してみましょう。

下記の記事の続きです。

前回は、NginxでWebサーバーを構成し、PHPを動作させるために、APサーバーを構築しました。
今回は、mysqlサーバーを構築してきたいと思います。

続きを読む

Dockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part 1

Dockerを利用してPHPの開発環境を用意してみましょう。

Dockerのインストール

MacにDockerをインストールするのは簡単です。
公式サイトから「Docker for Mac」をダウンロードしてインストールするだけです。

下記から「Docker for Mac」をダウンロードします。

Install Docker Desktop for Mac | Docker Documentation

インストールが終わったら、ターミナルから確認してみましょう。

続きを読む

【Python3】mysqlclientでMySQLに接続するとエラーが出てしまう

Python3でMySQLに接続する方法についてですが、mysqlclinetを使う方法が便利なのですが、実行してみたところ下記のエラーが表示されました。

Traceback (most recent call last):
  File "sample_mysql.py", line 1, in 
    import MySQLdb
  File "/Users/ME/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/MySQLdb/__init__.py", line 19, in 
    import _mysql
ImportError: dlopen(/Users/ME/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libssl.1.0.0.dylib
  Referenced from: /Users/ME/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
  Reason: image not found

続きを読む