3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

テスト前日、HTML1ファイルだけで自分用の単語カードアプリを作った(ビルドなし・localStorage)

3
Posted at

この記事の要点(TL;DR)

  • 英語テストの前日に、自分用の単語カードアプリが欲しくなって作りました。
  • フレームワークもビルドも使わず、HTMLファイル1個(index.html)だけで作りました。
  • 「覚えた」の記録は localStorage に保存したので、ページを閉じても消えません。
  • 大げさな環境構築なしでも、こういう「自分だけが使う小さな道具」はサクッと作れる、という話です。

用語を軽く補足します。**localStorage(ローカルストレージ)**は、ブラウザに用意されている「ちょっとしたデータを保存しておける小さな棚」のようなものです。サーバーもデータベースも要らず、JavaScriptから数行で読み書きできます。

なぜ作ったのか

英語のテスト範囲の単語が125個あって、市販アプリに1個ずつ登録するのが面倒でした。単語のテキストは手元にあったので、「これを読み込んで、カードをめくって覚えられるページがあればいいのに」と思ったのがきっかけです。

条件はこんな感じでした。

  • テストは明日。時間をかけたくない
  • 自分(と友達)しか使わないので、ログインもサーバーも要らない
  • 「覚えた単語」は次に開いたときも残っていてほしい

この条件だと、わざわざReactでプロジェクトを立ち上げたり、データベースを用意したりするのは大げさです。そこでHTML 1ファイルにしました。

構成:本当に1ファイルだけ

index.html の中に、HTML・CSS・JavaScriptを全部書きました。ファイル構成はこれだけです。

index.html   ← これ1個。以上。

単語データも、外部ファイルにせずJavaScriptの配列としてそのまま書きました。

<script>
  // 単語データ(英語, 日本語, 重要かどうか)
  const words = [
    { en: "environment", ja: "環境", important: true },
    { en: "transport",   ja: "交通機関", important: true },
    { en: "reduce",      ja: "減らす", important: false },
    // …これを125個ぶん
  ];
</script>

「データベースに入れなきゃ」と身構えがちですが、自分用で数百件までなら、コードに直接書いてしまうのがいちばん速いです。

「覚えた」を保存する:localStorageは3つ覚えれば使える

カードを「覚えた」にしたとき、その状態を保存したいですよね。ここでlocalStorageの出番です。使うのは実質この3つだけです。

// 保存する(キーと値を渡す。値は文字列にする必要があるのでJSONに変換)
localStorage.setItem("learned", JSON.stringify(learnedList));

// 読み込む(無ければ null が返るので、その時は空配列にする)
const learnedList = JSON.parse(localStorage.getItem("learned") || "[]");

// 消す
localStorage.removeItem("learned");

ポイントは、localStorageは文字列しか保存できないことです。配列やオブジェクトを入れたいときは JSON.stringify() で文字列にして保存し、読むときは JSON.parse() で戻します。ここだけ最初つまずきやすいですが、上の3行がテンプレだと思えば大丈夫です。

これで、ページを閉じても・スマホを再起動しても、「覚えた単語」はそのブラウザに残ります。サーバーもログインも無いのに、ちゃんと"続き"から使えます。

できたもの

最終的にこんな機能になりました。全部 index.html の中だけで動きます。

  • カード:英語↔日本語をタップでめくる
  • テスト:4択で出題(覚えたい範囲を選べる)
  • 「覚えた」チェック:localStorageに保存され、次回も維持

最初はブラウザでファイルを開くだけで動かしていて、あとから見やすいURLで使いたくなったので、そのままの1ファイルを無料ホスティング(Vercel)に置いて公開しました。ビルド設定は一切いじっていません。HTMLを置いただけです。

学び:全部が「ちゃんとした構成」じゃなくていい

普段はフレームワークを使って開発しているのですが、今回みたいに

  • 使うのは自分(+α)だけ
  • データも数百件まで
  • 明日までに欲しい

という条件なら、HTML1ファイル+localStorageで十分でした。むしろ環境構築ゼロなぶん、思いついてから動くまでが一番速いです。

「アプリを作る=プロジェクトを立ち上げてビルドして…」と身構えてしまう人(昔の自分もそうでした)に、「1ファイルでも立派に動くよ」というのが伝わったら嬉しいです。小さく作って、必要になったら育てればいいんだな、と思えた一件でした。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?