diff --git a/src/pages/drafts/015-foundation-from-excel.mdx b/src/pages/drafts/015-foundation-from-excel.mdx
new file mode 100644
index 0000000..9877320
--- /dev/null
+++ b/src/pages/drafts/015-foundation-from-excel.mdx
@@ -0,0 +1,20 @@
+---
+layout: "@/layouts/MarkdownLayout.astro"
+---
+
+export const title = "Excelで学ぶプログラミング超基礎";
+
+# {title}
+
+プログラミングを学ぶのに、なぜExcel?と思うと思います。
+実はExcelを含む表計算ソフトは、プログラミングの基礎を体験するという意味で非常に適しているツールなのです。
+
+このExcelから、どんなプログラミング言語にも共通する基礎的な概念を学んでいきましょう。
+
+## TOC
+
+## 変数
+
+| | A | B | C |
+| --: | :-- | :-: | -: |
+| 1 | もつに | | |
diff --git a/src/pages/js/010-foundation.mdx b/src/pages/js/010-foundation.mdx
deleted file mode 100644
index 1b2c6f9..0000000
--- a/src/pages/js/010-foundation.mdx
+++ /dev/null
@@ -1,448 +0,0 @@
----
-layout: "@/layouts/MarkdownLayout.astro"
----
-
-export const title = "わかっている人向けの基礎";
-
-# {title}
-
-## TOC
-
-## 型
-
-### プリミティブ型
-
-#### Number型
-
-```js
-// 整数
-console.log(typeof 123); // "number"
-console.log(typeof -123); // "number"
-
-console.log(typeof 0x1A); // "number" // 16進数
-console.log(typeof 0b0101); // "number" // 2進数
-console.log(typeof 0o755); // "number" // 8進数
-
-// IEEE 754 倍精度浮動小数点数
-console.log(typeof 3.14); // "number"
-```
-
-#### BigInt型
-
-```js
-const bigInt = 9007199254741991n; // 任意精度整数 ( BigInt )
-console.log(typeof bigInt); // "bigint"
-```
-
-#### Boolean型
-
-```js
-console.log(typeof true); // "boolean"
-console.log(typeof false); // "boolean"
-```
-
-#### String型
-
-```js
-console.log(typeof "Hello, World!"); // "string"
-console.log(typeof 'JavaScript'); // "string"
-
-const multiLine = `これは
-複数行の
-文字列です。`;
-console.log(typeof multiLine); // "string"
-
-// テンプレートリテラル
-const name = "Alice";
-const greeting = `Hello, ${name}!`;
-console.log(greeting); // "Hello, Alice!"
-console.log(typeof greeting); // "string"
-```
-
-#### Symbol型
-
-```js
-const sym = Symbol("uniqueIdentifier");
-console.log(typeof sym); // "symbol"
-```
-
-#### Null型
-
-```js
-const emptyValue = null;
-console.log(typeof emptyValue); // "object" (歴史的な理由による)
-```
-
-#### Undefined型
-
-```js
-const notAssigned = undefined;
-console.log(typeof notAssigned); // "undefined"
-```
-
-### オブジェクト型 (狭義)
-
-JavaScriptでは、プリミティブ型以外のすべての値はオブジェクト型に分類されます。
-この`Object型`セクションでは、代表的なオブジェクト型を紹介します。
-
-#### Object
-
-```js
-const obj = new Object();
-obj.name = "Bob";
-obj.age = 25;
-
-console.log(obj); // { name: "Bob", age: 25 }
-console.log(obj.name); // "Bob"
-console.log(obj["age"]); // 25
-console.log(obj.someField); // undefined
-
-
-const obj2 = {
- name: "Charlie",
- age: 28
-};
-
-console.log(obj2); // { name: "Charlie", age: 28 }
-```
-
-#### Class
-
-JavaScriptでは、他の言語でいうところの`public`や`private`などのアクセス修飾子は存在しません。
-
-```js
-class Person {
- constructor(name, age) {
- this.name = name;
- this.age = age;
-
- greet() {
- console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
- }
- }
-}
-
-const alice = new Person("Alice", 30);
-console.log(alice); // Person { name: "Alice", age: 30 }
-console.log(alice.name); // "Alice"
-console.log(alice.greet()); // "Hello, my name is Alice and I am 30 years old."
-```
-
-#### Array
-
-```js
-const list = [1, 2, 3, 4, 5];
-console.log(typeof list); // "object"
-
-const list2 = new Array(1, 2, 3, 4, 5);
-console.log(typeof list2); // "object"
-```
-
-#### RegExp
-
-```js
-const pattern = /ab+c/i;
-console.log(typeof pattern); // "object"
-
-const pattern2 = new RegExp("ab+c", "i");
-console.log(typeof pattern2); // "object"
-```
-
-## 関数
-
-宣言
-
-```js
-function add(a, b) {
- return a + b;
-}
-
-const sub = (a, b) => {
- return a - b;
-}
-```
-
-複数の型を返すことが可能
-
-```js
-function getValue(flag) {
- if (flag) {
- return 42; // Number型
- } else {
- return "Hello"; // String型
- }
-}
-```
-
-## コメント行
-
-JavaScriptでは、以下の3つの方法でコメントを記述できます。
-
-```js
-// これは1行コメントです。
-
-/*
-これは複数行に
-渡るコメントです。
-*/
-
-const value = 100;
-
-/**
- * これはドキュメンテーションコメントです。
- * @param {string} name - 挨拶する相手の名前
- */
-function greet(name) {
- // 挨拶を表示する
- console.log("Hello, " + name + "!");
-}
-```
-
-## 標準出力
-
-Developper Toolsなどのコンソールに出力します。
-
-```js
-console.log("Hello, World!");
-
-// エラーレベルを分けて出力することもできます。
-console.warn("This is a warning message.");
-console.error("This is an error message.");
-console.info("This is an informational message.");
-console.debug("This is a debug message.");
-
-// objectや配列を見やすく表示することもできます。
-console.table({
- name: "Alice",
- age: 30,
- city: "New York"
-});
-```
-
-## 変数
-
-### 特別な変数
-
-#### window
-
-`window`はブラウザの最上位オブジェクトで、グローバルスコープに存在します。
-ブラウザ環境でJavaScriptを実行すると、`window`オブジェクトにはブラウザが提供する多くの機能が含まれています。
-
-#### document
-
-ブラウザに表示されているHTMLの全体を表すオブジェクトです。
-ここからHTML要素を取得したり、操作したりできます。
-
-```html
-
Hello, World!
-
-
-```
-
-### 変数の宣言
-
-`var`、`let`、`const`の3つのキーワードで変数を宣言できます。
-
-| キーワード | スコープ | 再代入 | 再宣言 |
-| :---------- | :------- | :----- | :----- |
-| `var` | 関数スコープ | 可能 | 可能 |
-| `let` | ブロックスコープ | 可能 | 不可 |
-| `const` | ブロックスコープ | 不可 | 不可 |
-
-`var`は関数の外側で宣言すると、その値は`window`オブジェクトのプロパティとして登録されます。
-
-```js
-var func = () => {
- return "Hello, Function!";
-}
-
-console.log(func()); // "Hello, Function!"
-console.log(window.func()); // "Hello, Function!"
-console.log(func === window.func); // true
-```
-
-`var`は外部のライブラリを登録するときなどに使われます。
-誤って同じ名前で変数を宣言すると、そのライブラリを上書きすることになるので注意が必要です。
-
-```html
-
-
-```
-
-## HTMLの操作
-
-### 要素を取得する
-
-#### IDで取得
-
-```html
-Hello, World!
-
-
-```
-
-#### class名で取得
-
-```html
-Item 1
-Item 2
-Item 3
-
-
-```
-
-#### query Selectorで取得
-
-```html
-
-
Paragraph 1
-
Paragraph 2
-
-
-
-
-
-```
-
-#### 要素を追加
-
-```html
-
-
-
-```
-
-#### 要素を削除
-
-```html
-
- - Item 1
- - Item 2
- - Item 3
-
-
-
-```
-
-## イベント
-
-### イベントの登録
-
-HTML属性で直接登録する方法もあります。
-
-```html
-
-```
-
-JavaScriptでイベントリスナーを登録する方法が一般的です。j
-
-```html
-
-
-
-```
-
-同時に複数のイベントリスナーを登録することも可能です。
-
-```html
-
-
-
-```
-
-### イベントの削除
-
-`onRemoveEventListener`メソッドを使って、登録したイベントリスナーを削除できます。
-例のように、1度だけ実行したい場合などに使えます。
-
-```html
-
-
-
-```''
diff --git a/src/pages/js/011-what-program-do.mdx b/src/pages/js/011-what-program-do.mdx
index 76e996f..e8bdf88 100644
--- a/src/pages/js/011-what-program-do.mdx
+++ b/src/pages/js/011-what-program-do.mdx
@@ -34,7 +34,7 @@
*/
```
-## 関数
+## 関数とは
足し算を考えてみましょう。
@@ -113,7 +113,7 @@
// => 3 がコンソールに表示される
```
-## 変数
+## 変数とは
変数とは、ある値に名前をつけて保存しておくためのものです。
初めてその変数を作るときに、以下のように書きます。
@@ -294,3 +294,70 @@
students[0].name; // "もつに"
students[0].age; // 18
+
+```
+
+### 関数
+
+実は、JavaScriptでは3種類の関数の書き方があります。
+変数の中身を関数にする書き方があるので、併せて覚えておきましょう。
+
+厳密な違いはありますが、いくつか書き方があるということだけ押さえておけば大丈夫です。
+
+```js
+// 通常の関数の書き方
+function 関数名(引数1, 引数2, ...) {
+ // 処理内容
+ return 戻り値;
+}
+
+// 無名関数方式
+let 関数名 = function(引数1, 引数2, ...) {
+ // 処理内容
+ return 戻り値;
+}
+
+// アロー関数方式
+let 関数名 = (引数1, 引数2, ...) => {
+ // 処理内容
+ return 戻り値;
+}
+```
+
+やっていることは結局、関数に対して別の名前をつけていることと同じです。
+
+```js
+function subtract(x, y) {
+ return x - y;
+}
+
+let sub = subtract;
+
+// 内部的には完全に同じもの
+sub(5, 3); // 2
+subtract(5, 3); // 2
+```
+
+以下の3つは同じ動作をします。
+
+```js
+function add(x, y) {
+ return x + y;
+}
+```
+
+
+
+```js
+let add = function(x, y) {
+ return x + y;
+};
+```
+
+
+
+```js
+let add = (x, y) => {
+ return x + y;
+};
+```
diff --git a/src/pages/js/015-foundation-from-excel.mdx b/src/pages/js/015-foundation-from-excel.mdx
deleted file mode 100644
index 9877320..0000000
--- a/src/pages/js/015-foundation-from-excel.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
----
-layout: "@/layouts/MarkdownLayout.astro"
----
-
-export const title = "Excelで学ぶプログラミング超基礎";
-
-# {title}
-
-プログラミングを学ぶのに、なぜExcel?と思うと思います。
-実はExcelを含む表計算ソフトは、プログラミングの基礎を体験するという意味で非常に適しているツールなのです。
-
-このExcelから、どんなプログラミング言語にも共通する基礎的な概念を学んでいきましょう。
-
-## TOC
-
-## 変数
-
-| | A | B | C |
-| --: | :-- | :-: | -: |
-| 1 | もつに | | |
diff --git a/src/pages/js/020-js-with-html.mdx b/src/pages/js/020-js-with-html.mdx
index 996174f..1b24d4b 100644
--- a/src/pages/js/020-js-with-html.mdx
+++ b/src/pages/js/020-js-with-html.mdx
@@ -9,6 +9,8 @@
# {title}
+## TOC
+
## とりあえず見てみよう
```html file=src/sample/js/button.html
@@ -18,13 +20,17 @@
-
-
-1つずつ見ていきましょう。
+`クリック!`ボタンがありますね、これをクリックしてみましょう。
+`ボタンがクリックされました!`とメッセージが表示されたと思います。
-以下の箇所は`