世界を動かす技術を、日本語で。

HTMLを思い通りに動かすために忘れてはいけないタグ

概要

HTMLファイルを正しく動作させるための必須スニペットを解説。 各タグの役割と重要性を簡潔に整理。 初心者でも分かるようにポイントごとに説明。 よくあるミスや注意点も補足。 最後にジョークを交えた締めくくり。

HTMLが正しく動作するための呪文

  • HTMLファイル作成時 に最低限含めるべきスニペットの紹介。
  • Alex Petrosのスライド 「Incantations that make HTML work correctly」に着想を得た解説。
  • ブラウザで直接開く場合 やローカルでテストする際にも有効な基本構成。

doctype宣言

  • <!doctype html>はブラウザの 標準モードを強制する宣言。
    • これがないと quirks mode(互換モード) で動作し、レイアウトやサイズ計算が崩れる原因。
  • 記述例:<!doctype html>(大文字小文字は問わない)
  • 1998年風に<!DOCTYPE HTML>でもOK、変則的な表記でも動作。
  • 一貫した表示 や予期しない動作防止のため、必ず先頭に記述。

html lang属性

  • <html lang="en"> 文書の言語を明示。
  • スクリーンリーダー検索エンジン自動翻訳 などが正確に動作。
  • スペルチェックローカル固有ツール にも影響。
  • 省略しても見た目は変わらないが、 周辺ツールの精度低下 リスク。
  • サーバーから HTTPヘッダー で返すことも可能だが、 HTML内で明示 推奨。

meta charset="utf-8"

  • <meta charset="utf-8"> 文字エンコーディングを指定。
  • é, ü, “”や👍、非ラテン文字 などが正しく表示。
  • これがないと 文字化け記号の崩れ が発生。
  • 例:このタグなしでHTMLを開くと スマートクォートや絵文字 が化ける。
  • 必ずhead要素内 に記述。

meta viewport

  • <meta name="viewport" content="width=device-width,initial-scale=1.0"> モバイル表示を最適化。
  • これがないと スマホで極端に縮小表示 されることが多い。
  • レスポンシブデザインモバイル対応 には必須。
  • うっかり忘れると 「あれ?小さすぎ!」 となる典型的ミス。

よくあるジョークと補足

  • 「最重要スニペット」 として<div id="root"></div><script src="bundle.js"></script>を挙げるジョーク。
    • ReactやモダンJS 開発でよく使われる構成。
  • ただし、 HTMLの基本構成 としては上記4つが最重要。

まとめ:

  • <!doctype html>で標準モード宣言
  • <html lang="en">で言語指定
  • <meta charset="utf-8">で文字化け防止
  • <meta name="viewport"...>でモバイル最適化
  • これらを押さえれば HTMLが期待通り動作

Hackerたちの意見

こういう時には、よくHTML5ボイラープレートを使うよね。https://github.com/h5bp/html5-boilerplate/blob/main/dist/ind...

その当時のFacebookの独自メタデータライン("og:..."のライン)が入ってるのはちょっと皮肉だよね。今や彼らの名前が"Meta"になったから、前よりもさらに独占的に見える。もしかしたら、名前は最初からメタバースとは関係なかったのかも…。

これ、必要なときにどうやって見つけるの?

自動で閉じるタグは、終わらせる必要がないってことに注意してね。それに、タグを実際にで囲むのはオプションだよ。属性にスペースとかがなければ、引用符もいらないし、もOKだよ。(今の時代、平均的なウェブサイトはページを読み込むたびにバズリオンバイトのJavaScriptを取得するから、ちょっと無意味な感じもするけど、たまにはできるだけスリムにするのが楽しくて満足感があるよね。)

、開始タグと終了タグは全部オプションだよ。実際には、lang属性があるから開始タグを省略しない方がいいけど、他のタグには属性が必要ないことが多いよ。(ボディ要素に属性やクラスを付けるなら、html要素の方が適切か考えてみてね。)は、や、や、を書くのはかなり前のことだな。

こういうのは、俺にはいつも雑に感じる。タグをちゃんと閉じるのはそんなに手間じゃないし、節約できるバイト数なんて、ウェブサイトの他のどの側面と比べても微々たるものだよ。必要のないdivスパムを避けるだけでも、もっと節約できるし、CSSが膨れ上がらないようにするのも大事だよね。もちろん、3MBのJSをダウンロードしないようにするのもね。これが達成するのは、構文をより不規則にして、解析しづらくすることだと思う。HTML5にはこういう緩和がなくて、ブラウザが単にエラーを表示してくれたらいいのに。そうすれば、ブラウザのコードやHTMLの仕様がかなりシンプルになると思う。

省略できるって知らなかったけど、明確さのために保持する方が好きだな。

タグを開いたままにするのが満足だとは言えないけど、面白い事実だね。

バンドルせずにウェブコンポーネントを使うのが好きな人、他にもいる?正直言うと、Lit Elementsを生のJavaScriptコードで使ってるんだけど、オートコンプリートを使うのをやめちゃったからね。今の時点でTypeScriptを使わないのは、今の多くの人にとってパンチカードを使ってるって言ってるのと同じようなもんだと思う。

37 Signals [0] は自社のほとんどの製品で独自のStimulus [1] フレームワークを使ってることで有名だよね。彼らのCEOは、追加の複雑さを加えるから、ノービルドアプローチを支持してるし、他の人が自分のコードを見たり学んだりするのが難しくなるからって言ってるよ。[0]: https://basecamp.com/ [1]: https://stimulus.hotwired.dev/

TSをJSに落とすのにはあまり賛成できないけど、小さなプロジェクトだとその方が議論しやすいのかもね。でも、君に同意する人がいるよ、あまり条件をつけずにね。https://world.hey.com/dhh/turbo-8-is-dropping-typescript-701... これはLex Fridman/DHHのポッドキャストで知ったんだ。彼はTypeScriptがメタプログラミングをすごく難しくするって話してた。確かにそういうこともあるだろうけど、JSでどんなメタプログラミングができるのかはあまり理解できてないんだ。一般的な動的さはわかるけど。

他にバンドルなしでウェブコンポーネントを使うのが好きな人いる? うん!それだけじゃなくて、ShadowDOMなしでもね。

Hacker Newsで議論の続きを見る