moira
📧同人ショップからのメールをGoogle Sheetに重複なく転記するGAS
Understanding at a glance
これが
https://gyazo.com/fc0a1f07e29f08b6794c4193e148878f
こうなります
https://gyazo.com/2b2b8220e2f465837cb26fee5ce5b51a
summaryタブにはすべての情報が集約されます
summaryというかtotalなのでは……?kadoyau.icon
toranoanaやmelonbooksタブにはショップごとの情報が集約されます
解決したい課題
同人ショップ(ここではとらのあな)の入荷お知らせメールが定期的に来る
https://gyazo.com/fc0a1f07e29f08b6794c4193e148878f
このメールの課題
重複した通知
サークルに対してsubscribeするので、すでに買ったものの通知も来る。判断コストが高い
買わないものと判断したものも通知が来てしまう
どうあれば課題を解決できる?
この際、重複分は記録しないようにする
同人ショップのメールは自動的にArchiveされる
利用者は、週末にGoogle sheetsをさっとみれば新刊チェックができる。
これを実現するのがmoiraです
仕組み
FAQ
summaryの並べ順を変更したい
https://gyazo.com/2ba94b4e14a24011df0e2df2b0739ca8
このように、GUIでやろうとすると空白が入りうまく動きません(なんで?)
summaryのビューは、2Aセルのクエリで実現しています
code:gsheet
=QUERY(
{
},
"where Col1 is not null order by Col1, Col4 desc"
)
このorder by句を変更することによって並び替えてください
Colの意味は次のとおりです
https://gyazo.com/ce91eb0eba6e278e452c05d54ea86e89
サンプルのクエリ
order by Col5 desc, Col1→更新日降順で並び替えたのち、名前昇順で並び替える
最近更新されたものが知りたいとき(デフォルト)
order by Col1, Col4 desc→名前で昇順で並び替えたのち、作成日降順で並び替える
A-Zあいうえお順でさーくるをならびかえたいとき
where Col1 = "サークル名" order by ...
サークル名のサークルだけ出したいとき
TODO
名前の元ネタ
開発する
yarn run clasp push --watchしておきコードを変更すると自動的にGASがアップロードされます
.clasp.json.sampleを参考に.clasp.jsonを作成する
code:zsh
git clone git@github.com:kadoyau/moira.git
cd moira
cp clasp.json.sample clasp.json
$EDITOR clasp.json
# scriptIdにメモしておいたScript IDを書く
スクリプトをGASにアップロードする
code:moira
yarn install
clasp login # この手順不要かも
yarn run clasp push
作った感想kadoyau.icon
正規表現が一番面倒だった(めちゃくちゃハマった)
GASはそのままだと書く気が起きないけど、claspを使うとTypeScriptと手元のエディタが使えてかけるレベルになる npm使いたかった