私はプログラミングが初めてです(CodecademyのJSコースをいくつか受講しました)。簡単なスクリプトを作成して、ポーカーゲームの結果が記載されたスプレッドシートが与えられたら、誰に誰を支払うべきかを判断しようとしています。 Google Apps Scriptを開き、開始するために次のように書きました。
function addplayerstoArray(numplayers) {
var playerArray = [];
for (i=0; i<numplayers; i++) {
playerArray.Push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
アイデアは、その中のプレーヤーの総数で配列を作成することです。コードを実行すると、コンソールに「3」が出力されると思いました。しかし、何も起こりませんでした。と言いました
「ReferenceError:「console」は定義されていません。」
A)印刷に関してGoogle Apps Scriptコンソールがどのように機能し、自分のコードが目的を達成しているかどうかを確認する方法について理解できないことはありますか?
B)コードに問題がありますか?
コードはブラウザではなくクラウドで実行されているため、コンソールは使用できません。代わりに、GASが提供する Logger クラスを使用します。
Logger.log(playerArray[3])
[表示]> [ログ]の下のIDEで結果を表示します。
GASを使用したロギング に関するドキュメントを次に示します。
編集:2017-07-20 Appsスクリプトは Stackdriver Logging も提供するようになりました。 [表示]-[コンソールログ]の下のスクリプトエディターでこれらのログを表示します。
上記のvinniefのハッキングソリューションを構築するために、次のようにMsgBoxを使用します。
Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);
ブレークポイントのように機能し、スクリプトを停止し、必要な文字列をポップアップボックスに出力します。 Logger.logに問題があるSheetsで特に見かけますが、これはほとんどの場合に適切な回避策を提供します。
A)印刷に関してGoogle Apps Scriptコンソールがどのように機能し、自分のコードが目的を達成しているかどうかを確認する方法について理解できないことはありますか?
Google Apps Scriptプロジェクトの.gsファイルのコードは、Webブラウザーではなくサーバーで実行されます。メッセージを記録する方法は Class Logger を使用することでした。
B)コードに問題がありますか?
エラーメッセージが言ったように、問題はconsole
が定義されていないことでしたが、最近では同じコードが他のエラーを投げます:
ReferenceError: "playerArray"は定義されていません。 (12行目、ファイル「コード」)
これは、playerArrayがローカル変数として定義されているためです。関数の外に行を移動すると、これが解決されます。
_var playerArray = [];
function addplayerstoArray(numplayers) {
for (i=0; i<numplayers; i++) {
playerArray.Push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
_
エラーをスローせずにコードが実行されるようになったので、代わりにブラウザーコンソールを確認するために、Stackdriver Loggingを確認する必要があります。 Google Apps ScriptエディターUIから[表示]> [Stackdriver Logging]をクリックします。
2017年に、GoogleはすべてのスクリプトStackdriver Loggingをリリースし、Class Consoleを追加しました。したがって、console.log('Hello world!')
のようなものはエラーをスローしませんが、ログはブラウザーコンソールではなくGoogle Cloud Platform Stackdriver Logging Serviceにあります。
から Google Apps Scriptリリースノート2017
2017年6月23日
Stackdriver Logging は早期アクセスから移動しました。すべてのスクリプトがStackdriverロギングにアクセスできるようになりました。
次の例は、 console サービスを使用してStackdriverに情報を記録する方法を示しています。
_function measuringExecutionTime() { // A simple INFO log message, using sprintf() formatting. console.info('Timing the %s function (%d arguments)', 'myFunction', 1); // Log a JSON object at a DEBUG level. The log is labeled // with the message string in the log viewer, and the JSON content // is displayed in the expanded log structure under "structPayload". var parameters = { isValid: true, content: 'some string', timestamp: new Date() }; console.log({message: 'Function Input', initialData: parameters}); var label = 'myFunction() time'; // Labels the timing log entry. console.time(label); // Starts the timer. try { myFunction(parameters); // Function to time. } catch (e) { // Logs an ERROR message. console.error('myFunction() yielded an error: ' + e); } console.timeEnd(label); // Stops the timer, logs execution duration. }
_
Googleスクリプトプロジェクトでは、htmlファイル(例:index.html)またはgsファイル(例:code.gs)を作成できます。 .gsファイルはサーバー上で実行され、@ Peter Herrmanが説明するようにLogger.logを使用できます。ただし、関数が.htmlファイルで作成されている場合、ユーザーのブラウザで実行されているため、console.logを使用できます。 Chromeブラウザコンソールは 表示済み Windows/LinuxではCtrl Shift J、MacではCmd Opt Jで指定できます
HtmlファイルでLogger.logを使用する場合は、 scriptlet を使用して、htmlファイルからLogger.log関数を呼び出します。これを行うには、挿入します <? Logger.log(何か)?> 何かをログに記録するものに置き換えます。構文<?を使用する標準スクリプトレット...?>、コンテンツをページに明示的に出力せずにコードを実行します。
Logger.log()
は技術的にはコンソールに何かを出力する正しい方法ですが、いくつかの面倒な点があります。
Logger.log(playerArray)
を挿入する必要があります。デバッグ後、おそらくLogger.log(playerArray)
を削除する必要があります。したがって、さらに1〜2ステップ追加します。代わりに、何かをデバッグしたいときはいつでも、ブレークポイントを追加し(行番号をクリック)、デバッグボタン(バグアイコン)を押します。ブレークポイントは、変数に何かを割り当てているときはうまく機能しますが、変数を開始して後でその中を覗きたいときはうまくいきません。これはopがやろうとしていることに似ています。この場合、 "x"(xはスポットをマークします!)と入力してブレーク条件を強制し、ランタイムエラーをスローします。
ログの表示と比較してください:
デバッグコンソールにはより多くの情報が含まれており、ログオーバーレイよりも読みやすくなっています。この方法の1つの小さな利点は、きれいなコードを維持することが重要な場合、大量のログコマンドでコードを汚染することを心配する必要がないことです。 「x」を入力した場合でも、デバッグプロセスの一部として削除することを忘れないでください。削除しないと、コードが実行されません(ビルトインクリーンアップメジャー、yay)。