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

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

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

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

Q&A

4回答

9149閲覧

DOM操作がChromeで動くのにIEやEdgeで動かない (childrenやinnerHTMLが動かない)

HisayukiIgeta

総合スコア12

JavaScript

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

1グッド

3クリップ

投稿2017/06/30 03:45

###前提・実現したいこと
初めて投稿します。調べたがわからず途方にくれてしまい、勇気を出して書きます。
Chromeで動いているとても簡単なJavaScriptなのですが、IEやEdgeで動かないのです。
DOM操作のところです。
これだけシンプルだと、IEやEdgeのバグか仕様かな?とも思ったのですが、ネットで検索しても同様の報告はなく、私の初歩的な勘違いの可能性もあって、質問してみることにしました。

下記サンプルコードにあるように、DOM操作をしているのですが、ChildNodesは動くのですがChildrenが動きません。
またinnerHTMLも動きませんし、getElementByIdも動かないようです。
対象をDocumentにするとIEやEdgeでも動くのですが、このようにparseFromStringを使って代入したDOMのオブジェクトに対する操作で起きてしまいます。
何がいけないのでしょうか?
ご教授いただければ幸いです。

###発生している問題・エラーメッセージ
下記サンプルで、Alertで<3>を表示しようとしているところでAbortします。
サンプルソースをシンプルにするために省きましたが、innerHTMLや、getElementByIdも動きません。

###該当のソースコード

HTMLとJavaScriptです。

1<html> 2<HEAD> 3<meta charset="UTF-8" /> 4<script> 5function init() { 6var dpObj = new DOMParser(); 7var xmlDoc = dpObj.parseFromString('<?xml version="1.0" encoding="UTF-8"?><root id="11" result="abc"><test id="22">てすと</test>\n<test id="33"><test2></test2></test></root>', "text/xml"); 8alert("<1>"+document.getElementById("table01").children.length+", "+document.getElementById("table01").innerHTML); 9alert("<2>"+xmlDoc.getElementsByTagName("root")[0].childNodes.length+", "+xmlDoc.getElementsByTagName("root")[0].childNodes[2].innerHTML); 10alert("<3>"+xmlDoc.getElementsByTagName("root")[0].children.length); 11} 12</script> 13</HEAD> 14<BODY onLoad="init()"> 15<table id='table01' border=1><tr><td>あいうえお</td></tr></table> 16</BODY> 17</html>

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)

A-pZ👍を押しています

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

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

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

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

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

guest

回答4

0

確認してみました。

https://developer.mozilla.org/ja/docs/Web/API/ParentNode/children

こちらを見るとわかりますがIEの場合、Elementに対してはchildrenをサポートするものの、Documentに対してはサポートがされていません。
取得するものがElementオブジェクトだったとしても、親に依存するようで、親がDocumentオブジェクトの場合はサポートされていませんでした。(Chrome等はDocumentオブジェクトでもサポートしているのでうまくいく)

なので結論としては仕様ですね・・・。

投稿2017/06/30 04:44

編集2017/06/30 04:46
fagai

総合スコア2158

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

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

HisayukiIgeta

2017/06/30 04:59

ご回答ありがとうございます。早速リンク先を読んでみました。 現象としてはDocumentに対しては動いていて、Elementに対して動かないので、この記述の「基本サポート」の方に入り、対応しているような気がして、さらに悩みが増します・・・。 念のために、このリンク先のChildNodesの項も見てみましたが、制約範囲は同じでした。ChildNodesとChildrenでサポートに差があるのも変な話です・・・。それにinnerHTMLも効かないのでなおさらです。IEでinnerHTMLをDocument以外サポートしてない仕様とは考えられず、でも動かない・・・。 簡単なソースのサンプルにしたのですが、私以外のPC環境でも、やはりChromeで動いて、IEやEdgeでは動かないですよね?(正しく動く場合はAlertで<3>が表示されるはず・・・) 悩みます・・・。
fagai

2017/06/30 05:26

おっと、ChildNodesの方まで確認してませんでした。。。 ただ、ChildNodesの方はDocumentオブジェクト自体が未サポートと書かれているわけではないのでIEでも動くのは分からなくはないところです。 確かに実行すると、Chromeでは動作しますね。 Elementオブジェクトに関しては先程親がDocumentならサポートされて無さそうっていいましたが、htmlもHTMLDocumentでしたね。 ElementのChildrenは以前にもIEでは問題があったようなのでIE側の不具合か何かな気もしますね。
HisayukiIgeta

2017/06/30 05:35

お返事ありがとうございます。そしてサンプルを動かしていただき、ありがとうございます。 IE側の不具合の可能性がやはりありますか・・・。 ネット上に同様の報告が見受けられなかったので、私のミスであることを願っているのですが・・・。 「このアプリはIEでは動きません」とはとても言いづらく・・・(笑) DOM操作なんて、結構な方が携わっている気がするのですが、皆さん、IEは対象外にしているとか? ご丁寧に返事いただき感謝します。
fagai

2017/06/30 06:10 編集

MacのSafariでも確認してみました。children動きました。 正直、xmlを使う機会が少なくなってきているのもあるのでそこまで問題が起きてないのだと思います。 DOMParser本体が問題かと思い、text/htmlを試してみるとtext/htmlは問題なく動作したのでXMLのパーサーに問題があるんじゃないかと感じました。
HisayukiIgeta

2017/06/30 06:27

Safariでも確認いただき、ありがとうございます。 XMLパーサーに問題がある・・・、Microsoftとしたことが・・・。 一番落としどころにしたくなかった結果にいきそうですね。 かなり作り込んでしまっているので、後戻りもできず、もう少しもがきたいと思いますが、最後は「IE/Edge未対応」アプリとなるしかなさそうですね。 ありがとうございます。
fagai

2017/06/30 06:32

ActiveXのXMLParserを試してみるのも良いかもしれません。 私の方では確認していません。。。
HisayukiIgeta

2017/06/30 06:36

なるほど。 ブラウザ判定をして、IEかEdgeだったら、ActiveXのXMLParserを使うわけですね。 ちょっと調べてやってみますね。 ありがとうございます。
guest

0

DOMParser#parseFromString

DOMParser#parseFromString は「Document インターフェースを持つオブジェクト」を返します。

###Interface ParentNode

下記URLより引用。

interface ParentNode { [SameObject] readonly attribute HTMLCollection children; (中略) }; Document implements ParentNode; DocumentFragment implements ParentNode; Element implements ParentNode;

Interface Document, Element は Interface ParentNode を実装しなければなりません。
つまり、ParentNode#children を実装しなければなりません。

Interface Node

下記URLより引用。

interface Node : EventTarget { (中略) [SameObject] readonly attribute NodeList childNodes;

Interface Node は childNodes プロパティを持たなければなりません。

Interface NonElementParentNode

下記URLより引用。

interface NonElementParentNode { Element? getElementById(DOMString elementId); }; Document implements NonElementParentNode;

Interface Document は Interface NonElementParentNode を実装しなければなりません。
つまり、NonElementParentNode#getElementById も実装しなければなりません。

Interface Document

下記URLより引用。

interface Document : Node { (中略) HTMLCollection getElementsByTagName(DOMString qualifiedName);

Interface Document は Interface Node を継承します。
Interface Document は getElementsByTagName を実装しなければなりません。

Interface Element

下記URLより引用。

interface Element : Node { HTMLCollection getElementsByTagName(DOMString

Interface Element は Interface Node を継承します。
Interface Element は getElementsByTagName を実装しなければなりません。

Interface Element の拡張

下記URLより引用。

partial interface Element { (中略) attribute DOMString innerHTML;

Interface Element は innerHTML を実装しなければなりません。
更に同URLより引用。

element . innerHTML [ = value ]
(中略)
In the case of an XML document, throws a "InvalidStateError" DOMException if the Element cannot be serialized to XML, or a "SyntaxError" DOMException if the given string is not well-formed.

XMLドキュメントの場合、要素をXMLにシリアル化できない場合は "InvalidStateError" DOMExceptionをスローし、指定された文字列が整形式でない場合は "SyntaxError" DOMExceptionをスローします。

まとめ

まとめると、下記のようになります。

  • DOMParser#parseFromString は「Document インターフェースを持つオブジェクト」を返します。
  • Interface Document は getElementsByTagName, getElementById, childNodes, children を持ちます。
  • Interface Element は getElementsByTagName, childNodes, children を持ち、getElementById を持ちません。
  • Interface Element は innerHTML を持ちますが、それがXML文書であるならば、XML構文が正しくなければ例外を返します。

この通りに動かないブラウザがあるなら、未実装もしくは実装バグと思われます。
http://caniuse.com やMDNに実装状況は載っているので、そちらを参照して下さい。

innerHTML のIE実装バグ

下記URLより引用。

The innerHTML property is read-only on the col, colGroup, frameSet, html, head, style, table, tBody, tFoot, tHead, title, and tr objects.

innerHTMLプロパティは、col、colGroup、frameSet、html、head、style、table、tBody、tFoot、tHead、titleおよびtrオブジェクトでは読み取り専用です。
従って、IE ではtable要素ノードをinnerHTMLで書き換える事は出来ません。
(このバグはどこかのバージョンで修正されたような記憶があったようななかったような…、失念しました。)
table関係要素ノードのAPIを使うか、appendChild等の単純なDOM APIで操作して下さい。

不具合の詳細について

Chromeで動いているとても簡単なJavaScriptなのですが、IEやEdgeで動かないのです。

IEやEdgeのバージョンはいくつですか。

下記サンプルコードにあるように、DOM操作をしているのですが、ChildNodesは動くのですがChildrenが動きません。
またinnerHTMLも動きませんし、getElementByIdも動かないようです。

childNodes は複数ありますが、全ての場所で動かないのですか。動く場所と動かない場所があるのではありませんか。
他のプロパティ(children, innerHTML, getElementById,, getElementsByTagName)についても同様に確認していますか。

エラーメッセージがコンソールに出力されていませんか。

実装状況の検証 (IE11, Edge38)

SCRIPT5007: Unable to get property 'length' of undefined or null reference
というエラーが出た個所が、
xmlDoc.getElementsByTagName("root")[0].children.length
です。

エラーメッセージを言葉通りに読むと、**Element インターフェースが children を持っていない(undefined)**と読めます。
私の環境で検証したところでは、次のようになりました。

  • IE11 は Element.prototype.innerHTML, Element.prototype.children, Document.prototype.children を実装していない
  • Edge38 は Element.prototype.children, Document.prototype.children を実装していない

JavaScript

1'use strict'; 2console.log('children' in Element.prototype); // false (IE11, Edge38) 3console.log('children' in HTMLElement.prototype); // true (IE11, Edge38) 4console.log('children' in Document.prototype); // false (IE11, Edge38) 5 6console.log('innerHTML' in Element.prototype); // false (IE11) / true (Edge38) 7console.log('innerHTML' in HTMLElement.prototype); // true (IE11, Edge38) 8 9console.log('getElementsByTagName' in Document.prototype); // true (IE11, Edge38) 10console.log('getElementsByTagName' in Element.prototype); // true (IE11, Edge38) 11 12console.log('getElementById' in Document.prototype); // true (IE11, Edge38) 13 14console.log('evaluate' in Document.prototype); // false (IE11) / true (Edge38)

HisayukiIgeta さんが書かれたコードを私の環境で検証したところ、Edge38 ではエラー無く実行できましたが、

JavaScript

1var xmlDoc = new DOMParser().parseFromString('<?xml version="1.0" encoding="UTF-8"?><root id="11" result="abc"><test id="22">てすと</test>\n<test id="33"><test2></test2></test></root>', "text/xml"); 2console.log("<1>"+document.getElementById("table01").children.length+", "+document.getElementById("table01").innerHTML); // <1>1, <tbody><tr><td>あいうえお</td></tr></tbody> 3console.log("<2>"+xmlDoc.getElementsByTagName("root")[0].childNodes.length+", "+xmlDoc.getElementsByTagName("root")[0].childNodes[2].innerHTML); // <2>3, <test2/> 4console.log("<3>"+xmlDoc.getElementsByTagName("root")[0].children.length); // <3>2

IE11では <2> の innerHTML が undefined を返し、<3> は例外で処理が停止されました。

JavaScript

1var xmlDoc = new DOMParser().parseFromString('<?xml version="1.0" encoding="UTF-8"?><root id="11" result="abc"><test id="22">てすと</test>\n<test id="33"><test2></test2></test></root>', "text/xml"); 2console.log("<1>"+document.getElementById("table01").children.length+", "+document.getElementById("table01").innerHTML); // <1>1, <tbody><tr><td>あいうえお</td></tr></tbody> 3console.log("<2>"+xmlDoc.getElementsByTagName("root")[0].childNodes.length+", "+xmlDoc.getElementsByTagName("root")[0].childNodes[2].innerHTML); // <2>3, undefined 4console.log("<3>"+xmlDoc.getElementsByTagName("root")[0].children.length); // 未定義または NULL 参照のプロパティ 'length' は取得できません

未知のHTML要素ノード (HTMLUnknownElement)

parseFromStringの2つ目のパラメータで、text/xmlのところをtext/htmlにするとエラーがなくなるところにもヒントがありそうです。

そこまで検証する時間がとれなかったので未確認ですが、HTML文書には未知のタグ名を持つ要素ノード(HTMLUnknownElement)は HTMLElement を継承する仕様があり、IE11がHTMLUnknownElement を実装している可能性があります。
これは Object.prototype.toString, instanceof 演算子を使うことではっきりします。
https://triple-underscore.github.io/HTML-dom-ja.html#htmlunknownelement

JavaScript

1var root = xmlDoc.getElementsByTagName("root")[0]; 2 3console.log(Object.prototype.toString.call(root)); 4console.log(root instanceof HTMLElement);

修正案

Edge38 では Document#evaluate が使えます。
IE11 にはありませんが、Function#call を併用すれば実用だと思います(そこまで時間が取れなかったので、未確認)。

JavaScript

1document.evaluate.call(xmlDoc, ...);

Re: HisayukiIgeta さん

投稿2017/07/01 01:51

編集2017/07/02 15:44
think49

総合スコア18156

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

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

HisayukiIgeta

2017/07/01 05:30

ご回答ありがとうございます。沢山調べてくださって感謝します。 バージョンですが、 Microsoft Edge 25.10586.672.0 Internet Explorer 11.962.10586.0 となります。 DOM操作に関しては特に問題ないバージョンかと思われます。 コンソールでエラーメッセージを見てみましたが、 SCRIPT5007: Unable to get property 'length' of undefined or null reference というのが出て来ていますが、これはchildren.lengthのところなので、特に問題ないようです。 1つ前進しましたのは、parseFromStringの2つ目のパラメータで、 text/xmlのところをtext/htmlにすると、期待される構造とは異なってしまいますが、エラーはなくなりました。 つまり、text/xmlやapplication/xmlの時のIEやEdgeのバグのような気がして来ました。 これから、text/htmlの設定に変えて、HTMLフォーマットにて代替対応出来ないか検証しようと思っています。 ありがとうございました。
think49

2017/07/01 10:10

> SCRIPT5007: Unable to get property 'length' of undefined or null reference エラーが出てくるのなら、行数/行頭からの文字数がエラー箇所として出ているはずなので、それを確認して当該エラーが出ている関数を特定して下さい。 見たところ、undefined もしくは null から length プロパティを呼び出そうとして停止しているように読めます。 例外が発生すれば強制終了となり、それ以降の処理は実行されませんので、以降の処理が実行されないのはバグではありません。
HisayukiIgeta

2017/07/01 23:03

アドバイスありがとうございます。 対象となるXMLが <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root><root id="11" result="abc"><test id="22">てすと</test>\n<test id="33"><test2></test2></test></root> とシンプルで、 > SCRIPT5007: Unable to get property 'length' of undefined or null reference というエラーが出た個所が、 xmlDoc.getElementsByTagName("root")[0].children.length です。 かつChromeではエラーにならないのに、IEやEdgeではエラーになるので、上記XMLでこのエラー判定をしてしまうところにバグがありそうですね。 parseFromStringの2つ目のパラメータで、text/xmlのところをtext/htmlにするとエラーがなくなるところにもヒントがありそうです。ただtext/htmlにするとhtmlと解釈されてしまってxmlDocに作り上げられるXMLの構文が違ってしまうので、プログラムを大幅に変えなければならない難点があるのですが、今日ももうちょっと試行錯誤しながら調べてみます。 ありがとうございます。
think49

2017/07/02 03:09

IE11 で再現可能、Edge38 で再現出来ない事を確認しました。 詳しくは親記事に追記しました(実装状況の検証 (IE11, Edge38)、修正案)。 なお、children, innerHTML 以外で動かないという現象は確認できませんでした。関数の返り値を個別に確認していくのがポイントだと思います。
think49

2017/07/02 03:48

> parseFromStringの2つ目のパラメータで、text/xmlのところをtext/htmlにするとエラーがなくなるところにもヒントがありそうです。 親記事に「未知のHTML要素ノード (HTMLUnknownElement)」を追記しました。 質問内容が広がってきて収集がつかなくなりつつあるので、問題点を切り分けして絞り込んだ方がよいと思います。 答えられる範囲で回答してはいますが、どこまで理解されているか、反応が芳しくなくて不安です。 私としては原因ははっきりしていると思うのですが。 「getElementByIdも動かない」については再現できないのでよく分かりません。
HisayukiIgeta

2017/07/02 04:25

ありがとうございます。 いただいたコメントを理解するのに初心者の私は時間を要してしまい、お返事が遅れていて恐縮です。 Document#evaluateを調べたり、いろいろ試しています。 ちなみに、結局 parseFromStringでtext/xmlの指定による方法だとIE/Edgeではダメなんだろうと諦めかけ、text/htmlで実装し直すとどうなるのだろうとテストしていると、text/xmlの時と異なり、返って来るエレメント名が全部大文字になったり、<aaa/>のような自己完結のタグが使えず、<aaa></aaa>のようにしないとXMLとして認識してもらえないなど、沢山変更もあり、こちらの対応も難しそうに感じているところです。 Document#evaluateは、xpathの指定で欲しいエレメントをゲットする手法なのですね?そしてIEでは使えないのですね? いろいろ調べていただき、感謝です。 諦めずに、引き続き調べます。 (IE/Egdeのためにこんなに苦労することになろうとは・・・(苦笑))
HisayukiIgeta

2017/07/02 04:51

ちなみに、「getElementByIdも動かない」のところですが、 私が書いたサンプルソースの alert("<3>"・・・の1行を alert("<5>"+xmlDoc.getElementById("11").getAttribute("result")); に置き換えると再現を確認出来ます。 Chromeでは問題なく動くのですが、IE/Edgeでは動かないのです。。 と思っていま再確認してみたところ、Edgeでは動き、IEで動かないですね。
think49

2017/07/02 08:47

> text/htmlで実装し直すとどうなるのだろうとテストしていると HTML文書として認識させると、XML整形式違反などの強力なバリデーション機能が働かなくなるので、私としてもお勧めはし難いです。 > Document#evaluateは、xpathの指定で欲しいエレメントをゲットする手法なのですね?そしてIEでは使えないのですね? IE11ではHTML文書にしかその関数がないので、callでthis値を書き換えてやることでXML文書でも使えるようにしてやる事を試みます。 元々、XPathはXML用途なので、使いこなせれば強力な味方になると思います。 > alert("<5>"+xmlDoc.getElementById("11").getAttribute("result")); > に置き換えると再現を確認出来ます。 確認てすが、「getElementById が動かない」で間違いないでしょうか。 つまり、「getAttributeが動かない」ではない事は確認済みという事になるのですが…。 また、「動かない」とは具体的にどういう動作なので。 「getElementByIdが」何らかのエラーを返すのでしょうか。 期待に反して「getElementById が」 null を返すのでしょうか。 こういう複雑な問題に対処する場合は関数をメソッドチェーンで呼び出さず、「getElementById のみでテスト」する事が重要です。 ある程度、経験を積めばエラーメッセージから察する事もありますが、確実なのはなやはり単体テストです。 シンプルな構成でテストをし、条件を変えてみたり、仕様書をあたってみたりして、トライアンドエラーを繰り返すことになります。 とりあえず、気になるのはXML文書において、「id属性値は数字から始まることが出来ない」事でしょうか。 文法エラーになってもおかしくないですが、getElementById がそのエラーを返すとは想定しづらいので別問題かもしれません。 http://w4ard.eplusx.net/translation/W3C/REC-xml-20081126/#id
HisayukiIgeta

2017/07/02 16:03

いろいろとありがとうございます。 確かにXPathを使いこなせば強力な武器になりますね。 今日は私が電池切れを起こし、もう寝ますが、明日も追及したいと思います。 P.S. getElementByIdのところは、getAttributeではなく、getElementByIdのところですね。
guest

0

DOMParser 未実装ブラウザーへの対応がこちらに記載されていますね

投稿2017/06/30 04:11

yambejp

総合スコア114572

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

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

HisayukiIgeta

2017/06/30 04:36

ご回答ありがとうございます。早速試してみましたが、上手くいきませんでした。 natively supportedの方に判定されてしまうようです。またソースを見るとtext/htmlの方の対処のようですね。 こんなにシンプルなソースなのにChromeで動いてIE/Edgeで動かないのが不思議です。 IEもV9以上から、EdgeはもちろんこういったDOMの基本的な機能を見落としているはずもないと思うので、余計混乱しています・・・。
guest

0

解決したわけではないのですが、当問題は結局マイクロソフトのバグだと認識し、以下のような回避策を試みようと思っています。
ご丁寧に回答いただいた3人の方々、本当にありがとうございました!

【回避方法】
var xmlDoc = dpObj.parseFromString('<?xml version="1.0" encoding="UTF-8"?><root id="11" result="abc"><test id="22">てすと</test>\n<test id="33"><test2></test2></test></root>', "text/html");

wk_xml = xmlDoc.getElementsByTagName("root")[0].cloneNode(true);
xmlDoc.removeChild(xmlDoc.childNodes[1]);
xmlDoc.appendChild(wk_xml);

【ポイント】
・text/xmlを諦め、text/htmlにしました。
・text/htmlにするとparseFromStringで出来上がるXML構造が変わりますので、既存のプログラムへの影響を最小限にするため、rootエレメント以下を保存した後に、htmlエレメント以下を一旦削除(removeChild)し、そしてルート配下にrootエレメントを付け直しました(appendChild)
・これにより、IE/Edgeでは効かなかった.childrenや、.innerHTMLが効くようになりました。

【残存する配慮点】
・ノード名が大文字で返って来るようになってしまったので、JavaScript上でノード名を比較する時は、比較する相手側に.toUpperCase()関数を付けて比較しなければならない
・xmlDoc.children[0]が相変わらず効かないので、ここは、xmlDoc.childNodes[1]で代替する

スッキリしない自己解決ですが、当面はこれで切り抜けようかと思います。

もし、もっとベターな方法がありましたら、引き続きご教授いただけたら幸いです。

ご回答いただけた方、またそうしようと当質問をお読みいただいた方々には感謝です。
ありがとうございました。

投稿2017/07/05 04:27

HisayukiIgeta

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問