2025/03/26 このエントリーをはてなブックマークに追加 はてなブックマーク - 仮claspぐらしのアリエッティ

仮claspぐらしのアリエッティ

カテゴリ: , ,

ソフトウェアエンジニアをやめると生息するコードベースがなくなる

マーケター専任の形になって、コードベースがないのが地味に困る。
いままではプロダクトを在りどころとし、toolも自由につくれる、インフラもある(もちろん予算の中で)。 開発者体験だなんだというが、確かに開発者の特権的な部分だろうなと思う。

自分が使えても他の人が使えるとは限らない

色々考えるとcliとか作ったりバッチつくったりサーバー作ったりした方が再利用性が高かったり 拡張しやすかったりするんだろうけど
使うのは同じプログラマやソフトウェアエンジニアではなく、マーケターなどビジネスサイド。 と、考えるとGUIが必須。cliやバッチ、APIなどはメンテナンスや単純な活用も含めて現実的ではない。 そうすると自然とGASに行き着いた。

オレオレマクロ、属人化。ウッ頭が

ただし、これは古のエクセル、VBA、オレオレマクロと同じ末路をたどりかねない。 なので、GASでありながらいかにメンテナンス性を持たせるか、自分に属人化しないようにするか。

…など考えつつも、業務は思った以上に煩雑であり、要求されることも多いので ウダウダ言ってもいられず、業務効率化が急務みたいな感覚になる。

GASはエディタが辛い

GASはそのままAppScriptのエディタを使うと辛い。 とりあえずclaspを使いスプレッドシートにコードベースをpush出来るようにした。 VSCodeやVimなどお好みのものを使えるため快適な生活を迎えることができた。

https://github.com/google/clasp

GASでnode moduleがガンガン動くわけではない

例えば、zodでも入れてやるか〜とか思ったわけですが
https://github.com/colinhacks/zod

結局buildして、GASへコードをバンドルするようなかたち。というかGASにライブラリがインライン化される感じになるので めちゃくちゃ見通しが悪くなってツラい。minifyすればいいけどさ、、、読めんないしな zodは便利だけどやりたいことに対してtoo matchだし、やはり可読性が著しくひどくなってしまうのであまりライブラリは使わないことにした。 nodeなどで動くランタイム前提だと良いのだが、GASというエンジンにdeployされることを想定すると ある程度GAS化された後のコードも見やすいようにはしておきたいという判断。

GASはそこそこテストがしにくい

ちゃんとテストを書こうとか思うわけですが
SpreadSheetオブジェクトみたいなものがGASには存在して、それをmockしないとunitテストが出来ない。
結局末端のロジックはテストできるが、主要な部分はそういったグローバルなオブジェクト任せではあるため エンドtoエンドなテストはなかなか厳しいなというところは思う。
なんかローカルでGASが動くみたいなものがあったのでそれでもしかしたら画面の自動テストみたいなことも出来るのかもしれない。 そこまでは出来ていない。

ツールをつくればつくるほど、個別最適をやっている気分

ある種、業務上こぼれ落ちたものを効率化しており。
これは本来はシステム側で吸収する部分、システム間のインテグレーションの不充分を人類が頑張っているということなのだなと思う。

「自動化した!」と思っても立場を変え、視野を変えるとツナギが無い、なんてことは多々あるのではないでしょうか。 あなたの自動化はどこからどこまで?

というのを改めて思う。開発チームが見えている視野での自動化は実は不充分かもしれない。

よしなにやっています。

TypeScript + clasp + esbuildみたいな構成

文字ばっかりだったので、気安めにコードじゃないですがディレクトリ構成みたいなの貼っておきます。 細かい話は別途気が乗ったらしてみようと思いますが 要するにこの記事のようなことをやっています。

https://zenn.dev/funteractiveinc/articles/776b5812833475

├── .clasp.json
├── .clasp.ignore
├── appsscript.json
├── esbuild.js
├── jest.config.mjs
├── package-lock.json
├── package.json
├── node_modules
├── src
│   ├── helper
│   │   ├── hoge.ts
│   │   ├── fuga.ts
│   │   └── piyo.ts
│   ├── job
│   │   └── job1.ts
│   │   └── job2.ts
│   │   └── job3.ts
│   ├── test
│   │   ├── hoge.test.ts
│   │   ├── fuga.test.ts
│   │   ├── piyo.test.ts
│   └── types.ts
└── tsconfig.json

GA