#技育祭 プログラミング入門 50 分セッション手順書

プログラミングガチ初心者に 50 分間でプログラミング教えますセッションの講師をすることになりました。

(この記事は当日みーおんさんに手順書としてお渡しする予定なので、めちゃくちゃ丁寧にスクショを貼っています)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/a497f7d8-a322-ea23-ef7f-ff1b960086ee.png)

セッション時間は 60 分、
しかし司会の方が 10 分間お時間使うそうなので、実質ペイロード 50 分間。
座学 10 分使うとして、作業に使える時間は 40 分

https://twitter.com/chomado/status/1636206869797810176



# 完成形

なにもフレームワークを使わず、素の JavaScript/ HTML/ CSS で、
シンプルな web ページを作ります。

![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d00ddfe8-d74c-1557-9e6a-4afb5b2733e7.gif)

## 追記：本番中に実際にみーおんさんが作ってくれたサイト

みーおんさんめっちゃセンスあって
結局本番の時間中に [Azure Storage](https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blob-static-website-how-to?tabs=azure-portal?WT.mc_id=dotnet-8948-machiy) へのデプロイまで完走しました！すごい！

https://storage230183.z11.web.core.windows.net/

![Animation4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/076b735d-18f4-f4d9-72bc-6a2712aee3de.gif)

本番直前、挨拶をしたときに「作る予定のサイトに画像を載せたくて、そのために一緒にお写真撮っていただくことは可能ですか？その写真を使いたいです」と頼みました。撮っていただけました。神対応ありがとうございます。
あとサイトの色が可愛い。みーおんさんが色を全て選びました。センス。良い。可愛い（語彙力）

## なぜ web ページ制作にしたか

コンテンツは私に一任されているとのことで、
まじで色々考えました。
見栄え、わかり易さ、流行、etc

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f00512d1-93f9-cbf8-11aa-c52e6d7161c4.png)

いま流行りの ChatGPT 使うとか
見栄えの良い、フレームワークガリガリ使ったやつとか。

でも、ご本人のツイートを見たら
すごく学ぶ意欲がありそうで、これは期待に応えねばと思い、
見栄えよりも「本当に教育」に振り切ったコンテンツに決めました。

↓ ご本人のツイート。尊い。

https://twitter.com/mionnn_48/status/1625736536154316801

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/81b85a04-02b7-07a0-9036-9755f5af2c94.png)


### 前提（これは私用のメモ）

* サンプルページに飾る用の写真を撮っておく
* エクスプローラーで作業ディレクトリを表示しておく
* web ブラウザでこの手順書を開いておく
* みーおんさんの手元にも一応タブレットで手順書をお渡ししておく
* バックグラウンドで走ってるアプリは可能な限り落としておく
* 通知を全ミュート
* `Fn` を押しておいて、function キーを有効にしておく。（`F5` でブラウザリフレッシュしたり `F12` で開発者ツールを開いたりするため）

## 準備（みーおんさんはここから）

がんばりましょう！

(最初にも書いたけど、この記事は当日みーおんさんに手順書としてお渡しする予定なので、めちゃくちゃ丁寧にスクショを貼っています)

### VSCode でフォルダを開く

エクスプローラーで該当のフォルダを右クリック
→ `Open with Code` (VSCode で開く)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/793e98c3-0cc7-c68e-ab3d-ca346bda061f.png)

VSCode が開きます。
現在フォルダには何も入っていないのでこの状態です。
（左側のエクスプローラーカラムには何も入っていない）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f96c9e1d-e171-6896-f6b9-9ccefdab1c52.png)

### 各ファイルを作成

現在空っぽのフォルダに、ファイルを作っていきます。

![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/25c57210-7a3b-e717-ba0a-627da7d68ef8.png)

以下の 3 つのファイルを作ってください。

* index.html
* style.css
* app.js

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/65633e6c-9e1e-c78d-2ff7-ecdca54d63ef.png)

## 1. HTML ファイルを編集

index.html ページに「html:5」と入力し、Enter キーを押します。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/c5b9e28d-14cd-4e0d-ca49-eab8ad7521c5.png)

HTML5 テンプレート コードがファイルに追加されます。

![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F24609%2Ffd8806c6-c2bb-953c-25e1-58aa986fdd86.gif?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&w=1400&fit=max&s=1c56477407d3e57c9c094bd0ff5e222d)

忘れず、保存（`ctrl` + `S`）（コントロールキーを押したまま S）をします。

### 確認してみる

エクスプローラーから index.html を開いて web ブラウザで確認してみる。
（まだ真っ白）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/97a84afd-17d1-be60-e861-d8631719d670.png)

index.html をダブルクリックすると、web ブラウザが立ち上がる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/3edf783c-31ad-e1fe-435e-539e9278c617.png)

まだ真っ白。これからこのページを更新していきます。

### コンテンツを書く

index.html の `<body>  </body>` 内に、以下をコピペ

```html:index.html
<h1>今日やることリスト</h1>
<ol>
    <li>[html] とりあえず web サイト作る（画像を入れる）</li>
    <li>[css] いい感じの見た目にする</li>
    <li>[css] ライトテーマとダークテーマを作る</li>
    <li>[JavaScript] ライトテーマとダークテーマをボタンで切り替えられるようにする</li>
    <li>( [行けたら] デバッグ用にコンソールメッセージ出力)</li>
    <li>Azure (クラウド) にデプロイして皆が見れるよう公開する</li>
</ol>

<p>
    <a href="https://www.akb48.co.jp/about/members/detail?mid=153" target="_blank">AKB48 サイトのみーおんさんのページ</a>
</p>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/4e2cfd34-95e0-354e-dde9-aa4ab29583d7.png)

`ctrl + S` で「保存」します。

先程の web ブラウザに戻り、`F5` でリフレッシュ（画面を更新）しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/507f8bef-5391-aaf6-cf9c-f760c0b406c3.png)


真っ白だったページに、リストが表示されましたね。


### 写真を表示

写真を表示してみましょう。画像を表示するのは `<img>` タグです。

```html:index.html
<img src="img.jpg" />
```

これで表示されたはずですが、大きさを調節するために幅 `width` を指定します。（本当は CSS でできるけど取り急ぎここでやってしまう）

```html:index.html
<img src="img.jpg" width="100%" alt="トップ画像" />
```

↓ （スクショ注）手持ちのいい感じの写真が無かったので、ついさっき登壇用に配られたバーチャル背景をテンポラリで代用しています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/02c23665-07bb-d649-eb1b-32946ec93583.png)

### タイトル編集

今からこのタイトル部「Document」のところを書き換えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/b02b7c19-c7b3-98cc-7421-09b0d8c928ff.png)


index.html に戻り、
7 行目の

```html:index.html
<title>Document</title>
```

のところを以下に書き換えましょう。

```html:index.html
<title>技育祭用のページ</title>
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/06e8f845-afb9-d624-6718-e61b2ba18366.png)


先程の web ブラウザに戻り、`F5` でリフレッシュ（画面を更新）しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/43bc7e84-0603-a1ef-800f-3f529511e573.png)

タイトルが更新されましたね


## 2. [css] いい感じの見た目にする

### CSS ファイルの読み込み

まずは index.html が CSS を読み込めるようにしましょう。
<head> 内で読み込みます。

「link:css」と入力してから、Enter キーを押しますと、以下のコードが自動的に入ります。


```html:index.html
<link rel="stylesheet" href="style.css">
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/dbdab402-cb50-fcf0-25a6-ca897886a11f.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/ee1cda30-f497-57dc-c295-44d1c84cabea.png)

忘れず保存します。

### CSS ファイルの編集

style.css を編集していきましょう。
VSCode でタブを切り替えます。（今まで index.html を開いていたので、style.css に切り替えます。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/bbb87191-bca1-e6a0-72c8-f3ae9a6fb6f6.png)

### フォントを変えてみる

```css:style.css
body {
    font-family: Yu Gothic;
}
```

↑ を style.css 内に書いて、保存します。
web ブラウザに戻り、動作を確認しましょう。

Before:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/794bdeed-22e1-dfcf-4e1c-bd6ec8468913.png)

↓ After:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/312f89a6-3986-c3ff-7bec-c70f9a11cdcb.png)

フォントが変わりましたね！
外にも色々試してみてください

```
Meiryo UI
Yu Gothic
Yu Gothic UI
Hiragino Sans
(UI フォントはフォント幅が狭い)
```
Hiragino Sans
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/56f084d4-9386-3dd9-a35a-ed4556f9f51d.png)
Meiryo UI
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/acd7e880-fae8-d8d0-8029-c003c91d0c89.png)

### 用語説明

ちなみに、CSS のフォーマットの話。こんな名前がついています

```css
セレクタ {
  プロパティ : 値
}
```

### 色を変えてみる

```css:style.css
body {
    font-family: Yu Gothic;
    color: darkblue; /* 文字色 */
    background-color: pink; /* 背景色 */
}
```

保存して更新してみましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/2b5c0d61-9440-98e6-10ea-eef060f09391.png)

とりあえず白と黒にしておきます

```css:style.css
body {
    font-family: Yu Gothic;
    color: black; /* 文字色 */
    background-color: white; /* 背景色 */
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/ba032c20-022b-1c38-8ac9-c1cccb3dc829.png)

## 3. [css] ライトテーマとダークテーマを作る

### まずライトテーマを定義

CSS でライトテーマ（light-theme）クラスを定義していきます。

`index.html` の `<body>` 部分を以下に書き換えます。（class 属性を付与した）

```html:index.html
<body class="light-theme">
``` 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f3f7e02d-bbe4-cabb-0968-0263bba8295b.png)

次に、`style.css` に戻り、`light-theme` クラスを定義していきます。
とりあえず文字色と背景色を指定しましょう。

```css:style.css
/* ライトテーマ */
.light-theme {
    color: darkblue; /* 文字色 */
    background-color: pink; /* 背景色 */
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/69c9017c-ce76-5431-be2c-79913a579e7e.png)


`ctrl` + `スペース` で色の候補を出すことができます。自由に選びましょう。（保存を忘れずに）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/16225e86-2f78-5013-af53-1f4ab64bb740.png)

### `F12` で開発者ツール

`F12` で開発者ツールを開きましょう。
ここではいろんなものが見えますが、とりあえず今日は「ちゃんと light-theme が適用されているな」ということを確認できたらそれでいいです。

![aaaaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/1c9a80af-663c-c96e-635d-32e0fa0b2ecf.png)

この background-color プロパティのチェックボックスを on/off 切り替えたりして動作を見ましょう。

### CSS - ダークテーマを追加

次はダークテーマ (dark-theme) を定義していきましょう。

```css:style.css
/* ダークテーマ */
.dark-theme {
    color: pink; /* 文字色 */
    background-color: black; /* 背景色 */
}
```

保存します。

次に
`index.html` の `<body class="light-theme">` 部分を以下に書き換えます。（class 属性を変更した）

```html:index.html
<body class="dark-theme">
``` 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/fee0eda7-77ac-fca5-631e-d0218c1e602d.png)

ちゃんとダークテーマに切り替わっていますね。

### ライト - ダークテーマの切り替えを確認

ちなみに (style.css は変更せずに) また `<body class="light-theme">` に戻して保存し
リフレッシュすると、またライトテーマに戻ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f8f38566-28d4-0fbc-703a-b7e63c012a4e.png)

## 4. [JavaScript] テーマの切り替えボタンを作る

### [html] ボタン追加

index.html にボタンを記述します

```html:index.html
<button class="btn">ダークテーマにする</button>
``` 

保存して、web ブラウザをリフレッシュします。
    
![html.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/25d638c4-a52b-ba7c-c138-9b1dc09350b0.png)

ブラウザのデフォルトデザインのボタンが生えました。

でも、まだ「押した時の動作」を定義していないので、押しても何も反応ないです。

### [css] ボタンのデザインを編集（色）

とりあえずデザインをいい感じにしましょう。
デザインなので css をいじります。

先程のボタンには `<button class="btn">` と、`btn` クラスを指定しているので、
`btn` クラスのスタイルを定義していきます。

```css:style.css
/* ボタンのデザイン */
.btn {
    color: white; /* 文字色 */
    background-color: darkblue; /* 背景色 */
    border: none; /* 枠線は無し */
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/7a7ef232-9638-9790-7bdb-fa4403dfe648.png)


ボタンの背景色と文字色が変わりました

### [css] ボタンのデザインを編集（形）

高さ、幅、角丸になるように以下を追記します

```css:style.css
/* ボタンのデザイン */
.btn {
    /* ボタンの色 */
    color: white; /* 文字色 */
    background-color: darkblue; /* 背景色 */
    border: none; /* 枠線は無し */

    /* ボタンの形 */
    height: 50px; /* 高さ */
    width: 150px; /* 幅 */
    border-radius: 50%; /* 角丸 */
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d4ad990e-b7e4-a4d7-3699-3b496fda0d8a.png)

### [css] ボタンのデザインを編集（位置）

右上（上から 20px, 左から 400px）に来るようにしましょう。

```css:style.css
/* ボタンのデザイン */
.btn {
    /* ボタンの色 */
    color: white; /* 文字色 */
    background-color: darkblue; /* 背景色 */
    border: none; /* 枠線は無し */

    /* ボタンの形 */
    height: 50px; /* 高さ */
    width: 150px; /* 幅 */
    border-radius: 50%; /* 角丸 */
    
    /* ボタンの位置 */
    position: absolute;
    top: 10px;
    right: 10px; /* 右端から 10px */
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/e36b5f78-f8dd-7264-3723-f3284a9f386a.png)

### [html] JavaScript ファイル (app.js) 読み込み

ボタンが選択されたときに何かが実行されるようにするには、JavaScript ファイル内にイベント ハンドラーが必要です。 
「クリックされた」とか何かのイベントが発生したときに JavaScript で書いたコードが発火する感じです。

とりあえず html から JavaScript ファイル app.js を読み込みます。


 index.html の `</body>` 要素の前の新しい行に以下を追記

```html:index.html
<script src="app.js"></script>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/c137b2e7-0189-a21f-089f-7e1f4942d824.png)

保存します。

### [JavaScript] ボタンクリックでテーマ切り替わり

```js:app.js
'use strict';

// ボタンの参照を取得
const switcher = document.querySelector('.btn');

// ボタンをクリックしたときの処理
switcher.addEventListener('click', function() {
    document.body.classList.toggle('light-theme');
    document.body.classList.toggle('dark-theme');
});
```

保存します。

すると、ボタンを押したときにダークテーマとライトテーマが切り替わるようになります。
body の class (`light-theme`, `dark-theme`) が切り替わっているのです

![Animation2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/96efb812-76fe-ccc3-b080-946305433058.gif)

ただ、まだボタンのテキストが「ダークテーマにする」のままです。
また、ダークテーマのときもボタンの色が黒いままなので、見づらいです。
次はここを変えていきましょう



### [JavaScript] ボタンのラベルを切り替える

以下を追記します。

```js:app.js
// ボタンのラベルを切り替える
const className = document.body.className;
if (className == "light-theme") { // もし現在ライトテーマの状態だったら
    this.textContent = "ダークテーマにする";
} else { // もし現在ダークテーマの状態だったら
    this.textContent = "ライトテーマにする";
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/a126ceea-3736-99c8-e649-f3a5518a9c02.png)

ラベルの文字列が切り替わるようになりました！

![Animation3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/7510e1ac-ae45-19cc-fa38-08ffbb86476f.gif)

次は色を変えていきましょう。

### [JavaScript] ボタンの色を切り替える

```js:app.js
// もし現在ライトテーマの状態だったら
if (className == "light-theme") {
    this.textContent = "ダークテーマにする";
    this.style.color = "white";
    this.style.backgroundColor = "black";

} else {  // もし現在ダークテーマの状態だったら
    this.textContent = "ライトテーマにする";
    this.style.color = "black";
    this.style.backgroundColor = "white";
}
```

![Animation4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f63fd855-27d6-3b33-acfb-def0e56bd7b3.gif)

完成です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/1f4a01b5-8173-47b0-e629-aaa2d4f77137.png)

## 5. Azure にデプロイ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/00ea7977-357c-4754-7296-1039093fc80e.png)

Microsoft Azure （クラウドサービス）の Storage （ストレージ）の
静的 web ホスティングできる機能があるので、それを使います。

やり方はこちらに詳しく書いてあります

https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blob-static-website-how-to?tabs=azure-portal?WT.mc_id=dotnet-8948-machiy

# 参考

マイクロソフトのオンライン学習サービス Microsoft Learn

https://learn.microsoft.com/ja-jp/training/modules/get-started-with-web-development/?WT.mc_id=dotnet-8948-machiy