ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

ランチタイムのグループ分けを自動で行う「UnitLunch」を改良しました

オンライン飲み会のグループ分けを考えるのが大変。。。自動化しないともう無理だ!

ブレイクアウトルームの組分け、どうすればいい?」
と同僚から相談されて、ググったら出てきた

を紹介しました。

「なるほど、良さそう。これでやってみるね」と言われて、めでたしめでたしと思っていたのですが、
後日、「人数多いせいか、タイムアウトしちゃって無理かも……」と言われました。

というわけでスクリプトを見てみると、
たしかに Google Apps Script でコストの高い(タイムアウトの原因となる)
getValue() メソッドgetValues() メソッドが for 文の中で何度も呼び出されていて、これでは無理そうです。

自分のアカウントで試してみても、18人を4人ずつに分けることですらタイムアウトしました。

f:id:nekonenene:20210905030510p:plain

6分かかっても終わりません。これはなかなかです。
原因は getValue や getValues の呼び出し回数の多さとわかっていますから、
一度の getValues メソッドで、シート全体の値を取得する方針で修正しました。

github.com

できあがったのがこちら ↑ です。
6分以上かかっていた処理が、1秒前後で終わるようになりました。
コメントもだいぶ足しましたので、カスタマイズしやすくなっているかと思います。

使い方は元のブログ記事とほぼ同じです。
元のブログ記事のやり方に沿うなら、スプレッドシートの URL をコード内に入力する必要はないので、その部分のコードの修正もおこなっています。

シャッフルランチやオンライン飲み会などのチーム分けに、ぜひご活用ください。

ArrayLib ライブラリが使えなくなったと思ったら使えた【Google Apps Script】

Google Apps Script を1社目に勤めていた頃から書いた経験あるのに
ブログに「Google Apps Script」カテゴリーが今までなかったことに驚いたハトネコエです。

久しぶりに Google Apps Script を書こうとしたんですが、
Google Apps Script でスプレッドシートを扱う際は
getValue() メソッドgetValues() メソッドがコスト高くタイムアウトの原因になるので、
getValues() メソッドで出来るだけまとめて値を取得してきます。

そこで気になってくるのが、二次元配列の縦と横を逆にするメソッド。

つまり、

[
  [a, b, c],
  [d, e, f],
]

[
  [a, d],
  [b, e],
  [c, f],
]

に変換してくれるメソッドですね。

自分で書いてもいいのですが、必ずと言っていいほど Google Apps Script では必要になる処理なので、ライブラリを入れたほうが楽です。

そこで便利なのが ArrayLib (2D Arrays Library) です。
二次元配列の処理に便利なメソッドがまとまってくれています。

そこで、いつも通りプロジェクトキー MOHgh9lncF2UxY-NXF58v3eVJ5jnXUK_T を入れて……と思ったら、通らないではありませんか。

f:id:nekonenene:20210905013800p:plain
新エディタでは見つからないと言われます

どうやら旧エディタとは参照するキーが変わったようです。

f:id:nekonenene:20210905013630p:plain
旧エディタではこのIDで行けていました

もう自分で書くしかないか〜、と思っていたら
このサイトを見つけ → https://sites.google.com/site/nnillixxsource/Vialard/ArrayLib
そして ArrayLib が https://script.google.com/home/projects/1r9wNWbta3ebuYL4ENAdIp4UYKmyNiWf1AqsXYzfXduRHhTZEeTxS9MhZ/edit で公開されていることを知りました。

こうなると簡単です。
公開されているスクリプトをそのまま使うという選択肢もありますし、 URL の一部である
1r9wNWbta3ebuYL4ENAdIp4UYKmyNiWf1AqsXYzfXduRHhTZEeTxS9MhZスクリプトIDとして指定すれば、ライブラリとして使用できます。

f:id:nekonenene:20210905014228p:plain
新エディタでも無事にライブラリとして導入できました

こうして、ArrayLib を新エディタでも使うことが出来たのでした。
Google Apps Script を書くのがはかどります。

めでたしめでたし

selenium/node-chrome と selenium/standalone-chrome の違い

どっちを使えばいいかわからなかったのでメモ。

通常は standalone-chrome を使えばOK。

じゃあ node-chrome は何に使えばいいのかっていうと、
これは Selenium Grid Hub といっしょに使う場合に使用。

https://github.com/SeleniumHQ/docker-selenium/tree/selenium-3 の README をよく読むと、
docker-compose の作りあたりでなんとなく察せれるんだけど、
Selenium Grid Hub がハブとなり、それぞれに接続するためのイメージが node-xxxxxx (node-chrome とか node-firefox とか)。

複数ブラウザのテストをしたいときに便利。

日本語だとこちらの ↓ 記事がわかりやすかった。
Selenium Gridで複数の実機ブラウザで自動テスト | TECHSCORE BLOG

最初 Node.js が関連するかと思ったので戸惑ったぜ・・・