はじめに
GASでJWTを扱いたいたかったのですが、適切なライブラリや関数がありませんでした。
解決策ですが、jsrsasignというJS向けのライブラリをClaspを使ってGASに移植し、ライブラリにすることで実現しました。JavaScriptでJWTを扱うライブラリは色々ありますが、jsrsasignはスタンドアロンのライブラリだったためGASに移植するのに都合が良かったです。今回作成したライブラリは公開していません。手順を残すので参考にしてください。
claspの準備〜GASへの同期
こちらの記事を参考に環境を構築しました。この記事でGASにpushしているコードを次の項のものに変えただけです。途中でエラーなども出ましたが、エラー文に従ってインストールや書き換えをすれば問題ありません。
GASに上げるファイルの準備
import jsrsasign from "jsrsasign";
あっけないですがこれだけです。これをGASで実行するためにライブラリの中身が一つのファイルでpushされます。スタンドアロンのライブラリはここで重要になってきます。調べた限りだと、nodeのようなbuiltin-moduleはimport文としてGASにpushされてしまい、うまく動作しません。GASに移植したいライブラリがこれらを利用してると破綻してしまいます。
GASのファイルの修正
自動でライブラリの中身をpushしてくれるのはありがたいのですが、一つ問題があります。export ~
です。検索をかけると、ファイルの一番下にまとめて書かれていました。GASではライブラリの関数は全てグローバル関数として認識されるので、余計な(しかもサポートされていない)コードです。 消しちゃっても良かったのですが、気持ち的に/*...*/
でコメントアウトにしときました。
ライブラリにする
特に書くことはありませんが、GASの標準機能でライブラリにしました。これで目的のプロジェクトでライブラリとして読み込めば、プロジェクトのソースが荒れなくて綺麗です。
このライブラリを公開するのは控えておきますが、同様の手順でGAS環境でもJWTを扱えるようになると思います。
jsrsasignについて
少し参考になりそうなurlを貼っておきます。
↓チュートリアル
↓ドキュメント(?)