未ログイン状態で閲覧中
  • 投稿日:2026/02/21
【プログラミング入門 第8回】おみくじのロジックを組もう-JavaScriptでおみくじを引ける!!

【プログラミング入門 第8回】おみくじのロジックを組もう-JavaScriptでおみくじを引ける!!

  • -
  • -
ふく太郎@プログラマ

ふく太郎@プログラマ

この記事は約30分で読めます
要約
前回作ったおみくじの画面にJavaScriptを組み込み、実際に動くアプリにしました。配列・ランダム・関数・if文など第2部で学んだ知識を総動員し、ボタンを押すとランダムに結果が表示され、結果に応じて色やメッセージが変わる仕組みを、ステップバイステップで完成させました。

今回のゴール

第7回で作ったおみくじの画面に、JavaScriptで「おみくじを引く動き」を組み込んで、実際に動くアプリにします。

前回まではきれいな見た目を作りましたが、ボタンを押しても何も起きない状態でしたよね。今回はここに JavaScript を書き加えて、ボタンを押すとランダムに結果が出る――あの「おみくじ」の体験を実現します。

第2部(第3回〜第6回)で学んだ配列・ランダム・関数・if文のすべてが登場するので、知識の総まとめにもなります。「あ、これ前にやったやつだ!」という瞬間をぜひ楽しんでください。

まずは前回までのおさらい

手を動かす前に、今回のカギになる知識をさっと復習しておきましょう。

配列(第6回で学びましたね)

const fruits = ["りんご", "バナナ", "みかん"];

複数のデータをひとまとめにして入れておける箱のようなものでした。

ランダムな数を作る(第6回で学びました)

const index = Math.floor(Math.random() * 配列の長さ);

Math.random() で 0〜1 未満の小数を作り、Math.floor() で小数点以下を切り捨てて整数にする。これで「配列の中からランダムに1つ選ぶ」番号が手に入ります。

関数(第4回で学びました)

function sayHello() { console.log("こんにちは!"); }

「やりたい処理をひとまとめにして、好きなタイミングで呼び出せる仕組み」でしたね。

if文(第5回で学びました)

if (条件) { // 条件に合うときの処理 } else { // 合わないときの処理 }

条件によって処理を分岐させるための構文です。

これらを全部組み合わせると、おみくじアプリのロジックが完成します。ここまで学んできた内容だけで作れるというのが、今回のポイントです。

第7回で作ったファイルを確認しよう

まずは前回作ったファイルを開いてください。フォルダの中に index.htmlstyle.css の2つがあるはずです。

index.html の中身はこのようになっていますね。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>おみくじアプリ</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1 class="title">おみくじ</h1> <div class="result-area"> <p class="result-text">ここに結果が出ます</p> </div> <button class="draw-button">おみくじを引く</button> </div> </body> </html>

style.css は前回作ったものがそのまま残っているはずです。今回はCSSファイルには基本的に触れず、JavaScriptのファイルを新しく作ることに集中します。

HTMLファイル、CSSファイル、そして今回作るJavaScriptファイル。この3つがそれぞれの役割を持って連携する――これがWeb開発の基本的な形です。

ステップ1:JavaScriptファイルを作ってHTMLに読み込む

まずは、JavaScriptを書くためのファイルを新しく作りましょう。

index.htmlstyle.css が入っているのと同じフォルダに、script.js という名前の新しいファイルを作成してください。中身はまだ空っぽで大丈夫です。
スクリーンショット 2026-02-21 104330.png次に、index.html を開いて、この script.js を読み込む記述を追加します。</body> タグの直前に、以下の1行を追加してください。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>おみくじアプリ</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1 class="title">おみくじ</h1> <div class="result-area"> <p class="result-text">ここに結果が出ます</p> </div> <button class="draw-button">おみくじを引く</button> </div> <script src="script.js"></script> </body> </html>

追加したのは <script src="script.js"></script> の1行です。

第7回で <link rel="stylesheet" href="style.css"> と書いてCSSファイルを読み込んだのと同じ考え方ですね。今度は <script> タグで、JavaScriptファイルを読み込んでいます。

CSSは <head> の中に書きましたが、JavaScriptは </body> の直前に書くのが基本です。これは、HTMLの要素がすべて読み込まれたあとにJavaScriptを実行するためです。順番が逆だと、まだ画面にない要素を操作しようとしてエラーになることがあります。

この時点ではまだ画面に変化はありません。でも大丈夫、一歩ずつ進めていきましょう。

ステップ2:おみくじの結果を配列で用意する

それでは script.js を開いて、JavaScriptを書いていきましょう。まずは、おみくじの結果一覧を配列で定義します。

// おみくじの結果リスト const results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"];

第6回で学んだ配列ですね。おみくじで出る結果を、文字列の配列としてまとめて入れています。ここに入っている6つの中から、毎回ランダムに1つが選ばれる仕組みを作っていきます。

ステップ3:ボタンを押したら結果を表示する関数を作る

次に、「おみくじを引く」ボタンが押されたときに実行される関数を作ります。

script.js に以下のコードを追加してください(さっき書いた配列の下に続けます)。

// おみくじの結果リスト const results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"]; // おみくじを引く関数 function drawOmikuji() { // ランダムに1つ選ぶ const index = Math.floor(Math.random() * results.length); const myResult = results[index]; // 画面に結果を表示する document.querySelector(".result-text").textContent = myResult; }

ここで何をしているか、順番に見ていきましょう。

Math.floor(Math.random() * results.length) は、第6回で練習した「配列からランダムに1つ選ぶ」パターンそのものです。results.length は配列の要素数(今回は6)なので、0〜5のどれかの数字がランダムに生成されます。

results[index] で、その番号に対応する結果("大吉" や "凶" など)を取り出しています。

document.querySelector(".result-text") は、HTMLの中から class="result-text" がついた要素を探してくる命令です。そこに .textContent = myResult とすることで、表示されているテキストを書き換えています。

💡 document.querySelector() について
これは「HTMLの中から、指定したセレクタに合う最初の要素を見つけてくる」ための命令です。第7回のCSSで .result-text { ... } のように書いたのを覚えていますか? あのCSSセレクタと同じ書き方で、JavaScriptからも要素を探せるのです。クラス名で探すときは .クラス名、タグ名で探すときはそのまま タグ名 と書きます。

ステップ4:ボタンと関数をつなげる

関数は作りましたが、まだボタンと結びついていません。ボタンが押されたときに drawOmikuji() が実行されるように、イベントリスナー(「○○が起きたら△△を実行してね」という設定)を追加しましょう。

// おみくじの結果リスト const results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"]; // おみくじを引く関数 function drawOmikuji() { // ランダムに1つ選ぶ const index = Math.floor(Math.random() * results.length); const myResult = results[index]; // 画面に結果を表示する document.querySelector(".result-text").textContent = myResult; } // ボタンがクリックされたら drawOmikuji を実行する document.querySelector(".draw-button").addEventListener("click", drawOmikuji);

最後の1行が新しい部分です。

document.querySelector(".draw-button") で、HTMLの中にある「おみくじを引く」ボタンを探しています。そこに .addEventListener("click", drawOmikuji) をつけることで、「クリックされたら drawOmikuji 関数を実行してね」という設定をしています。

ひとつ注意点があります。drawOmikuji() と丸カッコ付きではなく、drawOmikujiカッコなしで書いているところです。カッコを付けると「今すぐ実行」になってしまい、クリックを待たずに動いてしまいます。ここでは「この関数を、あとでクリックされたときに呼んでね」と登録しているだけなので、カッコは付けません。

動かしてみよう!

ファイルを保存して、ブラウザで index.html を開いてみてください(すでに開いている場合はページをリロードします)。

「おみくじを引く」ボタンを押してみてください。

「ここに結果が出ます」だった部分が「大吉」や「凶」などに変わりましたか? 何度か押すと、ランダムに違う結果が出るはずです。

スクリーンショット 2026-02-21 104549.png

おめでとうございます! おみくじが動きました!

まだ見た目はシンプルですが、「ボタンを押す → ランダムに結果が選ばれる → 画面に表示される」という、アプリとしての核になる部分がもう完成しています。ここまでできたのは大きな一歩です。

💡 Tips
今やったように「まず最小限の機能だけ作って、動くことを確認する」というのは、実際の開発現場でも鉄則です。プロの現場では「スモールステップで作って、こまめに動作確認」が基本中の基本。一気に全部作ってから一気にテストすると、うまく動かなかったときにどこが原因なのか分からなくなります。「少し書く → 動かす → 少し書く → 動かす」のリズムを、ぜひこの先も大事にしてください。

ステップ5:メッセージ表示用の要素をHTMLに追加する

おみくじが動くようになったので、ここからは体験をもっとリッチにしていきましょう。結果に合わせて、ひとことメッセージを表示する機能を追加します。

ただ、今のHTMLにはメッセージを表示する場所がありません。まずは index.html に要素を1つ追加しましょう。

index.htmlresult-area の中に、メッセージ用の <p> タグを追加します。

<div class="result-area"> <p class="result-text">ここに結果が出ます</p> <p class="message-text"></p> </div>

class="message-text" という空の <p> タグを追加しました。最初は何も表示されませんが、JavaScriptからここにメッセージを書き込みます。

index.html の全体は以下のようになります。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>おみくじアプリ</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1 class="title">おみくじ</h1> <div class="result-area"> <p class="result-text">ここに結果が出ます</p> <p class="message-text"></p> </div> <button class="draw-button">おみくじを引く</button> </div> <script src="script.js"></script> </body> </html>

CSSも少し調整しよう

ここで1つ、CSSの調整が必要です。前回作った .result-area には display: flex という設定が入っていたのを覚えていますか? この設定のままだと、中の要素が横並びになってしまいます。結果テキストとメッセージを縦に並べたいので、並ぶ方向を変える指定を追加しましょう。

style.css.result-area のブロックを、以下のように書き換えてください。

/* ===== 結果表示エリア ===== */ .result-area { background-color: #fff8f0; border: 1px solid #e0d5c1; border-radius: 8px; padding: 30px 20px; margin-bottom: 30px; min-height: 120px; display: flex; flex-direction: column; justify-content: center; align-items: center; }

変更したのは2か所です。

flex-direction: column を追加しました。display: flex は第7回で「中の要素を整列させる」ために使いましたが、初期状態では横並びです。flex-direction: column を加えると、縦方向に並ぶようになります。これで結果テキストとメッセージが上下に配置されます。

min-height60px から 120px に変更しました。結果とメッセージの2行が入るので、少し高さに余裕を持たせています。

あわせて、おみくじの結果が大きく目立つように .result-text のスタイルも調整しましょう。

.result-text { font-size: 48px; color: #5a4a3a; margin: 0; }

font-size20px から 48px に変更しました。おみくじの結果は画面の主役なので、大きく表示するとグッとアプリらしくなります。

最後に、メッセージ用のスタイルを style.css の末尾に追加してください。

/* ===== メッセージ ===== */ .message-text { font-size: 17px; color: #8b7e6a; margin: 12px 0 0; }

メッセージは結果の補足なので、控えめなサイズと落ち着いた色にしています。

ステップ6:結果に応じてメッセージを変える

HTMLの準備ができたので、JavaScriptに戻りましょう。ここで使うのが、第4回で学んだ if文 です。

script.jsdrawOmikuji 関数を、以下のように書き換えてください。

// おみくじの結果リスト const results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"]; // おみくじを引く関数 function drawOmikuji() { // ランダムに1つ選ぶ const index = Math.floor(Math.random() * results.length); const myResult = results[index]; // 画面に結果を表示する document.querySelector(".result-text").textContent = myResult; // 結果に応じてメッセージを変える let messageText = ""; if (myResult === "大吉") { messageText = "最高の運勢です!何をやってもうまくいく日!"; } else if (myResult === "中吉") { messageText = "なかなかいい感じ!積極的にいきましょう!"; } else if (myResult === "小吉") { messageText = "小さな幸せが見つかる日です。"; } else if (myResult === "吉") { messageText = "穏やかな良い一日になりそうです。"; } else if (myResult === "末吉") { messageText = "じわじわと運気が上がっていきますよ。"; } else if (myResult === "凶") { messageText = "今日はのんびり過ごすのが吉かも。"; } document.querySelector(".message-text").textContent = messageText; } // ボタンがクリックされたら drawOmikuji を実行する document.querySelector(".draw-button").addEventListener("click", drawOmikuji);

if ... else if ... else if ... で、結果ごとに表示するメッセージを分岐させています。第4回では「点数が80点以上なら〜」という例で練習しましたが、今度は「文字列が一致するかどうか」で分岐しているのがポイントです。やっていることの構造は同じですね。

let messageText = ""let は、あとから値を書き換えるための変数宣言です。const は一度決めたら変えられませんが、let は上書きできます。if文の中で値を代入し直すので、ここでは let を使っています。

保存してブラウザをリロードし、何度かボタンを押してみてください。結果に応じて下のメッセージも変わるようになったはずです。

ステップ7:結果に応じて色を変える

最後の仕上げです。大吉なら金色、凶なら青色…というふうに、結果に応じてテキストの色も変えてみましょう。if文の中に、色を変えるコードを追加します。

// おみくじの結果リスト const results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"]; // おみくじを引く関数 function drawOmikuji() { // ランダムに1つ選ぶ const index = Math.floor(Math.random() * results.length); const myResult = results[index]; // 画面に結果を表示する const resultElement = document.querySelector(".result-text"); resultElement.textContent = myResult; // 結果に応じてメッセージと色を変える let messageText = ""; let resultColor = ""; if (myResult === "大吉") { messageText = "最高の運勢です!何をやってもうまくいく日!"; resultColor = "#DAA520"; } else if (myResult === "中吉") { messageText = "なかなかいい感じ!積極的にいきましょう!"; resultColor = "#FF8C00"; } else if (myResult === "小吉") { messageText = "小さな幸せが見つかる日です。"; resultColor = "#F4A460"; } else if (myResult === "吉") { messageText = "穏やかな良い一日になりそうです。"; resultColor = "#66BB6A"; } else if (myResult === "末吉") { messageText = "じわじわと運気が上がっていきますよ。"; resultColor = "#78909C"; } else if (myResult === "凶") { messageText = "今日はのんびり過ごすのが吉かも。"; resultColor = "#5C6BC0"; } document.querySelector(".message-text").textContent = messageText; resultElement.style.color = resultColor; } // ボタンがクリックされたら drawOmikuji を実行する document.querySelector(".draw-button").addEventListener("click", drawOmikuji);


スクリーンショット 2026-02-21 154827.png追加・変更したポイントを見ていきましょう。

const resultElement = document.querySelector(".result-text") で、結果表示の要素を変数に入れています。同じ要素に対して「テキストを変える」「色を変える」と複数回操作するので、変数にまとめておくとスッキリ書けます。

resultElement.style.color = resultColor で、テキストの色をJavaScriptから変更しています。CSSで color: red; と書くのと同じことを、JavaScriptで動的にやっているわけです。

色のコードについて#DAA520 のような値はカラーコードと呼ばれるもので、色を16進数で表現しています。今回使っている色の対応は以下のとおりです。

結果 色のイメージ カラーコード
大吉 金色(ゴールド)#DAA520
中吉 濃いオレンジ #FF8C00
小吉 やわらかいオレンジ #F4A460
吉 緑 #66BB6A
末吉 グレー#78909C
凶 青紫 #5C6BC0

動かしてみよう!

保存してブラウザをリロードし、何度もボタンを押してみてください。結果ごとに文字の色が変わるようになったはずです。大吉の金色が出ると、ちょっとうれしくなりませんか?

完成コード全体

ここまでのコードをすべてまとめたものを掲載します。もし途中で迷ったら、これを丸ごとコピーして使ってください。

index.html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>おみくじアプリ</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1 class="title">おみくじ</h1> <div class="result-area"> <p class="result-text">ここに結果が出ます</p> <p class="message-text"></p> </div> <button class="draw-button">おみくじを引く</button> </div> <script src="script.js"></script> </body> </html>

style.css

/* ===== 全体の設定 ===== */ body { margin: 0; padding: 0; min-height: 100vh; display: flex; justify-content: center; align-items: center; background-color: #fdf5e6; font-family: "Hiragino Mincho ProN", "Yu Mincho", serif; } /* ===== カード全体 ===== */ .container { text-align: center; background-color: #fffef9; padding: 40px 50px; border-radius: 12px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); border: 2px solid #c1272d; max-width: 360px; width: 90%; } /* ===== タイトル ===== */ .title { color: #c1272d; font-size: 32px; margin-bottom: 30px; letter-spacing: 8px; } /* ===== 結果表示エリア ===== */ .result-area { background-color: #fff8f0; border: 1px solid #e0d5c1; border-radius: 8px; padding: 30px 20px; margin-bottom: 30px; min-height: 120px; display: flex; flex-direction: column; justify-content: center; align-items: center; } .result-text { font-size: 48px; color: #5a4a3a; margin: 0; } /* ===== メッセージ ===== */ .message-text { font-size: 16px; color: #8b7e6a; margin: 12px 0 0; } /* ===== ボタン ===== */ .draw-button { background-color: #c1272d; color: #fff; border: none; padding: 14px 40px; font-size: 18px; border-radius: 8px; cursor: pointer; font-family: "Hiragino Mincho ProN", "Yu Mincho", serif; letter-spacing: 2px; transition: background-color 0.3s; } .draw-button:hover { background-color: #a01f24; }

script.js

// おみくじの結果リスト const results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"]; // おみくじを引く関数 function drawOmikuji() { // ランダムに1つ選ぶ const index = Math.floor(Math.random() * results.length); const myResult = results[index]; // 画面に結果を表示する const resultElement = document.querySelector(".result-text"); resultElement.textContent = myResult; // 結果に応じてメッセージと色を変える let messageText = ""; let resultColor = ""; if (myResult === "大吉") { messageText = "最高の運勢です!何をやってもうまくいく日!"; resultColor = "#DAA520"; } else if (myResult === "中吉") { messageText = "なかなかいい感じ!積極的にいきましょう!"; resultColor = "#FF8C00"; } else if (myResult === "小吉") { messageText = "小さな幸せが見つかる日です。"; resultColor = "#F4A460"; } else if (myResult === "吉") { messageText = "穏やかな良い一日になりそうです。"; resultColor = "#66BB6A"; } else if (myResult === "末吉") { messageText = "じわじわと運気が上がっていきますよ。"; resultColor = "#78909C"; } else if (myResult === "凶") { messageText = "今日はのんびり過ごすのが吉かも。"; resultColor = "#5C6BC0"; } document.querySelector(".message-text").textContent = messageText; resultElement.style.color = resultColor; } // ボタンがクリックされたら drawOmikuji を実行する document.querySelector(".draw-button").addEventListener("click", drawOmikuji);

ここを変えてみよう! ミニチャレンジ

動くようになったところで、少し遊んでみましょう。

チャレンジ①:おみくじの結果を増やしてみよう

配列 results に、自分のオリジナルの結果を追加してみてください。

const results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶", "超大吉", "大凶"];

結果を増やしたら、その結果に対応する else if のブロックも追加するのを忘れずに。

} else if (myResult === "超大吉") { messageText = "奇跡の運勢!宝くじを買うべきかも!?"; resultColor = "#FF1744"; } else if (myResult === "大凶") { messageText = "厄落としに甘いものでも食べましょう。"; resultColor = "#37474F"; }

配列に要素を追加するだけでランダム選択の対象が増えるのが、配列のいいところです。results.length が自動的に新しい要素数を反映してくれるので、ランダム選択のコードを変える必要がありません。

チャレンジ②:色やメッセージを自分好みに変えてみよう

カラーコードやメッセージの文面は、好きなように変更できます。「自分だけのおみくじ」にカスタマイズしてみてください。

カラーコードを探すときは、ブラウザで「カラーコード 一覧」と検索すると、色見本のサイトがたくさん見つかります。好きな色の # から始まるコードをコピーして使ってみましょう。

💡Tips
今回、結果ごとに色やメッセージを if ... else if で分岐させましたが、実務ではこのような「データと表示の対応」が増えてくると、もっとスマートな書き方をすることもあります(オブジェクトでまとめて管理するなど)。ただ、if文での分岐はあらゆるプログラミングの基本なので、まずはこの書き方をしっかり使えるようになることが大切です。リファクタリング(コードをきれいに整理すること)は、動くものを作ったあとでいくらでもできますから。

今回のまとめ

今回やったことを整理しましょう。

おみくじの結果を配列で定義した(第5回の知識)ランダムに1つ選ぶロジックを書いた(第6回の知識)ボタンクリック時に実行される関数を作った(第6回の知識)document.querySelector() でHTMLの要素を取得して、テキストや色をJavaScriptから書き換えた結果に応じて表示を変えるif文を使った(第4回の知識)HTML・CSS・JavaScriptの3つのファイルを連携させてアプリを動かした

第2部で学んできた知識がすべてつながって、1つのアプリとして動き出しました。「配列」「ランダム」「関数」「if文」――それぞれバラバラに練習していたものが、こうやって組み合わさると、ちゃんとしたアプリケーションになるんですね。

ここまで来られたこと、自信を持ってください。

次回予告

次回の第9回(最終回)では、おみくじアプリの見た目をさらに磨いて完成させます。

結果が出るときにアニメーションをつけたり、デザインを整えたりして、人に見せたくなるようなアプリに仕上げていきます。このシリーズの締めくくりとして、「自分で作った」と胸を張れる作品にしましょう。

お楽しみに!

ブックマークに追加した記事は、ブックマーク一覧ページで確認することができます。
あとから読み返したい時に便利です。

ふく太郎@プログラマ

投稿者情報

ふく太郎@プログラマ

トラ会員

この記事に、いいねを送ろう! 参考になった記事に、
気軽にいいねを送れるようになりました!
この記事のレビュー(0

まだレビューはありません