配列の基本

第5回 アルゴリズム概論

2026.05.07

まずはセットアップ

今日の土台を整えます

準備

今日の準備でやること

  1. デスクトップの algorithm2026/ フォルダを開く
  2. このページをクリックして開き、関連資料の箇所から 05_20260507_data.zip をダウンロード
  3. ダウンロードしたフォルダを algorithm2026/ に移動し、展開・解凍して配置 → 05_20260507_data フォルダが作成される
  4. VSCode で 05_20260507_data フォルダを開く
  5. lesson/index.html を 右クリック→Live Server で表示
  6. 普段使っている AIツールをブラウザで開いておく

はじめに

共通テーマ

物事や現象を、細かい工程に分けて考える

この講義で練習しているのは、 目の前で起きていることを観察し、 順番のある工程 として整理することです。

起きていることを見る → 工程に分ける → コンピューターに伝わる形にする

今はその練習題材として、 Webアプリを作っています。

今のフェーズ

完成アプリの使い方を噛み砕いて言語化の練習

画面で何が起きているかを言葉にしてもらいながら、言語化の練習をしています。そのために必要な道具(コンピューターへの指示の仕方)を少しずつ学んでいただいています。

1. 触る

完成版で遊ぶ

2. 書く

操作と変化を工程にする

3. 翻訳する

JavaScript に置き換える

振り返り

前回まで学んだ道具事例

データを書き換える(innerHTML)

document.querySelector('.result').innerHTML = "書き換えたい文字";

データを記憶する(変数)

let temperature = document.querySelector('.input').value;

状況によってやりたいことを変える(if文)

if (temperature >= 30) {
  // 暑いときの処理
}
振り返り

前回まで学んだ道具事例

命令したい場所を指定する(document.querySelector('目印の名前'))

document.querySelector('.btn')

ランダムな数字を作ってもらう

Math.ceil(Math.random() * 100) // 1~100のどれかが生成

指示のタイミングを人間の操作に合わせる(click)

document.querySelector('.btn').addEventListener('click', function(){
    // ボタンが押されたときの処理
});
今日の軸

今日は「まとめて記憶する」がテーマ

今日のお題

記憶力ゲーム

6個のお題を覚えて、 どれだけお題を記憶できるかで遊ぶゲーム

ブレインストーミング

遊んで、 ふだんの言葉で書き出して、
コンピューターに伝わる言葉に書き換える

ワークの全体像

3ステップで進めます

1
遊ぶ

実際のアプリを
体験する

→
2
STEP 1

ふだんの言葉で
遊び方を書き出す

→
3
STEP 2

コンピューターに
伝わる言葉に
書き換える

どちらの STEP も lesson/brainstorm.md に書いていきます。

ワーク

完成版で遊んでみる

完成形のアプリを グループで一度遊んでみましょう。

遊びながら観察してほしいこと

  • 画面を開いた瞬間、何が見えているか
  • 「回答タイム」 を押すと、 何が起きるか
  • カードをクリックすると、 何が変わるか
  • 「もう一度」 を押すと、 何が起きるか
ワーク

STEP 1 — 記憶力ゲームの遊び方を、 ふだんの言葉で書き出す

lesson/brainstorm.md の STEP 1 に、 友達に 「これ、 こうやって遊ぶんだよ」 と説明するつもりで、 順番に書きましょう。

書き方の例(ITO ゲームだったら)

  1. ゲーム画面を表示する
  2. スタートボタンを押したら、
  3. 数字が表示されるエリアに、 1〜100のうちのランダムな数字が1つ表示される

この粒度感で、 記憶力ゲームの遊び方を自分たちの言葉で書こう。

STEP 1 のヒント

料理レシピのように、 細かく分ける

観察したことを、 レシピのような番号付きの手順 として書き下します。

カレーのレシピなら

  1. 玉ねぎ・人参・じゃがいもを切る
  2. 鍋に油を引いて、肉と一緒に炒める
  3. 水を入れて、煮込む
  4. 火を止めて、ルーを溶かす
  5. もう一度ひと煮立ちさせる

大事なのは、 順番 と 1工程の細かさ。 後から読んでも同じ手順を再現できる粒度に。

ワーク

STEP 2 — コンピューターに伝わる言葉に書き換える

STEP 1 で書いた工程を、 これまで習った語彙で言い換えます。

  • Where — 「ボタン」 → 「class="" がついた HTML タグ」
  • When — 人間がどこに対してどんな操作をしたら画面が変わるのか、 操作の名前で書き出す
進め方

グループや周りの人とチェックしあう・可能であればチューターさんチェック

チェックしあって、中身をブラッシュアップしていきましょう!
  • 確認 — 担当チューターに見せて、 抜けがないか確認してもらいましょう
  • 確認後 — 現地スタッフに声をかけて、 次のグループに順番を回します

困ったら、 現地メンバーにお声がけくださいね。

休憩

遊び方の工程を翻訳

1工程ずつ、 コンピューターがわかるように(JavaScript)置き換える

翻訳

記憶力ゲームで起きる場面を整理する

みなさんが書いた工程は、 大きく分けると4つの場面になります。 これを前回までの道具で書こうとするとどうなるかを、 順に見ていきます。

場面A
画面を開くと
お題が6個並ぶ
→
場面B
「回答タイム」 ボタンを押すとモーダルが消える
→
場面C
番号が書かれたカードを押すと
答えが出る
→
場面D
「もう一度」ボタンを押すと最初に戻る

場面B・D は前回までの道具で素直に書けます。 ここからは、 ちょっと癖がある 場面C に注目します。

翻訳

場面C — 前回までの道具で書いてみると

「カードがクリックされたら、 そのカードに答えを出す」 を、 前回までの道具で1枚ずつ書くとこうなります。

// もし1番のカードが押されたら、 1番のお題を表示
document.querySelector('.card-1').addEventListener('click', function () {
  document.querySelector('.card-1').innerHTML = "平等院鳳凰堂";
});

// もし2番のカードが押されたら、 2番のお題を表示
document.querySelector('.card-2').addEventListener('click', function () {
  document.querySelector('.card-2').innerHTML = "沖縄ちゅら海水族館";
});

// ↑ 同じ形を、 3番〜6番まで別のお題で書く(合計 6回)
翻訳

場面A — モーダルにお題を並べるのも、 同じ調子で書ける

「画面を開くと、 モーダルの6つの場所にお題が並ぶ」 も、 前回までの道具で1か所ずつ書くとこうなります。

document.querySelector('.modal-topic-1').innerHTML = "平等院鳳凰堂";
document.querySelector('.modal-topic-2').innerHTML = "沖縄ちゅら海水族館";
document.querySelector('.modal-topic-3').innerHTML = "広島平和記念公園";
// ↑ 4番〜6番も別のお題で書く(合計 6回)

ここで 「平等院鳳凰堂」 、 場面C でも書きましたよね。

気付き

同じことを何度も書く...?

場面A(モーダル表示) と 場面C(カードの答え) の 両方 に「平等院鳳凰堂」 と書きました。 つまり 1つのお題につき2か所、 同じ文字列を打ち込んでいます。 お題6個分だと、 合計 12回 の書き込みになります。

もし「平等院鳳凰堂」 を別のお題に変えたいときは、 2か所をぴったり同じに直す 必要がある。 1文字ズレてもバグの原因に。

お題のデータを 1か所にまとめて 持って、 場面A・C から 番号で取り出せれば、 一気にスッキリ。
それが今日学ぶ 配列。

新しい道具 — 配列

一覧のデータを、 まとめて記憶しておいてもらう

新しい道具

配列 — 複数のデータをまとめておく仕組み

6個のお題を 1つのリスト としてまとめて持つ仕組みが 配列。

const topics = [
  '平等院鳳凰堂',
  '沖縄ちゅら海水族館',
  '広島平和記念公園',
  '太宰府天満宮',
  '近江町市場',
  '鶴岡八幡宮',
];
  • const — let の仲間。 後から書き換えない時に使う
  • topics — リストにつける名前
  • [ ... ] — 中身を カンマ区切り で並べる

変数 = 「1つを覚える」
配列 = 「並んだデータをまとめて覚える」

新しい道具

リストから1つだけ取り出す — 番号で特定する

場面C の「1番のカードが押されたら、 1番のお題を表示」 のように、 リストから 1つだけ 取り出したい時は、 番号 で指定します。 学生1人を 学籍番号 で区別するのと同じ感覚。

const topics = ['平等院鳳凰堂', '沖縄ちゅら海水族館', '広島平和記念公園'];

topics[0]  // → '平等院鳳凰堂'
topics[1]  // → '沖縄ちゅら海水族館'
topics[2]  // → '広島平和記念公園'

[ ] の中に 番号 を入れて、 リストから1つを取り出します。

注意ポイント

番号は0から数える

配列の番号は 0始まり です。 慣れるまで少し戸惑うところです。

番号012345
中身平等院鳳凰堂沖縄ちゅら海水族館広島平和記念公園太宰府天満宮近江町市場鶴岡八幡宮

1番目が topics[0]、 2番目が topics[1]、 6番目が topics[5]。
人が普段数えるより 1つズレている と覚えておきましょう。

翻訳

配列で書き換えると、 場面A・C はこうなる

場面A・C はどちらも、 表示したいデータを 毎回直接書く("平等院鳳凰堂" と打ち込む) 代わりに 「配列でまとめたデータのうちのこれ」 という言い方でまとめられます。

// お題を1か所にまとめる
const topics = ['平等院鳳凰堂', '沖縄ちゅら海水族館', '広島平和記念公園',
                '太宰府天満宮', '近江町市場', '鶴岡八幡宮'];

// 場面A — モーダルにお題を並べる
document.querySelector('.modal-topic-1').innerHTML = topics[0];
document.querySelector('.modal-topic-2').innerHTML = topics[1];
// ↑ 3〜6番も同じ形

// 場面C — カードを押すと答えが出る
document.querySelector('.card-1').addEventListener('click', function () {
  document.querySelector('.card-1').innerHTML = topics[0];
});
document.querySelector('.card-2').addEventListener('click', function () {
  document.querySelector('.card-2').innerHTML = topics[1];
});
// ↑ 3〜6番も同じ形

ほら、 もう 同じ文字列を場面A・C の両方に書く必要がない。 お題は配列の中に 1か所書くだけで済む。

代表的な場面を JavaScript に翻訳する

新しい道具を使って、 書き方の例を確認する

翻訳

場面A — モーダルの6つの場所に番号つきでお題を並べる

配列の中身を、 番号で1つずつ取り出して、 人間が見る番号と一緒に6つの場所へ書き入れます。

document.querySelector('.modal-topic-1').innerHTML = '1. ' + topics[0];
document.querySelector('.modal-topic-2').innerHTML = '2. ' + topics[1];
document.querySelector('.modal-topic-3').innerHTML = '3. ' + topics[2];
document.querySelector('.modal-topic-4').innerHTML = '4. ' + topics[3];
document.querySelector('.modal-topic-5').innerHTML = '5. ' + topics[4];
document.querySelector('.modal-topic-6').innerHTML = '6. ' + topics[5];

前回までの innerHTML に、 配列の topics[番号] を組み合わせるだけ。

翻訳

場面B — 「回答タイム」 でモーダルを消す

document.querySelector('.answer-time-button').addEventListener('click', function () {
  document.querySelector('.modal').style.display = 'none';
});

.style.display = 'none' — 「画面に表示しない」 状態にするときの書き方。 これでモーダルを消しています。

翻訳

場面C — カードをクリックしたら答えに書き換える

押されたカードの中身を、 配列の対応する番号で書き換えます。

document.querySelector('.card-1').addEventListener('click', function () {
  document.querySelector('.card-1').innerHTML = topics[0];
});
document.querySelector('.card-2').addEventListener('click', function () {
  document.querySelector('.card-2').innerHTML = topics[1];
});
// ... 6番まで同じ形で続く

カードの番号 と 配列の番号 が、 1ズレで対応している(カード1 → topics[0])。

翻訳

場面D — 「もう一度」 でページを最初に戻す

document.querySelector('.reset-button').addEventListener('click', function () {
  location.reload();
});

location.reload() — 「ページを再読み込みする」 お願い。 これだけで、 モーダルもカードも全部最初の状態に戻ります。

AIの助けを借りる場合

実装

AIの助けを借りる場合

実はブレインストーミングで書いた文章がしっかりとしていると、AIへの指示もしやすくなります

AIに沿える指示としてあるといいもの

  • 学習者の前提(属性、今回でいえばどこで何を学んでるのか)
  • 依頼したいこと
  • ブレインストーミングで作った工程
  • ファイルの構造

lesson/prompt.md にテンプレートを置いてあります。

試してみる

少しいじって挙動を確かめる

  • お題リストの中身を、 自分の好きな言葉に置き換えてみる
  • カードの順番を変えるとどうなる?(配列の中身を入れ替えてみる)
  • カードの数字を、 押す前から答えにしてしまうとどうなる?
  • カードや背景の色を style.css でいじってみる

少しいじって、 何が変わるかを見るのが 一番の練習。

課題

課題

第4回ITOカードに、 お題リストを足す

課題完成形のキャプチャ

第4回で作った ITOカード(数字とメッセージ)に、 今日学んだ 配列 を使って お題のランダム表示機能 を追加します。

  • ページを開くと — お題リストから1つランダムに選ばれて表示される(リロードで変わる)
  • ボタンを押すと — 数字(1〜100)+ ヒントメッセージ が更新される(お題は固定)

assignment/ にファイル一式あり。 まずは 課題完成形 で動きを確認。

課題

ITOゲームの構造を思い出す

  • お題 — 「自分にとって大切なものは?」 のような、 答えるテーマ
  • 数字(1〜100)— そのお題にどれくらい当てはまるかの目安
  • プレイヤー — 数字に合う具体例を考えて答える(80ならかなり当てはまるもの、 20ならあまり当てはまらないもの)

ITOではお題は 1ラウンド固定。 数字を引くたびに同じお題で具体例を答えていくゲームなので、 お題はページを開いたときに1つだけ決まる形にします。

課題

今回使うお題

  • 自分にとって大切なものは?
  • 推しのタレント・芸能人・有名人
  • よく買うもの
  • 行きたい場所
  • プレゼントでもらったら嬉しいもの

今日の課題では、 お題を自分で増やすよりも、 配列からランダムに1つ取り出して表示する流れ を作ることを優先します。

課題

やること

  1. 課題完成形 で遊んで、 動きを確認する
  2. assignment/memo.md の STEP 1 で、 遊び方を「ふだんの言葉」 で言語化する
  3. STEP 2 で、 「コンピューターに伝わる言葉」 に書き換える
  4. STEP 2 で書いたメモを、 assignment/script.js に /* */ で貼り付ける
  5. 5つのお題を topics 配列にして、 ランダムに1つ表示する処理を書く
  6. ボタンを押したら、 数字とヒントメッセージが更新される処理を書く
  7. できたところまでで、 工夫したこと(AIを活用したならどう活用したか)を memo.md に書く

お題は memo.md に5つ用意されています — 自分で考える必要はありません。

課題

提出物

以下の一式が含まれていることを確認し、 05_20260507_data フォルダごと提出してください。

一式の中身

  • lesson/brainstorm.md — 完成版を観察して書き出した工程
  • lesson/prompt.md — AIに渡した指示書
  • assignment/index.html — ITOカードのHTML(基本そのまま)
  • assignment/style.css — ITOカードのCSS(自分なりに触ってOK)
  • assignment/script.js — 翻訳して書いた JavaScript(できたところまで)
  • assignment/memo.md — STEP 1 / STEP 2 + 工夫した点

提出場所 — https://lecture-cms.tatsuyakosuge.com/submit

最後

自由時間

時間の使い方

  • 動いている人 — assignment/memo.md の STEP 1(ふだんの言葉)から
  • 詰まっている人 — 担当チューターが個別にサポートします
  • 早く終わったら — 見た目を整えたり、 メッセージの文章を調整したりしてみましょう

この時間で 課題が形になるところまで 進められたら理想です。