rewrite html5

このコミットが含まれているのは:
たかし 2023-07-12 14:37:01 +00:00
コミット 4a2bf2dcbe
1個のファイルの変更35行の追加22行の削除

ファイルの表示

@ -4,42 +4,55 @@
<ul>
<li>2022-12-20 たかし</li>
<li>最終更新日: 2022-12-28</li>
<li>書きかけ。根拠となるURLを見つけたらリンクする。</li>
<li>最終更新日: 2023-07-12 (陰暦05月26日)</li>
</ul>
<p>HTML5 (今は HTML Living Standard) が登場した時、HTML5 では「アプリ」や「ゲーム」を作れると宣伝されました。HTML5/JavaScript で作成した「アプリ」には次の長所があると宣伝されました。</p>
<h2></h2>
<ol>
<li>「アプリ」がPCでもスマートフォンでも動くから、開発が楽になる。</li>
<li>「アプリ」をウェブ上で公開できるから Google や Apple から自由になる。</li>
<li><code>canvas</code> や WebGL を使用してプラットフォーム非依存のゲームを開発できる。</li>
</ol>
<p>HTML5 (今は HTML Living Standard) が登場した時、これで「アプリ」やゲームを開発できる、と宣伝されました。筆者も嘗ては HTML5 に夢を見ました。</p>
<p>2022年現在、そこまで良い物だと感じません。</p>
<ul>
<li>PC・モバイル対応の「アプリ」を楽に開発できる。</li>
<li>「アプリ」をウェブで公開できるから Google や Apple から自由になる。</li>
<li>canvas や WebGL を使用してプラットフォーム非依存のゲームを開発できる。</li>
</ul>
<h2>1</h2>
<p>今は HTML5 をそこまで良いと感じません。</p>
<p>1つ目、「アプリ」の開発が楽になるのは本当です。ただし本物の HTML/CSS/JS で作ればの話です。React 等のフレームワークや、NodeJS (npm) を使用すると複雑になります。多くの「アプリ」ではフレームワークや NodeJS を採用します。</p>
<p><strong>元々、この記事は上記リストに反論する形式でしたが、書き方を改めました。</strong></p>
<h2>2</h2>
<h2>1.「HTML5アプリ」は複雑</h2>
<p>2つ目、スマホ向けの「アプリ」を作るなら、現実的にはネイティブアプリの中に WebView として埋め込む事になります。Android の場合は「野良アプリ」や F-Droid でアプリを公開できますが、多くの人は Google のストアからアプリをインストールします。iOS の場合は Apple のストアしかありません。だから Google や Apple から自由になりません</p>
<p>確かに「HTML5 アプリ」は簡単に作れますが、開発者の多くは HTML5 に「フレームワーク」や NodeJS (npm) を採用して、構造を複雑にします。また、HTML5 を普通のソフトに見せかけるために「Electron」でラップすると、実行可能ファイルは巨大になり、消費メモリーも増加します</p>
<p>WebView を使用しないで、ウェブ上で HTML5 の「アプリ」を公開しても、「アプリ」を実行するためのブラウザーは Firefox 以外には「GoogleのChrome」「AppleのSafari」だけです。結局、Google や Apple に依存します。</p>
<h2>2.「HTML5アプリ」はGoogle・Appleに依存</h2>
<h2>3</h2>
<p>HTML5 は、自分のウェブサーバーから「アプリ」を配信できる、と注目されましたが、多くの場合は、ネイティブの WebView に埋め込まれ、Google や Appleの「ストア」で配布されます。WebView を使用しなくても、モバイルのブラウザーの殆どは Chrome・Safari の派生だから、結局は Google や Apple から逃げられません。</p>
<p>3つ目、CANVAS や WebGL でゲームを開発できますが、JSのガーベージコレクションのせいで動作が不安定です。また、JSでキーボードやマウスの情報を取得するAPIが複雑すぎるから、C等の他の言語で作る方が簡単です。特にPC/スマホの両方に対応するには沢山のコードが必要です。</p>
<h2>3. HTML5ゲームは難しい</h2>
<p>こんなに大変ですが、HTML5 で作るゲームは結局ブラウザゲームです。遊ぶたびにサーバーからダウンロードが必要で効率が悪いです。しかも多くのPCユーザーはOSネイティブのゲームしか遊びません。だからプログラミングの勉強にはなりますが、HTML5 で作る利点は少ないです。</p>
<p><a href="./jsomohide.html">HTML5 のゲームはプログラミングの学習に丁度良く</a>、家族や友人に成果物を見せて楽しむ事ができます。ところが本格的なゲーム開発には向かず、ネイティブのゲームには見劣りします。筆者の経験上、多くの人はブラウザゲームより、ハイエンドゲームや市販ゲームを好みます。</p>
<p>それでも CANVAS はフィンガープリントに使用できます。それなら CANVAS は無くても良いです。</p>
<p>開発上の課題もあります。いくら効率の良いコードを書いても、ブラウザー側の制約により、ゲームのアニメーションは不安定になります。更に、JS でキーボードやマウスの情報を取得する API は複雑で、PC・モバイルの両方に対応するには沢山のコードが必要です。</p>
<h2>4</h2>
<h2>4. 最新のウェブ技術はトラッキングに便利</h2>
<p>この通り、HTML5 はかつて宣伝された程、便利ではないみたいです。本当に便利なのは、むしろ、HTML5 と同時に現れた CSS3 かもしれません。HTML5/CSS3 で作られたサイトを HTML5 無しで再現する事は簡単ですが、CSS3 無しで再現するのは困難です</p>
<p>HTML5 の canvas はフィンガープリントに使用できます。それどころか JS にはプライバシー侵害のための機能があります(HTML5 と少し別の話ですが、参考として)</p>
<h2>余談</h2>
<ul>
<li><a href="https://hozon.site/archive/1689000964/www.saitolab.org/fp_site">Fingerprint解説サイト (hozon.site)</a></li>
<li><a href="https://hozon.site/archive/1689001328/developer.mozilla.org/ja/docs/Web/API/Navigator/sendBeacon#content">Navigator.sendBeacon() - Web API | MDN (hozon.site)</a> -- <q>このメソッドは、アナリティクスや診断のために、(中略)、サーバーにデータを送信するものです。</q></li>
</ul>
<p>このサイトは HTML i18n で書きました。1997年の規格ですが機能は充分です。HTML5 や HTML Living Standard で HTML の規格を何度も更新する意味とは……</p>
<h2>5. HTML5はHTML4と同じ</h2>
<p>HTML5 以降「アプリ」のための機能が増えましたが、ハイパーテキストを記述する機能は殆ど進歩しません。header などの新要素は DIV の親戚に過ぎず、しかも互換性の問題を増やしました。むしろ、同時期にできた CSS3 の方が便利かもしれません。CSS3 は、ウェブサイトの表現の幅を大きく広げました。</p>
<p>このサイトは HTML i18n で書きました。1997年の規格ですが機能は充分です。HTML5 や HTML Living Standard で HTML の規格を何度も更新するのは蛇足といつても過言でありません。</p>
<h2>参考</h2>
<ul>
<li><a href="https://hozon.site/archive/1689169349/www.publickey1.jp/blog/10/html5javascriptdouglas_crockford.html">「HTML5は優先順位を間違った。もういちどセキュリティの設計からやり直すべきだ」と語るJavaScript大家のDouglas Crockford氏 (hozon.site)</a> -- <q>1つ目の理由は、それらはブラウザを非常に複雑なプラットフォームにしてしまうからだ。</q></li>
<li><a href="https://hozon.site/archive/1689000326/qiita.com/Peutes/items/d74e5758a36478fbc039">iOS10のSafariでuser-scalable=no が効かなくズームがされる問題への対策 - Qiita (hozon.site)</a> -- <q>iOS10から、Safariで viewport の user-scalable=no が効かなくなりました。ブラウザゲームなどを開発してる場合、ダブルタップで拡大されてしまうためクリティカルな問題になります。</q></li>
</ul>