【完全版】Webデザイナーのためのマトリクスコード講座|Canvas×JavaScriptで作るデジタル演出ガイド

8 min 69 views
matrixcode

映画『マトリックス』を象徴する“緑の雨(デジタルレイン)”。
Webデザイナーやフロントエンド学習者なら、一度は「自分のサイトでも流してみたい!」と思ったことがあるのではないでしょうか。

本記事では、以下のコードを題材に、Canvas × JavaScriptでつくる「マトリクス風デジタルレイン演出」の仕組みを、初学者でも理解できるように丁寧に解説します。

まずはデモとコード(HTML / CSS / JS)

<HTML>

<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Matrix Code</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js" defer></script>
  </head>
  <body>
  <canvas id="matrix"></canvas>
  </body>
</html>

<CSS>

body {
  margin: 0;
  background: black;
  overflow: hidden;
}
#matrix {
  display: block;
}

<JS>

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

canvas.height = window.innerHeight;
canvas.width = window.innerWidth;

// 使用する文字(matrixの文字を変えると流れる文字が変わるよ)
const letters = "matrix".split("");

const fontSize = 16;
const columns = canvas.width / fontSize;

// 各列のy座標を管理
const drops = Array(Math.floor(columns)).fill(1);

function draw() {
  // 半透明の黒で前の描画を上書き → 残像表現
  ctx.fillStyle = "rgba(0, 0, 0, 0.05)";
  ctx.fillRect(0, 0, canvas.width, canvas.height);

  // 緑色で文字を描画
  ctx.fillStyle = "#0F0";
  ctx.font = fontSize + "px monospace";

  drops.forEach((y, x) => {
    const text = letters[Math.floor(Math.random() * letters.length)];
    ctx.fillText(text, x * fontSize, y * fontSize);

    // 画面下まで到達したらランダムにリセット
    if (y * fontSize > canvas.height && Math.random() > 0.975) {
      drops[x] = 0;
    }
    drops[x]++;
  });
}

setInterval(draw, 50);

1. マトリクスコードってなに?|映画表現 → Web演出へ

“マトリクスコード(デジタルレイン)”は、映画が元祖の象徴的な演出で、

✔ 緑色の文字が下に流れる
✔ 文字がぼやけて残像が出る
✔ 無数のデータが降り注ぐような雰囲気

これらが組み合わさることで、「サイバー感」を強烈に演出できます。

Webサイトでも、この演出を取り入れることで、

  • テック企業のヒーローヘッダー
  • ポートフォリオの背景装飾
  • LPのセクション分岐
  • イベント・カンファレンスのサイト演出

など、印象的なビジュアルを作れます。

2. 今回のマトリクスコードの仕組みをざっくり理解しよう

今回のコードは Canvas APIJavaScript を使っています。

仕組みをざっくり言うと…

  1. canvasタグを全面に広げる
  2. 縦の“列”を計算する
  3. 各列ごとに文字の落下位置(y座標)を管理する
  4. ひたすら緑の文字を描画して前の文字を薄く上書きする
  5. 一番下まで来たらランダムなタイミングでリセット

という構造になっています。

つまり、
「文字を描く → ぼかして残像にする → 落下を繰り返す」
というループ処理がずっと行われているのです。

3. HTMLの役割|Canvasを置くだけの超シンプル構造

HTMLは最小構成になっています。

<canvas id="matrix"></canvas>

この1行がすべての舞台です。
Canvasは“絵を描くためのキャンバス”で、JavaScriptで好きなように描画できます。

ポイントはここ

  • <script> に defer がついているため、HTMLの読み込み後にJSが実行される
  • CSSもJavaScriptも分離されていて管理しやすい構造
  • SEO的にも問題なし(canvasは背景演出のため、コンテンツには影響しない)

Web制作のベストプラクティスに沿った構成といえます。

4. CSSの役割|「全画面 × 黒背景 × 表示崩れなし」

body {
  margin: 0;
  background: black;
  overflow: hidden;
}
#matrix {
  display: block;
}

ここで重要なのは overflow: hidden

これにより、
「Canvas外に描かれた文字がはみ出さない」
という演出上の問題を解消しています。

また margin: 0 により余白が消え、画面全体が完全な黒で統一されます。
映画の雰囲気をそのまま再現する土台になっています。

5. JavaScriptの中身をわかりやすく解説

初心者が「難しそう…」と感じやすい部分ですが、順に見ていくと理解できます。

 ① canvasの準備

const canvas = document.getElementById("matrix");
const ctx = canvas.getContext("2d");
canvas.height = window.innerHeight;
canvas.width = window.innerWidth;

ここは Canvasを全画面サイズにし、描画準備をする部分

  • getContext(“2d”) → 2D描画ツールを使う
  • ブラウザの幅・高さに合わせる

 ② 使う文字を設定

const letters = "matrix".split("");

ここを「ABC」や「カタカナ」に変えると、流れる文字が全部変わります。
自由に世界観を変えられるポイントです。

 ③ 列(columns)の計算と初期位置の設定

const fontSize = 16;
const columns = canvas.width / fontSize;
const drops = Array(Math.floor(columns)).fill(1);
  • columns は「何列の文字を流すか」
  • drops は各列ごとの“縦位置(y座標)”

これにより、
「画面いっぱいに文字が落ちる」
状態が自然と作られます。

 ④ draw() で残像+落下処理をループ

一番重要な部分。

残像表現

ctx.fillStyle = "rgba(0, 0, 0, 0.05)";
ctx.fillRect(0, 0, canvas.width, canvas.height);

黒をうす〜く塗り重ねることで、前の文字が少しだけ残ります。
これが“マトリックスのエフェクト”そのものです。

文字を描く

ctx.fillStyle = "#0F0";
ctx.font = fontSize + "px monospace";

緑色の等幅フォントを設定し、

ctx.fillText(text, x * fontSize, y * fontSize);

で描画します。

下まで来たらランダムリセット

if (y * fontSize > canvas.height && Math.random() > 0.975) {
  drops[x] = 0;
}

完全ランダムではなく、

  • 画面外に落ちたタイミング
  • ランダムで約 2.5% くらいの確率

という制御が行われています。

そのおかげで、自然な滝のような崩れ方が再現できています。

 ⑤ setInterval で50msごとに描画し続ける

setInterval(draw, 50);

「setInterval(draw, 50);」は、
「draw という関数を 50ミリ秒(=0.05秒)ごとに繰り返し実行し続ける」
という意味です。

✔ わかりやすく噛み砕くと

  • setInterval() … 一定の間隔で処理をくり返すためのタイマー機能
  • draw … 実行したい関数名
  • 50 … 間隔(ミリ秒)。50ms=0.05秒

つまり、

1秒間に約20回(1000 ÷ 50)draw関数が呼ばれ続ける

という動きになります。

これにより “1秒に20回” ほどループしてアニメーションが作られます。

【注釈】Canvas アニメーションはできれば requestAnimationFrame() を使おう

マトリクスコードのような簡単なアニメーションなら setInterval() でも動きます。
ただし、本格的な Canvas 描画やゲーム処理では requestAnimationFrame()(以下 rAF) を使った方が確実に安定します。

その理由を簡単にまとめます。

✔ なぜ setInterval() は不向きなのか?

setInterval は「◯ミリ秒ごとに実行してね」と命令するだけです。

しかし…

  • PC が重い
  • ブラウザの処理が詰まる
  • タブが非アクティブになる

こんな状況では 実行タイミングがズレる(遅延する) ことがあります。

アニメーションはフレームごとに描画するため、
このズレが カクつき の原因になります。

✔ requestAnimationFrame() が最適な理由

rAF は ブラウザが「ちょうど今描画できるよ!」という瞬間に処理を呼び出す 仕組み。

そのため、

  • ズレない
  • カクつきにくい
  • 画面のリフレッシュレートと同期する
  • 自動で負荷を調整する
  • バッテリー消費も抑えられる

といったメリットがあります。

Canvas で動くものを描くなら、setInterval より requestAnimationFrame の方が“なめらか&正確”です。

じゃあ何でsetIntervalを使ったの?って話になると思うのですが、記事を書きながら思い出したから( *´艸`)です。

残念系なんですよ、私は。

方法特徴
setInterval時間通りに動かないことがある。
処理が重いとズレやすい。
requestAnimationFrameブラウザの描画タイミングに合わせて動くので安定・滑らか
created by Rinker
¥5,060 (2025/11/19 04:32:33時点 楽天市場調べ-詳細)

6. マトリクスコードはどこに使える?|Webデザイナー視点の活用例

デザインと技術の両方を扱う人にとって、この演出は武器になります。

✔ ヒーローヘッダーの背景に

黒背景 × 緑のコードは圧倒的インパクト。

✔ ポートフォリオサイトのセクション演出に

「Skill」「Works」「About」などの区切りに使うと世界観が統一される。

✔ LPの“テック感”演出に

AI・Web制作・セキュリティ・プログラミング講座系と相性抜群。

✔ 404ページの背景にも

遊び心+世界観構築に最適。

7. パフォーマンス面の注意点

CanvasアニメーションはCPU/GPUを使います。

  • 表示時間が長いヒーローエリア
  • モバイルの低スペック端末
  • Safariや古いAndroidブラウザ

ここは若干の発熱やフレーム落ちを起こしがち。

✔ 可能なら「背景動画」と同じ扱いにする

  • prefers-reduced-motion でアニメ無効化
  • 背景としての優先度は低くする
  • 手前にSEO用のテキストコンテンツをしっかり配置する

 背景設定の仕方

① 上に載せるコンテンツ用の HTML を追加

今の

<canvas id="matrix"></canvas>

すぐ下 に、コンテンツを追加します(例なので中身は自由でOK)。

<!-- ★追加:マトリクスの上に載せるコンテンツ -->
<div class="content">
  <h1>Matrix Code</h1>
  <p>ここに見出しやボタンなどを載せる</p>
</div>

② Canvas を「全画面背景」にする CSS を追加

既存の body { … } や #matrix { … } はそのままでOKです。
その 下に追記 してください。

/* ★追加:ページ全体を背景動画レイアウトにする */
html,
body {
  height: 100%;
}

/* 背景として canvas を固定する */
#matrix {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;   /* 画面いっぱい */
  height: 100vh;
  z-index: -1;    /* コンテンツより奥に */
}

/* 上に載せるコンテンツ用 */
.content {
  position: relative;
  z-index: 1;     /* canvas より手前 */
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
  color: #fff;
}

③ Canvas を画面サイズに合わせる JS

JS の
const canvas = document.getElementById("matrix");

の下に、これだけ追加しておくと安心です。

// ★追加:画面サイズに合わせてキャンバスをリサイズ
function resizeCanvas() {
  canvas.width  = window.innerWidth;
  canvas.height = window.innerHeight;
}
window.addEventListener("resize", resizeCanvas);
resizeCanvas();

これで、

  • #matrix が 全画面で常に後ろで動き続ける背景
  • .content が その上に載るコンテンツ

という「背景動画っぽいマトリクス背景」が実現できます。

8. カスタムするときのチェックリスト

✔ 文字を変えたい → letters を変更

const letters = "AIWEB2025".split("");

✔ 色を変えたい → fillStyle

ctx.fillStyle = "#0FF"; // 青系のデジタルに

✔ 速度を変えたい → setInterval

50 → 30 にすると高速化

✔ 行間を変えたい → fontSize

数字を大きくすると文字サイズUP

まとめ|マトリクスコードは学習にも作品にも最高の題材

Canvas × JavaScriptでつくるマトリクスコードは、初心者でも挑戦できるうえに、

  • プログラミングの基礎(変数、配列、loop)が学べる
  • Canvasの扱いの感覚もつかめる
  • デザイン演出として強烈に映える
  • コードが短いわりに“完成度が高い”

というメリットがあります。


Webデザイン学習系の練習としても非常に相性が良い内容です。

関連記事