Open6

GASでGithubAPIを叩いてSlackに投げる

Daisuke KONISHIDaisuke KONISHI

Github APIを叩く場合に、Github のトークンが必要になる(Personal Access Token (以降PAT)とか)

PATを使うとPersonalなだけに個人に紐づいてしまうので良くない。
また、PATはClassicを使うと無期限にできるけれど、セキュリティ上良くないという問題もあり、GithubApps経由でトークンの発行を行い、それをもってリクエストするようにした

この辺を見ていたような気がする。この辺の話を調べても、大体出てくるのはGithub Actionsでやる方法
https://docs.github.com/ja/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app
https://zenn.dev/suzutan/articles/how-to-use-github-apps-token-in-github-actions

権限という所でこの辺
https://docs.github.com/ja/rest/overview/permissions-required-for-github-apps?apiVersion=2022-11-28#checks

Daisuke KONISHIDaisuke KONISHI

Google App Scriptのライブラリがあった

調べてたらGoogle App Scriptのライブラリまで作ってる人がいた

https://zenn.dev/hankei6km/articles/fetch-github-apps-token-by-google-apps-script#プライベートキーの変換

ライブラリ入れたりもあれだなーと思って記事に書いてる内容でやってみたが、後述するPrivate Keyの問題に阻まれて上手く動かなかった。

あと、実装が長いのでちょっとやだなと思って諦めてライブラリを入れた。

ライブラリ導入

READMEに結構書かれている
https://github.com/hankei6km/gas-github-app-token

setupの所でApp Scriptのエディタ上での操作が丁寧に書かれていて、この通りにやって登録できた。

が、Claspで開発しているので、デプロイしたら消えた。

https://note.com/miraisouzoukan/n/n1dd76f67aaf9

appsscript.json dependencies. libraries の指定をして上げる必要がある。

{
  :
  "dependencies": {
    "libraries": [
      {
        "userSymbol": "GitHubAppToken",
        "libraryId": "1S3DNbJEq91TAWt753wnEnDtUNcnWWBVSUl7_mNiyzi1rc9BwButo07xl",
        "version": "1"
      }
    ]
  },
  :
}
Daisuke KONISHIDaisuke KONISHI

Private Key周りが上手くいかずに困った。

$ openssl pkcs8 -topk8 -inform pem -in xxxxx-private-key.pem -outform pem -nocrypt -out new-private.pem

書かれていたコマンドで変換はおそらくうまくいった。

ただ、鍵を環境変数で読み込んでいて、App Scriptの設定画面に貼った時にうまくいっていなかったのか難航した。
生成した鍵を cat key.pen | pbcopy とかしてるのにダメで、最初は鍵の変換が上手くいっていないと思って改めてしらべていた。
https://stackoverflow.com/questions/69133483/generate-json-web-token-rs256-to-access-docusign-using-google-apps-script/69133623#69133623
https://qiita.com/sho7650/items/1dd65a1db785f902a2d6
Template literalにまるっと埋めてみたら上手く動いた所で気づいた。
環境変数から取り出すと、無理やり1行に直された文字列になってしまう。

重要なのが記事内少し上で書いてるフォーマットの話で、改行文字なんかも入れないと上手くいかなかった

var signature = Utilities.computeRsaSha256Signature("this is my input",
    "-----BEGIN PRIVATE KEY-----\nprivatekeyhere\n-----END PRIVATE KEY-----\n");

環境変数として設定する前に、変換後のKeyの改行部分に改行文字を入れた上で環境変数に設定したら上手く動いた。