質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

8回答

9799閲覧

String型の最大長に対する対策方法

H40831

総合スコア973

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/08/11 01:00

編集2020/08/11 01:02

JavaScriptでメモアプリを作成しようとしています。

こちらのブログを拝見したところ、JavaScriptでは文字列を最大512MBまでしか扱えないそうですが、
この文字数を超えるメモを作成しようとするとエラーがでてしまうということでしょうか?

出来る限りアプリの品質を落とさないために、
以下のいずれかの答えをご存知の方がいらっしゃいましたら、教えていただきたいです。

####質問1.
メモアプリに文字数制限があるのは良くないと思うので、
最大長を超えるデータを扱う方法はありませんか?

####質問2.
対策方法が存在しない or 対策しても最大長がある場合、
最大長を超えたら突然エラーがでて動かなくなるというのは良くないと思うので、
そうならない方法はありませんか?

####質問3.
対策方法が存在しない or 対策しても最大長がある場合、
利用者から最大文字数について問われた際に回答不可という返事だと無責任な気がするのですが、
なんと答えるべきでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/08/11 01:07

「JavaScript」ということですが、動かす環境はブラウザ上、ということで間違いないですか?
H40831

2020/08/11 01:08

はい、そのとおりです。 また、将来的にはPWAにもしたいなと思っています。
guest

回答8

0

ベストアンサー

メモアプリに文字数制限があるのは良くないと思うので、

最大長を超えるデータを扱う方法はありませんか?

まず512MBもの巨大なデータを扱うとなると、確実に動作が重くなります
最も一般的に普及しているメモリ容量は4GBです。(Avast PC Trends Report 2019
そのような中で、ただでさえメモリ馬鹿食いのブラウザが単純計算512MBのメモリを追加で使用するとなると、、、恐ろしいです。

個人的には512MBよりもっと前で制限をかけてしまった方がいいと思います。

投稿2020/08/11 01:29

編集2020/08/11 01:36
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/08/11 01:35

しかも単一項目でM単位のデータを持ちますからね。
Zuishin

2020/08/11 01:41

すべてのデータをメモリ上に持つものを昔はオンメモリエディタと言いましたが、ログファイルなど巨大なファイルを開くことができるよう、スワップファイルを作ってファイル上に保存するエディタもよくありますね。vim はスワップファイルを作りますが、非常に軽快に動作します。これは作り方次第かと。
H40831

2020/08/11 01:47

回答ありがとうございます! > 個人的には512MBよりもっと前で制限をかけてしまった方がいいと思います。 maisumakun様の回答にもありましたが、 重くなる前に制限をかけてしまったほうが親切というのは、たしかにと思いました!
H40831

2020/08/11 01:49

Zuishin さん > vim はスワップファイルを作りますが、非常に軽快に動作します。これは作り方次第かと。 miyabi_takatsuk さんから教えていただいたように、 データを分割して、できるだけ長文になっても軽快に動作する構造にしたいなと思います!
guest

0

この文字数を超えるメモを作成しようとするとエラーがでてしまうということでしょうか?

試してみては。
ただ、512MBの文字列用意しようと思ったら結構大変です。その文字数を知ってから疑問に思ったほうが良いです(私はここであえて計算しませんが)

メモアプリに文字数制限があるのは良くない

むしろ、完全無制限なのは保存先に負担が大きくなります。資源は有限です。
MySQLで長い文字列=TEXT型と安易に考えてはいけないという記事もあります。

メモに何万字も必要か?
考えてみてください。

teratailも投稿は1万字が最大になっています。それは、本来質問に必要なコードを加味するとそこまで膨大になることはないという点からです。
(質問するときのヒントにも「多すぎず少なすぎず」の旨が書かれています)

最大長を超えたら突然エラーがでて動かなくなるというのは良くないと思うので、

そのためのバリデーションです。

利用者から最大文字数について問われた際に回答不可という返事だと無責任な気がするのですが、

なんと答えるべきでしょうか?

そのためのガイドラインです。
「ひとつのメモに登録できるのは最大何文字です」と明記しておけば、それが仕様となります。
なんなら、「JavaScriptでは512MBが最大で」と書いても良いでしょう。
「規定字数を超えそうであればメモを分割して登録してください」と添えておけば十分です。

では、まず、制作者であるあなたが、512MBがどれほどの文字数になるか知るところから。

投稿2020/08/11 01:19

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H40831

2020/08/11 01:43

回答ありがとうございます! 調べたところ、 1MBが 全角50万文字 / 半角100万文字 程度とのことなので、 512MBだと 全角2億5,600万文字 / 半角5億1,200万 という感じでした。 自分もそんな長文をひとつのメモに保存するような使い方はしないだろうとは思ったのですが、 利用者によっては無茶な使い方をすることもあるのかな、と思っての質問でした。 > そのためのバリデーションです。 > そのためのガイドラインです。 このへんをきちんと設定すれば無責任にはならないですね! 設定しようと思います!
m.ts10806

2020/08/11 01:57

「無茶な使い方をさせない設計にする」のも自身(制作者、アプリケーション)を守るために必要です。 無茶な使い方=悪質 と捉えても差し支えありません。 セキュリティ対策にも繋がることですが、「自分が悪意のあるユーザーならどんな悪さをするか」を考えるのも設計時点の観点では必須です。
H40831

2020/08/11 02:08

> 「無茶な使い方をさせない設計にする」 > 「自分が悪意のあるユーザーならどんな悪さをするか」 たしかにそうですね。 セキュリティ的なところは(わからないながらも)意識するようにしていましたが、 アプリの使われ方についてはそこまで意識していませんでした。 今後は、もっと意識するようにします!
m.ts10806

2020/08/11 02:12

ユーザーの自由を制限することも時には必要ですよ。先に書いたように自身も守る必要があります。 利便性だけ追求しても、利用者があるアプリケーションは成り立ちません。
guest

0

逆に、Webに限らず、一つのメモに、
2億文字を超えれるアプリケーションが存在するかどうかですよね。
テキストエディタでも、さすがに、一ファイルでそれは難しいのでは。

それでも文字数制限を突破したいのならば、変数で分割しておき、
スクロール時に、その次の文字の出現位置になればロード・表示させる、とかどうでしょうか。

投稿2020/08/11 01:11

miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H40831

2020/08/11 01:36

回答ありがとうございます! データを分割して、遅延表示させるということですね! 実装したいと思います!
miyabi_takatsuk

2020/08/11 01:40

もっとも・・・・、 大規模演算用のアルゴリズムとかにならない限り、 2億文字超えるなんてことありえないと思いますけどね・・・。 (上記のアルゴリズムも、ファイル分割するだろうし)
H40831

2020/08/11 02:11

世の中、常軌を逸するようなクレーマーの方がいるので、 自分が開発したものに対しても、無茶なことをされて文句つけられたらどうしようとビクビクしてしまいますw
miyabi_takatsuk

2020/08/11 02:38 編集

そういう時は、クレーマーに対して、しれっと、 いやー無制限ですよー? (2億文字打たない限りね、打ってみろや) って言うしたたかさも必要です。 仕事する上では。 2億文字打つって、何時間かじゃ終わらないですしね。
guest

0

利用者から最大文字数について問われた際に回答不可という返事だと無責任な気がするのですが

Webブラウザごとに違うので、そういうものです。

投稿2020/08/11 01:08

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/08/11 01:10

> 最大長を超えたら突然エラーがでて動かなくなるというのは良くないと思うので、 そうならない方法はありませんか? システム的な最大長よりも手前でメッセージを出す、などで対応する方法が考えられます。
maisumakun

2020/08/11 01:13 編集

> 最大長を超えるデータを扱う方法はありませんか? システムのリソースが有限である以上、最大長を一切定めずに無限長のデータを扱うことは不可能です。
H40831

2020/08/11 01:21 編集

回答ありがとうございます! > システム的な最大長よりも手前でメッセージを出す 最大長を取得する方法はありますか?
maisumakun

2020/08/11 01:24

まず、「メモアプリに文字数制限があるのは良くないと思う」という前提に同意できません。
maisumakun

2020/08/11 01:26

「出来る限りアプリの品質を落とさないために」は、動く範囲をしっかり区切るほうが適当かと思います。 長い文字列を入れられても、「動くには動くけど、重くて表示するのに分単位で待たされる」となっては、実用性はありません。
H40831

2020/08/11 02:12 編集

メモリ(?)を圧迫しない程度の容量におさえるよう、こちらで制限を決めるべき、ということですね! そうしようと思います!
guest

0

サクラエディタの場合

折り返し方法

※ 今のところ、サクラエディタは10240桁以上を扱えません。そのため折り返さない設定をしても、実際には10240桁での折り返しとなります。

一行(改行区切りではなく物理的に表示する行)の文字数制限があるようです。

投稿2020/08/11 01:07

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/08/11 01:46

水平方向に長いものはスクロール幅が大きく使いにくくなるので、人が目にするテキストではそれほど大きな物理行は必要はありません。折り返しごとに一つの文字列を使うというのは合理的だと思います。
H40831

2020/08/11 01:53 編集

回答ありがとうございます! > 折り返しごとに一つの文字列を使う その方法で保存すれば、かなり膨大な量の文字列が保存できますね! 参考になりました!
guest

0

JavaScript で作ろうとしている時点で制限は探したほうが良いと思いますね。

ユーザの操作(たとえば、カーソル1字動かす)に対して

  1. 何msec までなら待たせてよいのか
  2. そのためには上限をどうすべきか
  3. これを実現できる フロントエンド実装はあるのか

を考えるべきだと思います。


郵便番号データで公開されているデータが丁度、テキストですので、試すのに良さそうです。

  1. ダウンロードした ken_all.zipを展開。約10MB(Shift_JIS:マルチバイト文字2Byte)
  2. 文字コード変換ソフト等を利用して UTF-8 にする(約3倍のサイズを覚悟する)
  3. HTML(<Textarea>)+JavaScript で簡単なロジックを作って操作してみる。

JavaScriptは思いの外「遅い」ので、エンドユーザが快適に動かせる上限を優先すべきと思います。

投稿2020/08/11 02:02

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H40831

2020/08/11 02:20 編集

回答ありがとうございます! 具体的な制限の決め方についてですね。参考になります! PCスペックによってもかなり変わってくるような気がして、難しいですね。 やはり常識的な使い方の範疇に収まる程度に制限をかけるのがベターなのかなと思いました!
guest

0

べつに編集データをひとつのString変数に持たせなければならないわけではないと思いますが

投稿2020/08/11 01:03

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H40831

2020/08/11 01:14

回答ありがとうございます! 変数を分割して保持しても、データを保存する際に分割した文字列たちを結合しなければいけないので、 そこでひっかかってしまうような気がしました。
y_waiwai

2020/08/11 01:16

統合しないようにすればいいだけなんでは。
H40831

2020/08/11 01:35

データの保存方法を見直す、ということですね!
y_waiwai

2020/08/11 01:43

メモリ上に持てなければファイルに持たせればいいのでは。 それでも、持っているHDDのサイズ上限という問題はあります。 なら、HDDを増設するなりクラウドでストレージ借りるなりすれば上限の制限はなくせます #費用はかかりますが
H40831

2020/08/11 02:15

いちおうストレージの上限はあるのですが、 ストレージの上限に対して文字列の上限が小さいので、 「ストレージの上限に達してないのにメモが保存できない!」という状況を心配しての質問でした。 (もちろん滅多に無いことですが) データの保存方法、工夫してみたいと思います!
guest

0

みなさま、回答ありがとうございました!
いろいろな観点のご意見を伺えて、とても勉強になりました!
ベストアンサーを決められなかったので、現時刻で一番高評価の asuchi0819さん にさせていただきました。

今回の質問は、技術的な話というより、
開発者としてのノウハウ的な話だったなーと感じました!
自分は経験が少ないので、とても参考になりました!
ありがとうございますm(_ _)m

投稿2020/08/11 02:01

H40831

総合スコア973

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問