night and sundial

じゃわじゃわ日記 -the 5th defection-

「myTimeline」開発日誌(2024/10/20時点)

 かれこれ1年以上運用している「俺のついったー」システム。自分だけ用のプログラムを作って、ぽちぽち直したりしながら使っていくのは、たのしい。

jawa-jawa.hatenadiary.jp

 AppSheetアプリ側でポストの削除ボタンを実装した。──それ自体はすぐできたのだが、削除を行うとテーブル(Googleスプレッドシート)側に空行が生まれてしまい、日次処理(夜間の、はてなブログ投稿)側で考慮しなければならないのが課題だった。試しに、日次処理の冒頭で動かすつもりで、テーブルを全件見て空行を削除する処理を作ってみたところ、処理に3分もかかってしまう。べつに全件見なくてもいいんだけどな、などといろいろ考えたあげく、結局、随時処理(シートの変更トリガで動かしている、ポスト1件投稿時の処理)側で、更新した行*1が空だったらその行を削除する、という方法で実装した。

 本当は、物理削除じゃなくて論理削除のしくみにしたいところだったけれど、AppSheetアプリ側が煩雑になるので、単純に削除する方法で解決した。──さらに、もともとやりたかったのは、アプリで、ポスト1件に対する削除(Delete)と編集(Edit)を可能にすること、だったのだが、編集を可能にすると、テーブルのデータの持ち方もサーバ側の処理の内容も、今のままではうまく対応できなくて、大幅に作り直す必要があり、影響が大きくなりそうなことがわかったので、削除だけにしておいた。

*

 ところで、このへんのサーバ側のスクリプト(Google Apps Script)の改修を、10月17日(木曜日)の夜中にだらだらと(お酒をのみながら)やっていたとき、変更したのを元に戻そうと思ったところで、変な戻し方をしてしまい、スクリプトを壊してしまった、というか、2023年5月時点の「プロジェクト」に誤って戻してしまった。スクリプトの行数が急に半分くらいになったので、真っ青になった。デプロイしていないからそれ以降の「プロジェクト」はなかったのだ。Google Apps Scriptはスクリプト単体ではバージョン管理がない、というのも初めて知った。スクリプトのバージョン管理だろうと思って履歴から戻したらそれは「プロジェクト」の履歴だった、というオチであった。

 もはや当時とはデータの持ち方(テーブルの構成)も違うし、処理の内容も違う。サーバ側の処理は、制約があるどころの話ではなく、まさに何も動かなくなってしまった。翌日にはすべてのトリガが実行に失敗していた。おう…。夜間バッチが異常終了するのでその場でプログラムを書き直してリラン、というブラック職場みたいな状況になった。なんだそれ。笑えない。べつに動かなくても自分以外は誰も困らないプログラムだけどね。

 というわけで、週末の土曜日に、これまでの改修の要件を総ざらいして、プログラムを書き直した。今あるバージョンに対して吸収すべき機能を書き出したうえで、優先順位をつけて、1件ずつ対応していく(休日に、何をやっているのか…)。この1年以上、わりとこまごました改修を何度も入れていたので、その機能を全部取り戻さなければならなかったのだ。──3時間くらいかかった。細かいコーディングの内容までは当然覚えていないので、やりたいことをひとつずつ、もう一度調べなおすという、不毛な作業だったけれど、それでも対応できたのはよかった。こういうのは一気呵成にやらなければならないので、お金を払ってシェアオフィスにこもった*2。何も生まない、自分用のプログラムにすぎないけれど、休日に成果が出ると気分がよい。

 コードの原本管理が課題だなあ。デプロイすればいいんだろうけど、Webアプリを作らないし(2023年5月当時、Webアプリ化をもくろんで試していたから、そのときにデプロイしたプロジェクトがあったのだ)、スクリプトだけ個人で使う分にはデプロイしなくてもいい、というのがあだになった。…なんだけど、GASのデプロイっていまいちよくわかってないんだよな…。いったん、コードを別のところに持っておくことにした。

*1:getActiveCell()で取得する。ところで、このgetActiveCell()というの、過去に別のスクリプト(povoプロモコード管理)でも使ったけれど、この、シートの変更トリガとgetActiveCell()の組み合わせは、連続して動かすと、期待した動作をしない場合があるように思えてならず、考慮しつくせてないケースはあるかも。

*2:最近、ちょっと気に入っているシェアオフィスが近所にあって、ときどき、こもりに行っている。