Google Sheets API v4「1セル 50000文字までの制限あるよ」

[@koshi_life](https://twitter.com/koshi_life) です。

タイトルのままです。

スプレッドシートの1セルに50000文字以上の値を書き込む可能性があるなら、
スプレッドシートに書き込む前に50000文字以内にしてから書き込む もしくは エラーキャッチするなりしようという話です。
エラーメッセージも日本語でわかりやすく表示されていますが、公式ドキュメントに見当たらない制約だったので備忘します。


### スタックトレース

```
$ bundle exec ruby update_sheets.rb 
Traceback (most recent call last):
        16: from update_sheets.rb:18:in `<main>'
        15: from [project]/vendor/bundle/ruby/2.6.0/gems/google_drive-3.0.2/lib/google_drive/worksheet.rb:425:in `s
ave'
        14: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/generated/google/apis/sheets_v4/s
ervice.rb:789:in `update_spreadsheet_value'
        13: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/base_service
.rb:360:in `execute_or_queue_command'
        12: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/http_command
.rb:102:in `execute'
        11: from [project]/vendor/bundle/ruby/2.6.0/gems/retriable-3.1.2/lib/retriable.rb:56:in `retriable'
        10: from [project]/vendor/bundle/ruby/2.6.0/gems/retriable-3.1.2/lib/retriable.rb:56:in `times'
         9: from [project]/vendor/bundle/ruby/2.6.0/gems/retriable-3.1.2/lib/retriable.rb:61:in `block in retriable
'
         8: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/http_command
.rb:110:in `block in execute'
         7: from [project]/vendor/bundle/ruby/2.6.0/gems/retriable-3.1.2/lib/retriable.rb:56:in `retriable'
         6: from [project]/vendor/bundle/ruby/2.6.0/gems/retriable-3.1.2/lib/retriable.rb:56:in `times'
         5: from [project]/vendor/bundle/ruby/2.6.0/gems/retriable-3.1.2/lib/retriable.rb:61:in `block in retriable'
         4: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/http_command.rb:113:in `block (2 levels) in execute'
         3: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/http_command.rb:310:in `execute_once'
         2: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/http_command.rb:193:in `process_response'
         1: from [project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/api_command.rb:116:in `check_status'
[project]/vendor/bundle/ruby/2.6.0/gems/google-api-client-0.28.6/lib/google/apis/core/http_command.rb:228:in `check_status': badRequest: 入力内容が 1 つのセルに最大 50000 文字の制限を超えています。 (Google::Apis::ClientError)
```

### 検証コード

```update_sheets.rb
require 'google_drive'

# 指定の文字列長の文字列を生成します。
def generate_rand_text(length: 100)
  text = []
  (1..length).each { |index| text << index % 10 }
  text.join('')
end

session = GoogleDrive::Session.from_config('config.json')

sheets_id = 'xxx_xxx_xxx'
sheets = session.spreadsheet_by_key(sheets_id)

worksheet = sheets.worksheets[0]
value = generate_rand_text(length: 50001) # NG
#value = generate_rand_text(length: 50000) # OK
#value = generate_rand_text(length: 50001)[0, 50000] # OK (50000文字以降は切り捨てればOK)
worksheet[1, 1] = value
worksheet.save
```

`google-drive-ruby` ライブラリの使い方は前回記事を参照。
[RubyでGoogle Drive/スプレッドシートを扱う](https://qiita.com/koshilife/items/4baf1804c585690fc295)


### 参考

[GoogleAppsScript(GAS)でのcacheあれこれ](https://befool.co.jp/blog/8823-scholar/gas-use-cache/)

にも制限に関する記述あり。

>Cache.gs
> // ※1セル50000文字までという制限があるため