Google App Script(GAS)を少し触った件。ロット誰がしていいか教えてくれる君

はじめに

Noteから今週中に投稿したら、毎月投稿できたことになるよということで、クリスマスイブの朝からキーボードをたたいています。

私はこの数年FF14をやっていて固定(*1)を組んでコンテンツ攻略に挑んでいるのですが、毎年、クリスマスは予定を入れるなというお達しが来ています。そのため、自分にとってはクリスマスの中止のお知らせ(*2)で一喜一憂しなくて済みます

固定(*1): オンラインゲームなどにおいて固定のメンバーを用意すること。対義語は野良。よく恋愛関連で崩壊することがオンライン上で観測される
例文:  男オンリーで固定を組んだのに恋愛に発展して、固定が崩壊した -

クリスマス中止のお知らせ(*2): 2ch(当時の名称。現在は5ch)などではやったネタ。毎年何かしらの理由をこじつけてクリスマスは中止となり、普通の日になる。ちなみに中国ではコロナを理由にガチでクリスマスが中止になっている
例文:
クリスマス中止のお知らせ

適当に書いた

FF14の固定を組んでいると色々な情報をGoogle Spread Sheetに記載してメモを取ることが多いです。
私が組んでいる固定ではだれが何を報酬で受け取ったかを管理していて、これらの情報をもとに全員に平等に報酬が配られています。


画像1:管理表

その際に、誰がロット(*3)をしていいのかを、Voice Chat(VC)でコールするのですが、音声情報は伝達した際に、記録して残らないという問題があります。これは由々しき事態です。

  • 自己肯定感をあげるための褒めてくれるASMRを聴いている

  • 耳舐めASMRを聴いている

  • 監禁洗脳ヤンデレASMRを聴いている

これらの音声を聞きながらVCをしていると情報を落としてしまう可能性が高くなります(私はやっていませんが)

褒めてくれる30分。褒められすぎてなんか凹んだ

これを書くためだけに聞いた。すげえゾワゾワした

基本的にこの手の情報をチャットに残していると非常に便利なのですが、上記の画像1を見てもらったらわかるように、文字情報ではないので、ロットしていい人をチェックボックスの状態を見て記載する必要があり、人力の手間が発生することが問題点として挙げられます。

そのため、今回、クリスマスプレゼントとして、Google App Script(以後GAS)でこの問題を解決してみました。あと、GASの始め方についても記載してみます


出来たもの

動画張るの面倒なので、画像
チェックボックスを変更すると自動で下に書き換わる

使い方

  1. masterの名前を自分たちの固定のメンバーの名前に変更する

  2. チェックボックスを入力する

  3. チャットにロットできる人を記載した文字列をコピペして書く

ここからは後から、軽くメモ程度な話になります。ちょっと専門的な話も出てくるので、興味がある人だけお願いします


Google App Script

Apps Script は、Google Workspace の統合、自動化、拡張のためのビジネス ソリューションをすばやく簡単に構築するための唯一のローコード プラットフォームです。

一般的なウェブ言語を使用
Apps Script を使えば、HTML、CSS、JavaScript を使って開発を行えます。独自のフレームワークの知識を新たに身に付ける必要はありません。

https://workspace.google.co.jp/intl/ja/products/apps-script/

公式から引用しましたが、要はgoogle SpreadSheetなどgoogle関連のサービスの自動化のためにjavascriptを書いてできますよってことです。

javascriptも結構モダンな書き方ができます。昔は
(昔はIE互換のことを考える必要があった。ついでに各社でjavascriptの使える機能が違っていた)
要はIE互換を気にしなくて、ECMAScriptの機能を使えるという認識でOKです

ちなみ、V8ランタイムということなので、皆さん使っているであろう、chromeの内部でも使われています。(厳密にいえばchromiumのrepoで開発されている)

(これ書くまでgoogle のgitって自社内でやってること知らなかった。。。) 

GAS始めよう

spreadSheetの拡張機能の欄からApps Scriptを押せば始められます。

画像2 Apps Scriptの始め方
画像3 Apps Scriptの開始した直後

あとはこのコード.gsをいじり続ければOKです。やったね。

セルにコード上でアクセスしよう


画像4:A2に適当に文字を入れる


セルにアクセスするコードを書く
function myFunction() {
  // A2にアクセスするためのコード
  const cell = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(2,1); 
  console.log(cell.getValue()) // セル内の値を取得する
}

上記のコードを書いたら、実行を押して権限を付与すればOKです。

権限を求められる
怪しいアプリではあるが、デベロッパー =自分なので自分を信じてください


こんな感じにセルの値をとれている

補足:SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(2,1)について

  • SpreadsheetApp

    • SpreadSheetをJS側で操作するためのクラス

  • getActiveSpreadsheet

    • SpreadSheet = ファイルのこと

  • getActivesheet

    • Sheet = 下側のシート1などのことを指す

  • getRange(row,col)

    • row=行= y

    • col = 列 = x

基本的にgetRangeでセルにアクセスできるまで押さえておけば色々できる。

SpreadSheet と Sheetの概念も大事。今は単一のシートしかないため activeSheetでのアクセスでも問題ないが、別シートからのアクセスをしたい場合は、getActiveSpreadsheet.getByNameなどで名前から引く必要がある。

ローカルの開発環境の構築


上の状態のメリットはさくっと書いたコードを試せるというメリットではあるのですが、個人的にgitの管理などできないことが気になります。個人開発とはいえ、gitでコードを管理はしておきたいです。


(個人開発 gitとかでちょっとバズっていましたので少し触れます。

  • 全部addしてステージングするとかなめているのか

  • commit messageがいつも同じとかなめているのか

  • 現代githubはmainになっている

  • 個人開発だからmainに直接pushを許容するかどうかは任せる

    • ある程度進んだらブランチ切って作業したほうがよいのではと思っている

    • 最初はブランチを切るメリットはあまりない気がしているが

  • 個人開発なのでこのスタイル というのはよくない

    • 主語が大きすぎる

  • ちなみに下記の人をtweetを見ていると色々な人からおしかりをもらったっぽいです。

ブラウザ上で開発できることは確かにメリットですが、もし見ている方の中には手元のvimで開発したいとか、サクラエディタでコードを書きたいという方がいるかもしれません。

あと、jsの型がない世界にキレ散らかしてtypescriptで書きたいという方がいると思います。tsをjsに変換する必要があるので、このあたりも含めて対応が必要です。

ということで、ローカルの開発環境を整えましょう。きっちりとここで管理しておくことをおすすめします。

下記が便利なので、ありがたく使いましょう。ちなみにclaspが必要なので、下記コマンドを実行して、インストールとログインを済ませましょう。

npm install -g clasp //npm派
yarn global add clasp //yarn派

clasp login

あとはtsでコードを書いてyarn deployすればOKです。
この時、ブラウザで書いているコードは消えてしまうため、注意が必要です。

まとめ

色々書こうと思ったのですが、ここからは技術的なことになるので、noteよりも別媒体で書いた方がよいと思ったので、このあたりにします。
手癖で書いたことを面白可笑しく書いていければと思います。

repoを置いておきます。

投げ銭先: Link


この記事が気に入ったらサポートをしてみませんか?