Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Flores amarillas

2025年09月18日に「Dev.to」が公開したITニュース「Flores amarillas」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

開発者が「Flores amarillas(黄色い花)」というWeb上のコードデモを公開した。自身で作成したプログラムを、他の開発者にも見てもらいたいとしている。

出典: Flores amarillas | Dev.to公開日:

ITニュース解説

このニュース記事が紹介しているのは、「Flores amarillas」というタイトルのウェブデモだ。これはCodePenというウェブサイトで公開されており、HTML、CSS、JavaScriptというウェブ開発の基本技術を組み合わせて作られた視覚的な作品を指す。具体的には、画面の底から黄色いバラの画像が次々と舞い上がり、上に向かってゆっくりと消えていくという、まるで花が咲き乱れるようなアニメーションが表現されている。システムエンジニアを目指す初心者にとって、このようなデモはウェブアプリケーションの基本的な仕組みと、ユーザーインターフェース(UI)を動的に、かつ魅力的に作り出すための技術要素を学ぶ上で非常に優れた教材となる。

まず、CodePenについて説明しよう。これは、ウェブ開発で必須となるHTML、CSS、JavaScriptのコードをオンライン上で記述し、その結果をリアルタイムでブラウザ上で確認できる開発環境だ。自分のPCに開発環境を構築することなく、すぐにコードを書いて試すことができるため、プログラミング学習の初期段階では特におすすめのツールと言える。今回のデモも、このCodePen上で各コードがどのように連携して動作しているかを見ることができる。

次に、この「Flores amarillas」デモがどのように構成されているかを見ていこう。ウェブページは基本的にHTMLで構造を定義し、CSSで見た目を装飾し、JavaScriptで動きや対話性を加えるという三層構造で成り立っている。このデモも例外ではない。

HTMLは、ウェブページの骨組みを作るマークアップ言語だ。このデモでは、ほとんどのHTMLは非常にシンプルに保たれている。具体的には、花が舞い上がる領域を示すための<div class="roses"></div>という要素が一つだけ定義されている。これは、ウェブページ全体の中で花を配置するコンテナのような役割を果たす。この骨組みに対して、実際に画面に表示される個々の「花」の要素は、JavaScriptというプログラミング言語によって後から動的に追加されている点が特徴的だ。HTML自体には一つ一つの花の要素は書かれておらず、プログラムが実行されるたびに生成され、ウェブページに追加されていくのだ。

次に、CSS(カスケーディングスタイルシート)の役割だ。CSSはHTMLで定義された要素に対して、色、サイズ、配置、そしてアニメーションといった見た目のスタイルを適用する。このデモでは、まず背景色を真っ黒に設定し、花が映えるようにしている。そして、最も重要なのが、一つ一つの花(div要素)にバラの画像を適用し、そのアニメーションを定義している部分だ。 具体的な花のCSSスタイルは以下のようになっている。まず、花は絶対位置指定(position: absolute;)がされており、親要素である.rosesコンテナ内のどこにでも自由に配置できる。初期位置は画面の下端、つまり画面外のbottom: -180px;に設定されている。これにより、花が画面の下から現れるような視覚効果を作り出している。花の画像自体は、background: url(...)プロパティで外部の画像ファイルを読み込み、background-size: cover;で要素の大きさに合わせて適切に表示されるように調整されている。 そして、このデモの核となる「アニメーション」は、CSSの@keyframesルールを使って定義されている。@keyframes animateという名前で定義されたこのアニメーションは、0%(アニメーション開始時)から100%(アニメーション終了時)までの間に、要素がどのように変化するかを詳細に指定する。具体的には、

  • transform: translateY(0)からtransform: translateY(-1000px)へ変化することで、花が垂直方向(Y軸)に1000ピクセル上へ移動する。translateYは要素の位置を移動させるためのプロパティだ。
  • scale(1)からscale(0)へ変化することで、花が徐々に小さくなり、最終的には見えなくなる。scaleは要素の大きさを変更するプロパティだ。
  • opacity: 1からopacity: 0へ変化することで、花が徐々に透明になり、最終的に完全に消える。opacityは要素の不透明度を調整するプロパティだ。 これらの変化が同時に起こることで、花が下から舞い上がりながら、だんだん小さく、薄れていくという幻想的な動きが表現されている。このアニメーションはanimation: animate 15s linear infinite;というプロパティで、animateという名前のアニメーションを15秒かけて実行し、linear(一定の速度で)、infinite(無限に繰り返す)と指定されている。ただし、無限に繰り返すのはあくまでアニメーションの定義であり、個々の花はJavaScriptによって生成・削除されるため、無限に同じ花が繰り返されるわけではない。

最後に、JavaScriptの役割について見ていこう。JavaScriptはウェブページに動きやインタラクティブな要素を加えるプログラミング言語だ。このデモでは、JavaScriptが花の生成、配置、そして削除といった動的な振る舞いをすべて制御している。 まず、createRose()という関数が定義されている。この関数が呼び出されるたびに、新しい花の要素(div)が作成される。

  • document.createElement('div'): 新しいdiv要素をメモリ上に作成する。
  • rose.style.left = Math.random() * 100 + 'vw': 生成された花が画面上のどこから現れるかを決める。Math.random()は0から1までのランダムな数値を生成する関数で、これを利用して花の水平方向の位置(leftプロパティ)を画面の左端から右端までランダムに決定している。vwはビューポート(表示領域)の幅を基準とした単位だ。これにより、花が毎回異なる場所から現れるように見える。
  • rose.style.animationDuration = Math.random() * 5 + 10 + 's': 各花のアニメーションが完了するまでの時間(速度)をランダムに設定する。10秒から15秒の間でばらつきを持たせることで、全ての花が同じ速度で動くのではなく、自然な「舞い上がり方」を演出している。
  • rose.style.animationDelay = Math.random() * 5 + 's': 各花のアニメーションが開始するまでの遅延時間もランダムに設定する。これにより、花が一斉に現れるのではなく、時間差で次々と舞い上がるように見える。
  • rose.style.width = Math.random() * 50 + 50 + 'px'rose.style.height = Math.random() * 50 + 50 + 'px': 花の大きさもランダムに設定している。50ピクセルから100ピクセルの間で大きさが変わることで、画面に表示される花に多様性が生まれ、より自然な印象を与える。
  • document.querySelector('.roses').appendChild(rose): これまで設定したスタイルを持つ新しい花の要素を、HTMLで定義した.rosesというコンテナ要素の中に追加する。これにより、花が実際に画面に表示されるようになる。

さらに、JavaScriptは花の「ライフサイクル」も管理している。

  • setInterval(createRose, 300): このコードは、createRose()関数を300ミリ秒(0.3秒)ごとに繰り返し実行する。つまり、0.3秒に一度、新しい花が生成されて画面に現れるということだ。これにより、花が途切れることなく次々と舞い上がる連続的なアニメーションが実現されている。
  • setTimeout(() => { rose.remove(); }, 15000): 各花が画面から消え去るタイミングで、その花の要素をウェブページから削除する。CSSアニメーションで定義された15秒というアニメーション期間に合わせて、15秒後にはその花要素が完全にDOM(Document Object Model、ウェブページの構造を表すもの)から削除されるようになっている。これにより、画面に不要な要素が残り続け、メモリを消費し続けるのを防ぎ、ウェブページのパフォーマンスを維持する上で重要な役割を果たしている。

このように、「Flores amarillas」デモは、HTMLで骨組みを作り、CSSで見た目とアニメーションを定義し、JavaScriptで動的な要素の生成・配置・削除を制御するという、ウェブ開発の基本的ながらも強力な連携を簡潔に示している。システムエンジニアを目指す上では、このようなフロントエンド技術の基礎を理解することが非常に重要だ。ユーザーが直接触れるインターフェースをどのように設計し、実装するかは、どのようなシステムを構築する上でも不可欠な知識となる。このデモを通して、単なる静的な情報表示にとどまらない、動的で魅力的なウェブ体験をどのように作り出すかという視点を得ることができるだろう。特に、プログラムによって要素を生成・操作するDOM操作や、CSSアニメーションを制御する技術は、ウェブアプリケーション開発におけるユーザーインターフェースの実装において頻繁に利用される基本的なスキルだ。今回のデモは、それらの要素を楽しく視覚的に理解できる良い例と言える。

関連コンテンツ