質問するログイン新規登録

意見交換

4回答

205閲覧

掲示板の回答件数、階層に制限を設けるべきでしょうか?

homepage-site

総合スコア75

DOM

DOMは、Document Object Modelの略で、HTML文書やXML文書をアプリケーションから利用するためのAPIです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2026/05/01 07:42

0

0

テーマ、知りたいこと

現在掲示板の回答画面を作成しているのですが、回答・返信と階層に制限をそれぞれ設けるべきか悩んでおります。

懸念している点
① PHPのメモリ制限

1リクエストで大量のコメントを読み込むと、
memory_limit に達する可能性があると考えています。

② N+1問題によるDB負荷

隣接リスト方式で、親→子→孫と再帰的に取得する実装の場合、
コメント数に応じてSQLの発行回数が増加し、
結果的にN+1問題が発生する可能性があると考えています。

特に同時アクセスが増えた場合、
DBへの負荷が高くなる懸念があります。

③ ブラウザの描画負荷(特にスマホ)

コメント数や階層が増えると、
入れ子構造のDOMが増加し、DOMツリーが肥大化することで
スクロールや描画が重くなる可能性があります。

特にスマートフォン環境では、
大量の要素を一度に描画するとパフォーマンス低下や
カクつきが発生する懸念があります。

主観

①と②は1回の表示ですべてを読み込まずに「返信を表示」ボタンで段階的に読み込む形式であれば、サーバーの負荷が軽減されるため、対策は可能だと思うのですが、③のDOMの肥大化は対処法として、画面に表示されていない要素をHTMLから排除し、DOMツリーを浅く保つことになるため、防ぐことは難しそうです。

法的な証拠保全の観点の心配もありましたが、「どの投稿(ID)への返信か」をDBに数値で持っておけば、証拠として十分ではないかと考えております。
削除済み投稿のログ保持加害者が投稿を消しても、管理者側には「内容・IP・日時」が一定期間残るように設計する予定です。

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

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

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

回答4

#1

maisumakun

総合スコア147058

投稿2026/05/01 08:55

レイアウトにもよりますが、単純に深い階層には見栄えの問題も生じそうではあります。

ちなみに、

③のDOMの肥大化は対処法として、画面に表示されていない要素をHTMLから排除し、DOMツリーを浅く保つことになるため、防ぐことは難しそうです。

「バーチャルスクロール」と名前もついているように、このような対応を行うライブラリは珍しいものではありません。

あと、

法的な証拠保全の観点の心配もありましたが、「どの投稿(ID)への返信か」をDBに数値で持っておけば、証拠として十分ではないかと考えております。

こちらですが、「ツリーが長くなった場合、その箇所への書き込み禁止や表示制限で対応するのではなく、古いものを削除して対応する」と考えていることで間違いないでしょうか。

#2

homepage-site

総合スコア75

投稿2026/05/01 10:19

編集2026/05/01 11:18

maisumakunさん回答ありがとうございます。
見やすさを考慮し、表示については以下のようにする予定です。

PC:5階層までインデント、6階層以降は横にずらさず固定表示
スマホ:4階層までインデント、5階層以降は固定表示

また、ご指摘いただいた③のDOM肥大化や、法的な証拠保全の観点も踏まえると、
最大10~20階層程度に制限するのが現実的ではないかと考えています。
やり取りが複雑化することで、誹謗中傷と正当な反論の区別が難しくなり、
通報対応の負担が大きくなる点も懸念しています。

回答画面にも画像添付機能を実装予定のため、
著作権侵害や不適切画像の投稿など、
テキストよりも影響の大きい問題が発生するリスクも考慮しています。

投稿データについては、
古い投稿を削除して対応するのではなく、
半年間ログを保持する形で管理する方向で考えています。

#3

tezcello

総合スコア444

投稿2026/05/02 07:29

公開されている質問サイトってのは、経験の浅いアマチュアが、問題の件について経験済みのアマチュアからの回答を得る場所(偶にはプロフェッショナルが気まぐれで回答する事もある)だと思うのですが?
それ以上のものを得たい場合は、それなりの所に有償でサポートを依頼する事になるのだろうと。

質問者さんのやりたい事はアマチュアレベルの事なんでしょうか?
要求仕様を盛り過ぎていたりはしていませんか?

PHPのメモリ制限

やりたい事に対してどこにコストを掛けるかという事だと思います。
例えば、プログラムやデータ構造の方にコストを掛けるのか、実行環境に十分な性能を持たせるのか...

N+1問題によるDB負荷

階層的なナニカをやろうとすると、それらは完全に回避できない様に思いますが、違いますか?
一度に全部取ってくればN+1は起きないけれど、複雑なSQLになって取得するデータ量も巨大になるし、それを処理するデータベースには当然高負荷になるんじゃないかと。
一度に全部を求めるのではなく、階層なり、幅なりを区切った制限範囲内でN+1を許容するのが、現実的なんじゃありませんか?
それにアマチュアが扱う程度のデータ量なら(当然データ構造などの検討は必要でしょうけど)負荷を気にする様な事にはなり難いし、重い処理をしていても待たせれば良いと割り切れないかなぁと思います。

ブラウザの描画負荷(特にスマホ)

無限スクロール的なUIとか、ページネーションとかで、一度にしなければいけないデータ処理(授受を含む)を控えめにするとかの対応があると思います。
個人的には、古い(あるいは深い)データ群を見ようとしている時は、多少のラグは受け入れやすいと思うので、そんなにシビアに対応する必要はないかもしれないと思っています。

回答・返信と階層に制限をそれぞれ設けるべきか

返信をする度に階層が下がるというイメージですか?
チャットでは、単純にフラットに並べるだけだとどの発言に対するものか判らなくなるので、発言の先頭部分に親発言の一部を示すと共にそこへのジャンプを可能にしているものがありますよね?
また、深い階層に伸びていく様なブランチは、それ全体がその元発言とは注目点がズレてしまっているのが大半でしょうから、階層が指定数を超える場合には、その元発言の親に(元発言の兄弟として)ぶら下げるの様にするとかはダメなんでしょうか?
__質問者さんの仰った「階層を制限する」と同義なのか、似て非なるモノなのかは良く解りませんが...

やり取りが複雑化することで、誹謗中傷と正当な反論の区別が難しくなり

階層が深くなる=やり取りが複雑化する、でもないし、やり取りが複雑化する=誹謗中傷の判別が難しい、でもなさそうに思います。
パッと見で誹謗中傷を目視で見つけたいという前提でのお話でしょうか?
センシティブな部分は全てを読まないと見つけられないと思うのですが?
__AIはデータのまとめや検索などが得意でしょうから、そちらに任せるなら見渡せる必要は無さそう...

#4

logres_Fan

総合スコア183

投稿2026/05/02 14:22

そんな事より、まずリリースしないとどうにもならない時点まで来ているんじゃないかしら?

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問