【プロローグ】30代・実務未経験からSpring Bootで中国語学習アプリを個人開発した

個人開発

はじめに

30代でエンジニアとしての実務経験のない者がJavaとSpringBootを使って、瞬間中国語作文のトレーニングを目的としたWebアプリケーション「Chinese Output Forge」を個人開発してみました。

瞬間中国語作文は、簡単に言えば短い日本語のフレーズを見てその中国語に当たる文章を瞬時に口に出せるようにするトレーニングです。

英会話界隈では瞬間英作文というのが有名ですが、その中国語バージョンだと思ってください。

バックグラウンド

  • 文系(政治学)卒
  • 30代になって初めてオーストラリアの大学院でITを学ぶ(非CS)
  • 大学院ではプログラミング(Python)・データベース(MySQL)の基礎やセキュリティ関連の演習を経験
  • Java、Spring Boot、AWSは独学
  • IT関連資格は基本情報技術者試験(FE)とJava Silverのみ

Webアプリケーションの開発は初めてで、今回使った技術のほとんども独学で身に付けたものです。設計から実装、AWSへのデプロイに至るまでは調査と試行錯誤の連続でした。

本シリーズは、その開発過程を記録したものです。

今後、アプリの設計・実装からAWSへのデプロイまで、使用した技術や開発中の試行錯誤を分野ごとに整理して公開していきます。

1. 開発の背景

結論から言えば、飽きにくく負荷もちょうどいい中国語瞬間作文のアプリケーションを自身が求めていたからです。

それがどういうものか説明するにはまずは瞬間作文について話さなければなりません。

外国語を勉強しているが話せない人

外国語を学習し、文法や語彙を理解していても、実際の会話になると文章を組み立てるのに時間がかかり、思うように言葉が出てこないという人は少なくありません。TOEIC900点超えなのに会話になるとからっきしな人もいます。

これは、文法や語彙の知識があっても、(英語ならば)中学校で習うようなごく簡単な文章ですら、無意識に瞬時に組み立てて口に出せていない、いわば基礎的な文章生成能力の不足です。

この基礎を飛ばして会話練習を重ねたとしても、話す言葉はいつになってもぎこちなかったり文法が崩壊したままでしょう。

※もっとも、私は言語教育の専門家ではありませんし、学術的な根拠があるわけでもありません。あくまで自分自身の外国語学習経験から感じていることです。

瞬間英作文は会話の基礎能力を鍛える

そのレベルから脱却するためのトレーニングの一つに、母国語の文章を見て、瞬時に外国語へ変換し、声に出す「瞬間作文」があります。

英語を例にすると、

  • 「彼が帰ってきたら、私に知らせてください。」
    → Please let me know when he comes back.
  • 「昨日買った本をまだ読んでいません。」
    → I haven’t read the book I bought yesterday yet.

といった、読めば簡単に理解できても、いざ自分で話そうとすると少し考えてしまう文章を、瞬時に口に出せるようになるまで繰り返し練習するトレーニングです。

特に「瞬間英作文」は、英会話学習者の間では広く知られているトレーニング方法であり、その普及に大きく貢献した森沢洋介氏の著書『瞬間英作文トレーニング』シリーズは、現在でも英会話の基礎を身につけるための教材として親しまれています。

私自身、この瞬間英作文の恩恵を受けている者の一人であります。スピーキング力の土台は瞬間英作文で培ったもので、オーストラリアに7年住んでいたときも日常会話自体にはそこまで苦戦しませんでした。

瞬間英作文は中国語学習にも適用できる

さて、この「瞬間作文」は必ずしも英語に限定されるものではなく、他の言語の学習にも応用できるトレーニング方法です(だとおもわれます)。

具体的な手法はここでは割愛しますが、瞬間英作文のメソッドを中国語学習に適用させて中国語スピーキングを仕事で困らない程度にまでは向上させました。

ただ、このメソッドは中国語界隈ではまだ瞬間英作文ほど認知されておらず、英語に比べて書籍も少ないです。「瞬間中国語作文」という言葉も学習者各々が便宜を図って使っているぐらいの印象です。

ならば自分で瞬間中国語作文を通して中国語を学習するWebアプリケーションを開発してしまえばいいのでは?と考えたのが「Chinese Output Forge」開発の始まりでもあります。

それが今回、中国語に応用し、効率的かつ継続的にトレーニングできる環境を自分で構築しようと考え、中国語学習Webアプリケーション「Chinese Output Forge」を開発しました。

瞬間作文の欠点

瞬間作文は素晴らしい学習メソッドですが、それでもいくつか欠点があります。

1つ目は、とにかく飽きやすいことです。

瞬間作文の教材は、中学校で習うような簡単な文章から始まるものが多く、例文にもストーリー性がほとんどありません。日常的で普遍的な表現を扱うため、どうしても文章が単調になりがちです。

I saw your brother play baseball there.   (君の弟があそこで野球してるの見たよ)

我把錢包忘在桌子上了。           (机の上に財布を忘れてきた)

そうした文章を高速で何問も解き、さらに何周も繰り返すわけですから、最初は手応えがあっても、次第に飽きてしまいます。

2つ目は、例文を暗記してしまうことです。

これは1つ目の欠点とも関連しています。もともと文章自体はそれほど難しくないため、何周も繰り返しているうちに、答えを覚えてしまうことがあります。

そうなると、問題を見ただけで答えが浮かび、実際に口に出すことを省略してしまいがちです。

しかし、瞬間作文は暗記力を鍛えるトレーニングではありません。母国語から外国語へ瞬時に文章を組み立て、口に出す能力を鍛えることが本来の目的です。答えを記憶から取り出すだけになってしまっては、肝心のトレーニング効果が薄れてしまいます。

3つ目は、適切な負荷を維持することが難しいことです。

正確には、適切な負荷を維持できる教材が少ないと感じています。

同じシリーズの教材でも、初級は文章が短く単調で、慣れると簡単すぎる一方、中級や上級になると、急に文章が長くなったり、難しい単語が一文にいくつも登場したりします。

ここでいう負荷とは、単純な語彙や文法の難易度ではなく、瞬時に文章を組み立てて口に出す際の負荷です。時間をかければ簡単に訳せる文章でも、瞬間作文の問題として適切とは限りません。

また、文章が長すぎると、日本語の問題文を理解してから外国語に変換するまでの間に、「あれ、何を言うんだっけ?」と問題自体を忘れてしまうこともあります。

つまり、これら3つの欠点は互いに関連しています。

最初は適度な手応えがあっても、繰り返すうちに文章が簡単で単調に感じられ、やがて答えまで覚えてしまう。かといって次のレベルに進むと、語彙や文法だけでなく文章の長さまで一気に難しくなってしまう。

結果として、飽きずに繰り返せて、暗記に頼らず、常に適度な負荷で取り組める問題を確保することが難しいのです。

飽きないアウトプット環境を提供する

そこで「Chinese Output Forge」では、紙媒体の教材では物理的な制約があった問題の収録数やレパートリーを増やすことにしました。

難易度や文法・構文による問題の絞り込み、学習履歴に基づく復習モードなどの機能も実装することで、適切な負荷で継続的に学習できる環境を提供しています。

さらに、AIを利用して元の問題の文法や構文を維持しながら、異なる文章へと変化させる機能の実現を目指しました。

これにより、限られた例文を何度も繰り返すのではなく、同じ文法や構文をさまざまな文章で練習できるようにしています。

異なる種類の中国語に対応

中国語には中国で使用される普通話と、台湾で使用される台湾華語(國語)があり、文字体系だけでなく語彙や表現にも違いがあります。

例えば、同じ「タクシーに乗って地下鉄の駅へ行く」という意味の文章でも、次のような違いがあります。

中国(普通話・簡体字)

我坐出租车去地铁站。

台湾(台湾華語・繁体字)

我坐計程車去捷運站。

このように、「タクシー」は「出租车/計程車」、「地下鉄」は「地铁/捷運」と、単に文字体系が異なるだけでなく、使用される語彙そのものにも違いがあります。

どちらを使っても基本的には意思疎通できますし、大きく困ることはありません。しかし、中国大陸の普通話と台湾華語(國語)のどちらかに絞って、集中的に学びたいという人も少なくないでしょう。

また、日本で販売されている中国語教材は中国大陸の普通話を中心としたものが多く、台湾華語に特化した教材は比較的限られています。

そのため、単純に簡体字と繁体字を変換するのではなく、それぞれの地域で実際に使われる語彙や表現の違いにも対応し、学習者が自分の学びたい中国語に集中できる環境を目指しました。

2. アプリの概要と主な機能

ここからは、こうした開発目的をもとに制作した「Chinese Output Forge」の実際の画面と主な機能を紹介します。

主な機能

  • 通常学習:難易度や構文などの条件に応じて問題を抽出し、中国語作文を練習する。
  • 復習:過去の学習履歴や理解度をもとに、復習する問題を絞り込む。
  • AI問題生成:既存の問題を基に、文法や構文を維持した別の文章を生成する。
  • ユーザー管理:アカウント登録、ログイン、プロフィール・学習設定の管理を行う。
  • 問題管理:問題の検索、お気に入り登録、問題リストの作成・管理を行う。
  • 多言語対応:中国の普通話と台湾の台湾華語を学習対象として扱う。

AI問題生成では、AIに完全に自由な文章を作らせるのではなく、既存の問題を基礎として指定された範囲を変更する方式を採用しています。

これにより、同じ文法や表現を、異なる文脈で繰り返し練習できることを目指しています。

通常学習画面


日本語の問題文を見て中国語の文章を組み立て、解答を確認しながら学習を進めます。難易度や文法・構文などの条件を指定することで、目的に応じた問題を集中的に練習できます。

AI問題生成画面


Google Geminiを利用し、既存の問題の文法や構文を維持しながら、異なる内容の問題を生成します。固定された問題の暗記に偏らず、同じ文法や構文をさまざまな文章で練習できるようにしています。

アプリ・ソースコード

本アプリは以下のURLからアクセスできます。また、ソースコードや開発記録はGitHubで公開しています。

3. 使用した技術

本アプリでは、主に以下の技術を使用しました。

分野技術
プログラミング言語Java 21
バックエンドSpring Boot 3.5
認証・認可Spring Security
データアクセスSpring Data JPA
データベースPostgreSQL
テンプレートエンジンThymeleaf
フロントエンドHTML / CSS / JavaScript / Bootstrap 5
AI連携Google Gemini API
クラウドインフラAWS
リバースプロキシNginx
バージョン管理Git / GitHub

AWSへのデプロイでは、VPC、EC2、RDS、ALB、Auto Scaling、Route 53、CloudWatch、Amazon SESなどを使用しました。

当初は複数のAvailability Zoneを利用した高可用性構成を構築しましたが、その後、個人開発アプリとしての運用コストを考慮し、単一EC2を中心とした低コスト構成へ移行しました。

この構成変更についても、単に設定手順を記録するだけでなく、各AWSサービスの役割や、構成を変更した理由を含めて解説する予定です。

4. 開発過程を記録する理由

本アプリの開発では、JavaやSpring Bootによる機能実装だけでなく、データベース設計、画面制御、認証・認可、外部API連携、AWSインフラ構築など、さまざまな技術を使用しました。

開発中には、実装方法が分からず調査したり、想定したとおりに動作しない原因を探したり、当初の設計を変更したりする場面が数多くありました。

これらの過程はDevelopment Logとして記録しています。

しかし、開発ログが残っていることと、その技術を自分の言葉で説明できることは同じではありません。

また、時系列で記録された開発ログは、特定の技術や仕組みを後から振り返る際に、必ずしも読みやすい形式ではありません。

そこで、Development Logやソースコードを改めて確認し、技術的なテーマごとに整理した記事として残すことにしました。

本シリーズでは、完成した実装の紹介だけでなく、以下の内容も積極的に取り上げます。

  • なぜその技術や設計を選択したのか
  • 実装前に理解できていなかったことは何か
  • どのような問題やエラーが発生したのか
  • 原因を特定するために何を調査し、試したのか
  • 最終的にどのように解決したのか
  • 開発を通じて何を理解し、どのような課題が残ったのか

自分自身が技術を学び直すためのノートとして、また、同じ技術を学習している方にとって参考になる記録として残していきたいと考えています。

5. 今後の記事構成

本シリーズでは、記事を開発順に並べるのではなく、技術別・機能別の2つの視点から整理します。

技術別目次

Java、Spring Boot、PostgreSQL、Thymeleaf、JavaScript、Spring Security、AWSなど、使用した技術ごとに記事を分類します。

特定の技術について復習したい場合に利用する目次です。

機能別目次

通常学習、復習、AI問題生成、ユーザー管理、問題リスト、AWSデプロイなど、アプリの機能や構成ごとに記事を分類します。

一つの機能がどのような技術の組み合わせで実現されているのかを理解するための目次です。

それぞれの記事は独立して公開し、技術別目次と機能別目次の両方から同じ記事へアクセスできるようにします。

記事数は現時点では確定していませんが、開発ログ全体を見直しながら、必要なテーマを順次追加していく予定です。

おわりに

Chinese Output Forgeは、一つのプログラミング言語やフレームワークだけで完成したアプリではありません。

Java、Spring Boot、PostgreSQL、Thymeleaf、JavaScript、AWSなど、それぞれの技術がどのように連携しているかを理解しながら開発を進めてきました。

本シリーズでは、完成したアプリだけでなく、そこに至るまでの設計・実装・試行錯誤を振り返り、一つずつ自分の言葉で説明できるようにしていきます。

同じように個人開発に取り組む方や、Java・Spring Boot・AWSなどを学習している方にとっても、何かしら参考になる内容になれば幸いです。

コメント

タイトルとURLをコピーしました