【ITニュース解説】Untitled
2025年10月03日に「Dev.to」が公開したITニュース「Untitled」について初心者にもわかりやすく解説しています。
ITニュース概要
開発者が、自身が作成したWebコンテンツ「Pen」を公開し、その内容の閲覧を促している。
ITニュース解説
ウェブページ上で図形や画像を描画する仕組みは、システムエンジニアがユーザーインターフェースやデータ可視化のアプリケーションを構築する上で非常に重要な基礎技術の一つである。今回取り上げるニュース記事の解説は、ウェブページに円を描くというシンプルな例を通じて、この基本的な描画技術、特にHTMLのcanvas要素とJavaScriptを使った2D描画の仕組みを理解する手助けとなる。
まず、ウェブページに図形を描画するために使われるのがHTMLのcanvas要素だ。このcanvas要素は、その名の通り「キャンバス」、つまり絵を描くための白い画用紙のような役割を果たす。しかし、HTMLでcanvasタグを記述するだけでは、何も表示されない。それは、まだ画用紙があるだけで、絵を描くための筆や絵の具がない状態と同じである。
canvas要素は、id属性で識別名を与え、width属性とheight属性で幅と高さを指定できる。例えば、<canvas id="myCanvas" width="400" height="400"></canvas>と記述すれば、幅400ピクセル、高さ400ピクセルの描画領域がウェブページ上に確保される。この領域に実際に絵を描くには、JavaScriptのコードが必要になる。
JavaScriptからcanvas要素にアクセスするには、まずdocument.getElementById()というメソッドを使って、指定したidを持つHTML要素を取得する。取得したcanvas要素は、描画のための特別な機能を持っている。その機能の一つがgetContext('2d')メソッドである。このメソッドを呼び出すことで、2Dグラフィックスを描画するための「描画コンテキスト」と呼ばれるオブジェクトを取得できる。この描画コンテキストが、まさに絵を描くための筆や絵の具、描画方法を指示する道具一式だと思ってよい。通常、このオブジェクトはctx(contextの略)のような変数名で扱われることが多い。
描画コンテキストを取得したら、いよいよ図形を描く具体的な指示を出す。円を描く場合、まずctx.beginPath()を呼び出す。これは「これから新しい図形の描画を始めるよ」という合図のようなものだ。この命令によって、以前の描画パス(図形の経路)から独立して、新しい図形を定義できる状態になる。
次に、ctx.arc()メソッドを使って円の具体的な形状を定義する。このメソッドは、いくつかの引数を必要とする。
最初の二つの引数(x, y)は、円の中心点の座標を指定する。canvasの座標系では、左上隅が(0, 0)となり、X座標は右に進むほど大きくなり、Y座標は下に進むほど大きくなる。したがって、ctx.arc(100, 75, ...)であれば、左から100ピクセル、上から75ピクセルの位置が円の中心点になる。
三つ目の引数radiusは、円の半径をピクセル単位で指定する。ctx.arc(..., 50, ...)であれば、半径50ピクセルの円になる。
続く二つの引数startAngleとendAngleは、円を描き始める角度と描き終える角度をラジアン単位で指定する。ラジアンは、通常の度数とは異なる角度の単位で、Math.PI(約3.14159)が半周(180度)、2 * Math.PIが一周(360度)に相当する。ctx.arc(..., 0, 2 * Math.PI)と指定することで、0ラジアン(3時の方向)から始まり、一周する完全な円が定義される。
ctx.arc()で円の形状が定義されただけでは、まだ画面には何も表示されない。これは、鉛筆で下書きをしただけの状態と同じだ。実際に線を描いたり、色を塗ったりするには、別のメソッドを呼び出す必要がある。
記事のコードを見ると、ここで一度ctx.stroke()が呼び出されている。ctx.stroke()は、現在定義されているパス(ここでは円の輪郭)を、現在の描画コンテキストに設定されている線の色(strokeStyle)と線の太さ(lineWidth)で描画する命令である。この時点では、特にstrokeStyleやlineWidthを設定していなければ、デフォルトの黒い細い線で円の輪郭が描かれる。
次に、円の内部を塗りつぶす処理が続く。ctx.fillStyle = "#FF0000"という行では、塗りつぶしの色を赤色(ウェブカラーコードの#FF0000)に設定している。そしてctx.fill()を呼び出すと、定義されている円の内部が、先ほど設定した赤色で塗りつぶされる。
さらに、線のスタイルを変更して、もう一度輪郭を描く処理が行われている。ctx.lineWidth = 5は、線の太さを5ピクセルに設定する命令だ。ctx.strokeStyle = "#0000FF"は、線の色を青色(#0000FF)に設定する。そして、再度ctx.stroke()を呼び出すと、今度は青くて太い線で円の輪郭が、すでに描画された赤い円の上に重ねて描かれることになる。
このように、beginPath()で新しいパスを開始し、arc()などのメソッドで形状を定義し、strokeStyleやfillStyle、lineWidthでスタイルを設定し、最後にstroke()やfill()で実際の描画を実行するというのが、canvas要素を使った2D描画の基本的な流れである。一つのパスに対して、スタイリングを変更しながら複数のstroke()やfill()を適用することも可能だ。
このcanvasとJavaScriptを使った描画技術は、単に円を描くだけにとどまらない。ウェブ上でグラフを表示したり、インタラクティブなゲームを作成したり、複雑なデータビジュアライゼーションを実現したりと、さまざまな表現豊かなユーザーインターフェースを構築するための基盤となる。システムエンジニアにとって、ユーザー体験を向上させるための重要なスキルの一つであり、これを理解することは、より高度なウェブアプリケーション開発への第一歩となるだろう。