<script>タグをHTMLマークアップのどこに配置すればよいですか?


1488

JavaScriptをHTMLドキュメントに埋め込む場合、<script>タグとインクルードされたJavaScript を配置する適切な場所はどこですか?これらを<head>セクションに配置することは想定されていませんが<body>、ページが完全にレンダリングされる前に(またはそのようなもの)JavaScriptを解析する必要があるため、セクションの先頭に配置することも悪いことを思い出しました。これは、セクションの終わり<body><script>タグの論理的な場所として残すようです。

では、タグを配置する適切な場所どこ<script>ですか?

(この質問を参照し、この質問それはJavaScriptの関数呼び出しから移動しなければならないことが示唆された、<a>にタグ<script>私は、具体的にjQueryを使用しています。タグが、より一般的な答えも適切です。)


単純な解決策も探していて、Jekyllなどのサーバー側ジェネレーターを使用している場合は、代わりにスクリプトを含めることをお勧めします。とても簡単です!
cregox

回答:


1864

ブラウザが<script>タグのあるWebサイトをロードすると、次のようになります。

  1. HTMLページを取得します(例:index.html)
  2. HTMLの解析を開始します
  3. パーサーは<script>、外部スクリプトファイルを参照するタグを検出しました。
  4. ブラウザがスクリプトファイルを要求します。その間、パーサーはページ上の他のHTMLのブロックと解析を停止します。
  5. しばらくすると、スクリプトがダウンロードされ、その後実行されます。
  6. パーサーは、残りのHTMLドキュメントの解析を続行します。

手順4は、ユーザーエクスペリエンスを低下させます。すべてのスクリプトをダウンロードするまで、Webサイトは基本的にロードを停止します。ユーザーが嫌いなことが1つあるとしたら、それはWebサイトがロードされるのを待っています。

なぜこれが起こるのですか?

スクリプトは、独自のHTMLを介して、document.write()または他のDOM操作を挿入できます。これは、スクリプトがダウンロードされて実行されるまで、パーサーはドキュメントの残りを安全に解析できるようになるまで待機する必要があることを意味します。結局のところ、スクリプトはドキュメントに独自のHTMLを挿入できたはずです。

ただし、ほとんどのJavaScript開発者は、ドキュメントの読み込みにDOM 操作しなくなりました。代わりに、ドキュメントがロードされるまで待ってから変更します。例えば:

<!-- index.html -->
<html>
    <head>
        <title>My Page</title>
        <script src="my-script.js"></script>
    </head>
    <body>
        <div id="user-greeting">Welcome back, user</div>
    </body>
</html>

JavaScript:

// my-script.js
document.addEventListener("DOMContentLoaded", function() { 
    // this function runs when the DOM is ready, i.e. when the document has been parsed
    document.getElementById("user-greeting").textContent = "Welcome back, Bart";
});

ブラウザはmy-script.jsがドキュメントをダウンロードして実行するまでドキュメントを変更しないことを認識していないため、パーサーは解析を停止します。

時代遅れの推奨

この問題を解決するための古いアプローチ<script>は、の下部にタグを配置することでした。<body>これにより、パーサーが最後までブロックされないことが保証されます。

このアプローチには独自の問題があります。ドキュメント全体が解析されるまで、ブラウザはスクリプトのダウンロードを開始できません。大きなスクリプトとスタイルシートを使用する大規模なWebサイトでは、スクリプトをできるだけ早くダウンロードできることがパフォーマンスにとって非常に重要です。あなたのウェブサイトが2秒以内にロードしない場合、人々は別のウェブサイトに行きます。

最適なソリューションでは、ブラウザはできるだけ早くスクリプトのダウンロードを開始すると同時に、ドキュメントの残りの部分を解析します。

現代的なアプローチ

現在、ブラウザはスクリプトのasyncおよびdefer属性をサポートしています。これらの属性は、スクリプトがダウンロードされている間も解析を続行しても安全であることをブラウザに伝えます。

非同期

<script src="path/to/script1.js" async></script>
<script src="path/to/script2.js" async></script>

async属性を持つスクリプトは非同期で実行されます。つまり、スクリプトはダウンロードされるとすぐに実行され、その間ブラウザはブロックされません。
これは、スクリプト1の前にスクリプト2がダウンロードされて実行される可能性があることを意味します。

http://caniuse.com/#feat=script-asyncによると、すべてのブラウザの97.78%がこれをサポートしています。

延期する

<script src="path/to/script1.js" defer></script>
<script src="path/to/script2.js" defer></script>

defer属性を持つスクリプトは順番に実行されます(つまり、最初にスクリプト1、次にスクリプト2)。これもブラウザをブロックしません。

非同期スクリプトとは異なり、遅延スクリプトは、ドキュメント全体が読み込まれた後にのみ実行されます。

http://caniuse.com/#feat=script-deferによると、すべてのブラウザの97.79%がこれをサポートしています。98.06%が少なくとも部分的にサポートしています。

ブラウザーの互換性に関する重要な注意:状況によっては、IE <= 9で遅延スクリプトが順不同で実行される場合があります。あなたはこれらのブラウザをサポートする必要がある場合は、お読みください。この最初の!

結論

現在の最新技術では、スクリプトを<head>タグに入れ、asyncor defer属性を使用しています。これにより、ブラウザーをブロックすることなく、スクリプトをできるだけ早くダウンロードできます。

良い点は、これらの属性をサポートしていないブラウザの2%でWebサイトが正しくロードされ、他の98%が高速化することです。


63
Googleの説明を誰も引用していないことに驚いています... developer.google.com/speed/docs/insights/BlockingJS
Casey Falk 14

6
DOMに影響を与えるものとそうでないものについては明確ではありません。明確にできますか?jquery.jsなどの非同期ロードを実行しても安全ですか?
Doug

7
@Dougたとえばdocument.write、domで動作します。問題は、スクリプトがdomを操作するかどうかではなく操作する場合です。domreadyイベントがトリガーされた後にすべてのdom操作が発生する限り、大丈夫です。jQueryはライブラリなので、dom自体を操作することはありません。
Bart

24
この答えは誤解を招くものです。最新のブラウザーは、HTMLに影響を与える可能性のある同期スクリプトタグに到達しても解析を停止せず、レンダリング/実行を停止し、楽観的に解析を続行して、HTMLに影響がない場合に後で要求される可能性がある他のリソースのダウンロードを開始します。
Fabio Beltramini、2014年

40
asyncdefer属性がどこでも使用されないのはなぜですか?つまりasync、インターネットから多くのHTMLソースを表示し、およびdefer属性をどこにも表示していません。...?
john cj 2016年

239

に記載されているように、本文の終了タグの直前

http://developer.yahoo.com/performance/rules.html#js_bottom

スクリプトを一番下に置く

スクリプトによって引き起こされる問題は、スクリプトが並行ダウンロードをブロックすることです。HTTP / 1.1仕様では、ブラウザがホスト名ごとに並行して2つ以下のコンポーネントをダウンロードすることが推奨されています。複数のホスト名からイメージを提供する場合、3つ以上のダウンロードを並行して行うことができます。ただし、スクリプトのダウンロード中は、ホスト名が異なっていても、ブラウザは他のダウンロードを開始しません。


7
コンセプトとその説明に同意した。しかし、ユーザーがページで遊んだらどうなるでしょう。ユーザーにページが表示された後に読み込みを開始するAJAXドロップダウンがあるとしますが、読み込み中にユーザーがクリックします。そして、「本当に焦っている」ユーザーがフォームを送信するとどうなりますか?
Hemantタンク

9
@Hermant Oldコメントですが、デフォルトでフィールドを無効にして、DOMが完全に読み込まれたときにJSを使用して有効にするというトリックを実行できます。これが、Facebookが最近行っていることのようです。
novato

2
これをChromeでテストして、これがまだ同じかどうかを確認します。そうです。ここで、ブラウザのページ読み込み時間の違いを確認できます。stevesouders.com/cuzillion
サイファー、

46
これがベストプラクティスである場合、スタックオーバーフローがすべてのスクリプトタグを<head>に含めるのはなぜですか?:-P
フィリップ

10
場合によっては、特にajaxの重いサイトでは、headでロードすると実際にロード時間が速くなることがあります。参照:encosia.com/dont-let-jquerys-document-ready-slow-you-down(「live()」関数はjqueryで非推奨になっていますが、記事は「on()」または「デリゲート」関数)。@headerでのロードも、@ Hermantによって指摘された正しい動作を保証するために必要になる場合があります。最後に、modernizr.com / docsは、サイトで説明されている理由により、スクリプトを<head>に配置することを推奨しています。
ネイサン

77

ノンブロッキングスクリプトタグは、ほぼどこにでも配置できます。

<script src="script.js" async></script>
<script src="script.js" defer></script>
<script src="script.js" async defer></script>
  • async スクリプトが利用可能になるとすぐに非同期で実行されます
  • defer スクリプトは、ドキュメントの解析が終了したときに実行されます
  • async defer 非同期がサ​​ポートされていない場合、スクリプトは遅延動作にフォールバックします

このようなスクリプトは非同期に/ドキュメントの準備ができた後に実行されます。つまり、これは実行できません。

<script src="jquery.js" async></script>
<script>jQuery(something);</script>
<!--
  * might throw "jQuery is not defined" error
  * defer will not work either
-->

またはこれ:

<script src="document.write(something).js" async></script>
<!--
  * might issue "cannot write into document from an asynchronous script" warning
  * defer will not work either
-->

またはこれ:

<script src="jquery.js" async></script>
<script src="jQuery(something).js" async></script>
<!--
  * might throw "jQuery is not defined" error (no guarantee which script runs first)
  * defer will work in sane browsers
-->

またはこれ:

<script src="document.getElementById(header).js" async></script>
<div id="header"></div>
<!--
  * might not locate #header (script could fire before parser looks at the next line)
  * defer will work in sane browsers
-->

そうは言っても、非同期スクリプトには次の利点があります。

  • リソースの並行ダウンロード
    ブラウザは、スクリプトがダウンロードされて実行されるのを待たずに、スタイルシート、画像、その他のスクリプトを並行してダウンロードできます。
  • ソースの順序の独立性
    ブロックを心配することなく、スクリプトをヘッドまたはボディ内に配置できます(CMSを使用している場合に便利です)。ただし、実行順序は依然として重要です。

コールバックをサポートする外部スクリプトを使用することにより、実行順序の問題を回避することが可能です。多くのサードパーティJavaScript APIが、非ブロッキング実行をサポートするようになりました。以下は、Google Maps APIを非同期読み込む例です。


2
これが今日の正解です。このアプローチを使用すると、ウィジェットを自己完結型に保つことが容易になり、ファンシーな<head>インクルードロジックを実行する必要がなくなります。
Daniel Sokolowski、2015

1
なぜ使用できないのasyncdefer、または2番目のブロックで指定したjQueryを含めるときに混乱します<script src="jquery.js" async></script>。理由を説明できますか?jQueryがまだ読み込まれている間でもページを読み込むことができるように、承認された回答に従って、パフォーマンスのために非同期タグを含める必要があると思いました。ありがとう!
elbowlobstercowstand 2015

3
@elbow 99%の時間の<script src=jquery.js>$(function(){ ... })に、ページのどこかにブロックが続きます。非同期読み込みは、ブラウザーがそれらのブロックを解析しようとしたときにjQueryが読み込まれることを保証しないため、$ is not definedエラーが発生します(jQueryがキャッシュから読み込まれた場合、エラーが発生しない場合があります)。jQueryを非同期で読み込んで保持することについての質問に答えました$(function(){ ... })。見つけることができるかどうかを確認します。または、次の質問をご覧ください。stackoverflow.com
Salman A

1
@SalmanAありがとうございます!はい、99%に該当します。最初にjquerylibをロードしてから、残りの.jsスクリプトをロードする必要があります。宣言するasyncdeferjquerylibスクリプトタグで、.jsスクリプトが機能しません。私はそれを$(function(){ ... })守ったと思いました—そうではありません。現在のソリューション:私は追加しないdeferか、async上のjquerylibのスクリプトが、私は追加しないasyncまで私のフォローに.jsスクリプト。注:私はやっている理由どんな本のは、Googleのページスピードを幸せにすることです。助けていただきありがとうございます!その他のアドバイスは大歓迎です。(または、以前の回答へのリンク)。:)
elbowlobstercowstand 2015

@elbow stackoverflow.com/a/21013975/87015を参照してください。完全なソリューションではなく、アイデアを提供するだけです。「jquery async loader libraries」を検索することもできます。
Salman A

38

Yahoo!が推進する標準的なアドバイス 例外的なパフォーマンスチーム<script>は、ページのレンダリングをブロックしないように、ドキュメントの本文の最後にタグを配置することです。

ただし、GoogleアナリティクスのJavaScriptファイルの読み込み時間に関するこの回答で説明されているように、パフォーマンスを向上させる新しいアプローチがいくつかあります。

Steve Souders(クライアント側のパフォーマンスエキスパート)による素晴らしいスライドがいくつかあります。

  • 外部JavaScriptファイルを並行してロードするためのさまざまな手法
  • 読み込み時間とページレンダリングへの影響
  • ブラウザが表示する「進行中」のインジケータの種類(ステータスバーでの「ロード」、砂時計のマウスカーソルなど)。

25

JQueryを使用している場合は、JavaScriptを最適な場所に配置し、$(document).ready()関数を実行する前に適切に読み込まれるようにします。

余談ですが、私は<head>セクション内のすべてのスクリプトタグが好きです。


14
頭に...え?<header>
Dan Lugg、

7
を使用$(document).ready()しても、JavaScript を好きな場所に配置できるわけではありません<script src=".../jquery.min.js">。jQueryを含める場所の後に配置する必要があるため、jQueryが$存在します。
Rory O'Kane 2013

2
<head>セクションにスクリプトタグを配置することは最適ではありません。これにより、スクリプトが読み込まれるまで、ページの表示部分の表示が遅れます。
Cyber​​Monk 2013年

いいえ、@ Dan、header要素はHTMLドキュメントコンテンツの一部であり、body要素の. The head`タグ内で1回以上発生する必要があります。これは、ドキュメントのメタデータおよび非コンテンツデータ用です。これは、と、これらの日であるdeferasyncスクリプトタグのための理想的な場所。header要素には、ドキュメントに続くセクションを説明する情報のみを含める必要があります。
ProfK 2017年

1
@ ProfK、Danが4年以上前に投稿したとき、編集されていない元の質問を参照していました。ご覧のとおり、質問は1年後に編集されました。
kojow7

18

2019年の最新のアプローチでは、ES6モジュールタイプのスクリプトを使用しています

<script type="module" src="..."></script>

デフォルトでは、モジュールは非同期に読み込まれ、延期されます。つまり、それらをどこにでも配置でき、並行してロードされ、ページのロードが完了すると実行されます。

スクリプトとモジュールの違いは次のとおりです。

https://stackoverflow.com/a/53821485/731548

ここでは、スクリプトと比較したモジュールの実行について説明します。

https://developers.google.com/web/fundamentals/primers/modules#defer

サポートはここに示されています:

https://caniuse.com/#feat=es6-module


ナレッジベースに追加する素晴らしい情報
Sagar

1
サーバーのないローカルのファイルシステムで何かを試してみているだけでは機能しないことに注意してください。少なくともChromeでは、ファイルシステムの起源が同じであっても、HTMLからjsを読み込もうとするとクロスオリジンエラーが発生します。
ヒッピートレイル

11

XHTMLは、スクリプトがヘッド要素内以外の場所にある場合は検証しません。 それはどこにでもあることがわかります。

jQueryのようなもので実行を遅らせることができるので、どこに配置されるかは問題ではありません(解析中の小さなパフォーマンスヒットを除く)。


1
XHTMLは、本体のスクリプトタグを使用して検証します。ただし、スタイルタグは頭にのみ含めることができます。
I.devries 2009年

11
<script src="myjs.js"></script>
</body>

スクリプトタグは、HTMLファイルのbody closeまたはBottomの前に常に使用する必要があります。

次に、jsファイルをロードする前に、まずページのコンテンツを確認できます。

必要に応じてこれを確認してくださいhttp : //stevesouders.com/hpws/rule-js-bottom.php


2
これは実際に質問に答えました。投稿された例のほとんどすべてが、「ページの終わり」の適切な視覚的コンテキストを提供していないのではないかと思っていました
Ken Ingram

1
この答えは誤解を招くものであり、おそらく間違っています。GoogleMDNの記事 は、同期JS(これはこの場合です)は常にDOMの構築と解析をブロックするため、最初のレンダリングが遅れる可能性があることを示唆しています。そのため、JSドキュメントが同期している限り、HTMLドキュメント内のJSファイルの場所に関係なく、JSファイルがフェッチされて実行が完了するまで、ページのコンテンツを表示できません
Lingaraju EV

また、2009年に行われたポイントを参照しているため、関連性はありません。
toxaq 2017年

7

従来の(そして広く受け入れられている)答えは「一番下」にあります。それは、何かが実行を開始する前にDOM全体がロードされてしまうからです。

さまざまな理由から反対者がいます。最初は、ページのonloadイベントで意図的に実行を開始するために利用できる方法から始めます。


6

置くために最高の場所<script>タグが閉じる前にある</body>タグを、ダウンロードして、それが文書でHTMLを解析するために、ブラウザをブロックしません実行します

また、jsファイルを外部にロードすることには、ブラウザによってキャッシュされページのロード時間を短縮できるなどの独自の利点があり、HTMLとJavaScriptコード分離し、コードベースの管理を改善します。

しかし、最近のブラウザはまた、のようないくつかの他の最適の方法をサポートasyncし、defer外部負荷にjavascriptファイルを。

非同期で延期

通常、HTMLページの実行は1行ずつ開始されます。外部JavaScript要素が検出されると、JavaScriptがダウンロードされて実行の準備ができるまで、HTML解析が停止します。この通常のページ実行はdeferasync属性を使用して変更できます。

Defer

defer属性を使用すると、JavaScriptはHTML解析と並行してダウンロードされますが、完全なHTML解析が行われた後でのみ実行されます。

<script src="/local-js-path/myScript.js" defer></script>

Async

async属性が使用されている場合、JavaScriptはスクリプトが検出されるとすぐにダウンロードされ、ダウンロード後、HTML解析とともに非同期(並列)で実行されます。

<script src="/local-js-path/myScript.js" async></script>

どの属性をいつ使用するか

  • スクリプトが他のスクリプトから独立していてモジュール式の場合は、を使用します async
  • script1とscript2をasyncでロードしている場合
    、ダウンロード
    して利用可能になると、両方がHTML解析とともに並行して実行されます。
  • スクリプトが別のスクリプトに依存している場合はdefer、両方に使用します。
  • でscript1とscript2がこの順序でロードされるとdefer、script1が最初に実行されることが保証されます。
  • 次に、script1が完全に実行された後で、script2が実行されます。
  • script2がscript1に依存する場合は、これを行う必要があります。
  • スクリプトが十分に小さく、別のタイプのスクリプトに依存しているasync場合は、属性なしでスクリプトを使用し、すべてのasyncスクリプトの上に配置します。

参照:knowledgehills.com


3

場合によっては、ページのスタイル設定やページでのアクション(ボタンのクリックなど)の使用に必要なスクリプトを読み込む場合は、スクリプトを上部に配置することをお勧めします。スタイルが100%CSSであり、ボタンアクションのすべてのフォールバックオプションがある場合は、下部に配置できます。

または、問題がない場合は、モーダル読み込みボックスを作成し、JavaScriptをページの下部に配置して、スクリプトの最後の行が読み込まれたときにJavaScriptを非表示にすることができます。これにより、スクリプトが読み込まれる前に、ユーザーがページでアクションを使用するのを回避できます。また、不適切なスタイリングも避けてください。


3

最後にスクリプトを含めることは、主にWebサイトのコンテンツ/スタイルが最初に表示される場所で使用されます。

ヘッドにスクリプトを含めると、スクリプトが早期にロードされ、Webサイト全体をロードする前に使用できます。

スクリプトが最後に入力された場合、検証はスタイルとデザイン全体を読み込んだ後にのみ行われます。これは、高速応答のWebサイトには適していません。


2

スクリプトとその使用方法に応じて、(ページの読み込みとレンダリング時間の観点から)最善の方法は、従来の<script>タグ自体を使用せず、スクリプトの読み込みを非同期で動的にトリガーすることです。

いくつかの異なる手法がありますが、最も簡単なのは、window.onloadイベントがトリガーされたときにdocument.createElement( "script")を使用することです。次に、ページ自体がレンダリングされたときにスクリプトが最初に読み込まれるため、ユーザーがページが表示されるまで待機する必要のある時間には影響しません。

これには当然、ページのレンダリングにスクリプト自体が必要ないことが必要です。

詳細については、Steve Souders(YSlowの作成者ですが、現在はGoogleに所属)による投稿「非同期スクリプトの結合」を参照してください。


2
  • IE <10でもサポートとパフォーマンスを重視する場合は、常にスクリプトタグをHTML本文の最後のタグにすることをお勧めします。そうすれば、DOMの残りの部分が読み込まれていることを確認でき、ブロックしたりレンダリングしたりすることはありません。

  • IE <10についてあまり気にしない場合は、スクリプトをドキュメントの先頭に配置してdefer、DOMが読み込まれた後にのみ実行されるようにすることをお勧めします(<script type="text/javascript" src="path/to/script1.js" defer></script>)。それでもコードをIE <10で動作させたい場合は、コードをwindow.onload偶数でラップすることを忘れないでください!


受け入れられた回答では、これは「時代遅れの推奨事項」と呼ばれます。それでも意味がある場合は、おそらくそれを裏付けるための参照を作成する必要があります。
dakab 2016年

1

スクリプトは、読み込まれて実行されるまでDOMの読み込みをブロックします。

<body>すべてのDOMの最後にスクリプトを配置すると、ロードおよびレンダリングの機会があります(ページがより速く「表示」されます)。<script>これらすべてのDOM要素にアクセスできます。

一方、<body>開始後またはそれ以降に配置すると、スクリプトが実行されます(DOM要素がまだない場合)。

jQueryを含めているので、好きな場所に配置して.ready()を使用できます。


1

それはウェブページの実行に依存すると思います。表示したいページが最初にJavaScriptをロードしないと正しく表示できない場合は、最初にJavaScriptファイルを含める必要があります。ただし、最初にJavaScriptファイルをダウンロードせずにWebページを表示/レンダリングできる場合は、ページの下部にJavaScriptコードを配置する必要があります。高速なページの読み込みをエミュレートするため、ユーザーの観点からすると、そのページの読み込みが高速であるように見えます。


1

あなたは、ほとんどの置くことができる<script>の終わりに参照を<body>
しかし、外部スクリプトを使用しているページ上のアクティブなコンポーネントがある場合は、
その後、その依存関係(JSファイル)は(理想的にはheadタグ内)その前に来る必要があります。



-1

HTMLドキュメントの最後

そのため、実行時にブラウザでのHTMLドキュメントのロードに影響を与えません。


-1

JavaScriptコードを書くのに最適な場所は、</body>最初にドキュメントをロードしてからjsコードを実行するタグの直後または直前のドキュメントの最後です。

<script> ... your code here ... </script>
</body>

そして、あなたJQueryが以下のように書いた場合、ヘッドドキュメントにあり、ドキュメントのロード後に実行されます:

<script>
$(document).ready(function(){
   //your code here...
});
</script>

スローSyntaxError
Raz

あなたの答えは間違っていませんでしたが、更新する必要があります。
ポールカールトン

-2

HTMLの後にスクリプトを含めることは、私にはより理にかなっています。ほとんどの場合、スクリプトを実行する前にDomをロードする必要があるためです。ヘッドタグに配置することもできますが、ドキュメントの読み込みリスナーのオーバーヘッドがすべて好きではありません。私のコードは短くて簡潔で読みやすいものにしたいと思っています。

以前のバージョンのSafariは、ヘッドタグの外にスクリプトを追加するときに不規則だったと聞きましたが、誰が気にかけているかと言います。私はその古いがらくたを使用している誰かがあなたをすることを知りません。

ところで良い質問です。


-6

スクリプトを配置する場所に配置することができ、1つは別の練習よりも優れています。

状況は次のとおりです。

ページは直線的に「トップダウン」で読み込まれるため、スクリプトを先頭に配置すると、すべての前に読み込まれるようになるため、コードを混ぜて本文の中に配置すると、ページの読み込みが見苦しくなります。

良い習慣を特定することは、場所に依存しません。

あなたをサポートするために、私は次のことを述べます:

あなたは置くことができます:

そしてページは直線的に読み込まれます

ページは他のコンテンツと非同期で読み込まれます

スクリプトのロードが完了する前と完了した後に、ページのコンテンツがロードされます

ここでの良い習慣は、それぞれをいつ実装するのでしょうか?

お役に立てば幸いです。この問題の答えは何でも。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.