Apps Script による高度な開発プロセス
2016年1月29日金曜日
[この記事は Matt Hessinger、Google Apps Script プロジェクト スペシャリストによる Google Developers Blog の記事 "Advanced Development Process with Apps Script" を元に翻訳・加筆したものです。オリジナルの記事は Google Apps デベロッパー ブログに投稿されました。詳しくは元記事をご覧ください。]
今回は、Apps Script の複雑なソリューションを開発するためのヒントとベスト プラクティスをご紹介します。
npm install -g node-google-apps-script
このプロジェクト「node-google-apps-script」は、コマンドラインから Apps Script プロジェクトをアップデートするために Google Drive API を使用する Node.js ベースのコマンドライン インターフェース(CLI)です。NPM サイトでノード パッケージを参照でき、また GitHub のレポジトリでも参照することができます。どちらのリンクにも使用方法が記載されています。このツールは 、Dan Thareja によって作成され、Matt Condon によって機能が追加されました。
ツールを使用する前に、Apps Script のプロジェクトのインポートとエクスポート ページを参照してください。開発プロセスを計画するとき、次のいくつかの点に注意する必要があります。また、開発においてこの手法を最大限に活用するために採用できる、いくつかのベスト プラクティスもあります。
本投稿で述べられるいくつかのプラクティスを実演しているサンプル プロジェクトがあります。ここをクリックして、GitHub でコードを参照してください。このインポート/エクスポート開発の例を含めて、Apps Script のサンプルのすべてを取得するには次のコマンドを実行してください:
git clone https://github.com/google/google-apps-script-samples.git
サンプルは、「import_export_development」サブディレクトリにあります。
スタンドアロン Apps Script プロジェクトは、Google ドライブに保存されます。上記のリンク先にあるコマンドライン インターフェース(CLI)ツールを使用すれば、お好みのエディタを使って、選択したリポジトリにコードをコミットしたり、同期したりすることができます。タスク ランナーにタスクを追加して 1 つ以上のコードを Apps Script プロジェクトにプッシュできます。場合によっては、さまざまな環境のためのコードを含めたり除外したり、コーディング スタイルを確認したり、 lint を実行したり、minify を実行したりすることもあります。UI 関連のファイルを簡単に作成して Apps Script 外のファイル ホストにプッシュできるため、同じファイルを構築中の他のアプリで使用する場合に役に立ちます。
Drive API によって Apps Script と連携できる一般的な開発ツール
編集機能に加えて、スクリプト エディタ以外での作業によって実現する最大の改善点は、1 つの Apps Script プロジェクトでの作業に限定されなくなることです。各自の Apps Script プロジェクトに対して作業を行う個々のデベロッパーがチームとして共同作業を行うことが大幅に容易になり、テスト、ユーザーによる受け入れ、本番稼働バージョンのプロセスやセキュリティが向上することにより、容易に制御できるようになります。その他の通常のプロジェクト プラクティスとの整合性を保つだけではなく、Apps Script ならではの複数環境でのアプローチを利用する方法がいくつかあります。
このアプローチを使用する場合、考慮すべき 3 つのベスト プラクティスがあります。
プロジェクトにとっての利点 ― 本番環境で OAuth のスコープをより厳密に制限でき、開発中のデベロッパーのアクセス範囲が広がります。また、デベロッパーは各自の開発作業をサポートする個人的な構成設定を保持できます。
プロジェクトにとっての利点 -テスト機能を作成して、本番稼働の Apps Script ファイルから切り離しておくことができます。これによって、本番稼働の Apps Script プロジェクトが簡素化され、本番稼働のユーザーに必要となる正しい OAuth のスコープが維持されます。
プロジェクトにとっての利点 - 最終的な展開の状況が、一般的にはデバッグ時に利用できないソースに依存する場合でも、最適なユニット テスト方法をプロジェクトに統合できます。
コマンドラインで python ツールを使用してチームの構築プロセスを実現する場合、Joe Stump の python-gas-cli を参照してください。ここでパッケージ情報を参照したり、GitHub レポジトリで使用方法を参照したりできます。
最後に、この投稿に関連する参照先へのリンクをご紹介します。
Posted by Yoshifumi Yamaguchi - Developer Relations Team
今回は、Apps Script の複雑なソリューションを開発するためのヒントとベスト プラクティスをご紹介します。
Apps Script と最新の開発
Apps Script エディタでは、独自のソース コード管理ツールを使用することが許可されていないため、他のデベロッパーと共同作業を行うことが困難です。そのため、プロジェクトの開発、テスト、および実稼働バージョンの管理が非常に非効率になります。Apps Script が提供する Google プラットフォームとのパワフルな連携に加えて、毎日利用する開発ツールやベストプラクティスを利用できるとしたらどうでしょう。現在では、それが可能となりました。npm install -g node-google-apps-script
このプロジェクト「node-google-apps-script」は、コマンドラインから Apps Script プロジェクトをアップデートするために Google Drive API を使用する Node.js ベースのコマンドライン インターフェース(CLI)です。NPM サイトでノード パッケージを参照でき、また GitHub のレポジトリでも参照することができます。どちらのリンクにも使用方法が記載されています。このツールは 、Dan Thareja によって作成され、Matt Condon によって機能が追加されました。
ツールを使用する前に、Apps Script のプロジェクトのインポートとエクスポート ページを参照してください。開発プロセスを計画するとき、次のいくつかの点に注意する必要があります。また、開発においてこの手法を最大限に活用するために採用できる、いくつかのベスト プラクティスもあります。
本投稿で述べられるいくつかのプラクティスを実演しているサンプル プロジェクトがあります。ここをクリックして、GitHub でコードを参照してください。このインポート/エクスポート開発の例を含めて、Apps Script のサンプルのすべてを取得するには次のコマンドを実行してください:
git clone https://github.com/google/google-apps-script-samples.git
サンプルは、「import_export_development」サブディレクトリにあります。
スタンドアロン Apps Script プロジェクトは、Google ドライブに保存されます。上記のリンク先にあるコマンドライン インターフェース(CLI)ツールを使用すれば、お好みのエディタを使って、選択したリポジトリにコードをコミットしたり、同期したりすることができます。タスク ランナーにタスクを追加して 1 つ以上のコードを Apps Script プロジェクトにプッシュできます。場合によっては、さまざまな環境のためのコードを含めたり除外したり、コーディング スタイルを確認したり、 lint を実行したり、minify を実行したりすることもあります。UI 関連のファイルを簡単に作成して Apps Script 外のファイル ホストにプッシュできるため、同じファイルを構築中の他のアプリで使用する場合に役に立ちます。
Apps Script プロジェクト ライフサイクルのベスト プラクティス
プロジェクトのインポートとエクスポート ページの情報に加えて、いくつかの考慮すべき点があります。- ローカル ファイル セットがマスターです。ローカルでファイルの追加、削除、または名前の変更を行う場合、リンクされたツールによる次のアップロード時に Apps Script プロジェクトがローカル ファイル セットが自動的に反映されます。
- ローカル ファイルには任意の名前を付けることができます。プロジェクトへのアップロード前のファイル ステージング タスクで、クライアント側の ".js" や ".css" に ".html" を追加する必要があります。上記で言及したツールでは、アップロードのためにステージングする ".js" ファイルを、Apps Script サーバー スクリプト ファイル(エディタの ".gs")として処理します。HtmlService によってアクセスする「クライアント」コードとしてステージングする、あらゆる ".html" ファイルを処理します。つまり、JavaScript として ".js" 拡張子を付けたサーバー スクリプトを開発し、ローカルのツールで JavaScript 構文が認識されるようにすることができます。開発中に、クライアント側のコード(つまり、HtmlService によって処理する必要があるコード)を ".html"、".js"、または ".css" にして、エディタで正しい構文が強調表示され、検証されるようにすることが可能です。
編集機能に加えて、スクリプト エディタ以外での作業によって実現する最大の改善点は、1 つの Apps Script プロジェクトでの作業に限定されなくなることです。各自の Apps Script プロジェクトに対して作業を行う個々のデベロッパーがチームとして共同作業を行うことが大幅に容易になり、テスト、ユーザーによる受け入れ、本番稼働バージョンのプロセスやセキュリティが向上することにより、容易に制御できるようになります。その他の通常のプロジェクト プラクティスとの整合性を保つだけではなく、Apps Script ならではの複数環境でのアプローチを利用する方法がいくつかあります。

このアプローチを使用する場合、考慮すべき 3 つのベスト プラクティスがあります。
- 「ローカル」での開発のために固有の構成値を使用する。
- スタンドアロンで実行できるテスト方法を構築する。
- 開発とテストの依存関係を含める。
ベスト プラクティス:「ローカル」での開発のために固有の構成値を使用する
デバッグとテストのために、デベロッパーがローカルな値をインジェクトできるようにする基本構成クラスの簡単な例を示すサンプルがあります。この場合、デベロッパーが Apps Script に Drive API へのアクセスのために完全なスコープが必要であることを示すアノテーション @NotOnlyCurrentDocも追加しています。このプロジェクトでは、「本番稼働」の展開にアノテーション @OnlyCurrentDoc があるため、OAuth のスコープがドキュメント、スプレッドシート、またはフォームのアドオンとして実行されるスクリプトに関連するドキュメントに制限されることになります。標準ファイル パターンをソース プロジェクトの「ignore」ファイルに追加する場合、デベロッパー独自のファイルが実際のコードベースに組み込まれることはありません。プロジェクトにとっての利点 ― 本番環境で OAuth のスコープをより厳密に制限でき、開発中のデベロッパーのアクセス範囲が広がります。また、デベロッパーは各自の開発作業をサポートする個人的な構成設定を保持できます。
ベスト プラクティス:スタンドアロンで実行できるテスト方法を構築する
現時点では、自動的にテストをトリガーする方法はありませんが、プロジェクトの特定の機能を検証するユニット テストを作成することはできます。また、テストに特定の構成値を指定することもできます。繰り返しになりますが、これらのファイルは本番稼働の展開に組み入れるべきではありません。Apps Script Execution API を使用して、テストランナーからこれらのテストを実行することもできます。プロジェクトにとっての利点 -テスト機能を作成して、本番稼働の Apps Script ファイルから切り離しておくことができます。これによって、本番稼働の Apps Script プロジェクトが簡素化され、本番稼働のユーザーに必要となる正しい OAuth のスコープが維持されます。
ベスト プラクティス:開発とテストの依存関係を含める。
スプレッドシートやドキュメントのアドオンを開発する場合、SpreadsheetApp に「アクティブな」アイテムを用意します。ただし、開発やテストの実行中は「アクティブな」コンテキストなしで Apps Script を実行できます。このモードで開発する必要がある場合、動作モードを決定できるメソッドに、現在アクティブになっているアイテムを取得するための呼び出しをラップできます。これにより、開発やテストのインスタンスで、テストに使用する「アクティブな」ドキュメントの ID をインジェクトできますが、実際のコンテキストで実行する場合、getActive* の結果に委譲します。プロジェクトにとっての利点 - 最終的な展開の状況が、一般的にはデバッグ時に利用できないソースに依存する場合でも、最適なユニット テスト方法をプロジェクトに統合できます。
まとめ
現在では、独自の開発ツールやソース管理ツールを使用するという選択肢があります。ウェブ アプリやアドオンとして公開する場合や、高度なサービスを構成する場合など、アプリケーションのライフサイクルで Apps Script エディタを使用する必要はありますが、いま紹介した手順を実行することによって Apps Script プラットフォームの機能を最大限に利用することができます。Google デベロッパー サイトで Apps Script を参照して、Apps Script 開発の詳細情報とサンプルを取得してください。コマンドラインで python ツールを使用してチームの構築プロセスを実現する場合、Joe Stump の python-gas-cli を参照してください。ここでパッケージ情報を参照したり、GitHub レポジトリで使用方法を参照したりできます。
最後に、この投稿に関連する参照先へのリンクをご紹介します。
- NPM 上の node-google-apps-script
- プロジェクトのインポートとエクスポート
- Apps Script の実行 API
- 現在のドキュメント/スプレッドシートに対する OAuth スコープの指定
Posted by Yoshifumi Yamaguchi - Developer Relations Team