🦖

コマンドラインなし!GASのライブラリ機能を活用した品質と安全を担保する最小構成

に公開

AIとGoogle Apps Script(以下、GAS)を使用し、アイデアを素早く形にし、検証する機会がより増えました。GASは、個々のスプレッドシートに紐づいており、それぞれが独立した「本番環境」として機能することができます。そのため、本番環境ごとに同一のGASで運用しがちです。

このような環境の場合、バグ修正時の影響範囲やメンテナンスの手間が課題です。これらの課題を解決し、ユーザーにとって価値のある体験を届けるために、品質と安全性が損なわれない運用ができる構成が必要です。
今回は、GASのライブラリ機能を活用した品質と安全を担保する最小構成についてです。

なぜ、ライブラリとして読み込むのか

AIで素早くGASを作成しても、本番環境ごとに同一のGASで展開すると、以下のような問題が発生します。

GASの一元管理ができない

ユーザーが使用する本番環境ごとにGASがあるため、何をどこまで反映したかなどの管理が煩雑になります。

メンテナンスに手間がかかる

一元管理ができていない環境で修正が発生した場合、全ての本番環境に手動で反映する必要があり、時間 / 労力 / 気力がかかります。

開発スピードの阻害

メンテナンスに手間がかかるため、AIを使用した素早い検証スピードが損なわれてしまいます。

これらの問題を解決するために、GASの「ライブラリ機能」を活用します。具体的には、本番環境からマスタ環境のGASをライブラリとして読み込むことで解決します。

最小構成図

上図には本番環境が複数ありますが、「プロジェクトごと」などを想定するとよくある状況です。開発環境とマスタ環境が分離しているため、開発者は安心して開発でき、本番環境に提供されるGASの品質や本番環境のデータの安全性も担保できます。最小構成のため、テスト環境などはありません。ご状況に合わせ、適宜ご変更ください。

各環境の目的と特徴

開発環境

目的

実装、改修、バグ修正など、全ての開発を行います。

特徴

本番環境、マスタ環境から完全に分離されており、何をしても他の環境に影響を与えません。
開発者は他環境への影響を気にせず、安心して開発できます。

マスタ環境

目的

ライブラリとしてGASを本番環境へ提供します。
この環境での開発は行わず、開発環境のGASをコピペで反映します。

特徴

本番環境に影響を与えますが、開発環境には影響しません。

最小構成の弱点

開発環境からマスタ環境へのコード反映はコピペです。本来であればClaspなどを使用し、コピペをなくしたいところです。ただ、ここの1点だけコピペを許容することで、コマンドラインを使用する必要がなくなります。このことにより、非エンジニアの方でも最小構成を実現でき、品質と安全を担保することができます。

本番環境

目的

ユーザーが実際に使用または参照します。
マスタ環境のGASをライブラリとして読み込みます。

特徴

開発環境とは完全に分離されていますが、マスタ環境の影響を受けます。

最小構成の構築

それでは実際に最小構成の構築していきます。
開発環境は通常の開発になるため記載せず、マスタ環境と本番環境の構築方法を記載します。

1. 【マスタ環境】実装

本番環境にライブラリとして提供するGASを実装します。

function myFunction() {
    console.log('マスタ環境');
}

2. 【マスタ環境】デプロイ

実装が終わったタイミングで「ライブラリ」としてデプロイします。デプロイ時に設定したバージョンは、本番環境から読み込むライブラリのバージョンとして指定します。

3. 【マスタ環境】スクリプトIDの取得

スクリプトエディタのURLからスクリプトIDをコピーします。
/projects/123456789/edit の「123456789」の部分です。

4. 【本番環境】マスタ環境のGASをライブラリとして読み込む

4-1. スクリプトエディタの左メニュー「ライブラリ +」を押下

4-2. マスタ環境のスクリプトIDを貼り付け、検索ボタンを押下

4-3. バージョンの指定とIDを設定し、追加ボタンを押下

バージョン

先ほどマスタ環境でデプロイしたバージョンを選択します。

ID

本番環境のGASからマスタ環境のGASを参照するエイリアスです。あとから変更もできます。

4-4. 完了

左メニューのライブラリに「master」が表示されれば完了です。この状態で本番環境からマスタ環境のGASを読み込む準備ができました。
次に本番環境からマスタ環境のGASを実行するGASを実装していきましょう。

5. 【本番環境】実装

本番環境のGASに、マスタ環境のGASを呼び出すGASを追加します。

function myFunction() {
    master.myFunction();
}

master.myFunction();masterは、先ほどライブラリの追加の際に設定したエイリアスです。エイリアスを変更した場合は、GASの変更も必要になりますので、忘れずに更新してください。

6. 【本番環境】実行

この状態で本番環境のGASを実行すると、マスタ環境のGASを実行することができます。今回はマスタ環境のGASにconsole.log('マスタ環境')を設定しましたので、実行ログに「マスタ環境」が表示されることで、本番環境からマスタ環境のGASが実行されたことを確認することができます。

引数

本番環境のGASに引数を設定し、マスタ環境のGASに渡すこともできます。「プロジェクトごと」のような個別の処理がある場合でも柔軟に対応することができます。
引数の使い方はJavaScriptの基本的な内容となるため、本記事では割愛します。

まとめ

AIを使用した開発のスピードを損なわず、品質と安全性を両立させるためには、運用までを視野に入れた構成が不可欠です。個々のスプレッドシートがそれぞれ独立した本番という環境からの脱却案の1つとして、今回の最小構成がお役に立てれば幸いです。

私たちはデザイン会社のエンジニアとしてデザインと開発をつなぐフロントエンド開発を行っています。デザイナーとエンジニアの連携に課題がありましたら、お気軽にご相談ください。課題解決のお役に立てれば幸いです。
https://ajike.co.jp/contact

ajikeエンジニアチーム|デザインと開発をつなぐフロントエンドエンジニア

Discussion