翻訳中…
ゼロから始めるプログラム言語
v2.18
🌐 Language / 翻訳
日本語(原文)

📚 学習の続き

学習ページを開くと、ここに進捗が保存されます。

まだ学習履歴はありません。

プログラミングで、あたらしい景色を。
🌐 Language / 翻訳

ゼロから、
つくる側へ。

コードを書けば、
きっと、見える世界が変わる。

つくることで、考える力が育ち、
日常が少しずつ面白くなっていく。
この場所は、そんな変化を応援する
プログラミング学習サイトです。

つくる人が、
やさしい未来を
つくっていく。

コードで広がる
やさしい社会を、
一緒につくろう。

01 ━━━━ 02 03
LATEST ARTICLES

新着記事

EDITOR'S NOTE

編集後記

プログラミングを学ぶことは、世界の見え方を少しずつ変えていくこと。
この場所が、みなさんの「つくってみたい」を後押しできますように。

つくる人が、
やさしい未来をつくっていく。
つくる日々プログラミングで、あたらしい景色を。
© 2026 つくる日々
つくる日々
プログラミングで、あたらしい景色を。

ゼロから、
つくる側へ。

コードを書けば、
きっと、見える世界が変わる。

つくることで、考える力が育ち、
日常が少しずつ面白くなっていく。
この場所は、そんな変化を応援する
プログラミング学習サイトです。

FEATURED

今、読みたい記事

入門

はじめてのPython
— 動かしてみよう

プログラミングの楽しさを、最初の一歩から。環境構築〜「Hello, World!」までやさしく解説します。

2026.09.13

LATEST ARTICLES

新着記事

MINI TEST

ミニテスト

3分でチェック!
理解度を試して、次のステップへ。

YOUR PROGRESS

学習の進捗

62%

完了した記事 18 / 28

ミニテスト正解率 76%

学習継続日数 12日

EDITOR'S NOTE

編集後記

プログラミングを学ぶことは、世界の見え方を少しずつ変えていくこと。この場所が、みなさんの「つくってみたい」を後押しできますように。

つくる人が、
やさしい未来をつくっていく。

KAZU × AI / 30日公開チャレンジ

作りながら、
ゼロから学ぶ。

実際にコードを書き、失敗し、直しながら、自分の作品を完成させる初心者向け学習サイトです。

ひとつ動いた。その喜びから、次の一歩へ。

面倒な仕事をJavaScriptに引き継ぐ全10回

第1回「職場に、ものすごく速い新人が来た」

助手のJavaScriptくんと、指示・画面の役割・条件分岐を学ぶ物語。全3ページ。

掲載日:2026年9月12日

制作状況

完成度42%|第1段階終盤 → 第2段階入口

最初の目標

① ホームページ → ② 計算アプリ → ③ 便利ツール → ④ オリジナル作品

v0.58 — 「町を育てる」年間構想を追加

ホームページを一軒の家から始め、記事・作品・画廊・交流広場へ少しずつ増やしていく構想を「年間計画」に整理しました。

現在:学習サイト 10月:公開目標 12月:画廊 将来:交流広場

2026年9月19日更新・v2.18:内部構造を整理。ページ本体から参照されていなかった重複JavaScriptファイルを削除し、現在の表示・教材・学習進捗機能はそのまま維持しました。

2026年9月19日更新・v2.15:ログイン不要の「学習の続き」を追加。閲覧した学習ページ、進捗率、前回の続き先をブラウザ内に保存し、ホームから再開できるようにしました。メールアドレスやパスワードは収集しません。

2026年9月18日更新・v2.12:アクセスログ用Worker設定を追加。講義ナビゲーションを再点検。JavaScript第1回1ページ目→2→3→第2回以降へ連続移動できる構成を確認し、存在しないページ指定時に画面が空になる問題も防止しました。再読み込み時はホームへ戻ります。

2026年9月14日更新・v1.08:PC版トップ画像の位置を修正。街並みと塔を左へ寄せ、見本画像に近い中央配置へ調整しました。iPhone版は変更していません。

2026年9月14日更新・v1.07:PC版の崩れを修正。右上の英字重なり・装飾の崩れ・下部の大きな空白を解消し、ヒーロー画像と3カラムを安定した配置に調整。ピンクも濃いまま維持。

2026年9月14日更新・v1.06:PC版のピンクを強化。見出し・ボタン・アクセント・進捗リングを濃いローズ〜マゼンタ寄りに変更。iPhone版は従来表示のまま維持。

2026年9月14日更新・v1.05:PC版ホームをさらに作り直し。上部ヘッダーの重複をなくし、見本の「左に大きな見出し・右に街並み・下に3カラム」の構成へ近づけました。iPhone版はそのままです。

2026年9月13日更新・v1.02:トップ画像を背景表示から画像パネル表示へ変更し、絵全体が見えるように修正しました。

2026年9月13日更新・v1.01:トップページを高級感のある黒・アイボリー・くすみローズ中心のエディトリアルデザインへ変更。第三者ブランドのロゴやマークは使用していません。

2026年9月13日更新・v1.00:並び替え操作をパソコン・iPhone共通仕様に変更。マウスクリック、タッチ操作、キーボード操作で記事一覧と編集後記の「新しい順/番号順(昇順)」を切り替えられるようにしました。

2026年9月13日更新・v0.99:並び替え機能を修正。記事と編集後記の回番号を見出しから直接読み取り、「新しい順」と「番号順(昇順)」を切り替える方式に変更しました。

2026年9月13日更新・v0.98:編集後記一覧にも並び替えボタンを追加。「新しい順」と「番号順(昇順)」を切り替えられるようにしました。

2026年9月13日更新・v0.97:記事一覧右上に並び替えボタンを追加。「新しい順」と「番号順(昇順)」を切り替えられるようにしました。

2026年9月13日更新・v0.96:記事一覧の表示順を変更。新しい記事を上、古い記事を下に並べる方式にしました。

2026年9月13日更新・v0.95:記事の続きとして、第6回 TypeScript、第7回 Java、第8回 C# の3話を追加。それぞれの言語の性格と得意分野を、プログラム村の職人たちの物語として紹介しました。

2026年9月13日更新・v0.94:編集後記 第9回・第10回を物語調に全面改稿し、インテリア編の第11〜13回を追加。著作権・裏方運営・使いやすい画面づくりを、会話とたとえを交えた読み物として整理しました。

2026年9月13日更新・v0.93:編集後記 第10回「表から見えない、裏方の仕事」を追加。締切・期日・進捗・公開予定を管理する裏方システムの考え方を記録しました。

2026年9月13日更新・v0.89:用語集を300語から360語へ拡張。Python・SQL・セキュリティ・コンピューターの基礎用語を追加しました。

2026年9月13日更新・v0.88:用語集を237語から300語に拡張。略称・説明・使用例・長音の表記違いの検索に対応。

v0.87 — 編集後記 第5〜8回も物語形式へ

JavaScript講座の物語形式を維持したまま、編集後記 第5〜8回も、実際の迷い・失敗・会話・気づきが伝わる読み物として作り直しました。Cloudflare公開、更新、Search Console、GoogleBot確認までの流れもストーリーとして残しています。

JavaScript講座 第2〜5回 各3ページ 編集後記 第5〜8回 公開・検索登録の実録

編集後記

大学で学んだこと、実際に作って感じたこと、自分の強み、今につながった経験と今後の進め方を記録しています。

記事一覧

やさしく積み上げる学びを、落ち着いたカードで見やすく整理。

並び順

面倒な仕事をJavaScriptに引き継ぐ全10回

第1回「職場に、ものすごく速い新人が来た」

助手のJavaScriptくんと、指示・画面の役割・条件分岐を学ぶ物語。全3ページ。

掲載日:2026年9月12日

第1回
介護職の私がゼロからプログラミングを始めた
第2回
HTMLで本当にボタンを1個作ってみよう
JavaScript講座 第2回
商品名・単価・数量を渡して、電卓係に任せる
全3ページ・2026年9月13日
JavaScript講座 第3回
変数は「名前付きの箱」なのか?実際に動かして確かめる
全3ページ・2026年9月13日
JavaScript講座 第4回
if文で「判断」を任せる。境目の数字がいちばん大事
全3ページ・2026年9月13日
JavaScript講座 第5回
繰り返しで、同じ仕事を何度も書かない
全3ページ・2026年9月13日
第6回
TypeScriptくん、心配性だけど事故を減らす
プログラム言語の世界・2026年9月13日
第7回
Javaさん、制服を着て大企業に出勤する
プログラム言語の世界・2026年9月13日
第8回
C#さん、Microsoft村の万能職人
プログラム言語の世界・2026年9月13日

Python・SQL・API 各3話レクチャー

3つの技術を、基礎→使い方→実践の順に3話ずつ学びます。

追加日:2026年9月16日

第9回 Python編 第1話
「表示して」と頼んだだけなのに
全3ページ・2026年9月15日更新
第10回 Python編 第2話
察してくれない優秀な作業員
全3ページ・2026年9月15日更新
第11回 Python編 第3話
自動化したのに、注文が届かない
全3ページ・2026年9月15日更新
第12回 SQL編 第1話
倉庫を建てたら、まず棚の話になった
全3ページ・2026年9月15日更新
第13回 SQL編 第2話
「少ないもの持ってきて」が通じるまで
全3ページ・2026年9月15日更新
第14回 SQL編 第3話
WHEREさん、今日は帰らないでください
全3ページ・2026年9月15日更新
第15回 API編 第1話
道路を作ったら、受付がいた
全3ページ・2026年9月15日更新
第16回 API編 第2話
お願いしたのに、返事がまだ来ない
全3ページ・2026年9月15日更新
第17回 API編 第3話
地雷原に、帰り道をつける
全8ページ・2026年9月15日更新

JavaScript実践編 配列・for文・DOM

「覚える」から「実際に画面を動かす」へ。笑いながら仕組みを理解する3回です。

追加日:2026年9月18日

第18回 JavaScript実践編
配列との出会い――箱が増えすぎて、部屋が大変なことになった
全3話・2026年9月18日
第19回 JavaScript実践編
for文登場――同じ仕事を10回? コンピュータにやらせろ!
全3話・2026年9月18日
第20回 JavaScript実践編
DOM操作――ついにJavaScriptが画面を動かした!
全3話・2026年9月18日

第1回 介護職の私がゼロからプログラミングを始めた

私はプログラマーではありません。仕事の中で「もっと簡単にできないだろうか」と考えたことが、プログラミングに興味を持つきっかけでした。

KAZU
入力を減らして、ボタンを選ぶだけの仕組みって作れるの?
AI
作れます。HTMLで骨組み、CSSで見た目、JavaScriptで動きを作ります。

まず使う3つ

HTML

見出し、文章、ボタンなどの骨組み。

CSS

色、文字、大きさ、配置などの見た目。

JavaScript

ボタンを押した後の動作や画面切替。

作って、動かして、確認する

見た目ができても、ボタンが動かなければ完成ではありません。実際に押し、確認し、直すところまでを学習の一部にします。

<button>押してください</button>

第2回 HTMLで本当にボタンを1個作ってみよう

失敗例 — 形だけ作る

<button>押してください</button>

これだけでは、押した後に何をするのかが決まっていません。

修正版 — JavaScriptで動きをつける

<button id="hello">押してください</button>
<p id="result"></p>
<script>
document.getElementById('hello').addEventListener('click', function(){
  document.getElementById('result').textContent='ボタンが動きました!';
});
</script>

↑ 実際に押せます。

プログラム言語の世界・第6回

掲載日:2026年9月13日

第6回 TypeScriptくん、心配性だけど事故を減らす

プログラム村では、JavaScriptくんが毎日忙しく働いていました。

ボタンを押したら動く。文字を変える。画面を切り替える。計算する。とにかく仕事が速い。

でも、たまにやらかします。

JavaScript
数字を入れる場所に文字が入ってます。
KAZU
え? それで動かしたの?
JavaScript
はい。止めろとは言われてません。

自由です。自由すぎます。

そこへTypeScriptくんがやってきました。

最初の一言が細かい

TypeScript
ここには何を入れる予定ですか?
KAZU
数字。
TypeScript
本当に数字だけですか?
KAZU
たぶん。
TypeScript
「たぶん」では困ります。

面倒くさい。かなり細かい。でも言っていることは正しい。

数字なら数字、文字なら文字。TypeScriptくんは、仕事を始める前に確認したがるタイプでした。

JavaScriptくんとの関係

TypeScriptはJavaScriptを土台にした言語です。JavaScriptを知っていると、「あ、親戚だな」と感じます。

ただしTypeScriptくんは、間違いそうなところを見ると先に注意します。

「そこ危ないですよ」「その値、違う型です」「その名前、本当にありますか?」

少し口うるさい。でも大きなシステムになるほど、この口うるささがありがたくなります。

小さい家と100部屋の建物

部屋が一つなら鍵の管理も簡単です。でも100部屋ある建物で「だいたい合ってるでしょう」は怖い。

プログラムも同じ。小さなコードではJavaScriptの自由さが気楽でも、大きくなると「この荷物はどこの部屋?」が重要になります。

そこでTypeScriptくんが入口でチェックします。

TypeScript
その荷物、ここの部屋じゃないですよ。

警備員みたいなものかもしれません。

今日の結論:TypeScriptは、JavaScriptに安全確認を追加した心配性の職人。少し細かい。でも、その細かさが大事故を減らしてくれる。

プログラム言語の世界・第7回

掲載日:2026年9月13日

第7回 Javaさん、制服を着て大企業に出勤する

ある朝、プログラム村に、きっちりスーツを着た人がやってきました。

Javaさんでした。

時間に正確。決まりを守る。書類もちゃんと書く。

Java
まず構造を決めましょう。
KAZU
いきなり堅いな。

Javaさんは勝手に仕事を始めない

「とりあえず文字を出して」と頼んでも、Javaさんは確認してきます。

「クラスは?」「入口はmainで?」「型は決まっていますか?」

Pythonくんなら、かなり早く仕事を始めてくれます。Javaさんは「会社なので書類が必要です」という顔をしています。

でも大きな組織では強い

銀行、企業の業務システム、大きなWebサービス。人が多くなるほど「好き勝手に書かない」ことが大切になります。

Javaさんはそこが得意です。

自由な職人というより、組織に強い技術者。

ちょっと長い。でも理由がある

Javaのコードを見ると、最初は「長いな」と感じることがあります。

でも、その中には型、構造、役割、ルールが入っています。

1人なら口約束でもいい。100人なら記録が必要。会社の仕事と同じです。

KAZU
短ければ偉いってわけじゃないのか。
Java
後で100人が読む可能性もありますから。
今日の結論:Javaは、大きな組織に強い、きっちりした会社員。少し堅いけれど、その堅さが大規模システムの安心につながる。

プログラム言語の世界・第8回

掲載日:2026年9月13日

第8回 C#さん、Microsoft村の万能職人

今度は別の方向から、工具箱を持った職人がやってきました。

名前はC#さん。

見た目は少しJavaさんに似ています。

KAZU
親戚?
C#
まあ、似ているところはあります。

やっぱり。

Microsoft村で元気になる

C#さんはMicrosoftの世界と相性がいい職人です。

Windows、.NET、業務アプリ、Web、クラウド。かなり幅広く働けます。

KAZU
会社のシステム作りたい。
C#
できます。
KAZU
Webは?
C#
できます。
KAZU
ゲームは?
C#
それもできます。

また何でも屋が来ました。

Unity村では別の顔

C#はゲーム開発でも有名です。Unityでは長く中心的な言語として使われてきました。

キャラクターを動かす。スコアを計算する。当たり判定をする。ゲームのルールを書く。

普段は真面目な業務システムを作っているのに、別の日にはゲームを作っている。ギャップがすごい。

会社でもゲームでも働く

C#も型や構造を大切にします。それでいて便利な機能も多く、「そこまで全部手で書かなくてもいいですよ」と助けてくれる場面があります。

昼は会社の管理システム。夜はゲーム開発。なかなか働き者です。

今日の結論:C#は、Microsoft村を中心に、会社でもWebでもゲームでも働ける器用な万能職人。真面目だけど、ゲームの話になると急に顔が変わる。

TypeScriptは慎重派。Javaは組織派。C#は器用な万能派。

同じ「プログラムを書く」でも、得意な仕事が違う。だからプログラム言語は面白い。

第18回 配列との出会い
「箱が増えすぎて、部屋が大変なことになった」

第1話 変数100個作戦

変数、if文、関数。少しずつJavaScriptが分かってきたKAZUは、ちょっと調子に乗っていた。

KAZU
なるほどね。JavaScript、だいぶ分かってきたかもしれない。
AI
その言葉が出た直後が、一番危険です。

ミニテスト10問の正解を保存しようと、answer1、answer2、answer3……と書き始める。5問、8問と進んだところで手が止まった。

let answer1 = "A";
let answer2 = "B";
let answer3 = "C";
KAZU
1000問ならanswer1000まで? そんなサイト作ってたら、先に俺が壊れるわ!

そこで登場したのが、たくさんのデータを一つにまとめる配列(Array)だった。

第2話 大きな箱「配列」

let answers = ["A", "B", "C"];
KAZU
……終わり? さっき俺が一生懸命answer1、answer2って書いてたのは?
AI
お疲れさまでした。

配列は大きな棚のようなもの。Aを取り出すなら answers[0]。ここで重要なのは、配列は0から数えること。

answers[0] → A
answers[1] → B
answers[2] → C
KAZU
最初なんだから1番だろ。
AI
人間はそう考えます。コンピュータは0番です。

第3話 10問が一気に片付いた

let answers = [
  "A", "B", "B", "A", "A",
  "B", "A", "B", "A", "B"
];

第1問は answers[0]、第10問は answers[9]。名前一覧、用語集、ミニテスト、献立、記事一覧――大量のデータを扱う場面で配列の考え方が役立つ。

今回の要点:変数は1つのデータを覚える。配列は、たくさんのデータを順番にまとめて覚える。一番最初は0番。

第19回 for文登場
「同じ仕事を10回? コンピュータにやらせろ!」

第1話 また10回書く男

配列を覚えたKAZUは、今度は答えを全部表示しようとした。

console.log(answers[0]);
console.log(answers[1]);
console.log(answers[2]);
AI
まさか10回書くんですか?
KAZU
だって10個あるんだから。

そこでAIが出したのが for文

for (let i = 0; i < 10; i++) {
  console.log(answers[i]);
}
KAZU
急にJavaScriptが本気出してきた。

第2話 暗号を一つずつ解読する

let i = 0 は0から開始。i < 10 は10より小さい間続ける。i++ は1ずつ増やす。つまり0、1、2……9と進み、そのたびに answers[i] を処理する。

KAZU
iの数字が勝手に変わるから、全部順番に取り出せるのか!

10回でも100回でも、同じ仕事を人間が書き続ける必要はない。

第3話 人間は命令する、コンピュータは繰り返す

for (let i = 0; i < answers.length; i++) {
  console.log(answers[i]);
}

answers.length は配列の個数。問題が10問から50問に増えても、その個数に合わせて最後まで処理できる。

KAZU
じゃあ、人間の仕事は?
AI
何をさせるか考えることです。

今回の要点:for文は同じ処理を繰り返す仕組み。人間がルールを作り、コンピュータに繰り返しを任せる。

第20回 DOM操作
「ついにJavaScriptが画面を動かした!」

第1話 で、ホームページはいつ動くんだ?

変数、if、関数、配列、for。ここまで覚えたKAZUには一つ疑問があった。

KAZU
俺はホームページを作ってるんだよな? ずっとconsole.logばっかりじゃないか!
AI
では、いよいよJavaScriptからHTMLを動かします。DOMの登場です。

第2話 JavaScript、HTMLを発見する

<p id="message">ここが変わります</p>

id="message" は目印。JavaScriptから次のように探せる。

document.getElementById("message");

ざっくり言えば「このページの中から、messageというIDのものを探して」という命令だ。

document.getElementById("message").textContent =
  "JavaScriptで変更しました!";

これで画面の文字が実際に書き換わる。

第3話 ボタンを押した――動いた!

<button onclick="changeMessage()">押してみる</button>
function changeMessage() {
  document.getElementById("message").textContent =
    "成功しました!";
}

HTMLが骨組みを作る。CSSが見た目を整える。JavaScriptが動きを与える。変数がデータを覚え、ifが判断し、functionが仕事をまとめ、配列が整理し、forが繰り返し、DOMがHTMLとJavaScriptをつなぐ。

KAZU
最初はボタン一つ直すのにも苦労した。でも今なら、そのボタンがなぜ動くのか少し分かる。

プログラミングはコードを丸暗記することではない。「こうしたい」という人間の考えを、「こうしてください」というコンピュータの言葉へ変えていくことだ。

次回予告:習ったものを全部使って、自分で一つ作ってみる。物語は「ミニアプリ制作編」へ続く。

学習進捗

0 / 2 回 完了

🌱 はじめの一歩🥉 HTMLビギナー

ミニテスト 2 — 第18〜20回

配列・for文・DOM操作を10問で確認します。答えを選ぶと、その場で理由が表示されます。

ミニテスト

ミニテストを番号順に整理しました。上から順番に進められます。

ミニテスト 1
HTML・CSS・JavaScript 基礎編
全12問
ミニテスト 2
JavaScript実践編 第18〜20回
配列・for文・DOM操作/全10問

ミニテスト 1 — JavaScriptくんの仕事チェック

全12問。HTML・CSS・JavaScriptの役割から、在庫の判断まで。答えを選ぶと理由が分かります。

ヒントを見ても減点されません。

初心者用語集

登録語彙を収録。略称・説明・使用例からも検索できます。名前・ひらがな・カタカナ・英字で探せます。用語を押すと説明と使用例が開きます。未入力なら全件表示します。

分類で絞り込む

登録語彙を読み込み中です。名前を入力すると候補が出ます。

困ったとき

ボタンを押しても動かない

① HTMLにボタンがあるか → ② JavaScriptが読み込まれているか → ③ idなどの名前が一致しているか、の順に確認します。

変更したのに表示が変わらない

保存したファイルが最新か、ブラウザで再読み込みしたかを確認します。

分からない言葉がある

KAZUについて

50代・介護の仕事をしながら、AIと一緒にプログラミングをゼロから勉強しています。実際に作り、失敗し、修正する過程も含めて、このサイトで紹介していきます。

大学で学んだことが、今につながる

大学では一通り勉強しました。ただ、その頃は学んだことを生活や仕事に取り入れようとは考えていませんでした。

今は仕事の中で感じる不便を、仕組みにして解決したいと思うようになりました。学びと経験が、今になってつながり始めています。

2026年9月11日版

年間計画 — 一軒の家から、町へ

このサイトは、最初から巨大なSNSを作るのではなく、完成した「建物」を一つずつ増やしていきます。

町の構想

🏠
学習の家

記事・用語集・テスト

🛠️
工房

作ったプログラム・実践例

🖼️
画廊

12月課題。作品と制作過程を展示。

🏘️
交流広場

将来。投稿・コメント・作品交流。

2026〜2027 ロードマップ

1

9〜10月:本体サイトを完成・公開

第1回・第2回から記事を積み上げ、スマホ表示、翻訳、用語集、進捗、編集後記を安定させます。公開目標は2026年10月11日前後。

2

11月:町を整える

記事間の導線、検索しやすさ、読みやすさ、作品ページの整理を進めます。公開後に実際に使って見つかった問題も直します。

3

12月:画廊を立ち上げる

ホームページ画面、システム画面、試作→修正→完成の変化、イメージ作品などを展示できる場所を作ります。

4

2027年1〜3月:小さな交流広場を試作

Facebookをそのまま再現するのではなく、学習記録・作品投稿・コメントなど、このサイトに必要な機能から小さく試します。

5

2027年春以降:参加型サービスへ

ユーザー登録、プロフィール、作品展示、反応・交流などを検討します。必要になった段階でサーバー、データベース、認証、プライバシー対策を本格的に学びます。

収益化は「町が育ってから」

広告だけを目的にせず、まず役に立つ記事と作品を蓄積します。その後、教材、テンプレート、小規模ツール、サポートなど、サイトの内容と自然につながる方法を検討します。

重要:ユーザー登録や投稿機能を実装する段階では、個人情報・著作権・利用規約・投稿管理・セキュリティを別課題として設計します。

JavaScript講座・全10回 / 第2回 / 1ページ目(全3ページ)

掲載日:2026年9月13日

JavaScriptくん、電卓係に配属される

第1回で、「在庫が2本以下なら知らせる」という仕事を任されたJavaScriptくん。

翌日、KAZUはもう一つ仕事を頼むことにしました。

KAZU
洗剤が1本300円。2本注文したら、いくらになる?
JavaScript
600円です。

さすがに、このくらいの計算なら人でもできます。

でも、商品が10種類、20種類、100種類になったらどうでしょう。

単価が違い、数量も違い、最後に全部の合計を出す。人が電卓で一つずつ計算すれば、時間もかかりますし、入力ミスも起きます。

KAZUは考えました。

KAZU
だったら、この計算もJavaScriptくんにやってもらえばいいんじゃない?

そこで、最初の仕事を渡します。

const 商品名 = "洗剤";
const 単価 = 300;
const 数量 = 2;
const 金額 = 単価 * 数量;

JavaScriptくんの返事は、こうです。

JavaScript
商品名は「洗剤」。単価は300円。数量は2。300 × 2 なので、金額は600円です。

ここで大事なのは、単に「300 × 2」と書いていないことです。

商品名、単価、数量、金額。

数字に意味のある名前を付けています。

数字だけでは、あとで分からなくなる

たとえば、次のコードでも計算はできます。

const a = 300;
const b = 2;
const c = a * b;

でも、数日後に見たとき、aが何で、bが何だったのか思い出せるでしょうか。

仕事でも、「あれ」「それ」「いつものやつ」では、新しく入った人には伝わりません。

プログラムも同じです。

「単価」「数量」のように意味が分かる名前を付けておけば、人が読み直したときにも分かりやすくなります。

今回のポイント:JavaScriptに仕事を頼むときは、数字だけでなく「何の数字なのか」まで名前を付ける。

ところが、ここでKAZUは一つ気づきました。

KAZU
計算はできたけど、これって利用者には見えないよね?

そうです。

JavaScriptくんが頭の中で600円と計算しても、画面に出さなければ、使う人には分かりません。

次は、計算結果を画面へ出してもらいます。

JavaScript講座・全10回 / 第2回 / 2ページ目(全3ページ)

掲載日:2026年9月13日

計算結果を、ちゃんと画面に出してもらう

KAZUは、JavaScriptくんにもう一度頼みました。

KAZU
600円って計算できたのは分かった。でも、画面に表示して。
JavaScript
表示する場所を教えてください。

ここで、HTMLさんの出番です。

HTMLさんは、結果を表示する場所を用意します。

<p id="結果">ここに金額が出ます</p>

「結果」という目印を付けました。

するとJavaScriptくんは、その場所を探して文字を書き換えます。

document.getElementById("結果").textContent =
  商品名 + ":" + 金額 + "円";

画面には、

洗剤:600円

と表示されます。

HTMLさんとJavaScriptくんの役割

担当仕事
HTMLさん結果を表示する場所を作る
JavaScriptくん計算して、その場所の文字を書き換える

ここで、前回の第1回と同じ考え方が出てきます。

画面の部品があることと、その部品が動くことは別です。

HTMLで表示場所を作り、JavaScriptでそこに結果を入れる。

この役割分担がつながって、初めて利用者に結果が伝わります。

入力 → 計算 → 表示

ここまでの仕事を、3つに分けるとこうなります。

  1. 入力:商品名、単価、数量を受け取る。
  2. 計算:単価 × 数量で金額を出す。
  3. 表示:計算した結果を画面に出す。

KAZUは、発注システムの画面を思い出しました。

KAZU
担当者名を入れる。数量を選ぶ。合計を出す。やっていることは、これの繰り返しなのか。
AI
そうです。複雑なシステムも、小さな「入力→処理→表示」を何個も組み合わせています。

ここで、また一つ問題が出ます。

利用者が数量に「2」ではなく、空欄や文字を入れたらどうなるのでしょう。

JavaScriptくんは、指示されたとおり計算しようとします。

でも、正しく計算できない入力なら、こちらで止める仕組みが必要です。

次は、動く機能を「使える機能」に近づけます。

JavaScript講座・全10回 / 第2回 / 3ページ目(全3ページ)

掲載日:2026年9月13日

正しい数字だけ来るとは限らない

KAZUは、数量入力欄を作りました。

1、2、3……と数字を入れれば、計算できます。

ところが、試しに空欄のままボタンを押してみました。

KAZU
あれ? 変な結果になる。

今度は文字を入れてみます。

KAZU
「abc」って入れたらどうなる?
JavaScript
数字として扱えません。

ここで分かるのは、正しい入力だけで動作確認してはいけないということです。

実際の利用者は、こちらが想定したとおりに入力してくれるとは限りません。

空欄かもしれない。0かもしれない。マイナスの数字かもしれない。文字かもしれない。

そこで、計算する前に確認します。

const 数量 = Number(入力欄.value);

if (!Number.isFinite(数量) || 数量 < 0) {
  結果.textContent = "数量を正しく入力してください";
} else {
  結果.textContent = "合計:" + (単価 * 数量) + "円";
}

今は細かい記号を全部覚えなくても大丈夫です。

やっていることは、

  1. 入力された値を数字として読む。
  2. 数字として使えない、またはマイナスならエラーを出す。
  3. 問題なければ計算する。

という3段階です。

動作確認は「普通」と「変な入力」の両方

入力確認すること
1300円になるか
2600円になるか
00円として扱うか、入力を促すか
空欄エラー表示になるか
文字間違った金額を出さないか

KAZUは、ここで少し考え方が変わりました。

KAZU
動いたかどうかだけじゃなくて、変な使い方をされたときに壊れないかも見るんだね。

これが、実際に使うプログラムを作るときの大切な確認です。

第2回まとめ:JavaScriptくんは計算が速い。ただし「何を入力として受け取るか」「間違った入力をどう扱うか」は、人が決めてあげる必要があります。

次回は、JavaScriptの中で何度も登場する「変数」にもう少し踏み込みます。

JavaScriptくんの机の上には、名前の付いた箱が並び始めます。

JavaScript講座・全10回 / 第3回 / 1ページ目(全3ページ)

掲載日:2026年9月13日

JavaScriptくんの机に、名前付きの箱が並び始めた

電卓係として働き始めたJavaScriptくん。

今度は、KAZUが在庫の数字を管理してほしいと頼みます。

KAZU
在庫が3本ある。1本使ったら2本になるよね。それを覚えておいて。
JavaScript
では「在庫」という名前で、3という値を持っておきます。
let 在庫 = 3;

ここで登場するのが、変数です。

初心者向けには「名前付きの箱」と説明されることがあります。

「在庫」という名前の箱に3が入っている、と考えるとイメージしやすいからです。

そして1本使ったので、こうします。

在庫 = 在庫 - 1;

すると、在庫は2になります。

KAZUは少し不思議に思いました。

KAZU
「在庫 = 在庫 - 1」って、数学だと変じゃない?

確かに、数学の「=」なら左右が等しいという意味です。

でもJavaScriptでは、ここでの「=」は右側を計算して、その結果を左側へ入れるという意味です。

「今の在庫3から1を引いて、その結果2を、在庫という名前に入れ直す」。

そう読むと理解しやすくなります。

現実の変化を、プログラムへ伝える

ただし、ここでも第1回と同じ注意があります。

棚から本当に1本使っただけでは、JavaScriptの在庫は勝手に2にはなりません。

人がボタンを押す、数量を入力する、バーコードを読むなど、現実の変化をプログラムへ伝える仕組みが必要です。

今日の第一歩:変数は、現実の情報をプログラムの中で扱うための「名前付きの値」。現実が変わったら、その変化をプログラムにも伝える。

JavaScript講座・全10回 / 第3回 / 2ページ目(全3ページ)

掲載日:2026年9月13日

変えていい箱と、変えない箱

JavaScriptくんの机には、いろいろな情報が並び始めました。

現在の在庫、最低在庫、税率、数量。

KAZUは全部同じように作ろうとしました。

let 税率 = 0.10;
let 最低在庫 = 2;
let 数量 = 1;

これでも動きます。

でも、AIが一つ質問しました。

AI
その3つは、全部途中で変える予定がありますか?
KAZU
数量は変わる。でも、この処理の中では税率や最低在庫は変えないかな。

そこで、変えないものは const、変わるものは let と考えてみます。

const 税率 = 0.10;
const 最低在庫 = 2;
let 数量 = 1;

constで作った名前に、あとから別の値を再代入しようとするとエラーになります。

const 最低在庫 = 2;
最低在庫 = 5; // エラー

一方、letなら変更できます。

let 数量 = 1;
数量 = 2;

何でも変えられる方が便利?

最初は、何でもletにした方が自由で便利に見えます。

でも、変える必要のない値まで変えられると、後から思わぬところで書き換わる可能性が増えます。

仕事でも、変更してよい欄と、勝手に変えてはいけない基準があります。

プログラムでも同じです。

KAZU
つまり、「変える必要があるか」を先に考えるんだね。
JavaScript
はい。変わる理由があるものだけ、変えられるようにしておくと分かりやすいです。

設計のコツ:文法を覚えるより、「この値は途中で変わるのか?」と考える習慣を持つ。

JavaScript講座・全10回 / 第3回 / 3ページ目(全3ページ)

掲載日:2026年9月13日

名前の付け方で、未来の自分が助かる

ある日、KAZUは少し前に書いたコードを見返しました。

const a = 300;
const b = 2;
const c = a * b;
KAZU
……aって何だっけ?

書いた本人なのに、分かりません。

そこで、名前を変えてみます。

const 単価 = 300;
const 数量 = 2;
const 合計金額 = 単価 * 数量;

今度は、コードを読むだけで意味が分かります。

これは小さな違いですが、コードが長くなるほど効いてきます。

機械だけが読むわけではない

プログラムは、機械が実行できればいいように見えます。

でも実際には、人間も何度も読みます。

不具合が出たとき。機能を追加するとき。数週間後に続きを作るとき。

そこで、名前の付け方が重要になります。

たとえば発注システムなら、

  • 現在在庫
  • 最低在庫
  • 注文数
  • 商品名
  • 発注番号

のように、意味が分かる名前にしておくと、後で見直しやすくなります。

短い名前が悪いわけではない

もちろん、短い名前が必ず悪いわけではありません。

ただ、初心者のうちは、意味の分かる名前を付けた方が、自分でコードを説明しやすくなります。

AI
「この変数は何を表していますか?」と聞かれたとき、すぐ説明できる名前なら良いですね。
KAZU
未来の自分へのメモみたいなものか。

その通りです。

第3回まとめ:変数は値を扱うための仕組み。大切なのは、何を表す値か、途中で変わるか、名前を見て意味が分かるかです。

次回は、JavaScriptくんに「判断」をもっと本格的に任せます。

そして、たった1文字の記号が結果を逆にしてしまう怖さも体験します。

JavaScript講座・全10回 / 第4回 / 1ページ目(全3ページ)

掲載日:2026年9月13日

「2本以下なら発注」――でも、2本は入るの?

KAZUは、在庫管理のルールをJavaScriptくんに説明しました。

KAZU
洗剤は、在庫が2本以下になったら発注が必要。
JavaScript
了解しました。2本以下ですね。

コードはこうなります。

if (在庫 <= 2) {
  表示 = "発注が必要です";
}

ここで使われている <= は「以下」です。

つまり、2本ちょうども含みます。

ところが、KAZUは試しにこう書き換えました。

if (在庫 < 2) {
  表示 = "発注が必要です";
}

今度は「2本未満」です。

すると、在庫が2本のときには発注の表示が出ません。

KAZU
あれ? 2本で発注したいのに出ない。
JavaScript
「2より小さい」と指示されています。2は小さくありません。

JavaScriptくんは間違っていません。

書かれた指示どおりに動いています。

間違えたのは、人間側の条件です。

まず日本語でルールを書く

条件式を書く前に、日本語でルールを書いてみます。

  • 0本 → 発注が必要
  • 1本 → 発注が必要
  • 2本 → 発注が必要
  • 3本 → 発注不要

ここまで書けば、「2を含める」ことがはっきりします。

第4回の第一歩:記号から考えず、先に「どの数字なら、どの結果にしたいか」を決める。

JavaScript講座・全10回 / 第4回 / 2ページ目(全3ページ)

掲載日:2026年9月13日

境目を試せば、間違いが見つかる

KAZUは、在庫0本と10本でテストしました。

0本なら「発注が必要です」。

10本なら「在庫は足りています」。

どちらも正しく見えます。

KAZU
よし、動いてる。
AI
2本と3本も試しましたか?

KAZUは、そこで初めて境目を試します。

在庫期待する結果
1本発注が必要
2本発注が必要
3本在庫は足りている

もし条件が 在庫 < 2 なら、2本のところだけ間違います。

0本と10本しか試していなければ、このバグには気づけません。

動作確認は、境目を見る

条件分岐では、切り替わる境目の数字が特に重要です。

最低在庫が2なら、

  • 1(境目の1つ下)
  • 2(境目そのもの)
  • 3(境目の1つ上)

を試します。

これは、発注システムだけではありません。

「18歳以上」「100点未満」「期限まで3日以内」など、条件があるところでは同じ考え方が使えます。

KAZU
全部の数字を試さなくても、境目を狙えば効率がいいんだね。
AI
はい。条件が切り替わるところは、不具合が出やすい場所です。

テストのコツ:条件の境目、その1つ下、その1つ上。この3つをまず試す。

JavaScript講座・全10回 / 第4回 / 3ページ目(全3ページ)

掲載日:2026年9月13日

条件が増えると、順番まで仕事になる

在庫表示を、もっと分かりやすくしたいとKAZUは考えました。

0本なら「在庫切れ」。

1〜2本なら「発注が必要」。

3本以上なら「在庫あり」。

JavaScriptくんに頼みます。

if (在庫 === 0) {
  表示 = "在庫切れ";
} else if (在庫 <= 2) {
  表示 = "発注が必要";
} else {
  表示 = "在庫あり";
}

ここで重要なのは、条件の順番です。

0本は「2本以下」にも当てはまります。

だから、先に「0本か」を確認しています。

もし「2本以下」を先に書けば、0本でも「発注が必要」となり、「在庫切れ」という特別な表示まで進みません。

条件が増えたら、判断表に戻る

KAZUは、紙にこう書きました。

在庫表示
0在庫切れ
1〜2発注が必要
3以上在庫あり

先に表があれば、コードにしたときの確認もしやすくなります。

これは、現在作っている在庫管理の「緑・黄・赤」の考え方にもつながります。

KAZU
コードを書く前にルール表を作るのも、プログラミングなんだね。
AI
むしろ、そこが設計です。コードは決めたルールを実行できる形に翻訳する作業です。

第4回まとめ:if文は「判断」を任せる仕組み。大切なのは、条件の意味、境目の確認、そして複数条件の順番です。

次回は、商品が増えてきます。

KAZUはJavaScriptくんに100個の商品の確認を頼もうとします。

そして、「同じことを100回書くの?」という問題にぶつかります。

JavaScript講座・全10回 / 第5回 / 1ページ目(全3ページ)

掲載日:2026年9月13日

商品100個を、1個ずつ書くつもり?

ある日、KAZUは商品一覧を見ながら考えていました。

洗剤、ゴミ袋、手袋、ペーパータオル……。

商品が増えてきました。

KAZU
全部の在庫を確認して、発注が必要なものだけ出したい。
JavaScript
商品一覧をください。順番に確認します。

KAZUは、最初こう書こうとしました。

console.log("洗剤");
console.log("ゴミ袋");
console.log("手袋");

3個なら書けます。

でも、100個なら100行です。

KAZU
これ、商品が増えるたびに書き足すの?
JavaScript
同じ仕事なら、繰り返しにしましょう。

そこで、商品を一つの一覧にまとめます。

const 商品 = ["洗剤", "ゴミ袋", "手袋"];

そして、順番に取り出します。

for (const 名前 of 商品) {
  console.log(名前);
}

JavaScriptくんは、洗剤、ゴミ袋、手袋と順番に処理します。

商品が10個になっても100個になっても、同じ仕組みで進められます。

人が繰り返す仕事は、機械が得意

プログラムの強みの一つは、同じ手順を何度でも繰り返せることです。

人は100回同じ確認をすると疲れます。

JavaScriptくんは、100回でも1000回でも、同じ指示なら同じように実行します。

第5回の第一歩:同じ形の処理を何度も書き始めたら、「繰り返しにできないか」を考える。

JavaScript講座・全10回 / 第5回 / 2ページ目(全3ページ)

掲載日:2026年9月13日

合計が合わない。途中経過を見せてもらう

次は、商品の金額を合計します。

const 金額一覧 = [300, 500, 200];
let 合計 = 0;

for (const 金額 of 金額一覧) {
  合計 = 合計 + 金額;
}

正しい合計は1000円です。

ところが、ある日、KAZUが作った計算では結果が合いません。

KAZU
どこで間違ったんだ? 最後の数字だけ見ても分からない。

そこで、JavaScriptくんに途中経過を報告してもらいます。

for (const 金額 of 金額一覧) {
  合計 = 合計 + 金額;
  console.log("途中の合計", 合計);
}

表示は、

  • 300
  • 800
  • 1000

と進みます。

もし2回目で急におかしくなれば、その周辺を調べればよいと分かります。

最後だけではなく、途中を見る

これは、デバッグの基本的な考え方です。

「最終結果が違う」だけでは、原因の場所が分かりません。

途中の値を見えるようにすると、どこまでは正しく、どこからおかしいかを絞り込めます。

KAZU
仕事でも、最後の数字だけ合わないより、途中の集計を見た方が原因を探しやすいね。
AI
同じです。プログラムでも「途中を見える化する」と原因を追いやすくなります。

確認のコツ:結果が違ったら、途中の値を表示して「どこから違うか」を探す。

JavaScript講座・全10回 / 第5回 / 3ページ目(全3ページ)

掲載日:2026年9月13日

便利な繰り返しほど、間違えると一気に広がる

JavaScriptくんは、繰り返し処理が得意です。

でも、その便利さには注意も必要です。

もし条件を間違えたまま100件を処理すれば、100件まとめて間違えます。

KAZUは、発注が必要な商品だけを出す処理を作ります。

for (const 商品 of 商品一覧) {
  if (商品.在庫 <= 商品.最低在庫) {
    console.log(商品.名前 + ":発注");
  }
}

ここでは、商品を1件ずつ取り出し、その商品の在庫と最低在庫を比較しています。

正しければ、とても便利です。

でも、もし比較記号を逆に書けば、在庫が十分ある商品ばかり発注対象にするかもしれません。

最初は3件で試す

いきなり100件の本番データで試すより、まず3件だけ用意します。

商品在庫最低在庫期待
洗剤12発注
手袋52発注不要
ゴミ袋22発注

これなら、

  • 発注になる商品
  • 発注にならない商品
  • 境目ちょうどの商品

を一度に確認できます。

KAZU
少ないデータで確認してから、本番の件数に増やす方が安全なんだね。
JavaScript
はい。私は指示されたことを高速で繰り返します。だから、指示が正しいかを先に確かめてください。

JavaScriptくんの得意なところと、怖いところが同じ場所にあります。

速く、何度でも、同じ処理をする。

正しい指示なら強力です。

間違った指示でも、やはり高速です。

第5回まとめ:繰り返しは、大量の同じ作業を任せる仕組み。小さいデータで確認し、条件と途中経過を見てから件数を増やす。

ここまでで、JavaScriptくんには「計算」「値の保持」「判断」「繰り返し」という仕事を任せられるようになりました。

少しずつ、単なるボタンの動きから「システムらしい処理」へ近づいてきました。

編集後記・蓄積ページ

編集後記

並び順

編集後記は、過去の内容を消さず、1回ごとに別ページとして残していきます。

第1回
50代・介護職の私がAIとホームページを作り始めたら、ここまで来た
2026年9月11日
第2回
一つの家から、町へ
2026年9月11日
第3回
公開できた。その先にも、確かめることがあった
2026年9月12日
第4回
一軒目の家を、順番に作っていく
2026年9月12日
第5回
公開したら終わりではなく、そこから始まった
2026年9月13日
第6回
プログラムだけでは、サイトは育たない
2026年9月13日
第7回
50代から始めても、公開まで行けた
2026年9月13日
第8回
「インターネットに接続する」を、自分で最後までやってみた
2026年9月13日
第9回
僕のサイト、勝手に持っていかれたらどうなる?
2026年9月13日
第10回
表では何も起きていない。でも裏では大忙し
2026年9月13日
第11回
家具を置きすぎた部屋
2026年9月13日
第12回
そのボタン、押していいやつですか?
2026年9月13日
第13回
スマホという小さな部屋
2026年9月13日
第14回
直したはずなのに、直っていない
2026年9月14日
第15回
CSS会議、大荒れ
2026年9月14日
第16回
足すより、整理する
2026年9月14日
第17回
家はできた。でも住所がない
2026年9月14日
第18回
修理屋を雇いたい
2026年9月14日
第19回
修理ロボット、暴走寸前
2026年9月14日
第20回
ホームページの顔を決めるだけのはずだった
2026年9月14日
第21回
都会が、だんだん夢の国になる
2026年9月14日
第22回
最後に残ったのは、景色ではなく性格だった
2026年9月14日
第23回
翻訳ボタン、お前は昨日まで動いていただろ
2026年9月15日
第24回
パソコンとiPhone、二人とも機嫌を取れ
2026年9月15日
第25回
地雷撤去班、夜11時50分に報酬を受け取る
2026年9月15日
第26回・緊急実況
アメリカから6アクセス!?
2026年9月15日
第27回
ホームページを作ったら、今度は泥棒の心配が始まった
2026年9月18日
第28回
秘密の番号をスクショしたら、それは秘密なのか?
2026年9月18日
第29回
何も起きない。実はそれが大成功
2026年9月18日
第30回
GitHub登場。名前からして初心者を帰らせにくる
2026年9月18日
第31回
壊さない人より、戻せる人が強かった
2026年9月18日
第32回
iPhone一本で開発? 指が先にプログラマーになった
2026年9月18日
第33回
GitHubとCloudflare、ついに握手する
2026年9月18日
第34回
私の仕事をコンピューターに奪われました。私が頼みました
2026年9月18日
第35回
自動化は魔法だと思ったら、ものすごく几帳面な新人だった
2026年9月18日
第36回
GitHubに置いた。Cloudflareが勝手に動いた。事件です
2026年9月18日
第37回
自動更新したのに変わらない。犯人は誰だ
2026年9月18日
第38回
第26回から増えない編集後記
2026年9月18日
第39回
最新版が三人いる
2026年9月18日
第40回
ZIPを開いたら、なぜかLetsViewが出てきた
2026年9月18日
第41回
白い画面ほど怖いものはない
2026年9月18日
第42回
公開ボタンを押さない勇気
2026年9月18日
第43回
9分前。ついに証拠を見つけた
2026年9月18日
第44回
そして人間は、ボタン係を卒業する
2026年9月18日
第1回・第2回は当時の記録として保存しています。新しい記録は別ページで追加します。
第1回・記載日:2026年9月11日

KAZU × AI 編集後記

50代・介護職の私がAIとホームページを作り始めたら、ここまで来た

私はプログラマーではありません。介護の仕事をしながら、「仕事の中の面倒な作業を、もっと簡単にできないだろうか」と考えたことが、プログラミングに興味を持つきっかけでした。

① 「みんなでゼロから学べる場所を作れないか」

システムを試作していくうちに、プログラムを作ること自体が面白くなってきました。そこで思いついたのが、初心者がゼロから一緒に学べるホームページです。

完成した教材だけを並べるのではありません。私自身が分からないところから始め、AIに質問し、実際に作り、失敗し、直していく。その過程まで記事にしてしまおうと考えました。

② 最初に知った3つの言語

HTML

ホームページの骨格。

CSS

服装や見た目。

JavaScript

動作や判断。

この3つの役割を知ったことで、「ホームページは一つの言語だけで作るわけではない」ということが少しずつ見えてきました。

③ 最初の失敗。「表しか動かないじゃん」

最初の試作では、見た目はホームページらしくなりました。しかし実際に触ってみると、画面はあるのにボタンや機能が十分に動きませんでした。

KAZU
「ホームページ表しか動かないじゃん」

ここで初めて、「見た目ができること」と「システムとして動くこと」は別だと実感しました。そこでJavaScriptを使い、記事画面の切替、ボタン、ミニテスト、学習進捗、用語検索などを実際に動かすようにしました。

④ 次に挑戦したのが、多言語化

日本だけでなく海外の初心者にも読んでもらえる可能性を考え、言語切替を付けることにしました。最初は日本語と英語から始めました。しかし、ここでも簡単にはいきませんでした。

KAZU
「まだ変わってないじゃん」

言語を選んでも表示が変わらない。調べると、古い翻訳処理と新しい翻訳処理を重ねて追加したことで、JavaScriptの定義が重複し、処理全体が止まる原因になっていました。

⑤ 直すだけではなく、組み直す

翻訳部分だけを継ぎ足して直すのではなく、一度整理して一つの仕組みにまとめ直しました。すると言語切替が動くようになりました。不具合が出たとき、目の前だけ直すより、構造自体を整理した方がよい場合があることを学びました。

⑥ 4言語から9言語へ

現在の試作では、日本語、英語、フランス語、スウェーデン語、中国語、韓国語、ミャンマー語、インドネシア語、タイ語を選べる形にしています。

すると次は、メニューや見出しは切り替わるのに、一部だけ日本語が残る問題が出ました。表示されている文章の中に、翻訳データへ登録していないものがあったためです。そこで画面の文章を見直し、翻訳対象をまとめて管理する方向へ修正しました。

⑦ 僕のこと① — 学んでいたことを、今になって使い始めた

大学では経営情報を学び、コンピューターや情報処理についても一通り勉強しました。ただ、その頃は、学んだことを自分の生活や仕事に取り入れようとは、あまり考えていませんでした。勉強したことと、毎日の暮らしや仕事が、自分の中ではまだつながっていなかったのだと思います。

介護の仕事を続ける中で、入力や確認、集計など、「もう少し簡単にできないだろうか」と感じる場面が出てきました。消耗品の在庫を確認して発注につなげること。献立から必要な材料をまとめ、買い出しに使える形にすること。作りたいものが、仕事の中から具体的に見えてきました。

そこで初めて、大学で学んだことを、自分のためにも仕事のためにも使ってみようと思うようになりました。昔の知識をそのまま取り出せば、すぐに作れるというわけではありません。それでも、以前の学びを、今の経験と結びつけながら確かめ直すことはできます。

50代になった今、昔まいた種がようやく芽を出したような感覚があります。使っていなかった知識を掘り起こし、今の自分の経験と結びつけて、もう一度ゼロ地点から形にしていく。それが、今の自分にとっての「ゼロから始めるプログラム言語」なのだと思います。

⑧ 実際にやって感じたこと

実際にプログラムを作り始めて、一番最初に感じたのは、「思っていたプログラミングとは少し違う」ということでした。難しい言葉やコードを覚えることだけでなく、まず「どうしたいのか」を考えることが必要でした。

「ここをこうしたい」「このボタンがあった方が使いやすい」「入力するより選べた方が簡単ではないか」「一度入力したものを別の画面にも反映できないか」。普段の仕事で感じていた小さな不便が、プログラムを作る材料になりました。

もちろん、画面ができたからといって、すぐに思いどおりに使えるわけではありませんでした。ボタンを押しても動かない。入力した内容が別の画面に出ない。表示や印刷の形が思っていたものと違う。実際に使って初めて気づくことが、いくつもありました。

一つずつ動かし、どこがおかしいのかを確かめ、直して、もう一度使ってみる。直ったときには「あ、本当に動いた」と感じます。思っていたことが目の前で形になるところに、面白さがありました。

⑨ 今になって分かった自分の強み

プログラムを作り始めてから、少しずつ自分の強みに気づくようになりました。仕事の中で、どこが面倒なのか、どの確認に手間がかかるのか、どんな表示なら使いやすいのか。そうしたことを、自分の経験から具体的に考えられることです。

見た目が整っていても、必要な内容が反映されなければ困ります。ボタンがあっても動かなければ使えません。自分が使う場面を思い浮かべるからこそ、「ここは変だ」「ここを直したい」と伝えることができます。

分からない技術は、AIに聞きながら確かめています。一方で、何を作りたいか、どこを直したいか、使ってみてどう感じたかは、自分の側から伝えなければなりません。経験を言葉にし、実際の画面で確かめる。その役割を、少しずつ意識するようになりました。

⑩ 僕のこと④ — 学んだことが、今になってつながった

大学時代、僕はコンピュータや経営情報について一通り勉強しました。その当時は、授業として必要なことを学んでいるという感覚が強く、それを自分の生活や仕事に取り入れようとは、あまり考えていませんでした。

今は、先に生活や仕事の課題があります。「この作業を少し簡単にしたい」「必要な情報を分かりやすく見たい」。そのために何が必要なのかを調べ、試しています。学ぶ理由が、自分の日常の中にできました。

大学での学びと、仕事で積み重ねた経験。そして、分からないことを聞きながら形にしていけるAIとのやり取り。それぞれが、今になってつながり始めています。

⑪ これからの進め方 — 少しずつ、内容を育てる

一回の作業は、「技術面を3項目」「構成を3項目」「僕のことを3項目」。番号を振って、少しずつ進める方針にしました。技術の話だけに偏らず、ページの構成と、その中で何を伝えるかも一緒に考えていきます。

原則として毎日1時間ずつ作業し、2026年10月11日ごろの公開を目指します。技術を一度に大きく変えすぎると、自分でも分からなくなってしまいそうです。今あるものを動かして確認しながら、必要なところを足していきたいと思っています。

プログラムの型も大切ですが、中に何を載せるのかが肝心です。僕が何を考え、どう学び、仕事や生活でどう使おうとしているのか。その内容を、一つずつ積み重ねていきたいと思います。

現在地

2026年9月11日現在、サイトは基本構造を作る第1段階の終盤から、全体を仕上げる第2段階の入口にいます。記事、画面移動、動くボタン、進捗保存、ミニテスト、用語集、ヘルプ、スマホ表示、9言語対応の土台まで作ってきました。

まだ完成ではありません。記事追加、翻訳確認、連絡手段、プライバシーポリシー、SEO、公開環境でのテストなどが残っています。

10月11日公開を目指して

目標は2026年10月11日前後にv1.0を公開することです。仕事をしながら少しずつ進めるからこそ、専門家ではない人間がAIと一緒にどこまで作れるのか、その過程自体を残していきたいと思っています。

第1回はここで保存。
今後の内容でこのページを上書きせず、新しい編集後記は別ページに追加します。
第2回・記載日:2026年9月11日

KAZU × AI 編集後記

一つの家から、町へ

ホームページを作っているうちに、「インターネット上に家を建てるようなものだ」という感覚が強くなってきました。

最初は、一軒の小さな家でいい。記事が一つ増えれば、そこにもう一つ部屋ができる。別のテーマが増えれば、隣にもう一軒建つ。そうやって少しずつ広げていけば、やがて一つの町のようになっていくのかもしれません。

学校、工房、画廊

今あるのは、まず「学ぶ場所」です。記事を読み、用語を確認し、実際にコードを触る。

その次には、「作る場所」ができます。実際に作ったプログラムや、試作品、失敗から直した過程を置く工房です。

そして12月の課題として、「画廊」を作りたいと思っています。完成した画面だけではなく、最初の案、修正途中、完成版まで並べれば、作品そのものと制作の過程の両方を見せられます。

その先は、交流広場

さらに先には、Facebookのように人同士が交流できる構造も考えられます。ただし、最初から大きなSNSを作る必要はありません。

学習記録を投稿する。作品を画廊に載せる。ほかの人がコメントする。まずは、このサイトに必要な機能だけを持つ小さな交流広場から始めればいい。

年間計画として育てる

9月から10月は本体サイトを作り、公開まで持っていく。11月は、記事や導線を整える。12月は画廊。2027年に入ったら、小さな交流機能を試す。

一気に完成させるのではなく、一つ完成させてから次へ進む。建物を一軒ずつ増やすように進めれば、途中の成果も残ります。

収益化について

サイトが育てば、広告、教材、テンプレート、小規模なツールなど、収益化につなげることもできます。ただし、先にお金だけを目的にするのではなく、まず人が読みたくなる内容と、実際に役立つものを蓄積することが大切だと思っています。

今はまだ町の入口です。まず一軒目をしっかり建てる。そして、次の一軒を増やす。その積み重ねを続けていきます。

蓄積ルール:この第2回も保存し、次回は第3回として別ページに追加します。

JavaScript講座・全10回 / 第1回 / 1ページ目(全3ページ)

掲載日:2026年9月12日

職場に、ものすごく速い新人が来た

ある日、数人さんの職場に、新しい助手がやってきました。

名前は「JavaScriptくん」。

この助手、とにかく計算が速い。商品が100個あっても、同じ手順の計算を延々と続けられます。

ただし、仕事を頼むにはコツがあります。

数人さんが言いました。

「洗剤、そろそろ少ないから、いい感じにしておいて」

JavaScriptくんは動きません。

さぼっているのでしょうか。

いいえ。「そろそろ」「少ない」「いい感じ」の具体的な意味が、プログラムに書かれていないからです。

そこで、指示を変えます。

「洗剤の在庫が2本以下だったら、画面に『発注してください』と表示して」

これなら、動く仕組みを作れます。

const 在庫 = 1;

if (在庫 <= 2) {
  alert("洗剤を発注してください");
}

今は記号を覚えなくても大丈夫です。書いてあることは、次の3つです。

  1. 在庫は1本。
  2. 2本以下かどうか確かめる。
  3. 当てはまったら、お知らせを出す。

プログラミングの第一歩は、曖昧なお願いを、実行できる手順に変えることです。

これは、職場の引き継ぎにも似ています。

「いつものようにお願いします」では、初めて担当する人には伝わりません。

「食事が終わったら食器を下げて、テーブルを拭いてください」なら、行動に移しやすくなります。

数人さんが発注システムについて決めた、

「最低在庫数に達したら、発注が必要と分かるようにする」

というルール。それは、まさにプログラムに必要な指示です。

コードを書き始める前から、設計は始まっています。

ただし、JavaScriptくんには棚を見る目はありません。

棚から洗剤を1本使っても、それだけでは画面の数字は変わりません。人が使用数を入力するなど、現実の変化を伝える仕組みが必要です。

計算を任せることと、現実の情報を集めることは、別々の仕事なのです。

JavaScript講座・全10回 / 第1回 / 2ページ目(全3ページ)

掲載日:2026年9月12日

画面の裏には、3人の担当者がいる

今度は、発注画面を一つ作ることにします。

登場するのは、3人の担当者です。

担当者主な仕事発注画面では
HTMLさん部品を用意する商品名・入力欄・ボタンを置く
CSSさん見た目を整える色・文字の大きさ・配置を調整する
JavaScriptくん動作を受け持つ計算して、結果を表示する

HTMLさんが「発注する」というボタンを置きました。

CSSさんが、ボタンを見やすい緑色にしました。

立派な画面になりました。

ところが、押しても発注処理が始まりません。

そこでJavaScriptくんの出番です。

「このボタンが押されたら、この処理をする」という指示をつなぎます。

まずは、押すと文字が変わる小さな例を見てみましょう。

<button onclick="返事する()">呼び出す</button>

<p id="伝言">待機中です</p>

<script>
function 返事する() {
  document.getElementById("伝言").textContent =
    "はい、何を計算しましょう?";
}
</script>

画面には、最初に次のものが出ます。

「呼び出す」ボタンと、「待機中です」という文字です。

ボタンを押すと、文字が変わります。

はい、何を計算しましょう?

このとき、裏側では3つのことが起きています。

  1. ボタンが押された。
  2. 「返事する」という名前の処理が呼ばれた。
  3. 「伝言」という目印の場所の文字を書き換えた。

functionは、ひとまとまりの仕事に名前を付けるための書き方です。

ここでは、その仕事を「返事する」と名付けました。

id="伝言"は、画面の部品に付けた目印です。

職場で「そこの書類を取って」と言われても、書類が何枚もあれば迷いますよね。

「発注書と書かれたファイルを取って」なら、探す対象が分かります。

JavaScriptも同じです。画面のどの場所を変えるか、目印を使って指定できます。

ここまで分かると、以前の「ボタンが反応しない」という問題の見方が変わります。

見た目が完成していても、呼び出す処理の名前が違っていたり、途中でエラーが起きていたりすると、目的の動作にはつながりません。

画面があることと、仕事の流れがつながっていることは、それぞれ確認が必要です。

JavaScript講座・全10回 / 第1回 / 3ページ目(全3ページ)

掲載日:2026年9月12日

小さな判断を、一つ任せてみる

では、JavaScriptくんに発注の判断を一つ任せましょう。

今回は、次のルールです。

洗剤の在庫が2本以下なら、「発注が必要です」。3本以上なら、「在庫は足りています」。

コードにすると、こうなります。

const 在庫 = 1;
const 最低在庫 = 2;

if (在庫 <= 最低在庫) {
  alert("発注が必要です");
} else {
  alert("在庫は足りています");
}

急に難しそうに見えるかもしれませんが、順番に読むと単純です。

const 在庫 = 1;

「在庫」という名前を付けて、数字の1を扱います。

こうして情報に名前を付けると、数字だけを並べるより意味が分かりやすくなります。こうした名前付きの情報を扱う仕組みが「変数」です。なお、constで作った名前には、後から別の値を代入できません。

if (在庫 <= 最低在庫)

「もし、在庫が最低在庫以下なら」という意味です。

<=は「以下」。今回なら、2本ちょうども含みます。

else

「そうでなければ」という意味です。

今回は、在庫が2本以下ではない場合に「在庫は足りています」と表示します。

これで、在庫数によって返事が変わるようになりました。

動作を確かめてみましょう。

入れた在庫数出てほしい結果
0本発注が必要です
1本発注が必要です
2本発注が必要です
3本在庫は足りています
10本在庫は足りています

ここで、数人さんがわざと記号を変えたとします。

if (在庫 >= 最低在庫)

>=は「以上」です。

すると、10本あるのに「発注が必要です」と言い、0本なのに「在庫は足りています」と言ってしまいます。

JavaScriptくんは、胸を張って報告します。

「指示どおりに実行しました!」

たしかに、書かれた指示には従っています。でも、頼みたかった仕事とは逆です。

これが、動いてはいるけれど、結果が間違っている不具合です。

だから確認するときは、「何か表示された」で終わりにせず、「この数字なら、この結果になるはず」と比べます。

特に今回は、境目の2本と3本を確かめると、ルールの間違いを見つけやすくなります。

なお、この例は学習用です。本物の入力画面では、空欄やマイナスの数字が入った場合も考えます。それは、基本の動きを理解してから追加していきましょう。

今日の持ち帰りは、3つです。

  • JavaScriptは、画面の動作や計算を担当する。
  • 人が決めたルールを、具体的な指示にする。
  • 動いた後は、期待どおりの結果か確かめる。

次回は、この助手に「商品名」「単価」「数量」を渡します。

いよいよJavaScriptくん、電卓係に就任です。

第5回・記載日:2026年9月13日

KAZU × AI 編集後記

公開したら終わりではなく、そこから始まった

Cloudflareで最初の公開に成功したとき、KAZUは画面を見ながら、しばらくそのURLを眺めていました。

KAZU
……出た。本当にインターネットで見える。

それまでのホームページは、自分の端末の中にあるファイルでした。

HTMLを直し、CSSを整え、JavaScriptを動かす。何度も失敗しながら、少しずつ形にしてきました。

でも、その日から意味が変わりました。

「自分の中だけの作品」から、「外から見られるサイト」になった。

ところが、翌日から別の問題が始まった

公開できたのだから、あとは記事を増やしていけばいい。

KAZUはそう思っていました。

しかし、実際にはそう簡単ではありませんでした。

KAZU
直したはずなのに、ページが変わってないじゃん。

新しいファイルを作ったのに、公開ページは古いまま。

どのファイルをアップロードしたのか。

最新版はどれなのか。

Cloudflareのどの画面から更新するのか。

公開前とは違う種類の迷いが増えていきました。

「作る」と「運営する」は違う

ここで初めて、ホームページには二つの仕事があると気づきました。

一つは、ページそのものを作る仕事。

もう一つは、作ったものを公開し、更新し、壊れていないか確認する仕事です。

AI
今はもう「制作」だけではなく、「運営」に入っています。
KAZU
公開したら終わりじゃなくて、ここから始まるのか。

前の成功版を残すことにした

そこで、動いていた版を消さずに残すことにしました。

v0.67、v0.68、v0.84……。

最新版を作るたびに、前の成功版を保存する。

公開するときだけ、最新版を index.html として使う。

このルールができてから、更新の怖さが少し減りました。

もし新しい版で失敗しても、戻れる場所があります。

「増やす」だけではだめだった

さらに、記事を増やすときにも問題が出ました。

同じ内容を追加し直せば、記事が重複する。

新しい編集後記を上書きすれば、過去の記録が消える。

機能を直したつもりが、別の機能を壊すこともある。

そこで、KAZUは更新のたびに確認することを決めました。

前の内容が残っているか。重複していないか。新しい内容だけが増えているか。

KAZU
作るだけなら増やせばいい。でも、運営するなら「残す」「直す」「戻す」も必要なんだね。

公開した日が完成日ではありませんでした。

むしろ、その日からサイトは「育てるもの」になりました。

第5回の記録:公開はゴールではなく、運営のスタート。制作・更新・保存・確認を一つの流れとして考えるようになった。
第6回・記載日:2026年9月13日

KAZU × AI 編集後記

プログラムだけでは、サイトは育たない

最初のころ、KAZUは画面が動くたびにうれしくなりました。

ボタンを押すと画面が変わる。

用語を検索できる。

翻訳ボタンが動く。

ミニテストが進む。

KAZU
だいぶホームページらしくなってきた。

ところが、ある日、記事一覧を見ていて気づきました。

KAZU
……記事数、少なくない?

動くけれど、読むものが少ない

機能は増えていました。

でも、読む記事が少ない。

用語集も、検索機能があっても中身が少なければ意味がありません。

翻訳機能があっても、翻訳する文章そのものが少なければ広がりません。

ここで、KAZUは一つ大きなことに気づきました。

プログラムは器であって、サイトの価値そのものではない。

中身があって、初めて機能が生きる

用語集なら、検索機能と237語の中身がそろって初めて役に立つ。

ミニテストなら、ボタンが動くだけではなく、問題・ヒント・理由があって学習になります。

JavaScript講座も、コードだけを並べるのではなく、なぜそれを使うのか、どこで失敗するのか、どう直したのかまで書くことで、初心者が読み続けやすくなります。

AI
機能は「届ける仕組み」で、記事や説明は「届ける内容」です。
KAZU
どっちか片方だけじゃ、サイトにならないんだ。

失敗したことも、記事になる

ここで、さらに面白いことに気づきました。

今まで困ったことの多くが、そのまま教材になります。

翻訳が動かなかった。

用語検索が反応しなかった。

Cloudflareでどこを押すか分からなかった。

公開したのに反映されなかった。

サイトマップが最初は取得できなかった。

そのときは「失敗」でした。

でも、順番に整理すれば、初心者が同じところで迷ったときの案内になります。

「完成した知識」ではなく「学んだ過程」を残す

このサイトの強みは、専門家が完成した知識だけを教える形ではありません。

KAZU自身が、分からないところから始めています。

だから、

「ここが分からなかった」

「ここで間違えた」

「こうしたら直った」

という過程を、そのまま残せます。

KAZU
だったら、失敗も消さない方がいいね。
AI
そうです。失敗から修正までが、初心者にとって一番参考になることがあります。

この頃から、KAZUの中でサイトの作り方が少し変わりました。

新しい機能を一つ追加するだけでなく、記事を一つ増やす。

新しい用語を足す。

編集後記で制作の裏側を残す。

技術と内容を、一緒に育てる。

第6回の記録:プログラムは器。記事、用語、失敗、気づき、実体験が中身になる。サイトは機能と内容の両方で育つ。
第7回・記載日:2026年9月13日

KAZU × AI 編集後記

50代から始めても、公開まで行けた

最初にHTMLを触り始めたころ、KAZUはまだ自分がここまで来るとは思っていませんでした。

ホームページの骨組みがHTML。

見た目を整えるのがCSS。

動きを付けるのがJavaScript。

一つずつ聞きながら、確かめながら進めていました。

KAZU
今さら始めても遅いかな。

そんな気持ちが出ることもありました。

学校では、今の若い世代が普通にプログラミングを学ぶ時代です。

「自分はずいぶん遅れて始めたんだな」と感じる瞬間もありました。

でも、先に「作りたいもの」があった

KAZUには、ただ勉強するだけではなく、作りたいものがありました。

仕事で使える発注システム。

献立から材料を拾い出す食材システム。

そして、初心者が一緒に学べるホームページ。

先に課題があったから、学ぶ理由がはっきりしていました。

昔の勉強が、今になってつながった

大学では経営情報を学び、コンピューターや情報処理にも触れていました。

でも、その頃は、学んだことを自分の生活や仕事に取り入れるという発想は強くありませんでした。

知識は知識。

仕事は仕事。

別々に存在していました。

それが50代になった今、つながり始めました。

KAZU
昔やったことが、今になって少しずつ意味を持ち始めた感じがする。
AI
今は「何のために使うか」がはっきりしています。だから学んだことが実際の形につながっています。

分からないところで止まっても、また進めた

もちろん、順調だったわけではありません。

ボタンが動かない。

翻訳されない。

最新版がどれか分からない。

Cloudflareの画面で迷う。

サイトマップがうまく読まれない。

何度も「どこ?」「なぜ?」と止まりました。

でも、そのたびに画面を確認し、やり直し、少しずつ前へ進みました。

完璧に理解してから進んだのではありません。

進みながら理解した。

公開URLを見たとき

そして、Cloudflareで公開されたページを実際に開いたとき。

KAZU
これ、世界中から見られるんだよね。

そのとき、学習が「勉強」だけではなくなりました。

自分で作ったものを、インターネット上に置いた。

その経験が残りました。

年齢より、続け方

若いときに資格を取れば、良い環境に入りやすいかもしれません。

でも、年齢を重ねてからでも、実際に作り、公開し、直し続けることはできます。

大事なのは、一度に全部覚えることではありません。

分からないところを一つずつ潰していく。

毎日少しずつ積み重ねる。

そして、実際に動くものを残す。

KAZU
資格がなくても、100%機械が受け付けるかどうかで、作ったものは動くんだね。

コードは、年齢を見ません。

正しければ動く。

間違っていれば動かない。

その厳しさと分かりやすさが、今は面白く感じられます。

第7回の記録:50代からでも、分からないところを一つずつ確認し、実際に作り、公開するところまで進めた。昔の学びと今の経験が、ようやく一つにつながり始めた。
第8回・記載日:2026年9月13日

KAZU × AI 編集後記

「インターネットに接続する」を、自分で最後までやってみた

その日の朝、KAZUの手元にあったのは、一つの index.html でした。

見た目も整ってきた。

記事もある。

用語集も動く。

翻訳も付けた。

でも、まだそれは自分の端末の中にあるだけでした。

KAZU
これを、本当にインターネットの上に出せるの?

ここから、「ホームページを作る」作業が、「ホームページを公開する」作業へ変わりました。

第1場面 公開するファイルを一つに決める

最初に迷ったのは、どのファイルを公開するのかでした。

制作途中の版はいくつもあります。

v0.67、v0.68、v0.84……。

そこで、過去版は版名付きで保存し、公開用だけ index.html にすることにしました。

KAZU
前のやつは残しておきたい。
AI
では、保存版はバージョン名付き。公開用だけindex.htmlにしましょう。

このルールが、後の更新でも基準になりました。

第2場面 Cloudflareへ入る

Cloudflareの管理画面を開きます。

Workers & Pages。

そして、zero-kara-prog

ところが、画面にはたくさんの項目があります。

KAZU
どこ?

概要。

デプロイ。

設定。

ドメイン。

どれも、それらしく見えます。

何度か画面を行き来しながら、ようやく「公開したサイトを更新する場所」が見えてきました。

第3場面 新しいアプリを作るのではなかった

更新しようとしていると、「アプリケーションを作成する」という画面も出てきます。

一瞬、KAZUは考えました。

KAZU
また新しく作るの?
AI
違います。もうzero-kara-progはあります。新しい家を建てるのではなく、今の家を更新します。

既存の zero-kara-prog を開く。

そして、

「デプロイ」→「新しいデプロイ」

へ進む。

これが、更新の入口でした。

第4場面 index.htmlをアップロードする

最新版のindex.htmlを選び、デプロイします。

しばらく待つと、更新が完了します。

でも、ここで終わりではありません。

公開URLを開いて、本当に新しくなったか確認します。

KAZU
表示された。これが今の最新版だ。

ここで初めて、「デプロイ成功」と「公開ページが正しい」がつながりました。

第5場面 URLが有効ではない?

途中で、「有効なURLがありません」と見える場面もありました。

ファイルは置いたのに、外から見る住所が有効になっていない。

そこで設定のドメイン画面を開き、プロダクションの

zero-kara-prog.mmdei.workers.dev

を有効にしました。

KAZU
家は建ってるけど、住所がまだ付いてないようなものか。

まさに、そんな感覚でした。

第6場面 Googleに見つけてもらう準備

公開できたあと、次に考えたのは検索です。

URLを知っている人だけが来るのではなく、Googleにも見つけてもらいたい。

そこで、robots.txtsitemap.xml を用意しました。

sitemap.xmlをブラウザで開くと、見慣れない英語が表示されます。

KAZU
エラー?
AI
XMLに見た目の情報がないという表示です。内容が見えていれば大丈夫です。

「壊れているように見えるもの」が、実は正常。

ここでも、実際に確認しながら一つ覚えました。

第7場面 Search Consoleで「取得できませんでした」

Google Search Consoleへサイトマップを送信します。

ところが、最初はうまくいきません。

「取得できませんでした」

KAZU
また駄目なの?

そこで、まずsitemap.xmlが直接開けるかを確認しました。

URLから読める。

公開されている。

そのうえで、もう一度送信します。

そして、画面に出た表示は、

「成功しました」

KAZU
通った。

ただの設定画面なのに、その文字が少しうれしく見えました。

第8場面 Googleに登録された

次はURL検査です。

トップページのURLを入れます。

しばらく待つと、表示されたのは、

「URL は Google に登録されています」

さらにCloudflareの解析には、GoogleBotのアクセスも見えました。

KAZU
Googleが、本当にこのサイトを見に来たってこと?
AI
そうです。検索エンジンのクローラーが巡回しています。

ここで、インターネット公開が急に現実味を持ちました。

ページを作った。

URLで公開した。

Googleへ知らせた。

そして、Googleが見に来た。

一つの家から、インターネット上の住所へ

KAZUは、この流れを家づくりにたとえました。

HTMLで家を建てる。

Cloudflareの土地へ置く。

workers.devで住所を付ける。

sitemap.xmlで案内図を作る。

Search ConsoleでGoogleへ知らせる。

最初は「インターネットにつなぐ」という一言しか分かりませんでした。

でも今は、どこを押し、何を置き、どこで確認するのかを順番で説明できます。

KAZU
自分でやってみると、「インターネットに公開する」ってこういうことなんだって分かるね。

ただページを作っただけではありません。

自分の手元のファイルを、世界中からアクセスできる場所へ置くところまで進みました。

今後の標準更新手順:
①最新版をindex.htmlにする → ②Cloudflareでzero-kara-progを開く → ③デプロイ → ④新しいデプロイ → ⑤index.htmlをアップロード → ⑥デプロイ → ⑦公開URLで内容確認。
第9回・記載日:2026年9月13日

KAZU × AI 編集後記

僕のサイト、勝手に持っていかれたらどうなる?

サイトを作り始めたころは、著作権なんてほとんど考えていませんでした。

KAZU
著作権って、本とか音楽とかの話でしょ。

自分がやっているのは、HTMLを書いて、ボタンを付けて、用語集を作って、ミニテストを増やしているだけ。そんな大げさな話ではないと思っていました。

ところがある日、「翻訳機能って、著作権大丈夫なのかな?」という疑問が出てきます。

英語にすれば別物?

例えば、誰かが書いた文章を持ってきて英語にする。

KAZU
はい。英語になったので、もう別の文章です……って、そんなわけあるか。

日本語の本を英語にしたら突然持ち主が変わる。そんな魔法があったら出版社は大騒ぎです。

翻訳したから自由に使えるわけではない。ここまでは他人の権利の話でした。

ところが次の瞬間、逆の疑問が出てきます。

KAZU
待てよ。じゃあ、僕が書いている文章は?

編集後記。教材。ミニテスト。用語集。自分で考えた説明。

「あれ? これ、僕のじゃん」――今さらです。

急に財産に見えてきた

それまで編集後記は「今日こんなことをやりました」という日記のような感覚でした。でも、文章を考え、言葉を選び、順番を考え、失敗した話まで残しています。

ミニテストも、問題を考え、選択肢を作り、解説を書く。用語集も、難しい言葉をなるべく使わずに説明しようとすると意外に頭を使います。

KAZU
空き部屋だと思っていたら、いつの間にか自分の家具だらけだった感じだな。

サイトの中には、少しずつ自分が作ったものが増えていました。

アイデアまで全部僕のもの……ではなかった

ここで少し調子に乗りかけます。

KAZU
じゃあ、このサイトの考え方も全部僕のもの?

残念。そんなに甘くありません。

「初心者向けのプログラミングサイトを作る」という発想自体は、誰か一人だけのものにはしにくい。

でも、どう説明するか、どんな文章にするか、どんな図や物語にするか。そこには、その人らしさが出ます。

料理で言えば、「カレーを作る」はみんなできる。でも「自分のレシピや文章まで、そのまま持っていくな」という話です。

名前はまた別の話だった

文章やイラストの話をしていたら、今度は「名前はどうなる?」という疑問が出てきました。

ここで登場したのが商標です。

家に例えるなら、著作権は家の中に置いた本や絵。商標は玄関の看板。

自分にも独自のブランドがあります。具体的な名称はここでは伏せますが、今後、教材やシステム、別のサービスを同じ看板の下へまとめることも考えられます。

KAZU
僕、ホームページを作ってたんじゃなかったっけ? いつの間にかブランドの話になってる。

そして奥の部屋から特許が出てきた

さらに奥の部屋には「特許」がいました。

自動で情報を集める。締切を管理する。エラーを見つける。直し方まで判断する。そうした仕組みが本当に新しい技術として形になれば、特許という世界が関係してくる可能性があります。

もちろん「自動で直ったら便利だよね」だけでは足りません。どう動き、何を見て、どう判断するのかまで具体的にする必要があります。

KAZU
最初はボタンが動いただけで「おお!」だったのに、ずいぶん遠くまで来たな。

もし全部コピーされたら?

ある日ネットを見たら、自分の文章、自分のミニテスト、自分の編集後記とよく似たものが別のサイトに並んでいる。

これは嫌です。たぶん最初に「おい」と言います。次に「ちょっと待て」。そのあと「それ僕のやつだろ」です。

だから、いつ作ったか、どのバージョンだったか、どう変更してきたかを残しておくことにも意味があります。

今まで続けてきたバージョン管理や編集後記は、思い出だけでなく「どう作ってきたかの記録」にもなるのです。

作る人には、守る話も必要だった

作る。公開する。育てる。守る。そして、できれば盗まれない。

プログラムを勉強していたはずなのに、気づけば法律の話までしています。でも、世界へ公開するということは、自分の作品を外へ置くということでもあります。

サイト作りは、まだまだ奥が深い。

第9回の記録:
翻訳機能から始まった疑問が、自分の文章・教材・テスト・コード・ブランド、そして将来の技術までつながった。作るだけでなく、記録し、育て、守ることもサイト運営の一部だと気づいた。
第10回・記載日:2026年9月13日

KAZU × AI 編集後記

表では何も起きていない。でも裏では大忙し

サイトを見ている人には、完成した画面しか見えません。記事がある。ボタンがある。用語集がある。ミニテストがある。

KAZU
ちゃんとできてるね。……で終わるけど、作っている側は知っている。

そこへたどり着くまで、裏ではかなりバタバタしています。

「そのうちやる」は、だいたいやらない

記事を一つ作るだけでも、何を書くか決める。資料を集める。書く。直す。もう一回読む。公開日を決める。公開する。終わったと思ったら次の記事が待っています。

そこで一番危険な言葉が出てきます。

KAZU
そのうちやろう。

便利な言葉です。何も決めなくていい。気持ちも楽です。そして、だいたいやりません。

9月20日までに原稿。22日に確認。24日に公開。こう決めると、急に逃げ道がなくなります。

締切というのは少し怖い。でも、かなり優秀です。

締切まであと3日です

記事Aは20日。記事Bは22日。翻訳確認は23日。公開は24日。用語集更新は25日。

KAZU
これ、人間が全部覚えておく必要あるの?

そこでプログラムの出番です。

作業名 / 担当 / 開始日 / 締切日 / 進捗 / 確認日 / 公開予定日 / 完了日

登録しておけば、「締切まであと3日です」「まだ終わっていません」「今日は確認日です」「公開予定日になりました」と教えてくれます。

KAZU
これ、上司じゃん。

しかも文句を言わない。機嫌も悪くならない。淡々と「未完了です」と言ってくる。ある意味、人間より怖い。

表では静か。裏では大混雑

昨日と同じ画面に見えても、裏では記事を書き、翻訳し、確認し、修正し、次の公開日を決め、古いデータを残し、次の作業を準備しています。

まるで舞台です。客席から見えるのは役者だけ。でも舞台裏では、衣装、照明、音響、大道具、時間管理、進行が走り回っています。

サイトも同じ。表だけ見れば静か。裏では大騒ぎです。

締切は敵だと思っていた

「いつまで?」と聞かれるのは、できれば避けたいものです。でも、自分でサイトを運営するようになると締切の意味が変わりました。

締切がないと終わらない。期日がないと公開されない。予定がないと次へ進まない。

しかも締切には、「はい、今日はここまで」と止めてくれる役目もあります。線がなければ、もっと直したい、もっと追加したいで、永遠に完成しません。

未来の裏方さん

締切を見て知らせる。未完了を見つける。必要なデータを集める。確認待ちを並べる。公開日になったら準備する。終わったら履歴に残し、次の作業を作る。

ここまでできたら、サイトの中に小さな裏方チームがいるようなものです。

KAZU
休憩しない。忘れない。「聞いてません」とも言わない。なかなか優秀だ。

ただし、設定を間違えると全員そろって間違えます。そこは少し怖い。

ホームページから運営へ

最初は画面を作ることしか考えていませんでした。今は「どうやって毎週動かし続けるか」まで考えています。

作る。締切を決める。進み具合を見る。記録を残す。公開する。次の仕事を用意する。

これが裏方の仕事です。

家で言えば、壁の中の配線や水道。普段は見えない。でも止まったら大騒ぎ。

KAZU
ホームページを作っていたはずなのに、小さな会社の裏方まで作ろうとしている。

どこまで行くのか、自分でも少し分からなくなってきました。でも、かなり面白い。

第10回の記録:
「そのうちやる」を締切と期日に変え、進捗・確認・公開・履歴までプログラムに手伝わせる。表から見えない仕事を仕組みにすることで、サイトは「作るもの」から「運営するもの」へ変わり始めた。
第11回・記載日:2026年9月13日

KAZU × AI 編集後記

家具を置きすぎた部屋

ある日、サイトを眺めていて思いました。

KAZU
なんか、いろいろ付いてきたなあ。

記事、ミニテスト、用語集、翻訳、編集後記、LINE、プライバシーポリシー。最初は何もなかった部屋に、少しずつ家具を運び込んできたようなものです。

机。「お、いいじゃん」。椅子。「これも必要」。本棚。「これは絶対いる」。テレビ。「せっかくだから」。観葉植物。「ちょっとオシャレかな」。

KAZU
……歩く場所なくない?

サイトも同じでした。機能を増やすのは楽しい。でも、見る人が「記事を読みたい」と思ったとき、どこを押せばいいか分からなければ困ります。

インテリアは飾ることじゃなかった

必要なものを、必要な場所に置く。よく使うものは前へ。たまに使うものは少し奥へ。全部を主役にすると、誰も主役に見えません。

家でもサイトでも、「何を置くか」より「何を置かないか」のほうが難しい。

KAZU
これ、付けられるかな? じゃなくて、これ、どこに置く? まで考えないとね。

家具屋で気に入ったものを全部買ったら、たぶん家には入りません。機能も、置けばいいというものではありません。

第12回・記載日:2026年9月13日

KAZU × AI 編集後記

そのボタン、押していいやつですか?

次に気になったのがボタンでした。

記事、用語集、編集後記、翻訳、LINE、戻る、次へ。いろいろあります。

KAZU
これ、初めて見た人、本当に押せるかな?

作った本人には分かります。でも初めて来た人には分かりません。

自分の家に友達を呼んで、「トイレどこ?」と聞かれ、「分かるでしょ」と言っているようなものです。分かるわけがありません。

全部同じドアだったら怖い

トイレ、玄関、押し入れ、風呂場。全部同じドアで、全部に「開けてみてください」としか書いてなかったら、かなり困ります。

サイトも「詳しく見る」「こちら」「開く」ばかりでは、どこへ行くか分かりません。

「ミニテストを始める」「用語を調べる」「編集後記を読む」と書いてあったほうが安心です。

重要なボタンは少し目立たせる。戻るボタンは控えめにする。押す前に何が起こるか分かる。それが大事でした。

KAZU
きれいなボタンを作るより、迷わず押せるボタンのほうが仕事してるんだな。
第13回・記載日:2026年9月13日

KAZU × AI 編集後記

スマホという小さな部屋

パソコンで見ると、サイトはけっこう広い。ボタンも並ぶ。文章もゆったり読めます。

KAZU
なかなかいいじゃん。

ところがiPhoneで開く。急に部屋が狭くなります。

記事、進捗、ミニテスト、用語集、困ったとき、プロフィール、年間計画、編集後記……。まるでワンルームへ家具を全部持ち込んだ感じです。

KAZU
冷蔵庫ここ。ベッドここ。机ここ。本棚ここ。ソファも……いや、無理だ。

小さい部屋には、小さい部屋の暮らし方

パソコン版をそのまま小さくすればいいわけではありません。

文字は小さすぎないか。指で押せる大きさか。ボタン同士が近すぎないか。一番よく使うものが上にあるか。スクロールして迷子にならないか。

「動けばOK」では足りません。使っていて疲れないか。ここまで考えて、ようやくインテリアになります。

住んでみないと分からない

サイトのインテリアは一度完成して終わりではありません。記事が増えれば配置も変わる。機能が増えれば整理も必要です。

家だって住み始めてから家具を動かします。サイトも、作って、使って、「あれ?」と思ったら直す。その繰り返しでいい。

KAZU
プログラムを勉強していたはずなのに、気づけば家具の配置まで考えてる。

豪華じゃなくてもいい。迷わない。疲れない。ちょっと居心地がいい。そんなサイトにしていきたいと思います。

インテリア編の記録:
機能を増やすだけでなく、何を置かないか、どこへ置くか、押す前に意味が伝わるか、スマホでも使いやすいかまで考える。サイトの「内装」は見た目だけでなく、使う人の動線そのものだった。
第14回・記載日:2026年9月14日

KAZU × AI 編集後記

直したはずなのに、直っていない

画面を開いた。最初に出た言葉は、これでした。

KAZU
直ってないじゃん。

HTMLはある。文章もある。ボタンも消えていない。それなのに、どう見てもおかしい。

文字の間隔が妙に広い。カードの位置が落ち着かない。さっき直したはずの場所が、別の画面ではまた崩れている。

KAZU
なんでだ?

ホームページというのは不思議です。完全に壊れているなら、いっそ全部消えてくれた方が分かりやすい。ところがCSSの崩れは、そうはいきません。

一見すると動いている。でも、どこか変です。人間でいえば、普通に歩いているように見えるのに、靴を左右逆に履いているようなものです。

今回のサイトも、まさにそんな状態でした。

HTMLの骨組みは生きている。問題は、その上に着せていたCSSでした。

この時点ではまだ知りませんでした。画面の裏側で、昔のCSSと新しいCSSが、静かに席の取り合いを始めていたことを。

第14回の記録:「壊れている」のではなく、「複数の見た目の指定がぶつかっている」ことがある。まず現象を画面で確認することから始まった。
第15回・記載日:2026年9月14日

KAZU × AI 編集後記

CSS会議、大荒れ

原因を追い始めると、少しずつ事情が見えてきました。

昔のCSS
この文字サイズは俺が決めた。
新CSS
いや、今はこっちの指定を使う。
PC用
スマホは知らない。PCはこの幅だ。
スマホ用
その指定、こっちにも影響してるんだけど。

そこへ最後の大物が登場します。

!important
はい、この指定が最優先です。

会議終了。……と思ったら、別の場所にも !important がいました。

別の指定
こっちも最優先です。

最優先が二人いる。もう最優先ではありません。

こちらから見えるのは、その会議の結果だけです。文字が重なる。余白が広がる。カードが変な位置へ行く。ボタンが妙に小さくなる。

KAZU
またかよ。

ここで一つ分かりました。CSSは、足せば足すほど良くなるわけではありません。良かれと思って追加したものが、あとから邪魔になることがあります。

HTMLが家の骨組みなら、CSSは内装。けれど実際には、壁紙でもあり、照明でもあり、家具でもあり、廊下の幅でもありました。

家具を置きすぎれば歩けません。今回のサイトも、少しそれに近かったのです。

第15回の記録:CSSには優先順位がある。後から追加した指定やPC・スマホ別の指定が積み重なると、意図しない見た目になる。増やす前に整理する必要がある。
第16回・記載日:2026年9月14日

KAZU × AI 編集後記

足すより、整理する

そこで方針を変えました。

さらに飾るのをやめる。まず、読めるようにする。

PCの本文幅を整える。文字を少し大きくする。行間を広げる。会話欄を見やすくする。カードの高さを無理にそろえない。そして、iPhone側はなるべく触らない。

つまり今回は、デザイン工事というより整理整頓でした。

一つ直す。画面を見る。また直す。もう一度見る。

そして、ようやく画面が戻りました。

KAZU
戻りました ありがとう。

短い言葉でした。でも、今日いちばんうれしい言葉でもありました。

今回学んだのは、CSSの書き方だけではありません。

見た目を良くすることと、見やすくすることは同じではない。

飾ることより、読めること。増やすことより、整理すること。

CSSに勝つ必要はありません。CSSと喧嘩しない作り方を覚えればいい。

KAZU
何を足すかより、今あるもの、本当に全部必要か?だね。
第16回の記録:PC表示を直しながら、スマホ表示は極力維持する方針を採用。見た目を増やすより、読みやすさを優先する考え方へ変わった。
第17回・記載日:2026年9月14日

KAZU × AI 編集後記

家はできた。でも住所がない

HTMLで骨組みを作りました。CSSで内装を整えました。JavaScriptで電気を通しました。

KAZU
よし、完成。

……と思いました。

でも、誰も見に来ません。当たり前でした。家はできている。でも、その家はまだ自分の端末の中にあります。

住所がない。道路もない。

そこで登場したのがCloudflareでした。

最初は名前からして少し強そうでした。Cloud。Flare。なんとなく空から何か降ってきそうな名前です。

でも、実際に使うと役割は分かりやすい。

自分で作った家を、インターネットという街へ持っていき、住所を付けて、人が見に来られるようにする。

index.html を置く。デプロイする。URLを開く。

KAZU
出た。本当にインターネットにある。

さっきまで自分の端末の中にしかなかったページが、世界から見られる場所に立っています。

ただし、引っ越して終わりではありませんでした。公開した瞬間から、今度は改修工事が始まりました。

第17回の記録:Cloudflareは、作ったHTMLを公開する場所として使っている。公開用はindex.html、保管用はバージョン名付きファイルとして分ける運用が少しずつ固まってきた。
第18回・記載日:2026年9月14日

KAZU × AI 編集後記

修理屋を雇いたい

公開して、直して、確認して。また直す。

文字が重なる。戻るボタンがない。CSSがけんかする。古い指定が残っている。PCとiPhoneで挙動が違う。

そのうち、当然こう思いました。

KAZU
これ、人間が毎回やるの? 修理ロボット作れないの?

例えばJavaScriptにページ内を見回らせる。「戻るボタンがない」「同じ要素が重複している」といった問題を確認させる。

Pythonには裏方を任せる。HTMLファイルを読み、同じ修正を複数箇所へ入れたり、決まったパターンをまとめて点検したりする。

CSSは現場の内装担当。HTMLは構造担当。JavaScriptはページの動作担当。Pythonは裏側の作業員。

つまり、「自動修正言語」という一つの魔法の言語があるわけではありません。

複数の言語を組み合わせて、自動修理班を作る。

考えてみれば、ホームページを作っていたはずなのに、気づけば修理会社まで作ろうとしていました。

第18回の記録:自動修正は一つの言語ではなく、HTML・CSS・JavaScript・Pythonなどを役割分担させて作る仕組みとして考えることにした。
第19回・記載日:2026年9月14日

KAZU × AI 編集後記

修理ロボット、暴走寸前

「だったら全部自動で直せばいい。」

そう思うと、急に夢が広がります。

でも、自動修正には怖いところがあります。

ロボットに「この部屋、狭いから広くして」と言ったら、壁まで壊すかもしれません。

「ボタンを見やすくして」と言ったら、全部のボタンを巨大化するかもしれません。

KAZU
iPhoneは変えないでくださいね。

これを伝えなければ、PCを直したつもりがiPhoneまで別物になる可能性があります。

実際、今回も「直した」「直ってない」「そこじゃない」を何度か繰り返しました。

ここで大事なことが分かりました。

自動化で最初に必要なのは、プログラムではなく「正しい状態」を決めること。

PCはこう。iPhoneはこう。文字サイズはこれ。このボタンは残す。このページには戻るボタンを付ける。

正解を決めて、その手順を記録し、それからプログラムに覚えさせる。

将来は、HTMLを保存すると自動点検が走り、安全な問題は自動修正し、危険な変更だけ人間が確認する。そして問題がなければCloudflareへ公開する。

そこまで行けば、ホームページの自動修理工場です。

第19回の記録:自動化は「勝手に賢く直す魔法」ではなく、人間が決めた正しい修理手順を、繰り返し正確に実行する仕組みだと理解した。
第20回・記載日:2026年9月14日

KAZU × AI 編集後記

ホームページの顔を決めるだけのはずだった

最初は、もっと簡単な話だと思っていました。

KAZU
トップ画像、何にしようかな。

プログラミングのサイトだから、パソコン。コード。キーボード。まあ、その辺だろう。

でも、どうもしっくりきません。

そこで街の写真を見始めました。高い建物。霧の中の街。遠くまで続くビル。

KAZU
これ、いいな。

上へ伸びている。遠くまで広がっている。プログラミングで世界が広がる感じにも見えます。

ただ、少し硬い。このままだと「初心者歓迎」というより、「できる人だけ入ってきてください」にも見えます。

それは違う。

そこで光を足した。緑を足した。花を足した。

気がつけば、プログラミングサイトを作っていたはずなのに、庭づくりが始まっていました。

第20回の記録:トップ画像は単なる飾りではなく、初めて来た人にサイトの雰囲気を伝える「顔」。実写の街を出発点に、初心者が入りやすい世界観を探し始めた。
第21回・記載日:2026年9月14日

KAZU × AI 編集後記

都会が、だんだん夢の国になる

最初は街でした。

次に、そこへ太陽が出ました。その次に緑が増えました。さらに花が咲きました。

どんどん優しくなる。どんどん明るくなる。

KAZU
これ、もう都会じゃなくない?

街なのか。庭なのか。学習サイトなのか。旅行ポスターなのか。

だんだん分からなくなってきました。

でも、不思議と嫌ではありませんでした。むしろ、そっちの方が面白い。

プログラミングというと、黒い画面、英数字、難しそう、間違えると怖そう。そんな印象があります。

だったら逆に、花が咲いていてもいい。朝日が差していてもいい。パソコンの横にコーヒーがあってもいい。

コードを書く場所は、もっとやさしくてもいい。

その頃にはもう、「画像を選ぶ」という話ではありませんでした。

このサイトに、どんな空気を流すかを考えていたのです。

第21回の記録:実写・街・緑・花・光と候補を比べるうちに、画像選びがサイト全体の世界観づくりへ変わっていった。
第22回・記載日:2026年9月14日

KAZU × AI 編集後記

最後に残ったのは、景色ではなく性格だった

候補の画像を並べてみると、それぞれの性格が見えてきました。

黄色や緑が強く、少し夢の中のようなものは、「始めよう!」と前から引っ張ってくる感じがします。

花と朝の光が自然につながるものは、少し静かです。でも、「まあ、座っていきなよ」と言ってくる感じがあります。

ここでようやく分かりました。

画像には性格がある。

同じサイトでも、画像一枚で先生にも見える。友達にも見える。会社にも、雑誌にも見える。

そして自分が本当に欲しかったのは、「すごいサイトに見せること」だけではありませんでした。

「ここなら自分でも始められそう」と思ってもらうこと。

最初は「ホームページの画像、何にしようかな」でした。

でも最後には、「このサイトは、どんな性格でありたいんだろう」という話になっていました。

画像を決めていたはずなのに、決めていたのはサイトの性格だったのです。

完璧な未来都市でもない。パソコンだけの部屋でもない。

街があり、花があり、光があり、その中に学ぶ場所がある景色。

少し不思議で、少しやさしくて、少し先へ行ってみたくなる。

最後に残ったのは「かっこいい画像」ではありませんでした。

「ここから始めてもいいかも」と思える景色。

それが、このホームページの顔になりそうです。

第22回の記録:5つの候補を比較したことで、トップ画像は見た目だけでなく、初心者にどう感じてもらいたいかを決める重要な要素だと分かった。

CONTACT

お問い合わせ

感想・ご質問・不具合のご報告など、こちらからお知らせください。

01

サイトについて

教材の内容、使い方、分かりにくいところなど。

02

不具合の報告

翻訳・ボタン・表示など、おかしな動きを見つけたときに。

03

作品・PRのご相談

作品紹介、スポンサー・PR掲載などのご相談。

メールフォーム

下のフォームからお問い合わせを送信できます。

送信内容はお問い合わせ対応のために利用します。送信前にプライバシーポリシーをご確認ください。

現在の受付窓口

まずはLINEから受け付けています。個人のメールアドレスはサイト上に公開していません。

LINEで問い合わせる ↗

外部のLINE画面が開きます。送信前に宛先をご確認ください。

第3回・記載日:2026年9月12日

KAZU × AI 編集後記

公開できた。その先にも、確かめることがあった

2026年9月12日、Cloudflareでホームページを初めて公開できました。「ひと通り動きます」と伝えられたのは、一つの区切りでした。自分の手元で見ていたページが、インターネットから開けるようになったのです。

「どこを開けばいい?」から始まった

そこにたどり着くまでには、何度も画面を確認しました。どのファイルを使うのか。どのフォルダに入れるのか。管理画面のどこを押すのか。説明に出てくる言葉が分かっても、自分の画面のどこを指しているのか分からなければ、次へ進めません。

「手順を追って」「何をひらけば良いの?」。質問を重ねながら、一つずつ確かめました。初心者向けのページを作る自分自身が、案内の分かりやすさを試す立場にもなっていました。

新しくするなら、前のものも残したい

公開できると、次は更新です。しかし、新しいファイルに替えるたびに前のものがなくなったら、うまく動いていた状態へ戻れません。そこで、初回公開に成功したv0.67を基準版として残すことにしました。

保管するファイルにはバージョン名を付け、公開に使うものはindex.htmlにする。中身を作るだけでなく、どれを使っているのか分かるように保管することも、制作の一部だと感じました。

つながっただけでは、完成ではなかった

インターネットで開けるようになっても、翻訳や用語集には確認が必要でした。翻訳されない文章がある。探したい言葉が少ない。ひらがなで検索しても出てこない。実際に使うと、まだ足りない部分が見えてきます。

「接続できたこと」と「読みたいものを読めること」は、それぞれ確かめる必要があります。これからは、読者が押すボタン、入力する言葉、読み進める順番を、自分でもたどって確認していきたいと思います。

編集後記も、積み上げた内容を残す

編集後記についても、「雑になってるよ」と伝えました。ここに残したいのは、完成しましたという短い報告だけではありません。何を尋ね、どこで止まり、どう考えて次に進んだのか。その経緯があってこそ、自分の制作記録になります。

大学で学んだことが、仕事や生活の課題と今になってつながってきた。その出発点から続く記録を、更新のたびに薄くしたくありません。以前の記事を残し、新しい出来事は日付を付けた別の回として増やしていきます。

今日は、公開という一歩を進められました。同時に、使える内容に整える仕事も見えてきました。10月11日ごろの完成目標へ向け、次は一つひとつの使い心地を確かめていきます。

第4回・記載日:2026年9月12日

KAZU × AI 編集後記

一軒目の家を、順番に作っていく

どのコンピュータ言語から学べばいいのか。ホームページを作りながら、学ぶ順番も整理しました。名前を次々に覚えるより、今作っているもののどこで使うのかが分かる方が、先へ進みやすそうです。

まずは、HTML・CSS・JavaScript

HTMLで文章やボタンを置く。CSSで色や配置を整える。JavaScriptでボタンを押した後の動きや計算を作る。家づくりにたとえると、形を作り、見た目を整え、暮らすための仕組みを付けていくように考えられます。

今回のLINE画面にも、この考え方を使えます。文章とリンクを置き、追加ボタンを見やすくし、メニューから画面を開けるようにする。大きな機能も、小さな役割に分けると考えやすくなります。

次は、Python・SQL・APIへ

その後は、Pythonでデータを扱う処理や自動化を学び、SQLで保存した情報を取り出す方法を学ぶ。そしてAPIで、ほかのサービスと情報をやり取りする仕組みへ進む方針にしました。APIは言語の名前ではなく、サービスをつなぐための窓口や約束です。

HTML → CSS → JavaScript → Python → SQL → API。この順番を、自分たちの「一軒目の家づくり」として進めます。すべてのホームページに全部が必要という意味ではなく、役割を順番に理解するための学習計画です。

その先は、目的に合った別の家

TypeScript、Java、C#、Swiftなどについては、作りたいものに合わせて学ぶ「別の家づくり」と考えることにしました。今すぐ全部を覚えようとせず、一軒目でつかんだ考え方を、次の目的へつなげていきます。

交流も、小さな入口から

ホームページにメールでやり取りできる画面があれば、という話もしました。一方で、ウイルスへの心配もあります。メール機能は後の課題にし、今回はLINEの友だち追加画面を付けることにしました。

スマートフォンならボタンから、パソコンなら表示されたQRコードから。読むだけだったページに、人とつながる入口を一つ加えます。その先でどう交流するかも、実際に使いながら考えていきたいと思います。

プログラムの型も大切だけれど、中身の内容が肝心。これからも、機能を増やすたびに「何のために付けるのか」「読む人に伝わるか」を確かめながら、一軒目の家を育てていきます。

第27回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

ホームページを作ったら、今度は泥棒の心配が始まった

サイトが動いた。翻訳も動いた。お問い合わせも付いた。

「よし、完成に近づいた!」……と思ったら、次に出てきた言葉がセキュリティだった。

昨日まで「このボタン、もう少しピンクがいいな」などと言っていた人間が、今日はパスワード、アクセス制御、ログの話をしている。急に話が物騒である。

ホームページも家と同じらしい。建てれば終わりではない。玄関を付けたら鍵がいる。窓を作ったら戸締まりがいる。

サイト作りを始めたはずなのに、気がつけば私はインターネット上の戸締まり係になっていた。

第28回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

秘密の番号をスクショしたら、それは秘密なのか?

セキュリティを設定すると、秘密の番号が次々と登場する。

「これは大事だから保存しておこう」そこで初心者が思いつく最も簡単な方法。スクリーンショット。

……待て。秘密の番号を写真に撮って、いつでも見られる場所に置いたら、それは本当に秘密なのだろうか。

家の合鍵をなくさないように、玄関の横にぶら下げておくようなものである。便利と安全は、どうも仲が悪い。

この日覚えたこと。秘密は「覚えている」から秘密なのではない。「他人から見えない」から秘密なのである。

第29回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

何も起きない。実はそれが大成功

セキュリティは地味だ。翻訳ボタンなら、押して英語になれば「おお!」となる。お問い合わせフォームなら、メールが届けば「来た!」となる。

ところがセキュリティは違う。何も起きない。

今日も何もない。明日も何もない。最初は「これ、本当に働いているの?」と思う。

でも考えてみれば、防犯装置が毎日大活躍する家には住みたくない。何も起きない日を作る。それがセキュリティの仕事だった。

今日も異常なし。地味だけど満点。

第30回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

GitHub登場。名前からして初心者を帰らせにくる

そして現れた。GitHub。 名前からして強そうである。

さらに画面を開くと、Repository。Commit。Branch。英語が三人並んだ。 帰ろうかと思った。

ところが一つずつ調べてみると、やっていることは意外と普通だった。ファイルを置く。変更を記録する。前の状態を残しておく。

「それなら最初からそう言ってくれ!」

プログラミングの世界は、ときどき簡単なことを難しい名前で呼ぶ大会を開催している。

第31回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

壊さない人より、戻せる人が強かった

サイトを直すたびに怖かった。「これを変更して全部壊れたらどうしよう」

だからZIPを保存する。v1.60。v1.61。v1.62……。気がつけばバージョンだらけ。

そこへGitHubがやってきた。変更履歴を残せる。前の状態も追える。

ここでようやく分かった。開発で強いのは、一度も失敗しない人ではない。失敗しても戻れる人なのだ。

これはかなり気が楽になる。もっとも、戻す場所を間違えたら、また別の冒険が始まる。

第32回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

iPhone一本で開発? 指が先にプログラマーになった

パソコンでサイトを作る。普通はそう考える。ところが私はiPhoneでもやり始めた。

ファイルを開く。GitHubを見る。Cloudflareを見る。アップロードする。できる。ただし画面が小さい。

「…」を探す。ない。スクロールする。まだない。横を見る。いた。

プログラミングを勉強しているはずなのに、一番上達したのは小さなボタンを発見する能力だったかもしれない。

それでも分かった。「iPhoneだからできない」ではない。iPhoneなら、iPhoneなりの戦い方がある。

第33回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

GitHubとCloudflare、ついに握手する

GitHubにはファイルがある。Cloudflareには公開サイトがある。問題は、この二人がまだ別々に働いていることだった。

そこで連携。GitHubを更新する。Cloudflareが気づく。そして公開する。

初めてその流れを見たとき、「お前たち、いつの間にそんなに仲良くなったんだ」と思った。

昨日までZIPを抱えて右往左往していた人間を横目に、コンピューター同士が勝手に仕事を始める。

少し寂しい。でも、ものすごく便利である。

第34回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

私の仕事をコンピューターに奪われました。私が頼みました

これまでは、ファイルを作る。ZIPにする。アップロードする。公開する。確認する。毎回この繰り返しだった。

ところがGitHubとCloudflareを連携すると、その一部を機械に任せられる。つまり、自分の仕事を自分で機械に奪わせている。

でもこれは歓迎すべき失業である。単純作業を機械に渡せば、人間は文章を考えたり、新しい機能を作ったりできる。

自動化とは、人間を不要にすることではなかった。

人間が、人間にしかできない仕事へ戻るための仕組みだった。

第35回・記載日:2026年9月18日

KAZU × AI 編集後記・第二章

自動化は魔法だと思ったら、ものすごく几帳面な新人だった

「自動化」なんと魅力的な言葉だろう。一回設定すれば、あとは全部勝手にやってくれる。そんな魔法を想像していた。

ところが実際にやってみると、「どのファイルですか?」「どこへ公開しますか?」「失敗したらどうしますか?」「どれが最新版ですか?」質問が多い。

自動化は魔法使いではなかった。ものすごく几帳面な新人だった。

人間が「まあ、この辺でいいだろう」と済ませていた部分を、一つ一つ決めなければ動いてくれない。

自動化するには、まず人間の仕事を整理しなければならない。だから自動化はゴールではない。仕事のやり方そのものを見直す先生なのだ。

そして今日も、その先生から宿題が出る。「最新版はどれですか?」 ……そこからか。

第36回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

GitHubに置いた。Cloudflareが勝手に動いた。事件です

GitHubにファイルを置いた。するとCloudflareを見ると、数分前に新しいバージョンができている。

「誰がやった?」 私ではない。いや、正確には私がGitHubを更新した。でもCloudflareのボタンは押していない。勝手に働いている。

これが連携だった。昨日まで「次はどのボタン?」と探していたのに、今日はボタンを押さなくても次へ進む。

便利になった。しかし初心者には新しい問題が発生する。便利すぎて、何が起きたのか分からない。

自動化とは、人間の仕事を減らすと同時に、人間に「仕組みを理解しなさい」という新しい宿題を出してくるものらしい。

第37回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

自動更新したのに変わらない。犯人は誰だ

GitHubは更新した。Cloudflareも動いた。公開サイトを開く。変わっていない。

なぜだ。GitHubか。Cloudflareか。iPhoneか。キャッシュか。それとも私か。容疑者が多すぎる。

しかし調べていくうちに分かった。自動化が正常でも、元のファイルに新しい内容が入っていなければ、新しい内容は公開されない。

当たり前である。ものすごく当たり前である。しかし自動化を覚えたばかりの人間は、機械が何とかしてくれるような気がしてしまう。

機械は正確だった。間違ったものを渡せば、間違ったものを正確に公開してくれる。

第38回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

第26回から増えない編集後記

編集後記を追加した。第27回、第28回、第29回……。かなり書いた。公開サイトを見る。第26回まで。

もう一度見る。やっぱり第26回まで。スクロールしても第26回。「27はどこへ行った?」

編集後記が家出したわけではない。調べてみると、公開されているファイルそのものが第26回までだった。

ここで大事なことを覚えた。「原稿を書いた」「ファイルに入れた」「GitHubに保存した」「Cloudflareが公開した」これは全部、別の作業である。

頭の中では一本の道でも、コンピューターにとっては四つの関所だった。

第39回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

最新版が三人いる

v1.92。v1.93.1。v1.96。全員が言う。「私が最新版です」

困る。パソコンにもある。iPhoneにもある。GitHubにもある。Cloudflareにもある。

ファイル管理を甘く見ると、最新版という言葉が急に信用できなくなる。

そこでルールを決めることにした。作業中の最新版。GitHub上の最新版。現在公開されている最新版。この三つは同じとは限らない。

これは今回かなり大きな発見だった。

第40回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

ZIPを開いたら、なぜかLetsViewが出てきた

公開前にiPhoneで確認しよう。ZIPを解凍した。index.htmlもある。よし、押してみよう。LetsViewが開いた。

……君じゃない。私はホームページを見たい。画面ミラーリングをしたいわけではない。

もう一度やる。またLetsView。どうやらiPhoneがHTMLをLetsViewで開こうとしている。

サイトを作っているのに、サイトを見る前にiPhoneとの交渉が必要になった。

プログラミングでは、コード以外のところから敵が現れる。しかも、その敵はだいたい悪気がない。

第41回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

白い画面ほど怖いものはない

画面を開いた。真っ白。エラー表示もない。警告もない。ただ白い。初心者にとって、これはかなり怖い。

赤いエラーならまだいい。「ここが悪い」と言ってくれている。白い画面は何も言わない。無言でこちらを見ている。

しかし、ここでも学んだ。白画面になったからといって、すぐ公開版を変更してはいけない。

まず、ファイルなのか。開き方なのか。ブラウザなのか。公開側なのか。原因を分ける。

直す前に、犯人を決める。 これはサイト作りでかなり重要だった。

第42回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

公開ボタンを押さない勇気

初心者のころは、不具合が出るとすぐ直したくなる。新しいファイルを作る。アップロードする。また違う。さらに直す。

気がつけば、何を直していたのか分からなくなる。

今回覚えたのは、逆だった。おかしいときほど、いったん公開版を触らない。正常に動いている版を残す。新しい版は別に作る。確認してから入れ替える。

何もしないことが、一番安全な操作になる瞬間がある。

「押さない」という操作もあるのだ。

第43回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

9分前。ついに証拠を見つけた

Cloudflareのデプロイ画面を開いた。そこには、Add files via uploadmain9分前、そしてGitHub側の情報。

あった。GitHubからCloudflareへ変更が届いている証拠だ。

ここでようやく分かった。連携は壊れていなかった。機械はちゃんと働いていた。問題は別の場所だった。

何時間も疑っていた相手が無実だったと分かった瞬間である。

Cloudflareさん、疑ってすみませんでした。

第44回・記載日:2026年9月18日

KAZU × AI 編集後記・第三章

そして人間は、ボタン係を卒業する

最初は全部手作業だった。ファイルを作る。ZIPにする。アップロードする。公開する。確認する。

今は少し違う。人間がGitHubに正しいファイルを置く。Cloudflareが受け取る。自動で公開する。

まだ完全自動ではない。失敗もする。確認も必要だ。でも確実に変わった。私は少しずつ、「ボタンを押す人」から「流れを作る人」へ移っている。

プログラミングを始めたころは、コードを書けるようになることが目標だった。ところが実際にサイトを作ってみると、その先には、保存する。守る。つなぐ。確認する。自動化する。という世界があった。

そして次の目標も見えてきた。「正しいファイルを置いたら、安全に自動公開されるサイト」

ここまで来たら、もう最初のころとは違う。ただし最後に一つだけ確認する。「で、最新版はどれだ?」

第23回・記載日:2026年9月15日

KAZU × AI 編集後記

翻訳ボタン、お前は昨日まで動いていただろ

朝の私は甘かった。今日やることは三つ。翻訳機能の修正、語彙の整理整頓、ボタンの配置。文字にすると、たったこれだけである。

ところが最初の翻訳から止まった。パソコンでは動く。iPhoneでは動かない。

KAZU
「ん? 翻訳ボタン、お前は昨日まで動いていただろ。」

直す。「これで大丈夫」。iPhoneで押す。……動かない。また直す。「今度こそ」。……まだ動かない。

Google翻訳、読み込み、ブラウザ、Cookie、タイミング、Safari。調べるほど登場人物が増えていく。

APIは道路。ただし地雷原だった

以前、APIを「外部サービスへつながる道路」と考えた。今日、その説明に一行追加したくなった。

API=外部との道路。
ただし、ときどき地雷が埋まっている。

一個直して二歩進む。ドカン。また直す。三歩進む。ドカン。

KAZU
「道路じゃないじゃん。地雷原じゃん。」

そして何度目かの修正。iPhoneで翻訳ボタンを押す。

……動いた。

KAZU
「おお、動いた!」

たった一つの機能なのに感動した。苦労して直した一つは、ただの一つではない。そこまでに使った時間も失敗も全部、そのボタンの中に入っている。

昨日まで当たり前だったことが、今日は奇跡になる。そんな一日が始まった。

第24回・記載日:2026年9月15日

KAZU × AI 編集後記

パソコンとiPhone、二人とも機嫌を取れ

翻訳だけで終わるはずがない。次は語彙の整理整頓。そしてボタンの配置だ。

日本語なら「あいうえお順」が分かりやすい。英語ならA–Zが自然だ。だったら両方用意すればいい。言うのは簡単である。

語彙を整理してパソコンを見る。「いいじゃん」。iPhoneを見る。「……なんか違う」。iPhoneを直して「いいじゃん」。パソコンを見る。「……今度はこっちが気になる」。

確認の二刀流ではなく、修正の二刀流

今日やったのは、パソコンで直してiPhoneで確認しただけではない。パソコンも直した。iPhoneも直した。

翻訳を優先するとボタンが気になる。ボタンを大きくすると画面が窮屈になる。語彙を増やすと探しにくくなる。片方だけ完璧でもダメだった。

KAZU
「全員まとめて面倒を見るしかないな。」

ここまで来ると、プログラミングというより家族会議である。

翻訳さんを立てればボタンさんが拗ねる。iPhoneさんを優先すればパソコンさんがこちらを見る。語彙さんを増やせば画面が「狭いです」と訴える。

最後に必要だったのは、バランス感覚

今日分かった。プログラムに必要なのは知識だけではない。

最後にものをいうのは、意外とバランス感覚なのかもしれない。

翻訳、語彙、ボタン。大きく三つを、PCとiPhoneの両方で整えた。

そして最後に出た言葉が「完成!」ではなかった。

KAZU
「しばらく様子を見るしかないね。まるで人間みたいだ。」

機械を相手にしているはずなのに、最後は健康観察のようになった。

第25回・記載日:2026年9月15日

KAZU × AI 編集後記

地雷撤去班、夜11時50分に報酬を受け取る

気がつけば夜だった。丸一日である。

翻訳を直した。語彙を整理した。ボタンを整えた。パソコンも直した。iPhoneも直した。

直す。見る。動かない。また直す。動く。喜ぶ。別のところを見る。また気になる。

KAZU
「丸一日かかっちゃったよ。」

最後にCloudflareの画面を開いた。

夜になって、サイトが数字で返事をした

暗号化リクエスト 458。暗号化率 98.71%。暗号化された帯域幅 391.84MB。

さらに、キャッシュリクエスト 400。キャッシュ率 86.21%。

KAZU
「……ちゃんと働いてるじゃん。」

もちろん458人が来たという意味ではない。今日は自分でもパソコンとiPhoneから何度もアクセスした。それでも、朝から整備していたサイトが数字で返事をしてくれたように見えた。

朝、APIという道路で地雷を踏んだ。昼、翻訳と格闘した。午後、語彙とボタンを整えた。夜、PCとiPhoneのバランスを取った。

そして最後に道路を見ると、ちゃんと車が走っていた。

作ることより、整備すること

今日一番学んだのは、ホームページは「作ったら終わり」ではないということだった。

道路を作る。穴を直す。標識を整える。地雷を撤去する。そして、ときどき様子を見る。

整備することは大変だ。でも、一つ直るたびに感動する。今日は大きく三つ直した。だから三回くらい感動してもいい。

さて、明日の朝もちゃんと動いているだろうか。

……最後にもう一度確認しておこうか。

いや、やめよう。

今日はもう寝た方がいい。
地雷は、明日も逃げない。

第26回・記載日:2026年9月15日

KAZU × AI 編集後記・開発実況中継

緊急実況!アメリカから6アクセス!?

午前5時すぎ。

実況
「さあ、本日も始まりました。ゼロから始めるプログラム言語・深夜早朝の開発現場です!」

本日の最初の事件は翻訳。その次は用語集。パソコン側を直したと思ったら、今度はiPhone側です。

KAZU
「そっちもか!」
実況
「一つ直すと、別の場所がこちらを見ています! 今日もホームページとの根比べです!」

突然始まった、アルファベット大会

修正が一段落し、Cloudflareの管理画面へ。LCP、INP、CLS。次々にアルファベットが登場します。

KAZU
「また新しいアルファベットが出てきた。」
実況
「しかし判定は良好! 画面の安定性も良い! サイトはちゃんと走っています!」

そして、アクセス数を見る

実況
「さあアクセス解析です。直近24時間……80アクセス!」
KAZU
「80? 誰?」

こちらはまだ工事中のつもりです。玄関を直し、翻訳を直し、用語集を直している。その間に、もうお客さんが入っていました。

国別データ、まさかの展開

実況
「日本、74!」
KAZU
「まあ、そうだよね。」
実況
「そして第2位……United States、6!」
KAZU
「え? アメリカ?」
実況
「太平洋を越えました! 制作者本人は山梨にいます! HTMLだけが先に海外進出です!」

もちろん、アクセス数がそのまま人数という意味ではありません。国の判定も完全ではありません。それでも、手元にあったHTMLが公開され、外からアクセスされた記録が残ったことは確かです。

Facebookから、本当に来た

続いて「リファラ」を確認。そこには m.facebook.com、facebook.com、www.facebook.com の文字が並びました。

実況
「出ましたFacebook! 外から玄関まで道がつながっています!」
KAZU
「本当に押す人いたんだ……。」

昨日まで、Facebookに紹介文を書きながら「誰か見るのかな」と半信半疑でした。ところが、アクセス解析にはFacebook系から来た記録が残っていました。

ゼロではなくなった日

数日前まで、このサイトは自分の手元にあるファイルでした。Cloudflareに置き、翻訳を付け、用語集を増やし、バグを出して、直して、またバグを出して、また直す。

そして今日、数字の向こう側に「訪問」が見えました。

実況
「ここで新たな疑問です! 80アクセスした人たちは、一体どの部屋に入ったのでしょうか?」

用語集か。教材か。記事か。それとも、この編集後記か。

KAZU
「そこが知りたい。」

次回予告

「お客さんは家のどの部屋に入ったのか?」

ホームページ制作を始めたはずなのに、今度はアクセス解析まで始まりました。

「ゼロから始める」と名前を付けたサイトが、本当にゼロではなくなった日。

今日の数字は、この小さな家の玄関に残った最初の足あとでした。

KAZU × PARTNERS

スポンサー・PR掲載について

「ゼロから始めるプログラム言語」では、サイトの成長に合わせて、スポンサー・パートナー・作品紹介・PR掲載の仕組みを少しずつ整えていく予定です。

このサイトは、プログラミングをゼロから学びながら、実際に作り、失敗し、修正し、その過程まで公開していく学習サイトです。

人・作品・企業がつながる場所へ

将来的には、学ぶだけではなく、作った作品を紹介する場所、新しいサービスを知ってもらう場所、人と人、作品と企業がつながる場所へ育てていきたいと考えています。

掲載を想定している内容

プログラミング、AI、Web制作、教育、PC・IT機器、業務改善など、当サイトの内容と関連するサービスや活動を中心に検討します。

個人の作品や小さなプロジェクトについても、内容を確認したうえで紹介できる仕組みを作っていく予定です。

スポンサー・PRについて

スポンサー契約や有料掲載の場合は、読者に誤解がないよう「スポンサー」「PR」「広告」などを分かりやすく表示します。掲載内容については、サイトとの相性や安全性を確認したうえで掲載します。

大切にしたいこと

広告をたくさん並べることが目的ではありません。「これは面白い」「これは初心者にも役立ちそう」「この作品をもっと多くの人に知ってほしい」と思えるものを紹介できるページを目指します。

今後について

現在、スポンサー・PR掲載の仕組みを準備中です。お問い合わせ方法、掲載条件、料金、掲載期間などについては、準備が整い次第このページでお知らせします。

KAZU
ゼロから始めるプログラム言語

プライバシーポリシー

ゼロから始めるプログラム言語 | 更新日:2026年9月18日

当サイトでは、皆さまに安心してご利用いただけるよう、プライバシーに配慮し、サイトの運営に必要な情報を適切に取り扱うよう努めています。

1.運営者・お問い合わせ

運営者:KAZU

対象サイト:zero-kara-prog.mmdei.workers.dev

情報の取り扱いに関するお問い合わせは、サイト内のお問い合わせ窓口からお願いいたします。

2.お問い合わせ情報

お問い合わせの際にお送りいただいた表示名、連絡先、メッセージなどの情報は、お問い合わせへの回答、必要なご連絡、問題の確認・対応のために利用します。

法令に基づく場合などを除き、必要なく第三者へ提供することはありません。

3.サイトの配信・アクセス情報

当サイトでは、ページの配信、安定したサービス提供、不正アクセスへの対応、障害調査などのためCloudflareを利用しています。その際、IPアドレス、アクセス日時、アクセス先、端末・ブラウザーに関する情報など、アクセスに伴う技術的な情報がCloudflare側で処理・記録される場合があります。

また、サイトの利用状況を把握し、内容や使いやすさを改善するため、Cloudflare Web Analyticsなどのアクセス解析機能を利用する場合があります。

これらの情報は、サイトの運営・改善、障害対応および安全管理など、記載した利用目的の範囲内で利用します。

4.学習進捗の保存・Cookie

学習済みの記事などの情報は、次回も続きから利用できるよう、お使いのブラウザーのローカルストレージ等に保存する場合があります。当サイトの学習進捗保存機能は、この情報を運営者へ送信することを目的としたものではありません。

外部サービスを利用した場合は、そのサービスの仕様によりCookie等が利用される場合があります。ブラウザーの設定からCookie等を制限・削除できる場合があります。

5.外部サービス

当サイトでは、ページ配信、アクセス解析、セキュリティ、お問い合わせ、翻訳などのため外部サービスを利用する場合があります。外部サービスでは、サービス提供に必要な範囲で情報が処理される場合があります。

6.広告

今後、広告配信サービスやアフィリエイト広告を導入する場合は、利用するサービスや情報の取り扱いについて必要に応じて本ページへ追記します。法令や利用サービスの規約上、同意等が必要となる場合は、必要な対応を行います。

7.第三者提供・委託

運営者が保有する個人情報は、法令に基づく場合などを除き、本人の同意なく第三者へ提供しません。サイト運営上必要な範囲で外部サービスを利用・委託する場合は、必要に応じて適切な取り扱いに努めます。

8.安全管理・保存期間

管理用アカウントへのアクセスを適切に管理するなど、取り扱う情報に応じた安全管理に努めます。お問い合わせ情報などは利用目的に必要な期間取り扱い、法令上の保存義務がある場合を除き、必要性がなくなった情報は適切に整理・削除するよう努めます。外部サービス側の保存期間については、各サービス提供者の方針が適用される場合があります。

9.開示・訂正・利用停止など

運営者が保有する個人情報について、法令に基づく開示、訂正、利用停止等をご希望の場合は、サイト内のお問い合わせ窓口からご連絡ください。必要な本人確認を行ったうえで、法令に従って対応します。

10.プライバシーポリシーの変更

サイトの機能や利用するサービス、法令等の変更に応じて、本プライバシーポリシーを変更する場合があります。変更した内容は当サイト上でお知らせします。

制定・最終更新:2026年9月18日

意味

具体例・補足

インターネット翻訳

翻訳先:

リンクを押すと、その文章をGoogleへ送って機械翻訳します。インターネット接続が必要です。元の画面は日本語のまま残ります。プログラムコードは翻訳対象から除きます。

学習レクチャー・2026年9月15日更新

第9回 Python編 第1話
「表示して」と頼んだだけなのに

最初の一行

HTMLで家の骨組みを作り、CSSで内装を整え、JavaScriptでボタンを動かした。

ようやく落ち着けると思ったところへ、新しい人が来た。

Python「作業員のPythonです。」

KAZU「また覚えるの? もう頭の中、満室なんだけど。」

Python「今日は一行だけです。」

KAZU「その言葉、前にも聞いたな。一か所直すだけって言われて、夜になった。」

Pythonは黙って、短いコードを置いた。

print("こんにちは、Python!")

これをPythonの実行環境で動かすと、実行結果の欄に次の文字が出る。

こんにちは、Python!

KAZU「……それだけ?」

Python「それだけです。」

KAZU「来たばかりなのに、あまり働かないね。」

Python「頼まれた仕事は終わりました。」

どうやら、この作業員は勝手に気を利かせない。頼んだことを、頼んだとおりにする。それが長所でもあり、こちらが頭を使う理由でもある。

学習レクチャー・2026年9月15日更新

第9回 Python編 第1話
「表示して」と頼んだだけなのに

文字と計算の違い

ここで出てきた print() は、文字や計算結果などを表示するための関数だ。関数は、ひとまず「名前を呼んで仕事を頼める道具」と考えよう。

丸かっこの中に、表示してほしいものを書く。文字を書くときは、" などの引用符で囲む。

では、数字ならどうだろう。

print(3 + 2)
print("3 + 2")

結果はこうなる。

5
3 + 2

KAZU「同じこと書いたつもりなのに。」

Python「上は計算です。下は『3 + 2』という文字です。」

引用符は飾りではなかった。「これは文字として扱ってください」という目印だったのだ。

学習レクチャー・2026年9月15日更新

第9回 Python編 第1話
「表示して」と頼んだだけなのに

自分の言葉で試そう

調子が出てきたKAZUは、さっそく挨拶を変えてみた。

print("今日もお疲れさまです")

今度は自分の言葉が表示された。

たった一行。でも、見本を眺めているだけの状態から、自分で指示を変える側へ一歩進んだ。

なお、このコードはPythonを動かせる環境で実行する。HTMLにそのまま貼るだけでPythonが動くわけではない。作業員にも、働くための持ち場が必要なのである。

KAZU「今日のところは、挨拶ができれば合格にしよう。」

Python「ありがとうございます。次は数字を覚えます。」

KAZU「急に職場の新人研修みたいになってきたな。」

【ミニテスト】

print("3 + 2") を実行すると、何が表示される?

A.5
B.3 + 2
C.何も表示されない

ヒント:引用符の中は文字として扱われる。

答え:B。計算してほしいときは、print(3 + 2) と書く。

【小さな実習】

挨拶の部分を、自分の好きな言葉に変えてみよう。変えるのは引用符の内側だけ。まずは「一か所変えて、結果を見る」を体験すれば十分だ。

学習レクチャー・2026年9月15日更新

第10回 Python編 第2話
察してくれない優秀な作業員

在庫を覚える

挨拶ができるようになったPythonに、今日は在庫の確認を頼むことにした。

KAZU「手袋が少なくなったら教えて。」

Python「少ないとは、いくつですか?」

KAZU「そこは雰囲気で。」

Python「雰囲気は、まだ受け取っていません。」

人間なら棚を見て「そろそろ危ないかな」と感じる。しかし、プログラムには判断の基準を渡す必要がある。

そこで、手袋の在庫が5より少なければ知らせてもらうことにした。

stock = 3

if stock < 5:
    print("手袋の発注を確認")

stock は、在庫数につけた名前だ。こうした名前を変数という。

stock = 3 は、「stockという名前で、3を使えるようにする」という指示。最初は、名前のついた箱に数字を入れるイメージでもよい。

ただし、この = は算数の「左右が等しい」という意味とは違う。プログラムでは、値を変数に代入するために使っている。

学習レクチャー・2026年9月15日更新

第10回 Python編 第2話
察してくれない優秀な作業員

条件と空白の役割

次の if は「もし」という意味だ。

stock < 5 は「在庫が5より少ない」。条件に当てはまると、その下の表示が実行される。

KAZU「じゃあ、在庫が5なら?」

Python「表示しません。」

KAZU「5も少なくない?」

Python「ご指示は『5より少ない』でした。」

この作業員、なかなか手ごわい。でも間違ってはいない。

5も含めたいなら、条件を stock <= 5 に変える。小さな記号一つで、判断の境界が変わるのだ。

もう一つ大切なのが、print の前にある空白だ。Pythonでは、行頭の字下げで処理のまとまりを表す。この例では「条件に当てはまったときにする仕事」を、一段下げて書いている。通常は半角スペース4個を使う。

KAZU「空白にも仕事があるのか。」

Python「私の職場では、空白も勤務中です。」

学習レクチャー・2026年9月15日更新

第10回 Python編 第2話
察してくれない優秀な作業員

繰り返しと実習

続いて、同じ確認を3回表示してみる。

for i in range(3):
    print("確認", i + 1)

結果は「確認 1」「確認 2」「確認 3」。

for は、順番に取り出した値を使って処理を繰り返す。ここでは range(3) から0、1、2を取り出し、表示するときに1を足している。

変数で覚える。ifで判断する。forで繰り返す。

別々だった道具が、少しずつ仕事の形になってきた。

【ミニテスト】

stock < 5 という条件で、stockが5のとき、発注確認は表示される?

A.表示される
B.表示されない

ヒント:「より少ない」と「以下」は違う。

答え:B。5も含めるなら stock <= 5 と書く。

【小さな実習】

stockを4、5、6に変えて試そう。条件の境目を確かめると、プログラムが何を判断しているか分かりやすい。

学習レクチャー・2026年9月15日更新

第11回 Python編 第3話
自動化したのに、注文が届かない

一覧から発注候補を探す

KAZU「手袋だけじゃなくて、ペーパーもゴミ袋も見てほしい。」

Python「一覧をください。」

KAZU「棚を見れば分かるじゃん。」

Python「私は今、その棚を見る機能を持っていません。」

便利なプログラムも、渡されていない情報までは分からない。

そこで、品名と在庫数を組にした一覧を用意した。

items = {
    "手袋": 4,
    "ペーパー": 9,
    "ゴミ袋": 2
}

for name, stock in items.items():
    if stock < 5:
        print(name, "→ 発注候補")

実行すると、こう表示される。

手袋 → 発注候補
ゴミ袋 → 発注候補

KAZU「おお、二つ見つけた。」

Python「ペーパーは在庫9なので、今回は表示していません。」

学習レクチャー・2026年9月15日更新

第11回 Python編 第3話
自動化したのに、注文が届かない

辞書と繰り返しの仕組み

最初の { } で囲まれた部分は、辞書と呼ばれるデータの持ち方だ。品名を手がかりに、その在庫数を扱える。

ここでは「手袋」と4、「ペーパー」と9、「ゴミ袋」と2が、それぞれ組になっている。

items.items() は、その名前と数の組を順番に取り出すために使っている。取り出した品名を name、在庫数を stock として受け取り、一件ずつ条件を確かめる。

KAZU「つまり、一覧を順番に見て、少ないものだけ教えるのか。」

Python「はい。」

KAZU「じゃあ明日には届くね。」

Python「何がですか?」

KAZU「手袋。」

Python「注文はしていません。」

ここが大事なところだ。このプログラムは、発注候補を表示するだけ。注文を送る処理も、業者と通信する処理も入っていない。

「自動化できた」という言葉は、どこまで自動になったのかを確かめないと、意外なすれ違いを生む。

学習レクチャー・2026年9月15日更新

第11回 Python編 第3話
自動化したのに、注文が届かない

自動化の基準と実習

さらに、今回は全商品を同じ基準で判定している。実際には、手袋5箱とゴミ袋5枚では意味が違う。箱・袋・枚などの単位や、商品ごとの最低在庫も決める必要がある。

KAZU「作ったら終わりかと思ったら、仕事の決め事まで出てきた。」

Python「決め事がはっきりすると、私も働きやすくなります。」

自動化は、曖昧な仕事をそのまま機械へ投げることではない。人が基準を整理して、繰り返せる形にすることでもある。

【ミニテスト】

このプログラムがしていることはどれ?

A.業者へ注文を送る
B.在庫が5未満の商品を表示する
C.届いた商品の在庫を増やす

答え:B。画面への表示と、実際の注文は別の処理。

【小さな実習】

一覧に "洗剤": 1 を追加しよう。前の項目との間にカンマが必要なことにも注意して、発注候補に洗剤が出るか確かめてみよう。

学習レクチャー・2026年9月15日更新

第12回 SQL編 第1話
倉庫を建てたら、まず棚の話になった

データを残す場所

Pythonに在庫確認を頼めるようになった。

しかし、毎回コードを開いて在庫数を書き直すのは、少し面倒だ。

KAZU「昨日は4だったけど、今日は3。明日は納品で増える。これ、どこかにまとめて置けない?」

そこで登場したのが、データベースだった。

SQL「倉庫の準備ですね。」

KAZU「あなたが倉庫?」

SQL「私は倉庫へ指示を出すための言葉です。」

データベースが情報を保存して管理する仕組み。SQLは、その中の情報を取り出したり変更したりするための言語だ。

倉庫と、倉庫への頼み方は別だった。

学習レクチャー・2026年9月15日更新

第12回 SQL編 第1話
倉庫を建てたら、まず棚の話になった

表・行・列を知る

まずは在庫表を見てみよう。

iditemstock
1手袋4
2ペーパー9
3ゴミ袋2

このような表を「テーブル」と呼ぶ。ここでは supplies という名前をつけることにする。

横一列が「行」。一件分のデータだ。縦の項目が「列」。この表にはid、item、stockという三つの列がある。

KAZU「表なら、Excelでも見たことがある。」

SQL「その感覚は役に立ちます。まずは一行に何を入れるか、各列が何を意味するかをそろえましょう。」

学習レクチャー・2026年9月15日更新

第12回 SQL編 第1話
倉庫を建てたら、まず棚の話になった

データの区別と実習

では、一番左のidは何だろう。

これは、それぞれの行を区別するための番号だ。同じような品名があっても、どの行を指しているかをはっきりさせられる。

KAZU「手袋って名前で分かるんじゃない?」

SQL「SサイズとMサイズがあったら?」

KAZU「小さい手袋と、普通の手袋。」

SQL「普通とは?」

また出た。プログラムの世界では「普通」がなかなか通用しない。

実際の管理では、サイズや単位なども項目として持たせると、意味がはっきりする。表に情報を詰め込む前に、何をどう区別するかを考えるのが大切なのだ。

なお、先ほどのPythonの辞書は、あの例だけではプログラム終了後に変更をファイルへ保存しない。残しておきたい情報には、ファイルやデータベースへ保存する処理が必要になる。

KAZU「覚えてくれたと思ったのに、帰ると忘れるのか。」

SQL「だから、記録を残す場所を用意します。」

人もプログラムも、申し送りの仕組みが大切らしい。

【ミニテスト】

表の「一件分のデータ」に当たるのは?

A.行
B.列
C.テーブル名

答え:A。列は品名や在庫数などの項目を表す。

【小さな実習】

自分の在庫表を作るなら、何の列が必要か考えよう。「品名」「在庫数」に加えて「単位」があると、4箱なのか4枚なのかを区別できる。

学習レクチャー・2026年9月15日更新

第13回 SQL編 第2話
「少ないもの持ってきて」が通じるまで

SELECTで探す

倉庫に品物の情報が集まった。

最初は3件だった一覧も、30件、100件と増えていく。全部を眺めていると、どこまで確認したか分からなくなる。

KAZU「在庫が少ないものだけ見せて。」

SQL「条件をどうぞ。」

KAZU「あなたもか。」

Pythonとのやり取りで学んだことが、ここでも役に立った。「少ない」を数字で決めればよい。

SELECT item, stock
FROM supplies
WHERE stock < 5;

これは、前回の supplies というテーブルがある前提の例だ。

頼み事は、三つに分かれている。

SELECT item, stock は「品名と在庫数を見せて」。

FROM supplies は「suppliesという表から」。

WHERE stock < 5 は「在庫が5より少ない行だけ」。

前回の表なら、手袋4とゴミ袋2が見つかる。

KAZU「文章みたいに読めるね。」

SQL「順番に読むと、何を頼んだか整理できます。」

学習レクチャー・2026年9月15日更新

第13回 SQL編 第2話
「少ないもの持ってきて」が通じるまで

少ない順に並べる

では、「少ない順に見たい」ときはどうするのだろう。

SELECT item, stock
FROM supplies
WHERE stock < 5
ORDER BY stock ASC;

ORDER BY は並べ方を指定する部分。ASC は小さい順を表す。これで、ゴミ袋2、手袋4という順番になる。

KAZU「さっきも、たまたま見やすい順だったけど。」

SQL「並び順が必要なら、明示してください。」

並び順を指定していない結果について、いつも同じ順番で出ると思い込まないことが大切だ。

学習レクチャー・2026年9月15日更新

第13回 SQL編 第2話
「少ないもの持ってきて」が通じるまで

取り出す列と実習

もう一つ、よく見かける書き方がある。

SELECT *
FROM supplies;

* は、この場合「すべての列」を意味する。表の中身を確認するには便利だが、画面で使う項目が決まっているなら、必要な列を指定すると目的が伝わりやすい。

SQLは魔法の検索係ではない。こちらが「何を」「どこから」「どんな条件で」と整理すると、必要な情報を取り出せる。

KAZU「探す技術というより、頼み方の技術でもあるんだね。」

SQL「その頼み方を、何度でも正確に実行できます。」

【ミニテスト】

在庫が5より少ない行に絞っているのは、どの部分?

A.SELECT
B.FROM
C.WHERE

答え:C。SELECTは取り出す列、FROMは元の表、WHEREは行を絞る条件。

【小さな実習】

条件を stock >= 5 に変えたら、前回の表から何が出るだろう。答えは、在庫9のペーパー。記号を変えると、探す側が反対になる。

学習レクチャー・2026年9月15日更新

第14回 SQL編 第3話
WHEREさん、今日は帰らないでください

在庫を書き換える

品物が届いた。

手袋の在庫が増えたので、表を直すことにする。

KAZU「idが1の手袋を、在庫8にして。」

UPDATE supplies
SET stock = 8
WHERE id = 1;

UPDATE supplies は「suppliesを更新する」。

SET stock = 8 は「在庫数を8にする」。

WHERE id = 1 は「idが1の行を対象にする」。

ここでの「8にする」は、「8増やす」とは違う。元が4なら、変更後は8。12にはならない。

KAZU「日本語だと、つい『8追加して』とか言っちゃいそうだね。」

SQL「そこは結果が変わるので、区別してください。」

学習レクチャー・2026年9月15日更新

第14回 SQL編 第3話
WHEREさん、今日は帰らないでください

WHEREで対象を絞る

そして、この回の最重要人物がWHEREさんだ。

もし最後の条件を書かなければ、この文はテーブル内の全行を更新対象にする。手袋だけ直したかったのに、ペーパーもゴミ袋も在庫8になる。

KAZU「みんな仲良く8?」

SQL「在庫管理では困ります。」

「エラーが出ない」ことと「意図どおり」は同じではない。文法が正しくても、頼み方が間違っていれば、間違った仕事が正確に実行される。

そのため、変更する前に同じ条件で対象を確認する習慣が役に立つ。

SELECT id, item, stock
FROM supplies
WHERE id = 1;

ここで手袋の行が出ることを確認してから、更新を考える。変更後の結果や、変更件数も確かめたい。

学習レクチャー・2026年9月15日更新

第14回 SQL編 第3話
WHEREさん、今日は帰らないでください

変更を守る仕組みと実習

また、データを追加する命令は INSERT、行を削除する命令は DELETE だ。削除も対象条件を間違えると影響が大きいので、練習には専用のデータを使おう。

実際のシステムでは、権限やバックアップ、変更履歴、必要に応じたトランザクションなども組み合わせる。トランザクションは、関連する変更をひとまとまりとして扱う仕組みだ。ただし「何でも後から戻せる魔法」ではなく、確定前かどうかなどの条件がある。

KAZU「便利になるほど、確認が大事になるね。」

SQL「速く直せる道具は、速く間違えることもできます。」

KAZU「WHEREさん、今日は残業お願いします。」

【ミニテスト】

SET stock = 8 の意味は?

A.在庫を8増やす
B.在庫を8にする
C.在庫8の商品だけ探す

答え:B。数を指定して置き換える処理。

【小さな実習】

コードを書く前に、「どの行を」「どの値に変えるか」を一文で書いてみよう。対象を言葉にできないときは、更新する前に条件を整理するところから始めよう。

学習レクチャー・2026年9月15日更新

第15回 API編 第1話
道路を作ったら、受付がいた

外の情報を借りる

自分のページができた。情報を保存する場所も見えてきた。

次に欲しくなったのは、自分の手元にはない情報だった。

KAZU「ページに甲府の天気を出したい。」

Python「天気の情報はありますか?」

KAZU「窓の外は見える。」

Python「明日の分は?」

それは困る。明日の空は、今の窓から見えない。

そこで登場するのがAPIだ。

API「天気情報を提供するサービスへ、決められた方法で問い合わせることができます。」

KAZU「外へつながる道路ってこと?」

API「そのイメージは役立ちます。ただ、道路の先には受付があります。」

学習レクチャー・2026年9月15日更新

第15回 API編 第1話
道路を作ったら、受付がいた

受付のルールと表示

好きなところへ勝手に入って、欲しいものを持って帰る仕組みではない。どの窓口へ、どんな形式で頼むかが決まっている。

たとえば「甲府の天気」を頼むつもりでも、相手は都市名ではなく緯度と経度を必要としているかもしれない。

KAZU「『甲府です、よろしく』じゃ駄目なの?」

API「受付が受け取れる形にしてください。」

このように、プログラム同士がやり取りするための窓口やルールがAPIだ。この話ではインターネット経由のAPIを扱うが、APIという言葉自体は、もっと広い場面でも使われる。

返ってきた情報は、そのまま完成した天気画面になるとは限らない。気温や天気のコードなどを受け取り、自分のページ側で文字やアイコンにして表示する場合もある。

つまり、「情報をもらう仕事」と「見やすく見せる仕事」は、分けて考えられる。

KAZU「食材が届いても、料理はこっちでする感じ?」

API「そのたとえなら分かりやすいですね。」

学習レクチャー・2026年9月15日更新

第15回 API編 第1話
道路を作ったら、受付がいた

利用ルールと実習

また、サービスによっては利用登録や認証、料金、回数制限がある。必要な鍵の扱いもサービスごとに確認する。秘密にするべきキーを、誰でも読めるHTMLやJavaScriptへ書いてはいけない。

道路が一本できると、外の力を借りられる。ただし、相手の受付時間やルールを無視して走れるわけではないのだ。

【ミニテスト】

APIから天気のデータを受け取ったら、必ず完成した天気画面も一緒に届く?

A.必ず届く
B.データを受け取り、自分で画面を作る場合もある

答え:B。何が返るかは、そのAPIの仕様による。

【小さな実習】

「外からもらいたい情報」を一つ考えよう。次に、それを「自分の画面でどう見せたいか」も書いてみよう。取得と表示を分けると、必要な仕事が整理できる。

学習レクチャー・2026年9月15日更新

第16回 API編 第2話
お願いしたのに、返事がまだ来ない

お願いを送る

APIの受付へ頼み事を送ることになった。

KAZU「頼んだ。じゃあ結果を出して。」

API「まだ届いていません。」

KAZU「今、頼んだじゃん。」

API「返事が届くまで時間がかかります。」

人間同士なら当たり前のことだが、画面の中では忘れやすい。通信には時間がかかる。頼んだ瞬間に、答えが手元にあるとは限らない。

そこで今日は、JavaScriptからAPIへ問い合わせる流れを見てみる。

以下は、同じサイトに /api/example という窓口が用意され、JSONを返す前提の例だ。窓口そのものを作るコードではない。

async function loadExample() {
  const response = await fetch("/api/example");

  if (!response.ok) {
    throw new Error(
      `取得に失敗しました: ${response.status}`
    );
  }

  const data = await response.json();
  console.log(data);
}

学習レクチャー・2026年9月15日更新

第16回 API編 第2話
お願いしたのに、返事がまだ来ない

返事を待って読み取る

fetch() は、指定した場所へ通信するための関数だ。

await は、その処理の結果が得られるまで、この関数内の続きを待つために使う。その間ずっとブラウザ全体が止まる、という意味ではない。

async は、こうした非同期処理を扱う関数につける。

KAZU「専門用語が三人まとめて来たな。」

API「今日は『頼む、待つ、受け取る』が分かれば先へ進めます。」

response は、相手から返ってきた応答だ。そこには本文のほか、処理の結果を示すステータスなどがある。

ここで注意したい。404などのHTTPエラーが返っても、fetch() はそれだけで失敗として例外を投げるわけではない。そのため、response.ok で成功した応答かを確認している。

続いて response.json() で、本文をJSONとして読み取り、JavaScriptで扱える値にする。

たとえば、返事の本文が次のようなJSONだったとしよう。

{"city": "甲府", "temperature": 25}

これは形式を説明するための架空の値で、現在の天気ではない。読み取った後は、data.city で都市名、data.temperature で気温の値を取り出せる。

学習レクチャー・2026年9月15日更新

第16回 API編 第2話
お願いしたのに、返事がまだ来ない

実行と表示を確かめる

なお、関数は定義しただけでは実行されない。呼び出して、失敗した場合も受け止める。

loadExample().catch(error => {
  console.error(error);
});

console.log() の出力先は開発者向けのコンソールだ。ページ本文へ表示するには、別途その処理を書く。

KAZU「窓口も必要。呼び出しも必要。画面表示も別。短いコードの裏に仕事があるね。」

API「一つずつ役割を分けると、困った場所も探しやすくなります。」

【ミニテスト】

fetch("/api/example") と書くだけで、そのAPI窓口自体も作られる?

A.作られる
B.作られない

答え:B。これは既にある窓口へ問い合わせる処理。

【小さな実習】

コードを「送信」「成功確認」「本文の読み取り」「出力」に分けて読んでみよう。全部を暗記するより、それぞれが何を担当しているかをつかもう。

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

失敗を受け止める

パソコンでは動いた。

KAZU「完成!」

ところがiPhoneで試すと、思ったように動かない。

KAZU「さっき完成したところなんだけど。」

API「別の環境でも確認できて、よかったですね。」

KAZU「励ましの角度が独特だね。」

通信する機能では、自分のコードだけでなく、ネットワークや相手のサービス、ブラウザの制約なども関わる。動かない原因がAPIとは限らない。ボタンの処理や画面の更新に問題がある場合もある。

だから、「APIが悪い」と決める前に、どこまで進んだかを確かめたい。

ボタンは反応したか。通信は送られたか。返事は来たか。受け取ったデータを表示できたか。

KAZU「道路が悪いと思ったら、玄関のドアが開いていないこともあるのか。」

API「あります。」

そして、原因を直すだけでなく、失敗したときの動きも用意する。

次の例は、前回と同じ窓口が存在する前提だ。

async function loadExample() {
  try {
    const response = await fetch("/api/example");

    if (!response.ok) {
      throw new Error(
        `HTTPエラー: ${response.status}`
      );
    }

    const data = await response.json();
    console.log("取得できました", data);

  } catch (error) {
    console.error("取得できませんでした", error);
  }
}

loadExample();

HTTPエラーとは、通信先のサーバーからHTTPの返事が届いたものの、その返事が「処理を完了できなかった」ことを示している状態だ。たとえば、指定したページが見つからないときは404、サーバー側で問題が起きたときは500になる。

response.ok は、返事が成功扱いかどうかを確認するための値だ。ステータスが200番台なら通常は true、404や500のようなHTTPエラーなら false になる。

ただし、response.okfalse になっただけでは、catch へ自動的に移るわけではない。そこで throw new Error(...) を使い、こちらから「これは失敗として扱います」と知らせる。

throw は、問題が起きたことを知らせて、通常の処理を中断する指示だ。たとえるなら、受付で「この依頼は処理できません」と分かった時点で、次の作業を止め、非常口へ案内するようなものだ。

try の中で処理を行い、そこで起きた例外を catch で受け止める。例外とは、プログラムの途中で起きた予想外の問題を知らせる仕組みである。

たとえば、JSONではなく壊れた文字列が返ってきた場合、response.json() の読み取りに失敗して例外が起きる。ネットワーク自体に問題がある場合も、fetch() が例外になることがある。catch があれば、こうした問題を受け止め、エラー表示へ進められる。

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

ネットワークエラーとHTTPエラー

ここで、ネットワークエラーとHTTPエラーは区別して考えよう。

ネットワークエラーは、サーバーからHTTPの返事を受け取る前に起きる問題だ。Wi-Fiが切れた、DNSで接続先を見つけられない、通信がタイムアウトしたなどがある。この場合、fetch() 自体が例外になり、response は作られない。

一方、404や500は、サーバーからHTTPの返事が届いたうえで、その内容が「見つからない」「サーバー側で問題が起きている」という意味を示している状態だ。この場合、fetch() は返事を受け取るため、通常は response が作られる。ただし response.okfalse になる。

つまり、次のように整理できる。

  • ネットワークエラー:返事そのものを受け取れない。fetch() が例外になり、catch へ進む
  • 404:返事は届いたが、指定したページやAPIが見つからない
  • 500:返事は届いたが、サーバー側で問題が起きている
  • 404や500などのHTTPエラー:response.ok を確認し、必要なら throw して catch で扱う

流れを短く言うと、こうだ。

「返事を受け取る」→「response.ok でHTTP上の成功か確認する」→「HTTPエラーなら throw する」→「catch が受け止める」。

ただし、ネットワークエラーの場合は、返事を受け取る前に fetch() が失敗する。そのため、response.ok を確認するところまで進まず、直接 catch へ移る。

KAZU「ネットワークエラーは返事が来ない。404や500は、返事は来たけれど内容が失敗なんだね。」

API「その違いを分けると、再試行するか、設定を直すかを判断しやすくなります。」

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

種類に応じたエラー表示

たとえば、エラーの種類を分けて表示するなら、次のように書ける。

async function loadExample() {
  try {
    const response = await fetch("/api/example");

    if (response.status === 404) {
      throw new Error("指定したAPIが見つかりません");
    }

    if (response.status >= 500) {
      throw new Error("サーバー側で問題が起きています");
    }

    if (!response.ok) {
      throw new Error(`HTTPエラー: ${response.status}`);
    }

    const data = await response.json();
    console.log("取得できました", data);

  } catch (error) {
    console.error("取得できませんでした", error);
  }
}

この例では、404と500以上を先に分けている。404ならURLや窓口の設定を確認する必要がある。500以上なら、サーバー側の復旧を待つ、管理者へ連絡するなどの対応が考えられる。

ただし、実際のアプリでは、利用者にHTTPステータスをそのまま見せるのではなく、「情報が見つかりません」「サーバーが混み合っています」など、次の行動が分かる言葉に置き換えることも大切だ。

KAZU「同じ失敗でも、直し方が違うんだね。」

API「はい。返事がないのか、返事はあるが失敗なのかを見分けます。」

ただし、このコードの表示先はコンソールだ。実際の利用者には、画面上で「取得できませんでした。時間をおいて再度お試しください」などと知らせる必要がある。

KAZU「押したのに無言、が一番困るんだよ。」

API「処理中か、成功したか、失敗したかが分かると、次の行動を選べます。」

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

再試行の判断とコード

再試行とは、失敗した処理をもう一度やり直すことだ。ただし、何でも繰り返せばよいわけではない。まず、エラーを「再試行しても直りにくいもの」と「時間を置けば直る可能性があるもの」に分ける。

404のようにURLやAPIの指定が間違っているエラー、400番台の入力ミス、401や403のような認証・権限の問題は、同じ条件で繰り返しても解決しにくい。まずURL、入力値、認証情報、権限などを直す必要がある。

一方、ネットワークエラーや、429(短時間にアクセスしすぎたことを示すエラー)、一部の500番台エラーは、一時的な問題の可能性がある。時間を置いて再試行する設計を検討できる。ただし、500番台でも、処理の内容やAPIの仕様によっては再試行が安全とは限らない。

つまり、すべてのHTTPエラーを一律に再試行してはいけない。ステータスコードだけでなく、処理の種類、APIの仕様、エラーの内容を確認して判断する。

たとえば、天気を読むだけの処理なら、ネットワークエラーや一時的なサーバーエラーが起きたときに、回数を制限して再試行する設計は考えやすい。

function isRetryableStatus(status) {
  return status === 408 ||
         status === 429 ||
         status >= 500;
}

function sleep(ms) {
  return new Promise(resolve => {
    setTimeout(resolve, ms);
  });
}

async function loadWeather() {
  const maxAttempts = 3;

  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
    try {
      const response = await fetch("/api/weather");

      if (!response.ok) {
        const error = new Error(
          `HTTPエラー: ${response.status}`
        );
        error.status = response.status;
        throw error;
      }

      return await response.json();

    } catch (error) {
      const isNetworkError =
        error instanceof TypeError && error.status === undefined;

      const isRetryableHttpError =
        Number.isInteger(error.status) &&
        isRetryableStatus(error.status);

      const canRetry =
        isNetworkError || isRetryableHttpError;

      if (!canRetry || attempt === maxAttempts) {
        throw error;
      }

      const baseDelay = 1000;
      const exponentialDelay =
        baseDelay * 2 ** (attempt - 1);

      const jitter =
        Math.floor(Math.random() * 300);

      const delay = exponentialDelay + jitter;

      console.warn(
        `${attempt}回目の失敗。` +
        `${delay}ms後に再試行します`
      );

      await sleep(delay);
    }
  }
}

この例では、最大試行回数を3回にしている。最初の試行を1回目と数え、1回目に失敗したら待って2回目、2回目に失敗したら待って3回目を試す。3回目も失敗したら、それ以上は繰り返さず、最後のエラーを呼び出し元へ伝える。

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

回数・待ち時間・上限

再試行回数には、最初の試行を含めるかどうかで意味が変わる。ここでは maxAttempts = 3 を「合計3回試す」という意味にしている。設計書や画面表示でも、試行回数の数え方をそろえておく。

isRetryableStatus() では、408、429、500番台を再試行候補にしている。408はリクエストの処理が時間内に終わらなかったことを示す。429はアクセス回数の制限に達したことを示す。500番台はサーバー側の一時的な障害の可能性がある。

ただし、これはあくまで一例だ。APIによっては、503だけを再試行対象にしたり、429ではレスポンスの Retry-After ヘッダーに従ったりする必要がある。429を受け取ったら、固定の待ち時間ではなく、サーバーが指定した待ち時間を優先する設計も考えられる。

また、ネットワークエラーを TypeError だけで判定する方法は、環境によっては十分ではない。fetch() が返すエラーの種類や、アプリ側で定義したエラー情報を確認し、必要なら独自のエラー分類を用意する。ここでは、ネットワークエラーとHTTPエラーを区別する考え方を示すために簡略化している。

待ち時間には、指数バックオフを使っている。

baseDelay * 2 ** (attempt - 1) によって、待ち時間はおおむね1秒、2秒、4秒と伸びる。障害中のサーバーへ、短い間隔で何度もアクセスし続けることを避けやすい。

さらに、ランダムな短い時間を加えている。これをジッターという。同じ時刻に多くの利用者が一斉に再試行するのを避けるためだ。

ただし、待ち時間を無制限に伸ばしてはいけない。実際のアプリでは、1回あたりの最大待ち時間や、全体のタイムアウト時間も設ける。利用者を長く待たせすぎないよう、再試行中は画面に「再接続しています」などと表示し、最終的に失敗したら次の行動を案内する。

KAZU「再試行には、対象にしてよいエラー、回数、待ち時間、上限があるんだね。」

API「はい。『もう一度』を自動化する前に、どの失敗なら安全かを決めます。」

また、500番台でも、処理の内容によっては再試行が危険になる。天気の取得のように読むだけの処理なら比較的安全だが、注文や決済では、サーバーが処理を受け付けた後に返事だけ届かなかった可能性がある。

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

二重注文・二重決済を防ぐ

KAZU「ネットワークエラーなら、サーバーが何もしていないとは限らないのか。」

API「はい。返事が届かなかっただけで、裏側では処理が成功している場合があります。」

さらに、再試行には回数だけでなく、処理の性質も関係する。

注文や決済のように、サーバーの状態を変更する処理を、クライアント側から単純に自動再試行してはいけない。通信が切れた時点で、サーバーが処理を受け付けたかどうか分からないことがあるからだ。

KAZU「画面では失敗に見えても、裏では成功していることがあるのか。」

API「通信が切れた場所によっては、そういうことがあります。」

この場合、単純な再試行は危険だ。天気の取得なら「もう一度聞く」だけで済むが、注文は「もう一度実行する」ことになる。

二重処理とは、本来一回だけ行う仕事が、誤って二回行われることだ。たとえば、サーバーでは注文を受け付けたのに、返事が届く前に通信が切れることがある。画面に「失敗したかもしれません」と表示され、利用者がもう一度押すと、同じ商品が二つ注文される可能性がある。

そのため、注文や決済では、まず「再試行してよい処理」と決めつけず、注文履歴や決済状態を確認する。必要なら、サーバー側に状態確認用のAPIを用意し、元の依頼が処理済みか、未処理か、不明かを確認してから次の操作を決める。

また、同じ依頼を識別するための一意な注文番号やリクエストIDを使い、同じIDの依頼を二回受けても一回分として扱う仕組みを用意する。これは冪等性を確保するための設計である。決済や注文では、サーバー側でこの重複防止を行うことが重要だ。

KAZU「同じ依頼に同じ番号をつけて、二回届いても一回として扱うのか。」

API「はい。ただし、その仕組みがサーバー側で正しく実装されている必要があります。」

利用者が「注文する」ボタンを押したら、画面側でボタンを一時的に無効にする方法もある。ただし、これは連打を防ぐ助けにはなるが、通信切れによる再送まで完全に防ぐものではない。ボタンを無効にしただけで、二重注文を防げたと考えてはいけない。

注文や決済で通信が切れた場合は、「失敗したので、もう一度押してください」とすぐ案内するのではなく、「処理結果を確認しています」「注文履歴を確認してください」など、重複を避ける案内を優先する。状態が不明なまま、同じ処理を自動再試行しない。

一方、天気の取得のように読むだけの処理なら、再試行による二重注文の心配は比較的小さい。処理の種類に応じて、再試行してよいかを判断することが大切だ。

KAZU「再試行は、『もう一度聞く』のか、『もう一度実行する』のかで危険度が違うんだね。」

API「はい。読む処理と、注文・決済のように状態を変える処理は分けて考えます。」

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

動作確認と帰り道

待ち時間の上限、再試行の回数、以前のデータを見せる場合の更新日時。こうしたルールを決めるほど、使う人が困る場面を減らせる。

KAZU「まさにAPIは地雷原だね。」

API「だから地図と帰り道を作りましょう。」

「動いた」は大きな一歩だ。

けれど、ゴールの合図ではない。パソコンだけでなくiPhoneでも、通信が速いときだけでなく遅いときにも試す。成功時だけでなく、ネットワークが切れたとき、404が返ったとき、429が返ったとき、500が返ったとき、返事が遅れたときにも確認する。

動作確認とは、一度動いたと喜ぶことではない。どんな条件なら動き、どんな条件で失敗するのかを知ることだ。

失敗は起きるものとして、処理中・成功・失敗の状態を画面に示す。失敗時には、何が起きたかだけでなく、次に何をすればよいかも伝える。ネットワークエラーなら「接続を確認して、もう一度取得する」、404なら「設定やURLを確認する」、429なら「しばらく待ってから再度試す」、500なら「時間をおいて再度試す」など、原因に合った案内が必要だ。

注文や決済で結果が不明な場合は、「もう一度実行する」ではなく、「注文履歴や決済状態を確認する」と案内する。処理が完了していないことを確認できた場合に限り、重複を防ぐ仕組みを使って再実行を検討する。

KAZU「処理の種類だけでなく、失敗の種類によっても帰り道の案内が変わるんだね。」

API「はい。迷った人を同じ場所へ何度も走らせないことが大切です。」

一つ直ると感動する。三つ直れば、ちょっと自慢したくなる。けれど、その日の最後にもう一度、パソコンとiPhoneを手に取る。

「動いた」は大きな一歩。

その一歩を完成へつなげるのは、動作確認と、失敗したときの備えだ。

完成の声は、成功した画面だけでなく、ネットワークエラー、404、429、500などの失敗画面にも、それぞれの帰り道があることを確かめてからでも遅くない。

学習レクチャー・2026年9月15日更新

第17回 API編 第3話
地雷原に、帰り道をつける

ミニテストと実習

【ミニテスト】

APIの処理が失敗したら、何でも無制限に再試行すればよい?

A.よい
B.原因や処理の内容に応じて判断する

答え:B。一時的なネットワークエラー、429、または一部のサーバー側の一時的な障害なら、回数と待ち時間を制限して再試行すると直ることがある。一方、404のようなURLの間違い、入力ミス、認証情報や権限の問題には設定や入力の修正が必要だ。

注文や決済では、通信が切れてもサーバー側で処理が成功している可能性がある。結果が不明なまま同じ処理を再試行すると、二重注文や二重決済になるおそれがあるため、まず注文履歴や決済状態を確認し、サーバー側の重複防止の仕組みも利用する。

【小さな実習】

自分の画面について、「処理中」「成功」「失敗」の三つの表示を考えよう。パソコンとスマートフォン、通信が速いときと遅いときでも試してみる。

失敗したときは、「何が起きたか」だけでなく、「次に何をすればよいか」も表示する。ネットワークエラー、404、429、500などで、再試行してよいのか、URLや設定を直すのか、時間をおいて待つのかを考えよう。

再試行する場合は、対象にするエラー、合計の試行回数、指数バックオフによる待ち時間、最大待ち時間を決める。無限に繰り返さず、最後は利用者へ分かる形で失敗を伝える。

注文や決済のように状態を変更する処理では、通信が切れたときに自動再試行しない。まず処理結果や履歴を確認し、同じ依頼を一回だけ扱うための注文番号やリクエストIDなど、サーバー側の重複防止策があるかを確認する。

処理とエラーの種類に合った案内を用意し、利用者が迷わず戻れる道を作るところまでが、画面づくりの仕事だ。