プロへの道 » バックエンドコース » ユニット5

バックエンドコース ユニット5 (越境) | 目安: 120時間 (約1.5ヶ月)

画面に馴染む ― 使う人の側から、自分のアプリを見る

このユニットは、フロントエンドの世界への越境です。目的は画面の専門家になることではありません。「画面の人が何に困るか」が分かるバックエンドになることです。APIの設計が良いかどうかは、画面を作ってみると一発で分かります。

このユニットのゴール HTML / CSS / JavaScriptの基礎を速習し、自分の日報APIをfetchで呼ぶ「使いやすい画面」を自分でつけられるようになる。

進め方の地図

やること 仕上がるもの
1週目 授業1: HTML / CSS速習 日報一覧の見やすい静的ページ
2週目 授業2: JavaScript速習 ― 3行の型 動くカウンターと文字数表示
3〜4週目 授業3: fetchで自分のAPIを呼ぶ APIから描画される日報一覧
5週目 授業4: 使いやすさの最低限 整った入力フォーム
6週目 月末制作: 日報アプリの画面強化 「人にすすめられる」日報アプリ
基礎カリキュラムが教科書です。HTMLはStep 2 授業3、CSSはStep 2 授業4、JavaScriptはStep 3。一度通った道の速習なので、1週間ずつで駆け抜けられます。じっくり版が必要になったら、フロントエンドコースのpf-01pf-02がいつでも待っています。

授業1: HTML / CSS速習 ― 一覧を見やすくする

バックエンドの画面づくりで最初に必要なのは、凝った装飾ではなく「一覧の見やすさ」です。覚えるCSSは3つで足ります ― 文字の階層・余白・1色のアクセント

例題 (リードつき) | 日報一覧テンプレートを整える
  1. 意味タグに整えるユニット4のテンプレートを、header (アプリ名)・main (フォームと一覧)・footer の構造にします。
  2. 1件をカードにする日報1件を <article class="nippo"> で包み、CSSを当てます。
    .nippo {
      background: #ffffff;
      border: 1px solid #dddddd;
      border-radius: 10px;
      padding: 16px;
      margin-bottom: 12px;
    }
    .nippo .meta {
      font-size: 0.85rem;
      color: #666666;
    }
  3. 3つのルールで仕上げる①文字サイズは「見出し24 / 本文16 / 日付など13」の3階層だけ ②余白は8の倍数 (8・16・24) だけ ③色は「黒っぽい文字 + 灰色 + アクセント1色」だけ。この縛りが、そのまま「整って見える」の正体です。
  4. ビフォーアフターを残す整える前のスクリーンショットを撮っておき、見比べます。差が、このユニットの成果物の一部です。
デザインの根拠を知りたくなったら: いま使った3ルールの「なぜ」は、デザインコースのpd-01に全部書いてあります。越境ユニット同士は、つながっています。

授業2: JavaScript速習 ― 3行の型

画面のJavaScriptは、ほぼ全部この型でできています ― ①要素をつかむ → ②イベントを待ち受ける → ③中身を書き換える。Pythonで鍛えた文法感覚があれば、駆け足で行けます。

例題 (リードつき) | 型を1回で体に入れる
  1. 練習用HTMLを作る
    <p>押した回数: <span id="count">0</span></p>
    <button id="plus">+1</button>
    <script>
    const countEl = document.querySelector("#count"); // ① つかむ
    let count = 0;
    document.querySelector("#plus").addEventListener("click", () => { // ② 待ち受ける
      count++;
      countEl.textContent = count; // ③ 書き換える
    });
    </script>
  2. Pythonとの違いを3つメモする変数は let / const、ブロックは字下げでなく { }、文字の埋め込みは f"..." でなく `${ }`。この3つさえ翻訳できれば、読み書きの感覚は流用できます。
  3. 文字数カウンターに改造する日報の入力欄 (textarea) の下に「いま◯文字」をリアルタイム表示します。イベントを "input" に、値を .value.length にするだけです。これはこのまま月末制作の部品になります。

授業3: fetchで自分のAPIを呼ぶ

ユニット4で作ったJSONの窓口 (/api/nippo) を、画面のJavaScriptから呼びます。API提供者とAPI利用者を、1人で両方やる ― 越境ユニットのハイライトです。

例題 (リードつき) | 「最新5件」ウィジェットを作る
  1. 置き場所を作るテンプレートに <ul id="latest"></ul> を置きます。
  2. 取りに行って描く
    async function loadLatest() {
      const res = await fetch("/api/nippo");
      const data = await res.json();
      const ul = document.querySelector("#latest");
      ul.innerHTML = "";
      for (const n of data.slice(0, 5)) {
        const li = document.createElement("li");
        li.textContent = `${n.day} ${n.name}: ${n.content}`;
        ul.appendChild(li);
      }
    }
    loadLatest();
    await fetch → .json( ) は「取りに行って、JSONをオブジェクトに戻す」の2拍子です。Pythonでrequestsを使うのとそっくりの感覚です。
  3. 自作APIならではの実験わざとAPI側 (Flask) を止めて画面を再読み込みし、何が起きるか観察します。次に try / catch で「読み込みに失敗しました」を表示する守りを足します。障害時に画面がどうなるかは、API設計者こそ知っているべき景色です。
  4. APIを使う側の気持ちをメモする「日付の形式はこれで扱いやすい?」「件数指定 (limit) があったら楽では?」― 使う側として感じた不満を3つメモします。そのままAPI改善のToDoになります。
演習 3-A (ヒントだけ) | APIを使いやすく直す

お題: 手順4のメモから1つ選んで、API側を改善します。おすすめは /api/nippo?limit=5 のような件数指定です。

ヒント: Flask側は request.args.get("limit", 10) でURLの「?以降」を受け取れます。SQLの LIMIT ? につなげば完成です。画面を作った経験がAPIを良くする ― この往復が越境の果実です。

授業4: 使いやすさの最低限

業務アプリの画面は、毎日使う人の小さなストレスを消せるかが勝負です。チェックするのは4点だけです。

  1. ラベルと入力欄をつなぐ<label for="content">id="content" をそろえます。ラベルを押すと欄が選ばれ、読み上げにも正しく伝わります。
  2. エラーは「直し方つき」で「入力してください」ではなく「今日やったことを1行でOKなので入力してください」。
  3. 送信後に迷子にしない保存できたら「記録しました」を一瞬表示するか、一覧の先頭に新しい日報が見えている状態に戻します。
  4. スマホで触ってみる同じWi-Fiにいるスマホから http://パソコンのIPアドレス:5000 で開けます (IPアドレスは ipconfig で調べられます)。ボタンが小さすぎないか、親指で確かめましょう。

月末制作: 日報アプリの画面強化

月末制作

ユニット4の日報アプリを、「使ってみたい」と言われる見た目と操作感に仕上げます。

  1. 必須4機能: ①整った一覧 (授業1のカード) ②入力中の文字数表示 (授業2) ③「もっと見る」= limitつきAPIをfetchで追加読み込み (授業3) ④今日の投稿件数バッジ (/api/count の応用)。
  2. 使いやすさ検査: 授業4の4点を全部通します。
  3. 他人テスト: スタッフに「説明なしで日報を1件書いてもらう」テストをして、詰まった場所を1つ直します。
  4. ビフォーアフター発表: ユニット4の終了時のスクリーンショットと並べて、何をなぜ変えたかを発表します。GitHubへのpushも忘れずに。
このアプリは卒業制作の母体になれます。ユニット6で別の題材を選んでもよいですが、「日報アプリを本気で完成させる」も立派な卒業制作です。ここでの仕上がりが良いほど、最後の2ヶ月が楽になります。

つまずきやすいポイント

画面のJSが「効かない」とき: まず F12 のConsoleタブを開く習慣をつけましょう。赤いエラーが出ていれば、それが答えです (PythonのTracebackと同じで、エラーは案内板です)。何も出ていなければ、scriptタグの位置がHTMLの要素より上にないかを疑います。
2つの言語で頭が混線したら: 混線は越境した人だけが得られる症状で、悪いことではありません。授業2で作った「違い3つメモ」を手元に貼っておくと、切り替えが速くなります。

発展チャレンジ (余力のある方へ)

発展チャレンジ
  • 日報の「気分」を、絵文字ボタン (😀😐😞) のクリックで選べるようにしてみましょう。フォームの hidden 入力と組み合わせます。
  • 一覧の上に「名前の絞り込みボタン」を生やし、ページ移動なしでfetch + 再描画する版に挑戦してみましょう。
  • デザインコースのpd-03 (UIデザイン実践)のフォームの4つの約束を読んで、自分のフォームを採点してみましょう。

できたチェック