Old-School Front-End / 2026 ・ No.01

いにしえのフロントエンド入門

第1回 Web ページが映るまでと、経費精算システムの設計図

公開

経費精算システムの完成イメージ。紺色のメニューバーに「経費精算」「申請一覧」「承認」「ダッシュボード」、右上に「新井 太郎(申請者)」。申請一覧の画面に、今月の申請4件・承認待ちの金額 32,400円・差し戻し1件のカードと、状態で絞り込むボタン、申請日・件名・金額・状態(申請中、承認済み、差し戻し、精算済み、下書き)の表が並ぶ
この連載で作る経費精算システムの完成イメージ(申請一覧の画面)。Bootstrap 5.3.8 で組んだ見本です。15回かけて、ここまで育てます(筆者が作ったデモページを、クラウド上の Chromium で撮影。2026年10月17日。ブラウザの枠は説明のために描き足したもの)

今回から、Web システムの画面づくり(フロントエンド)の連載を始めます。題材は、どの会社にもある経費精算システム。
いまは AI に「こんな画面を作って」と頼めば、コードを読まなくても画面ができてしまうバイブコーディング(Vibe Coding)の時代です。
この連載は、あえてその逆を行きます。HTML・CSS・JavaScript を、一行ずつ意味を確かめながら自分の手で書く。道具も Bootstrap と jQuery まで。
だから「いにしえの」フロントエンド入門です。全15回で、上の画面が動くところまで作ります。第1回は、手を動かす前の準備運動です。

一

「いにしえの」とは:バイブコーディングの逆

まずは、この連載の二人を紹介します。

登場人物

$ </> ? 古井(ふるい)先輩 jQuery 全盛期を生き抜いた 社内システムの守り神 新井 太郎(あらい たろう) 入社1年目のバイブ派。AI に 頼めば画面はすぐできると思っている

古井新井くん、今度の経費精算システム、画面は君に任せる。

新井任せてください! AI に「経費精算の画面を作って」って頼めば一瞬です。バイブコーディングってやつですね。

古井ほう。で、出てきたコードは読めるのか? 合計が1円ずれたら、どこを直す?

新井……そこは、雰囲気で。

古井それが「バイブ」だ。今回は一行ずつ、手で書いてもらう。いにしえのやり方でな。

新井手で!? それって縄文時代の作り方じゃ……。

古井縄文は言いすぎだ。せいぜい平成だな。

バイブコーディング(Vibe Coding)は、OpenAI の創業メンバーの一人アンドレイ・カルパシーが2025年2月に名付けた言葉です。AI に自然な言葉で頼み、出てきたコードは細かく読まずに「雰囲気(バイブ)」で受け入れて進める作り方で、英国の Collins 辞典が2025年の「今年の言葉」に選ぶほど広まりました。このブログでも開発ガイドのVibe Coding覚書で取り上げています。この連載の「いにしえの」は、その正反対という意味です。

バイブコーディングいにしえのやり方(この連載)
コードを書くのはAI(人は頼むだけ)自分
コードは細かく読まない一行ずつ意味を確かめる
最初の画面までとにかく速い時間がかかる
壊れたときAI にもう一度頼む(直るまで祈る)どこが悪いか、自分で突き止められる
向いているもの試作、使い捨てのツール長く使う業務システム、AI が書いたコードの確認

AI に頼めば速いのは事実です。それでも、この連載では手で書きます。理由は三つあります。

  • AI が書いたコードにも、責任を持つのは人 ── 経費精算はお金を扱うシステム。合計の1円のずれや、入力チェックの抜けは、誰かがコードを読んで見つけなければならない。読めないコードは、確かめることも直すこともできない
  • 土台は変わらない ── AI が書いても、React や Vue を使っても、最後にブラウザに渡るのは HTML・CSS・JavaScript。土台が分かっていれば、何が出てきても中身が見える
  • いにしえの道具は、今も現役 ── 調査会社 W3Techs の集計では、2026年10月時点で jQuery は調査対象の Web サイトの約64.5% で使われ、Bootstrap は CSS フレームワークの中で約75% を占めます。社内の業務システムには、なおさら多く残っています
CORE

AI を否定する連載ではありません。自分の手で一度作れるようになると、AI への頼み方がうまくなり、出てきたコードの良し悪しも判断できるようになります。手で書く力は、AI を使いこなすための土台です。この連載のゴールは、「AI に頼らなくても、業務システムの画面を一通り作れる」ことです。

二

作るもの:経費精算システム

経費精算は、社員が立て替えたお金(電車代や出張のホテル代など)を会社に申請し、上司が承認し、経理が払い戻す仕組みです。登場人物と、申請が進む流れを図にしました。

誰が、どの状態を動かすか

下書き Draft 申請中 承認待ち 承認済み 経理待ち 精算済み おしまい 申請者(新井) 申請する 承認者(課長) 承認する 経理 精算する 差し戻し 直してね 差し戻す(承認者) 直して出し直す 守るルールの例 ・合計3万円以上は領収書が必須 ・未来の日付は申請できない ・ドル建ては円に換算する

一つの申請は「状態」を持ち、人が操作するたびに次の状態へ進みます。この流れを画面でどう表すかが、業務システムの腕の見せどころです

この連載で作る機能を、ざっと並べるとこうなります。

使う人できること
申請者申請を書く(明細の行を増やせる、領収書を添付できる)、下書きで保存する、申請する、自分の申請の一覧と状態を見る、差し戻されたら直して出し直す
承認者部下の申請を見て、承認するか、理由を書いて差し戻す
経理承認済みの申請を精算済みにする、月ごとの金額をグラフで見る、申請書を印刷する

守るべきルールもあります。開発ガイドのPlaywright 入門と実践でテストした経費精算ページと同じく、「合計が3万円以上なら領収書が必須」「未来の日付は申請できない」「ドル建ての明細は円に換算する」などです。ルールを画面で守らせる方法は、第9回で詳しく扱います。

NOTE

この連載が作るのは画面の側(フロントエンド)だけです。データを保存するサーバーの代わりに、第10回からは「本物のふりをする」小さなサーバー(モック API)を使います。本番で使うなら、ログインや入力チェックはサーバー側でも必ず行う必要があります(画面の側のチェックは、利用者のブラウザで簡単に外せるからです)。

三

Web ページが映るまで

新井URL を打つと、ページがパッと出る。あれ、魔法ですよね。

古井魔法に見えるのは、裏の工程が一瞬で終わるからだ。順番に見てみよう。

ブラウザの中で起きていること

ブラウザ あなたの手元 サーバー ページの置き場 1 URL で注文(リクエスト) 2 HTML・CSS・JS が届く(レスポンス) HTML CSS JavaScript DOM CSSOM 3 レンダーツリー 見えるものだけ レイアウト 位置と大きさ ペイント 色をぬる 画面 やっと見える 4 5 JavaScript が DOM を書き換える 書き換えるたびに ④⑤ がやり直される。だから重い処理は画面を遅くする
  1. 注文する(リクエスト) ── ブラウザが、URL が指すサーバーに「このページをください」と頼む
  2. 届く(レスポンス) ── サーバーから HTML が届く。HTML の中に書かれた CSS や JavaScript のファイルも、続けて取りに行く
  3. 読み解く ── HTML を読んで、ページの部品の木(DOM)を作る。CSS も読んで、見た目のルールの一覧(CSSOM)を作る。二つを合わせて、実際に画面に出す部品だけの木(レンダーツリー)にする
  4. 配置する(レイアウト) ── 画面の幅に合わせて、それぞれの部品の位置と大きさを計算する
  5. ぬる(ペイント) ── 文字や色を、画面の点(ピクセル)に描く

ここで大事なのが DOM です。JavaScript は、HTML のファイルそのものではなく、ブラウザの中にある DOM を書き換えて画面を変えます。書き換えるたびに④⑤がやり直されるので、むやみに書き換えると画面が重くなります。この話は第8回でもう一度出てきます。

四

HTML・CSS・JavaScript の三役

フロントエンドの三つの言語は、体にたとえると分かりやすくなります。

三つの言語の役割分担

HTML 骨格 何があるか <h1> <table> <button> CSS 服 どう見えるか color: #c0392b; margin: 16px; JavaScript 神経と筋肉 どう動くか addEventListener textContent = どれか一つ欠けても、業務システムにはならない

百聞は一見にしかず。同じ申請フォームに、三つを順番に足してみました。

同じ申請フォームを3段階で比べた画面。1 HTML だけのものは飾りのない素朴な表示で、合計は 0 円のまま。2 CSS を足すと、紺色の見出しと角の丸い入力欄、赤いボタンが付くが、合計はまだ 0 円。3 JavaScript を足すと、合計が 3,830 円になり、申請ボタンを押すと「申請しました!(※まだどこにも送っていません)」と表示される
同じページに、①HTML だけ、②CSS を足す、③JavaScript を足す、の3段階。見た目が変わるのは②、合計が計算されて「申請しました」と応えるのは③からです(筆者が作ったデモページを、クラウド上の Chromium で撮影。2026年10月17日。ブラウザの枠は説明のために描き足したもの)

①の HTML だけでも、入力欄やボタンはちゃんと動きます。文字も打てるし、ボタンも押せる。ただ、見た目は素朴で、合計は 0 円のまま。②で CSS を足すと業務システムらしい見た目になりますが、計算はしてくれません。計算や、押したときの反応は JavaScript の仕事です。それぞれ、足したのはこんなコードです(抜粋)。

<!-- ① HTML:何があるか -->
<p>合計: <output id="total">0</output> 円</p>
<button type="button" id="send">申請する</button>

/* ② CSS:どう見えるか */
button { background: #c0392b; color: #fff; border-radius: 8px; }

// ③ JavaScript:どう動くか
document.querySelector('#send').addEventListener('click', () => {
  document.querySelector('#toast').hidden = false;
});

いまは読めなくて大丈夫です。HTML は第2〜3回、CSS は第4〜6回、JavaScript は第7〜10回で、一つずつ読めるようにしていきます。

POINT

三つを別々のファイルに分けて書くのが基本です(HTML は .html、CSS は .css、JavaScript は .js)。役割ごとに分けておくと、「見た目だけ直したい」「動きだけ直したい」ときに、触る場所が一つで済みます。

五

ちょっとだけ歴史

「いにしえの」と名乗るからには、少しだけ昔話を。

フロントエンドの年表(主なできごと)

1990 2000 2010 2020 1991 Web の公開 最初のサイトは info.cern.ch 1995 JavaScript 試作はわずか10日 1994 CSS の提案 見た目を HTML から分ける 1996 CSS1 が勧告に W3C の正式な仕様 2006 jQuery 書き方の違いを吸収 2011 Bootstrap Twitter 社から公開 2021 Bootstrap 5 jQuery なしで動くように 2026 jQuery 4.0 Bootstrap 6 のα版も登場 ※ この連載が扱うのは、主に 2006〜2026 年の「いにしえの道具」と、今も変わらない土台
  • 1991年 ── CERN(欧州原子核研究機構)のティム・バーナーズ=リーが、Web をインターネットで一般に公開。最初の Web サーバーは info.cern.ch
  • 1994〜96年 ── ホーコン・ウィウム・リーが CSS を提案(1994年10月)。1996年12月に CSS1 が W3C の勧告になり、「見た目は HTML と分けて書く」という考え方が定まる
  • 1995年 ── Netscape 社のブレンダン・アイクが、5月にわずか10日間で JavaScript の最初の試作を作る。12月に正式に発表
  • 2006年 ── ジョン・レシグが jQuery を発表。ブラウザごとにバラバラだった書き方の違いを吸収し、一気に広まった
  • 2011年 ── Twitter 社の二人(マーク・オットーとジェイコブ・ソーントン)が Bootstrap を公開
  • 2021年 ── Bootstrap 5 が、それまで必要だった jQuery なしで動くようになる
  • 2026年 ── 1月に jQuery 4.0 が約10年ぶりのメジャー版として登場(古い Internet Explorer 10 以前の対応を終了)。10月には Bootstrap 6 の最初のアルファ版も公開された

新井JavaScript、10日で作られたんですか!? じゃあこの連載も10日で……。

古井10日で作ったのは試作だ。そのあと30年かけて直し続けている。こっちは15回。急がば回れだ。

この連載では、執筆時点で安定版の Bootstrap 5.3 系と jQuery 4.0 系を使う予定です。

六

画面の設計図

家を建てる前に間取り図を描くように、画面も作る前に設計図を描きます。まずは画面の一覧と、行き来の関係です。下の小さな字は、その画面を主に作る回です。

経費精算システムの画面

ログイン 第11回 申請一覧 第2・6回 申請フォーム 第3・8・9回 ダッシュボード 第13回 詳細・承認 第12回 印刷用の申請書 第13回

次に、いちばん大事な申請フォームを少し細かく描きます。こうした、色や飾りを省いて「どこに何を置くか」だけを描いた図をワイヤーフレームと呼びます。

申請フォームのワイヤーフレーム

経費精算 経費の申請 件名 日付 内容 金額 領収書 10/14 電車代 1,480 — 10/15 会議のお茶代 2,350 添付 + 行を追加 合計 ¥3,830 下書き保存 申請する 1 2 3 4 5 6 7 1 見出し 2 件名 3 明細の表(行が増える) 4 行を追加するボタン 5 合計(自動で計算) 6 領収書の添付 7 下書き保存・申請

紙と鉛筆で十分です。大事なのは、きれいさより「部品の抜け漏れがないか」を先に確かめること

設計図を描くと、作る前に気づけることがたくさんあります。たとえば「明細が10行を超えたらどう見せる?」「領収書は画像だけ? PDF も?」「スマホで申請する人はいる?」。こうした問いを先に洗い出しておくと、作り直しが減ります。

七

道具をそろえる

必要な道具は三つだけ。どれも無料です。

道具何に使うポイント
ブラウザ作った画面を表示して確かめるこの連載では Google Chrome で説明します。Edge でもほぼ同じです
エディタコードを書くVisual Studio Code(VS Code)。色分けや入力の補完が助けてくれる
Live Preview保存するたびに画面を自動で更新するMicrosoft が出している VS Code の拡張機能。手元に小さな Web サーバーを立ててくれる

そして、もう一つの大事な道具が、ブラウザに最初から入っている開発者ツール(DevTools)です。いわば、ページの「レントゲン」。この連載で毎回のように使います。

開発者ツールの見どころ

経費の申請 Elements Console Network Sources <html lang="ja"> <head>…</head> <body> <h1>経費の申請</h1> <form>…</form> </body> </html> Elements HTML と CSS を見る その場で書き換えて試す Console JavaScript を試す エラーを読む Network 通信の中身を見る (第10回で大活躍) 開き方:F12 または Ctrl + Shift + I(Windows)、Cmd + Option + I(Mac)

ファイルは、次のように役割ごとのフォルダに分けて置いていきます(今回作るのは index.html だけです)。

keihi/プロジェクトのフォルダ ├─ index.html入口のページ(今回作る。第2回から申請一覧に) ├─ form.html申請フォーム(第3回から) ├─ css/style.css見た目(第4回から) ├─ js/app.js動き(第7回から) └─ data/仮のデータ(第10回から)
八

最初の一枚を作る

準備ができたら、最初のページを作りましょう。手順は5つです。

  1. パソコンに keihi という名前のフォルダを作り、VS Code の「フォルダーを開く」で開く
  2. index.html というファイルを作り、下のコードを書いて保存する(空のファイルで ! と打って Tab キーを押すと、ひな形が一瞬で出てきます)
  3. 拡張機能 Live Preview を入れ、エディタ右上のプレビューボタン(または右クリックのメニュー)からプレビューを開く
  4. 文字を書き換えて保存すると、プレビューも自動で変わることを確かめる
  5. ブラウザで開いたら F12(Mac は Cmd + Option + I)で開発者ツールを開き、Elements タブで h1 を探してみる
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>経費精算システム</title>
</head>
<body>
  <h1>経費精算システム</h1>
  <p>ただいま建設予定地です。</p>
  <p>第2回から工事が始まります。</p>
</body>
</html>
最初のページをブラウザで開いたところ。大きな見出し「経費精算システム」と、「ただいま建設予定地です。」「第2回から工事が始まります。」の2行
八章で作る最初のページ。CSS も JavaScript もない、HTML だけの素朴な姿です(筆者が作ったデモページを、クラウド上の Chromium で撮影。2026年10月17日。ブラウザの枠は説明のために描き足したもの)
書いたもの意味
<!DOCTYPE html>「これは今の HTML です」という宣言。1行目のお約束
<html lang="ja">ページ全体を包む箱。lang は言語で、読み上げソフトや翻訳機能が参考にする
<head>画面には出ない「ページの情報」を書く場所
<meta charset="UTF-8">文字の符号の種類。これがないと日本語が文字化けすることがある
<title>ブラウザのタブに出る題名
<body>画面に出る中身を書く場所
<h1>・<p>大見出しと段落

ここで、わざと失敗してみましょう。</h1>(見出しの閉じタグ)を消して保存すると……。

見出しの閉じタグを書き忘れたページ。本来は普通の大きさのはずの2行の文章まで、見出しと同じ大きな太字になっている
</h1> を1つ消しただけで、その後ろの文章まで見出しの中に入り、全部が大きな太字に。ブラウザはエラーを出さず、黙って「それらしく」表示します(筆者が作ったデモページを、クラウド上の Chromium で撮影。2026年10月17日。ブラウザの枠は説明のために描き足したもの)

新井うわ、全部見出しになった! でもエラーは出ないんですね。

古井ブラウザは優しいからな。間違いがあっても、黙って「それらしく」表示してくれる。その優しさに甘えると、あとで原因を探すのに苦労するぞ。

開発者ツールの Elements タブで見ると、2つの段落が h1 の中に入ってしまっているのが分かります。「見た目がおかしいときは、まず Elements で木の形を確かめる」。これが、この連載で何度も使うデバッグの第一歩です。

九

全15回の地図

最後に、これからの道のりです。各駅停車で、一駅ずつ進みます。

いにしえのフロントエンド入門 路線図

1 準備 2 HTML の骨組み 3 フォーム 4 CSS の基本 5 レイアウト 6 Bootstrap 7 JS の基本 8 DOM・イベント 9 入力チェック 10 通信 11 ログイン 12 承認の流れ 13 集計と印刷 14 jQuery 15 仕上げ いまここ 準備 HTML CSS JavaScript 実戦 仕上げ
回テーマ経費精算システムで作るもの
1全体像と準備設計図と、最初の一枚(今回)
2HTML①:文書の骨組み申請一覧の骨組み(見出し・表・リンク)
3HTML②:フォーム申請フォーム(入力欄・選択肢・ファイルの添付)
4CSS①:セレクタとボックス一覧を自前の CSS で整える
5CSS②:レイアウトヘッダー・メニュー・本文の配置と、スマホ対応
6CSS③:Bootstrap画面全体を Bootstrap で作り直す
7JavaScript①:言語の基本合計を計算する関数
8JavaScript②:DOM とイベント明細の行の追加・削除と、合計の自動更新
9JavaScript③:入力チェック「3万円以上は領収書が必須」などのルール
10JavaScript④:非同期と通信一覧の読み込みと申請の送信(モック API)
11ログインと画面の切り替え申請者・承認者・経理で見える画面を変える
12承認の流れ下書き→申請中→承認/差し戻し→精算済みの状態の管理
13集計と印刷グラフ付きのダッシュボードと、印刷用の申請書
14jQuery第8〜10回の処理を jQuery で書き直して比べる
15仕上げ品質・安全・公開の確認、そしてフレームワークの入口へ

前半(第2〜10回)で三つの言語を一つずつ身につけ、後半(第11〜15回)でそれを組み合わせて、業務システムらしい機能を仕上げます。第14回で jQuery を扱うのは、自分で一度素の JavaScript で書いてからのほうが、jQuery が何を楽にしてくれるのかがよく分かるからです。

結 — 一枚まとめと次回予告

  1. この連載は、AI に頼んで雰囲気で作るバイブコーディングの逆を行き、HTML・CSS・JavaScript と Bootstrap・jQuery を自分の手で書いて経費精算システムを作る、全15回の「いにしえの」フロントエンド入門。手で書く力は、AI を使いこなす土台にもなる。
  2. ブラウザは、注文 → 受け取り → 読み解き(DOM と CSSOM)→ 配置 → ぬりの順でページを映す。JavaScript は DOM を書き換えて画面を変える。
  3. 三役は、HTML = 骨格(何があるか)、CSS = 服(どう見えるか)、JavaScript = 神経と筋肉(どう動くか)。ファイルも役割ごとに分ける。
  4. 作る前に、利用者・流れ・ルール・画面の一覧・ワイヤーフレームを描いておくと、作り直しが減る。
  5. 道具はブラウザ・VS Code・Live Preview、そして開発者ツール。見た目がおかしいときは、まず Elements で木の形を見る。

新井次回はいよいよ HTML ですね。建設予定地に、柱が立つ!

古井ああ。申請一覧の骨組みからいこう。宿題は、今日の index.html を壊して、直してみることだ。AI に聞く前に、まず自分でな。

参考

利用率は W3Techs の集計(jQuery は2026年10月17日、CSS フレームワークは2026年10月16日の数値)で、同社が調査対象とする Web サイトの中での割合です。版と公開日は、jQuery 公式ブログと npm の公開記録によります(Bootstrap の最新の安定版は 5.3.8、6.0.0-alpha.1 は2026年10月8日公開)。JavaScript の「10日間」は、アイクらの論文(HOPL IV、2020年)によります。画面の写真は、筆者が作ったデモページを2026年10月17日にクラウド上の Chromium(Playwright)で撮影したもので、表紙の完成イメージは Bootstrap 5.3.8 で組んだ見本です。登場人物は架空の人物です。

いにしえのフロントエンド入門 第1回 — Web ページが映るまでと、経費精算システムの設計図 / 2026.10

← 記事一覧へ