4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Sheets API vs getValues(): シンプルなシートでの再検証と訂正

Posted at

以前、私の記事「[【GAS】12万行のデータ取得が24秒から7秒に!getValues()の代わりにSheets APIを使う方法」で、Google Apps ScriptにおけるGoogle Sheetsのデータ取得方法について議論しました。そこで、getValues()メソッドとSheets APIの速度を比較し、APIの方が優位であると結論づけました。しかし、その検証環境が特定の条件下(シートに計算式や装飾が含まれていない場合)で、期待したほどの差が出なかったことを最近再確認しました。この点について、読者の皆様に誤解を与えてしまった可能性があり、心よりお詫び申し上げます。

背景と訂正の経緯

前回の記事では、大量のデータを扱う場合にSheets APIがgetValues()よりも高速であることを強調しました。これは、複雑なシート(計算式、条件付き書式、画像などの装飾を含む)では確かに有効なアプローチです。しかし、シンプルなデータのみのシートでテストしたところ、以下のような結果となりました:
SheetsAPI3.png

getValues() の実行時間: 7.380 秒
Sheets API の実行時間: 6.030 秒

これを見ると、APIの方が約1.35秒速いものの、劇的な差とは言えません。私の前回の記事では、APIの利点を過度に強調し、こうしたシンプルなケースでの実態を十分に考慮していませんでした。これにより、読者の皆様がAPIの導入を急ぎすぎてしまうような印象を与えてしまったかもしれません。本当に申し訳ありません。
この訂正は、最近の追加テストを通じて明らかになりました。テスト環境は以下の通りです:

シートサイズ: 12万行 × 2列のテキストデータ(計算式なし、装飾なし)
前記事のスプレッドシートに新たにシート「装飾なしシート」を作成し、既存のシートutf_ken_allからA:B列を「コピー」、「特殊貼り付け」-「値のみ貼り付け」で作成したシートを測定に使いました。
スプレッドシートには計算式が入ったシートと値のみの2つのシートが存在する状態でテストしました。

なぜ差が小さいのか?

シンプルなシートの場合、getValues()は内部的に効率的なデータ取得を行っており、APIのオーバーヘッド(認証やリクエストの準備)が相殺されてしまうためです。一方、複雑なシートではAPIがセルごとのメタデータを効率的に扱えるため、差が顕著になります。したがって、用途に応じて選択することが重要です。

getValues()をおすすめする場合: シンプルなデータ取得で、コードの簡易性を優先。
Sheets APIをおすすめする場合: 計算式や装飾が多く、大量データや高度な操作が必要。

今後のアドバイス

この経験から、パフォーマンス比較は複数のシナリオで検証することが不可欠だと学びました。皆様も、自身のプロジェクトでどちらかを選ぶ際は、まずは小規模テストをおすすめします。Googleの公式ドキュメント(Sheets APIドキュメント)を参考に、状況に合った方法を選んでください。
きちんと検証せずに記事を作成しまったことにお詫び申し上げます。今後、より正確で役立つ情報を提供できるよう努めてまいります。ありがとうございました。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?