まずはじめに
Googleドライブの機能を最近になって少し使用頻度が上がってきました。クラウドサービスとしてどこからでも利用できるのが便利というのが大きいですね。特にエクセルの代わりとして使える利用頻度が上がり、少しでも便利に使おうと思っているとgoogle apps scriptを目にする事になります。
その中で作成した機能を簡単に実行しようと思うと、独自のメニューがあればいいのに、という話になります。独自メニューの追加自体は調べればすぐにわかるのですが、コーディングの可読性を含めて納得できるものがありませんでした。そのため、備忘録としてまとめておこうと思った次第です。
コーディング
ということで早速コーディングです。非常にシンプルです。
//------------------------------------------------------------
// Mark: custom menu
//------------------------------------------------------------
function onOpen() {
// メニュー内容作成
var menuEntries = [];
menuEntries.push({name: "getGmail", functionName: "getGmail"});
// メニュー追加
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu("custom menu", menuEntries);
}
解説
コメント通りのシンプルなロジックであるため、コード自体の解説ではなく「なぜこのコードであるか」という解説です。
メニューの追加が簡単
機能を追加し、メニューを増やしたいとなった場合はmenuEntries.push({name: "xxx", functionName: "xxx"});
を追記すればよいです。前後のロジックに手を入れることなく、追加した機能に関するものだけ書けばよいのです。当たり前のようですが、これができていないことが多いのです。
機能を詰め込みすぎないことを前提としている
他のサイトを見るとサブメニューにしたり、セパレーターを入れたりといったこともできるようです。しかし、実現可能であることと機能として実装することは別の話です。
基本はスプレッドシートであるため、一つのシートへ機能を詰め込み過ぎると使いにくくなることが懸念事項としてあがります。GAS(google apps script)は処理速度がそれほど早くないこともあり、なるべく処理を軽くしたいです。
そのあたりを踏まえて、ほどよい機能追加ができるところだと思います。
結果として可読性が高く、不具合になりにくい
なるべく機能を複雑にしない、追加をする場合でも簡単に修正を行えることから、結果として不具合が起きにくくなります。今回の場合はメニューのすごく単純なところですが、機能豊富な画面を作成するようなことになったときに大きな差が出てきます。大袈裟な言い方のようですが、他の人が作ったプログラムを読むことが多い人には理解していただけるかと思います。
さいごに
調べればすぐに出てくることではあるものの、あえて記事をアップしました。理由は解説の部分に書いてあるとおり、なるべくシンプルに、不具合をなくしたいという思いからきています。少しでも不具合に遭遇する機会を減らせればと思っております。