JavaScriptのcanvas入門|図形や描画の基本をやさしく解説!

JavaScript基礎

<canvas>(キャンバス)は、JavaScriptを使って自由に絵や図形を描けるHTMLのタグです。
「キャンバス」という名前のとおり、お絵描きやアニメーションができる画面のようなものと思ってください。

何ができるの?

canvasを使うと、たとえばこんなことができます:

  • 四角や円などの図形を描く
  • 線やグラフを描画する
  • ゲームの画面を作る(キャラの移動、当たり判定など)
  • アニメーションやインタラクティブな演出を加える

HTMLだけじゃできないことができる!

通常のHTMLやCSSでは、「ここに丸い絵を描きたい」といったことはできません。
ですが、canvasなら次のようなコードで円や四角形をJavaScriptで描けるようになります。

// 円を描くサンプル
ctx.beginPath();
ctx.arc(100, 75, 50, 0, Math.PI * 2);
ctx.fill();

ctx は描画用の「コンテキスト」と呼ばれるものです(次のセクションで説明します)

canvasの特徴まとめ

特徴内容
描画スタイルJavaScriptで直接描画(HTMLタグやCSSとは別物)
描画できるもの図形、線、テキスト、画像、アニメーションなど
応用の可能性ゲーム開発・ビジュアライザー・お絵かきツールなどに最適
注意点DOM操作は不可・描画内容は更新しないと消えない

canvasは一見むずかしそうですが、基本をおさえればとても楽しく奥が深い世界です。

canvasを使うには、HTMLにcanvasタグを追加し、JavaScriptで描画処理を書くのが基本です。

ステップ①:HTMLにcanvasタグを追加

まずはHTMLでキャンバスの「土台」を作ります。

<canvas id="myCanvas" width="300" height="150" style="border:1px solid #ccc;"></canvas>

id="myCanvas":JavaScriptからこのcanvasを指定するための名前

widthheight:キャンバスのサイズ(ピクセル)

styleで枠線を付けて見やすくしています

ステップ②:JavaScriptで図形を描く

次にJavaScriptで、このキャンバスに四角形を描いてみましょう。

<script>
  // canvas要素を取得
  const canvas = document.getElementById("myCanvas");

  // 描画用の「2Dコンテキスト」を取得
  const ctx = canvas.getContext("2d");

  // 四角形を描く
  ctx.fillStyle = "skyblue";      // 塗りつぶしの色を指定
  ctx.fillRect(50, 30, 200, 100); // (x, y, 横幅, 高さ)
</script>

「空色(skyblue)」の四角形がキャンバス上に描かれます。

getContext("2d")ってなに?

canvasでは描画用の「道具箱」を使う必要があります。それがこの getContext("2d") です。

const ctx = canvas.getContext("2d");

このコードで 「2D描画モード」を使う準備ができ、ctx を通して図形や線を描けるようになります。

よくある注意点

  • canvasのサイズは HTMLタグの属性(width/height)で指定するのが基本。CSSだけでサイズ変更すると描画が崩れます。
  • JavaScriptのコードは、**canvasよりも後に読み込まれる位置(bodyの下など)**に書くか、DOMContentLoadedで待ってから実行しましょう。

canvasでは、JavaScriptを使ってさまざまな図形を描くことができます。
ここではよく使われる「四角形・線・円」の描き方を紹介します。

四角形を描く(fillRect)

ctx.fillStyle = "tomato";       // 塗りつぶしの色
ctx.fillRect(20, 20, 100, 60);  // (x, y, 幅, 高さ)

fillStyle で色を設定してから fillRect() で塗りつぶした四角形を描きます。

線を描く(moveTo + lineTo)

ctx.beginPath();             // 新しいパス(線)を開始
ctx.moveTo(50, 50);          // 始点
ctx.lineTo(200, 100);        // 終点
ctx.strokeStyle = "black";   // 線の色
ctx.lineWidth = 2;           // 線の太さ
ctx.stroke();                // 線を描画

beginPath() は線を描き始める合図です。moveToで始点を、lineToで終点を指定します。

円を描く(arc)

ctx.beginPath();                 // パス開始
ctx.arc(150, 75, 50, 0, Math.PI * 2); // (x, y, 半径, 開始角度, 終了角度)
ctx.fillStyle = "gold";         // 塗りつぶし色
ctx.fill();                     // 塗りつぶし円を描く

arc() は「円弧」を描くメソッドですが、Math.PI * 2 にすれば「円」になります。

サンプルHTMLにまとめるとこうなる

<canvas id="myCanvas" width="300" height="200" style="border:1px solid #ccc;"></canvas>

<script>
  const canvas = document.getElementById("myCanvas");
  const ctx = canvas.getContext("2d");

  // 四角形
  ctx.fillStyle = "tomato";
  ctx.fillRect(20, 20, 100, 60);

  // 線
  ctx.beginPath();
  ctx.moveTo(50, 50);
  ctx.lineTo(200, 100);
  ctx.strokeStyle = "black";
  ctx.lineWidth = 2;
  ctx.stroke();

  // 円
  ctx.beginPath();
  ctx.arc(150, 75, 40, 0, Math.PI * 2);
  ctx.fillStyle = "gold";
  ctx.fill();
</script>

canvasでは、描く図形の色・枠線・太さなどを細かく指定することができます。
ちょっとした工夫で、見た目がぐっと変わるのでぜひ覚えておきましょう!

fillStyle:塗りつぶしの色を指定する

ctx.fillStyle = "lightgreen";
ctx.fillRect(20, 20, 100, 60);
  • fillStyle に色名や16進数カラーコード(例:#ff9900)を指定できます。
  • fillStyle次に描く塗りつぶしに反映されます。

strokeStyle:線(枠線)の色を指定する

ctx.strokeStyle = "#3333ff";
ctx.strokeRect(150, 20, 100, 60);
  • strokeRect()枠線だけ描く四角形です。
  • strokeStyle で線の色を指定します。

lineWidth:線の太さを変える

ctx.beginPath();                // 新しい線(パス)を描き始める
ctx.moveTo(30, 120);            // 線の始点を指定
ctx.lineTo(250, 120);           // 線の終点を指定
ctx.strokeStyle = "red";        // 線の色
ctx.lineWidth = 5;              // 線の太さ(ピクセル単位)
ctx.stroke();                   // 実際に線を描く
補足:beginPath() とは?

beginPath() は、新しい線や図形の“始まり”を宣言する命令です。
複数の図形や線を描くとき、前の線とつながらないようにリセットする役割を持っています。

もし beginPath() を使わずに lineTo() だけで続けて描くと、前の図形と勝手につながってしまうことがあるので注意しましょう。

globalAlpha:透明度を変える(応用)

ctx.globalAlpha = 0.5; // 50%の透明度
ctx.fillStyle = "orange";
ctx.fillRect(60, 140, 100, 60);
  • globalAlpha を使うと、描画全体の透明度を変えることもできます。
  • 0(完全に透明)~ 1(完全に不透明)の範囲で指定。

カラフルなキャンバスの例

<canvas id="styleCanvas" width="300" height="220" style="border:1px solid #ccc;"></canvas>

<script>
  const canvas = document.getElementById("styleCanvas");
  const ctx = canvas.getContext("2d");

  // 塗りつぶし
  ctx.fillStyle = "lightgreen";
  ctx.fillRect(20, 20, 100, 60);

  // 枠線だけ
  ctx.strokeStyle = "#3333ff";
  ctx.strokeRect(150, 20, 100, 60);

  // 太い赤い線
  ctx.beginPath();
  ctx.moveTo(30, 120);
  ctx.lineTo(250, 120);
  ctx.strokeStyle = "red";
  ctx.lineWidth = 5;
  ctx.stroke();

  // 半透明のオレンジ四角
  ctx.globalAlpha = 0.5;
  ctx.fillStyle = "orange";
  ctx.fillRect(60, 140, 100, 60);
</script>

canvasは、addEventListener() を使ってユーザーの操作(クリック・マウス移動など)に反応させることができます。
これによって、「ただの絵」から「動く・変化する絵」へと進化します!

クリックで色を変える

まずは、ボタンをクリックするとキャンバスの色が変わる例です。

<canvas id="clickCanvas" width="300" height="150" style="border:1px solid #ccc;"></canvas>
<button id="colorBtn">色を変える</button>

<script>
  const canvas = document.getElementById("clickCanvas");
  const ctx = canvas.getContext("2d");
  const btn = document.getElementById("colorBtn");

  btn.addEventListener("click", () => {
    ctx.fillStyle = "skyblue";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  });
</script>

このコードでは、ボタンをクリックした瞬間に fillRect() でキャンバス全体を塗りつぶしています。

マウスの動きに合わせて円を描く

マウスが動いた位置に円を描く例です。イベントタイプは "mousemove" を使います。

<canvas id="drawCanvas" width="300" height="200" style="border:1px solid #ccc;"></canvas>

<script>
  const canvas = document.getElementById("drawCanvas");
  const ctx = canvas.getContext("2d");

  canvas.addEventListener("mousemove", (event) => {
    const x = event.offsetX;
    const y = event.offsetY;

    ctx.beginPath();
    ctx.arc(x, y, 5, 0, Math.PI * 2);
    ctx.fillStyle = "orange";
    ctx.fill();
  });
</script>

event.offsetX / offsetY は、canvas内のマウス座標を取得します。

補足:イベントで使える代表的な種類

イベント名内容
click要素がクリックされたとき
mousemoveマウスが動いたとき
mousedownマウスのボタンが押されたとき
mouseupマウスのボタンが離されたとき
keydownキーが押されたとき

今回は、JavaScriptの canvas を使って、図形の描画やイベントとの連携など、基本的な使い方を一通り紹介しました。

おさらいポイント

  • <canvas> はHTML上に絵や図形を描ける特別なタグ
  • JavaScriptで getContext("2d") を使って描画処理を行う
  • fillRectarc などを使って、四角形・線・円を描画できる
  • fillStylestrokeStyle色やスタイルも自由に変えられる
  • イベント(clickmousemove)と組み合わせると動きのある表現が可能に!

canvasは、“描いて遊んで学べる”とても楽しい機能です。
HTMLやCSSだけではできなかった「動く表現」や「ユーザーと反応する画面」を、JavaScriptで作っていきましょう!

コメント

タイトルとURLをコピーしました