早見表 / Cheat sheet

書き方を、
すぐに引く。

このガイドと作例で使う HTML・CSS・JavaScript・Canvas の書き方と、Git のコマンド、キーボードの操作を、表にまとめました。書き方を思い出したいときや、AI が書いたコードの意味を確かめたいときに開いてください。すべての要素やプロパティは、MDN Web Docs で調べられます。

目次を開く(全 6 章)

01

HTML

文書のひな形と、よく使う要素・属性です。要素は、見た目ではなく、意味で選びます。

文書のひな形

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width">
  <title>ページの題名</title>
  <meta name="description" content="ページの説明">
  <link rel="stylesheet" href="stylesheets/style.css">
  <script src="javascripts/main.js" defer></script>
</head>
<body>
  <h1>見出し</h1>
  <p>本文</p>
</body>
</html>
書き方役割
<!DOCTYPE html>HTML の文書であることを伝える
<html lang="ja">文書全体を囲む。日本語の文書だと伝える
<meta charset="UTF-8">文字コードを伝える。文字化けを防ぐ
<meta name="viewport" content="width=device-width">スマートフォンでも、画面の幅に合わせて表示する
<link rel="stylesheet" href="…">CSS のファイルを読み込む
<script src="…" defer>JavaScript のファイルを、HTML を読み終えてから実行する
<script type="module" src="…">モジュールとして読み込む。ローカルサーバーで開く
<link rel="manifest" href="…">PWA のマニフェストを読み込む
<!-- … -->コメント。画面には表示されない

骨組みと文章の要素

用途要素ひとこと
ページの区画header・nav・main・section・article・aside・footermain は一つのページに一つだけ
見出しh1〜h6目次のように使い、段を飛ばさない
段落p意味のまとまりで区切る
重要・強調strong・emstrong は重要、em は強調
改行br住所や詩など、行の区切りに意味があるときだけ
補足の小さな文字small注記や著作権の表示
順序のないリストul・li項目の順番に意味がないとき
順序のあるリストol・li手順のように、順番に意味があるとき
名前と説明の組dl・dt・dd営業時間や用語集など
表table・caption・thead・tbody・tr・th・td行と列の関係があるデータ
リンクahref に行き先。文言で行き先が分かるように
画像imgalt・width・height を付ける
図と説明文figure・figcaption画像や表に説明を添える
汎用のまとまりdiv・spanほかに合う要素がないときだけ

フォームの要素

要素役割
form入力欄をまとめ、送信する
label入力欄の名前。for と入力欄の id を同じにして結ぶ
input一行の入力欄。type で種類を選ぶ(text・email・tel・number・radio・checkbox・file・color・range など)
textarea複数行の入力欄
select・option選択肢から選ぶ
fieldset・legend関係する入力欄をまとめ、見出しを付ける
buttonボタン。フォームの中では type="button" か type="submit" を書く
output計算の結果を表示する

便利な要素

要素役割
details・summary押すと開く欄。JavaScript を書かずに作れる
dialog確認や拡大表示に使うダイアログ。showModal() で開く
audio音を鳴らす。preload で読み込み方を決める
canvasJavaScript の命令で絵を描く白紙。width・height は点の数
svg・symbol・useアイコンを一か所に定義し、使い回す

よく使う属性

属性役割
class見た目を付けるための名前。同じ役割の要素に同じ名前を付ける
idページの中で一つだけの名前。ページ内リンクや label の for で使う
data-*自分用の情報や、JavaScript の目印(data-ui・data-action・data-hand など)
hidden要素を隠す
alt画像の代わりの文字。画像が見えない人にも内容を伝える
loading="lazy"画面の外の画像を、近づいてから読み込む
required入力しないと送信できない
autofocus開いたときに、その要素を選んだ状態にする
tabindex="0"ボタンやリンクでない要素も、Tab キーで選べるようにする
inert中の要素を、押すこともフォーカスすることもできなくする
aria-label見た目の文字がない部品に、読み上げ用の名前を付ける
role="img"一枚の絵として、読み上げソフトに伝える。aria-label で内容を書く
aria-expanded開閉する部品が、今開いているか(true・false)
aria-pressed切り替えのボタンが、今押されているか(true・false)
aria-live="polite"中身が変わったら、読み上げソフトに伝える
aria-hidden="true"飾りの要素を、読み上げの対象から外す
aria-controls開閉するボタンが、どの部品を操作するか(部品の id)
aria-labelledbyほかの要素(見出しなど)の文字を、その部品の名前にする
scope="col"・scope="row"th が、列と行のどちらの見出しかを伝える
method="dialog"dialog の中のフォーム。ボタンを押すと、ダイアログを閉じる
autocomplete名前やメールアドレスなどを、ブラウザに補ってもらう
maxlength入力できる文字数の上限

02

CSS

よく使う CSS の書き方です。大きさや位置は、上下左右ではなく、文章の流れに沿った名前(論理プロパティ)で書いています。

書き方の基本

CSS
/* コメント */
.card {
  padding: 1.5rem;          /* プロパティ: 値; */
  background-color: white;

  h3 { font-size: 1.25rem; }    /* .card の中の h3 */
  &:hover { translate: 0 -4px; } /* .card 自身に、条件を足す */
}
書き方役割
@layer reset, tokens, base, layout, components, utilities;層の順番を決める。後ろの層の指定ほど強い
@layer components { … }指定をその層に入れる
@import url("…") layer(reset);ほかの CSS ファイルを、層を指定して読み込む
:root { --accent: #c2410c; }色などに名前を付ける(カスタムプロパティ)
color: var(--accent);名前を付けた値を使う
入れ子の中の h3 { … }外側の要素の中にある h3 を選ぶ
入れ子の中の &:hover { … }外側の要素自身に、条件を足す
入れ子の中の .is-dark & { … }外側の要素が、.is-dark の中にあるとき

セレクタ

書き方選ばれるもの
pすべての p 要素
.cardclass="card" を持つ要素
#priceid="price" を持つ要素
[data-state="open"]属性の値が一致する要素
nav anav の中にある a 要素(子孫)
ul > liul のすぐ下の li 要素(子)
h1, h2, h3どれか一つに当てはまる要素
*すべての要素
a:hoverマウスを乗せている間
:focus-visibleキーボードで選ばれている間。見た目を消さない
:checked選ばれているラジオボタンやチェックボックス
:has(…)中に、指定したものを含む要素
:where(…)中のどれかに当てはまる要素。詳細度を 0 にする
::before・::after要素の中身の前と後ろに、飾りを足す

大きさと余白

書き方役割
margin: 1rem;外側の余白(四方)
padding: 1rem 2rem;内側の余白。値が二つなら上下・左右、四つなら上・右・下・左
margin-block: 2rem;・padding-block: 1rem;上下の余白
margin-inline: auto;・padding-inline: 1rem;左右の余白。margin-inline: auto で中央に寄せる
margin-block-end: 1rem;下だけの外側の余白
box-sizing: border-box;幅に、内側の余白と線の太さを含める

大きさや位置は、上下左右ではなく、文章の流れに沿った名前(論理プロパティ)で書きます。

論理プロパティ以前の書き方意味(横書きのとき)
inline-sizewidth幅
block-sizeheight高さ
max-inline-sizemax-width幅の上限
min-block-sizemin-height高さの下限
margin-inlinemargin-left・margin-right左右の外側の余白
margin-block-endmargin-bottom下の外側の余白
padding-blockpadding-top・padding-bottom上下の内側の余白
padding-inlinepadding-left・padding-right左右の内側の余白
border-block-endborder-bottom下の線
inset-block-starttop上からの位置
inset-block-endbottom下からの位置
inset-inline-startleft左からの位置
inset-inline-endright右からの位置

色・文字・飾り

書き方役割
color: #22333c;文字の色
background-color: rgb(31 98 128 / .16);背景の色。/ の後ろは不透明度
color-mix(in srgb, var(--accent) 20%, white)二つの色を、割合を決めて混ぜる
font-family: "Hiragino Sans", "Noto Sans JP", sans-serif;書体。前から順に、使えるものが選ばれる
font-size: clamp(1.5rem, 4vw, 2.5rem);文字の大きさ。画面の幅に合わせて、上限と下限の間で変える
line-height: 1.8;行の高さ(行間)
font-weight: bold;文字の太さ
text-align: center;行の中での文字の揃え方
text-decoration: none;下線などの線。リンクの下線を消すときに使う
list-style: none;リストの行頭の記号を消す
font-variant-numeric: tabular-nums;数字の幅をそろえる
border: 1px solid var(--line);線。太さ・種類・色の順
border-color: var(--accent);線の色だけを変える
outline: 2px solid var(--accent);要素の外側の線。:focus-visible の見た目に使う
outline-offset: 2px;outline と要素の間を空ける
border-radius: 50%;角を丸める。50% で円になる
box-shadow: 0 12px 32px -12px rgb(12 50 68 / .2);影
opacity: .5;要素全体の不透明度
background-image: url("…");背景の画像
background-size: cover;背景の画像を、比を保ったまま枠いっぱいに広げる
background-position: center;背景の画像の位置
overflow: hidden;枠からはみ出した部分を隠す。auto なら、はみ出すときだけスクロールできる

並べる:Grid と Flexbox

書き方役割
display: grid;子の要素を、格子に並べる
grid-template-columns: repeat(3, 1fr);同じ幅の列を三つ作る
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));画面の幅に合わせて、列の数を自動で変える
grid-column: 1 / -1;最初の列の線から、最後の列の線まで広げる
grid-template-areas: "header header" "menu main";区画に名前を付けて、配置を絵のように書く
grid-area: main;名前を付けた区画に置く
place-items: center;中身を、上下左右の中央に置く
display: flex;子の要素を、一列に並べる
display: inline-flex;自分は文字と同じ流れに置き、中を一列に並べる
flex-direction: column;縦に並べる
flex-wrap: wrap;入りきらない要素を、次の行へ送る
justify-content: space-between;並ぶ向きの、間隔の取り方
align-items: center;並ぶ向きと交わる方向の、揃え方
gap: 1rem;Grid や Flexbox の要素の間隔

列や行に分けて面を組むときは Grid、一列に並べるときは Flexbox を使います。

位置・重なり・動き

書き方役割
position: relative;中の要素を重ねるときの基準にする
position: absolute;基準の要素の中で、位置を決めて重ねる
position: fixed;画面に対して位置を決める。スクロールしても動かない(固定ヘッダーなど)
position: sticky;スクロールしても、決めた位置に留まる
z-index: 10;重なりの順番。大きいほど手前
aspect-ratio: 4 / 3;縦横の比を決める
touch-action: none;指でなぞったときに、画面をスクロールさせない
object-fit: cover;画像を、比を保ったまま枠いっぱいに収める
translate: 0 -4px;位置をずらす
rotate: 45deg;回す
backdrop-filter: blur(8px);要素の後ろに見える部分を、ぼかす
transition: translate .2s;値が変わるときに、なめらかに変える
@keyframes と animation動きを定義して、繰り返す
visibility: hidden;場所を残したまま見えなくする
scroll-margin-block-start: var(--header-h);ページ内リンクで移ったとき、固定ヘッダーの下に隠れないようにする

値と単位

書き方意味
remページの基準の文字の大きさ(通常 16px)の何倍か
emその要素の文字の大きさの何倍か
px画面の 1 点
%親要素の大きさに対する割合
frGrid の残りの幅を分ける割合
vw・dvh画面の幅・高さの 1%
cqiコンテナの幅の 1%
ch文字一つ分の幅
min(100% - 2rem, 70rem)小さいほうを使う
max(…, …)大きいほうを使う
clamp(下限, 望む値, 上限)下限と上限の間に収める

画面と設定に合わせる

書き方当てはまるとき
@media (width >= 60rem) { … }画面の幅が 60rem 以上
@media (prefers-color-scheme: dark) { … }OS がダークモード
@media (prefers-reduced-motion: reduce) { … }OS で、動きを減らす設定にしている
container: record / inline-size;その要素を、record という名前のコンテナにする
@container record (width >= 19rem) { … }record のコンテナの幅が 19rem 以上。コンテナ自身ではなく、中の要素に効く
color-scheme: light dark;ライトとダークの両方の表示に対応すると伝える

決まった書き方

CSS
/* 横方向の中央に、最大の幅を決めて置く */
.wrap {
  inline-size: min(100% - 2rem, 70rem);
  margin-inline: auto;
}

/* 上下左右の中央に置く */
.center {
  display: grid;
  place-items: center;
}

/* hidden 属性を付けた要素は、一番後ろの層で必ず隠す */
@layer utilities {
  [hidden] { display: none; }

  /* 動きを減らす設定のときは、動きをすぐに終わらせ、繰り返さない */
  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
      animation-duration: .01ms;
      animation-iteration-count: 1;
      transition-duration: .01ms;
    }
  }
}

03

JavaScript

よく使う JavaScript の書き方です。文字列は二重引用符 "…" で囲み、中に " を含むときだけ単一引用符にします。

値と変数

書き方意味
const price = 1200;値に名前を付ける。名前に別の値を入れ直せない
let count = 0;あとで値を入れ直す名前
"ひだまり"文字列
`${name} さん`値を埋め込んだ文字列(テンプレートリテラル)
42・3.14数
true・false真偽値
null・undefined値がないこと
typeof x値の型を、"number"・"string" などの文字列で返す
Number("42")・String(42)数に直す・文字列に直す
["guu", "choki", "paa"]配列
{ label: "グー", winsAgainst: "choki" }オブジェクト
// …・/* … */コメント
"use strict";厳格モードで実行する。ファイルの初めに書く

演算子

書き方意味
+・-・*・/足す・引く・掛ける・割る
%割った余り
count++・total += 3001 増やす・足して入れ直す
===・!==等しい・等しくない(型も比べる)
<・<=・>・>=大小を比べる
&&かつ
||または
!でない
条件 ? a : b条件が真なら a、偽なら b(条件演算子)
a ?? ba が null か undefined なら b
shop.address?.cityaddress がなければ、エラーにせず undefined
[...items]・{ ...totals }配列やオブジェクトを広げて、写しを作る
const { win, lose } = totals;オブジェクトから取り出して、名前を付ける(分割代入)
delete scores.playerオブジェクトから、プロパティを取り除く

選択と反復

JS
if (score >= 80) {
  console.log("合格");
} else if (score >= 60) {
  console.log("もう少し");
} else {
  console.log("再挑戦");
}

for (let i = 0; i < 3; i++) {
  console.log(i);
}

for (const hand of HAND_IDS) {
  console.log(hand);
}
書き方意味
while (条件) { … }条件が真の間、繰り返す。回数が決まっていないときに使う
break;繰り返しを途中でやめる
continue;その回の残りを飛ばして、次の回へ進む
return;関数を抜ける。関数の初めで、続ける必要がないときに抜ける書き方(早期の return)をよく使う

if と for は、中身が一行でも { } で囲みます。

関数

書き方使う場面
function judge(player, computer) { … }名前を付けて使う関数
return "win";関数の結果を返して、関数を抜ける
(hand) => hand !== "guu"ほかの関数に渡す処理(アロー関数)
button.addEventListener("click", playGame);関数を渡すときは、カッコを付けない
(() => { … })();その場で呼び出す関数(即時関数)

配列とオブジェクトのメソッド

書き方結果
items.length要素の数
items.push(x)最後に足す
items.shift()最初の一つを取り除く
items.pop()最後の一つを取り出す
items.length = 0中身を空にする
items.includes(x)含まれていれば true
items.indexOf(x)何番目か。なければ -1
items.slice(-100)一部を切り出した、新しい配列
items.splice(i, 1)i 番目から一つ取り除く。元の配列が変わる
items.forEach((x) => …)一つずつ処理する
items.map((x) => …)一つずつ変換した、新しい配列
items.filter((x) => …)条件に合うものだけの、新しい配列
items.find((x) => …)条件に合う最初の一つ
items.every((x) => …)すべてが条件に合えば true
items.some((x) => …)一つでも条件に合えば true
items.reduce((sum, x) => sum + x, 0)一つの値にまとめる(合計など)
items.join("、")つないだ文字列
items.toReversed()逆順にした、新しい配列
items.toSorted((a, b) => a.y - b.y)並べ替えた、新しい配列。比べる関数の結果が負なら a が前
Object.keys(obj)キーの配列

数・文字列・日付

書き方結果
Math.random()0 以上 1 未満の乱数
Math.floor(x)・Math.round(x)小数を切り捨てる・四捨五入する
Math.min(a, b)・Math.max(a, b)小さいほう・大きいほう
Number.isInteger(x)整数なら true
(1200).toLocaleString()"1,200" のように、桁を区切った文字列
new Intl.NumberFormat("ja-JP")数を日本の書き方で表示する書式。format(5300) で "5,300"
text.trim()前後の空白を取り除く
text.includes("花")・text.startsWith("http")含むか・その文字で始まるか
String(7).padStart(2, "0")"07" のように、前に "0" を足して 2 文字にそろえる
now.getHours()・now.getMinutes()・now.getSeconds()const now = new Date(); の時・分・秒
now.getMonth() + 1・now.getDate()・now.getDay()月(0 から数えるので 1 を足す)・日・曜日(0 が日曜)
new Date().toISOString()今の日時を、"2026-10-17T01:23:45.678Z" の形の文字列で
performance.now()ページを開いてからの時間(ミリ秒)

クラス

JS
class ScoreBoard {
  #scores = { player: 0, computer: 0 };   // # はクラスの外から触れない

  static from(value) { … }                 // ScoreBoard.from(…) とクラスから呼ぶ

  add(winner) {                            // メソッド
    this.#scores[winner]++;
  }

  get scores() {                           // board.scores と読める(ゲッター)
    return { ...this.#scores };
  }

  toJSON() {                               // JSON.stringify(board) で使われる
    return this.scores;
  }
}

const board = new ScoreBoard();
書き方意味
constructor(name) { … }new で作るときに、最初に実行する
set name(value) { … }代入で呼ばれる(セッター)
class HintQuizMaker extends QuizMakerほかのクラスを受け継ぐ
super.makeQuestion()受け継いだ元のメソッドを呼ぶ

ページを操作する(DOM)

書き方役割
document.querySelector('[data-ui="message"]')最初に当てはまる要素。なければ null
document.querySelectorAll("[data-hand]")当てはまるすべての要素
element.textContent = "…"中の文字を書き換える
element.innerHTML = "…"中を HTML として書き換える。外から来た文字には使わない
input.value入力欄の値(文字列)
checkbox.checked・button.disabled選ばれているか・押せないか
img.src・img.alt画像の場所・代わりの文字
input.files[0]ファイルを選ぶ入力欄で、選ばれた最初のファイル
input.validity.valid入力が、required などの条件に合っているか
dialog.returnValueダイアログを閉じたボタンの value
element.classList.add("is-open")class を付ける(remove で外す)
element.classList.toggle("is-chosen", 条件)条件が真なら付け、偽なら外す
element.dataset.state = "playing"data-state 属性を読み書きする
element.getAttribute("href")属性の値を読む
element.setAttribute("aria-expanded", "true")属性を書き換える
element.style.setProperty("--hand-color", color)カスタムプロパティの値を、その要素に設定する
element.hidden = true要素を隠す
document.createElement("li")新しい要素を作る
list.append(item)最後に加える
element.focus()その要素を選んだ状態にする
element.getBoundingClientRect()画面の上での位置と大きさ(left・top・width・height)
element.click()押したことにする
dialog.showModal()・dialog.close()ダイアログを開く・閉じる
input.setCustomValidity("…")・form.reportValidity()入力の誤りの文を決める・誤りを画面に示す
window.matchMedia("(width >= 60rem)").matchesメディアクエリに当てはまるか
element.closest("dialog")自分か、外側で、当てはまる最初の要素
document.documentElement.classList.remove("no-js")JavaScript が動いたことを CSS に伝える

イベント

書き方役割
button.addEventListener("click", () => { … })押されたときの処理を登録する
"click"・"input"・"change"・"submit"・"keydown"押された・入力された・選択が変わった・送信された・キーが押された
"scroll"・"resize"ページがスクロールされた・画面の大きさが変わった
"close"ダイアログが閉じた
"pointerdown"・"pointermove"・"pointerup"・"pointercancel"マウス・指・ペンで、押した・動かした・離した・ブラウザが取りやめた
"load"画像の読み込みが終わった
"storage"別のタブで、localStorage が変わった
event.currentTarget処理を登録した要素
event.target実際に押された要素
event.key === "Escape"押されたキー
event.ctrlKey・event.metaKeyCtrl キー・Command キーを押しているか
event.clientX・event.clientY押した位置。画面の左上から数える
element.setPointerCapture(event.pointerId)要素の外へ出ても、離すまでイベントを届け続ける
event.preventDefault()ブラウザの決まった動き(送信など)を止める
{ once: true }一度呼ばれたら、登録を外す

保存とエラー

書き方役割
localStorage.setItem("key", text)文字列を保存する
localStorage.getItem("key")保存した文字列。なければ null
localStorage.removeItem("key")保存したものを消す
JSON.stringify(value)オブジェクトを、JSON の文字列にする
JSON.parse(text)JSON の文字列を、オブジェクトに戻す
try { … } catch (error) { … }失敗したときの処理を書く
try { … } finally { … }失敗してもしなくても、最後に必ず行う処理を書く
throw new Error("…")自分でエラーを起こし、処理を止める
console.log(x)・console.warn(x)・console.table(x)コンソールに表示する
new Blob([json], { type: "application/json" })ファイルの中身になるデータを作る
URL.createObjectURL(blob)データを指す一時的な URL を作る。使い終えたら revokeObjectURL()
await file.text()選ばれたファイルの中身を、文字列として読む

時間と非同期処理

書き方役割
setTimeout(() => { … }, 1000)1000 ミリ秒後に一度だけ実行する
requestAnimationFrame(shuffle)次に画面を描く直前に実行する
async function load() { … }中で await を使える関数
const response = await fetch(url);時間のかかる処理の終わりを待つ
const data = await response.json();受け取った JSON を、オブジェクトに直す
new Promise((resolve) => { … })終わりを知らせる約束を作る
audio.play().catch(…)音を鳴らす。失敗するかもしれない Promise に備える
audio.pause()・audio.currentTime = 0音を止める・頭に戻す

モジュール

書き方意味
export const HANDS = { … };ほかのファイルに渡す
export function judge() { … }・export class JankenRecord { … }関数やクラスを渡す
import { HANDS, judge } from "./rules.js";ほかのファイルから受け取る。./ と .js は省かない
import { judge as judgeHands } from "./rules.js";名前を変えて受け取る
import * as rules from "./rules.js";まとめて受け取る
await import("./javascripts/rules.js")コンソールで、モジュールを読み込んで試す

Service Worker と PWA

書き方役割
navigator.serviceWorker.register("./sw.js")Service Worker を登録する(ページの側)
self.addEventListener("install", …)初めて登録されたときと、sw.js が変わったとき
self.addEventListener("activate", …)新しい版が働き始めるとき
self.addEventListener("fetch", …)ページがファイルを求めるたび
caches.open(CACHE_NAME)キャッシュを開く
cache.addAll(APP_FILES)一覧のファイルを、まとめて保存する
cache.match(request)保存したファイルを探す
event.respondWith(…)ページへの返事を決める
event.waitUntil(…)渡した処理が終わるまで、その段階を終えない
self.skipWaiting()待たずに、新しい版を働かせる

よく見るエラー

Firefox のコンソールに出る主なエラーです。

エラーよくある原因
ReferenceError: … is not defined名前の綴りの間違い。宣言していない。import に書き忘れた
TypeError: invalid assignment to const '…'const の名前に、値を入れ直そうとした
TypeError: can't access property "…", … is nullquerySelector で要素が見つからず、null のまま使った
TypeError: can't access property "…", … is undefinedないプロパティの、さらに先を読もうとした
SyntaxError: return not in functionモジュールの一番外側に return を書いた
SyntaxError: The requested module '…' doesn't provide an export named: '…'export の付け忘れか、名前の綴りの違い

04

Canvas

よく使う Canvas の命令です。描く命令は、getContext("2d") で受け取ったコンテキスト ctx に対して出します。後から描いたものが、上に重なります。

準備と座標

書き方役割
<canvas id="card" width="360" height="440" role="img" aria-label="…">白紙を置く。width・height は点の数。描いた内容は aria-label で伝える
const ctx = canvas.getContext("2d");描くための道具(コンテキスト)を受け取る
canvas.width・canvas.height点の数。値を入れると、描いた絵と設定が消える
(0, 0)左上。x は右へ、y は下へ増える

図形とパス

書き方描くもの
ctx.fillRect(x, y, 幅, 高さ)塗りつぶした四角形
ctx.strokeRect(x, y, 幅, 高さ)線だけの四角形
ctx.clearRect(x, y, 幅, 高さ)その範囲を消して、透明に戻す
ctx.beginPath()新しいパスを始める。図形ごとに書く
ctx.moveTo(x, y)線を引かずに、ペンを移す
ctx.lineTo(x, y)そこまで、まっすぐな線を伸ばす
ctx.quadraticCurveTo(cx, cy, x, y)制御点 (cx, cy) へ引っぱられる曲線を伸ばす
ctx.arc(x, y, 半径, 始め, 終わり)円の弧。角度はラジアンで、0 から Math.PI * 2 までなら円
ctx.ellipse(x, y, 横の半径, 縦の半径, 傾き, 始め, 終わり)楕円の弧。半径を横と縦で別にした arc()
ctx.roundRect(x, y, 幅, 高さ, 半径)角の丸い四角形
ctx.closePath()始めの点まで線を戻して、閉じる
ctx.fill()・ctx.stroke()パスの中を塗る・パスに沿って線を引く。ここで初めて描かれる
ctx.clip()これより後は、今のパスの内側にだけ描く

色・線・文字・影

書き方役割
ctx.fillStyle = "#e2b65e"塗る色。グラデーションも入れられる
ctx.strokeStyle・ctx.lineWidth線の色・太さ
ctx.lineCap = "round"線の端を丸くする
ctx.setLineDash([6, 4])6px 描いて 4px 空ける破線にする。[] で実線に戻す
ctx.createRadialGradient(x1, y1, r1, x2, y2, r2)内側の円から外側の円へ色が変わるグラデーション
ctx.createLinearGradient(x1, y1, x2, y2)直線に沿って色が変わるグラデーション
gradient.addColorStop(0, "…")グラデーションの位置(0〜1)に色を置く
ctx.font = "bold 24px sans-serif"文字の太さ・大きさ・書体。書体は省けない
ctx.textAlign = "center"・ctx.textBaseline = "middle"fillText() に渡した位置を、文字の中央にする
ctx.fillText("…", x, y)文字を描く
ctx.measureText("…").width今の font で描いたときの文字の幅
ctx.globalAlpha = 0.6これから描くものの不透明度(0〜1)。1 で不透明
ctx.shadowColor・ctx.shadowBlur・ctx.shadowOffsetY影の色・ぼかし・下へのずれ。shadowColor = "transparent" で影を消す

設定は、変えるまで残り、その後に描くすべてのものに効きます。

座標を動かす

書き方役割
ctx.translate(x, y)原点を (x, y) へ移す
ctx.rotate(角度)原点を中心に、座標を回す(ラジアン。時計回り)
ctx.scale(横, 縦)座標を拡大・縮小する。線の太さも変わる
ctx.save()・ctx.restore()座標と設定を覚える・覚えた状態に戻す。必ず対で書く
Math.PI180 度。度からは 度 * Math.PI / 180
Math.cos(角度) * r・Math.sin(角度) * r原点から、その角度の向きに r 進んだ点の x・y

画像

書き方役割
const img = new Image();ページに置かない画像を作る。load を待ってから描く
ctx.drawImage(img, x, y)そのままの大きさで描く
ctx.drawImage(img, x, y, 幅, 高さ)幅と高さに合わせて、伸び縮みさせて描く
ctx.drawImage(img, sx, sy, sw, sh, x, y, 幅, 高さ)画像の一部を切り出して描く
ctx.getImageData(0, 0, canvas.width, canvas.height)点の色を、まとめて取り出す
ctx.putImageData(data, 0, 0)取り出した点の色を、書き戻す
canvas.toBlob((blob) => { … })描いた絵を、PNG の画像のデータにする

決まった書き方

JS
// 消して、描いて、次の回を予約する
function frame(now) {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  // now(ページを開いてからのミリ秒)から、位置や大きさを求めて描く
  requestAnimationFrame(frame);
}
requestAnimationFrame(frame);

// 押した場所を、Canvas の座標に直す
canvas.addEventListener("pointerdown", (event) => {
  const rect = canvas.getBoundingClientRect();
  const x = (event.clientX - rect.left) * (canvas.width / rect.width);
  const y = (event.clientY - rect.top) * (canvas.height / rect.height);
});

// 高精細な画面でぼやけないようにする。座標は SIZE × SIZE のまま書ける
const ratio = window.devicePixelRatio || 1;
canvas.width = SIZE * ratio;
canvas.height = SIZE * ratio;
ctx.scale(ratio, ratio);

05

Git とターミナル

公開編で使う Git のコマンドと、ローカルサーバーの起動です。ターミナルで、作業フォルダに移ってから実行します。

コマンド役割
cd ~/Documents/my-site作業フォルダに移る(場所は自分のものに置き換える)
git init今のフォルダを、Git のリポジトリにする
git status変えたファイルと、記録の準備の様子を見る
git add ファイル名次の記録に入れるファイルを選ぶ
git commit -m "メッセージ"選んだ変更を記録する
git diff記録していない変更を見る。-w で字下げの違いを除く
git log --oneline記録の一覧を、一行ずつ見る
git restore ファイル名記録していない変更を捨てる
git restore --staged ファイル名git add を取り消す
git revert 番号記録した変更を打ち消す、新しい記録を作る
git switch -c 名前ブランチを作って移る
git switch mainブランチを移る
git branchブランチの一覧。* が今いるブランチ
git merge 名前指定したブランチの変更を、今のブランチに取り込む
git branch -d 名前取り込んだブランチを消す
git remote add origin URLGitHub のリポジトリとつなぐ
git push -u origin main初めて GitHub に送る。次からは git push
ruby -run -e httpd . -p 8000今のフォルダを配信するローカルサーバーを起動する。Control + C で止める

06

キーボードの操作

エディタとブラウザで、よく使うキーの操作です。Mac と Windows のキーを並べました。Linux は、Windows と同じです。

キー(Mac)Windows動作
Command + SCtrl + S保存する
Command + RCtrl + R再読み込みする
Shift + Command + RShift + Ctrl + R古いデータを使わずに再読み込みする
Command + Option + ICtrl + Shift + I開発者ツールを開く
Command + Option + MCtrl + Shift + Mレスポンシブデザインモードに切り替える(Firefox)
Command + Z / Shift + Command + ZCtrl + Z / Ctrl + Shift + Z元に戻す / やり直す
Command + FCtrl + F開いているファイルやページの中を探す
Command + /Ctrl + /選んだ行をコメントにする(エディタ)
Command + PCtrl + Pファイルの名前で探して開く(Zed)
Tab / Shift + Tab同じ次の部品 / 前の部品を選ぶ(ブラウザ)
Esc同じダイアログやパネルを閉じる