【個人開発】韓国語の文法を復習するアプリ「サクッと作文　韓国語」のデモ版をリリースしました

# はじめに
韓国語の学習を楽にするアプリを開発しました。


## アプリの概要
簡単な日本語を韓国語作文することで**韓国語を学習するアプリケーション**です。
![スクリーンショット 2023-07-15 12.25.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/5ce14110-d1b4-0d6b-1a9f-39c0b2886091.png)
**ログインなしに問題を解くことが可能**です。
ユーザー登録をしてログインして問題を解くと、間違えた問題を記録し、**あとから間違えた問題を復習することができます**。
一つの文法項目につき、5問の作文問題が出題されます。
- URL: https://ko.sksk.fun/
- GitHubリポジトリ: https://github.com/yuri-otms/sksks_ko

## 制作のきっかけ
- 韓国語を学ぶのに、なかなか理想的な文法問題集を見つけられなかった
- 基本情報技術者試験・応用情報技術者試験の勉強に「過去問道場」というサイト([基本情報技術者過去問道場｜基本情報技術者試験.com](https://www.fe-siken.com/fekakomon.php)、[応用情報技術者過去問道場｜応用情報技術者試験.com](https://www.ap-siken.com/apkakomon.php)）を利用した時、そのあまりの便利さに感動し、「こんな感じで外国語を学びたい！」と考えた


## 注意
現在、このアプリは<font color="red">デモ版</font>です。使われている韓国語を素人の運営者が作成しているため、<font color="red">間違っている可能性があります</font>。
デモ版はあくまでも<font color="red">操作確認を行うもの</font>として考えていただけると幸いです。
将来的には韓国語に詳しい方・ネイティブの方にチェックしていだき、修正作業を行った上で正式なリリースを考えています。



# アプリの使い方
## ログインしないで問題を解く
このアプリはログインせずに使うことができます。
トップページを下にスクロールし、「スタート」をクリックします。
![スクリーンショット 2023-07-15 12.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/79c9d324-c239-cbef-481e-404cabc1beeb.png)
問題を解く項目を選択します。級（現在はハン検5級のみ）を選び、項目のグループを選択すると、該当する項目が表示されます。項目をクリックすると問題が出題されます。
![スクリーンショット 2023-07-15 12.28.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/c22e1ac0-5907-ee5c-5450-273b5ca7f31b.png)

## ユーザー登録、ログインして問題を解く
ユーザー登録をすることで、学習が記憶されます。間違えた問題を後から復習することができます。
![スクリーンショット 2023-07-16 9.12.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/54dfd7cf-64c1-fe2e-bd78-2d5593e8f675.png)


# アプリの特徴
## ユーザーの使える機能
### ヒントの表示 
わからない単語がある場合、「ヒント」の該当の日本語をクリックすると、韓国語の単語が表示されるため、辞書などで調べる手間がはぶけます。
![show_hints.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/f24f3fea-c278-36a4-8346-34de43097823.gif)
### 解答の合成音声
「答え合わせ」をクリックすると解答が表示されます。音声ボタンをクリックすると、Google Text-to-Speechによる解答の合成音声を聞くことができるので、発音の確認ができます。
![show_answer.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/95102e88-1e9c-1712-67ee-e260497c89d0.gif)
### 間違えた問題の復習
ログインして解いた問題については、間違えた問題を復習することができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/56a946c7-dd59-f920-8da2-fc4f639ab838.png" width="300">
## 問題製作者の使える機能
### 入力した問題の確認
入力した問題文（日本語）の韓国語訳、解答文（韓国語）の日本語訳が表示されるので、誤りがないかの確認ができます。
![add_questions.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/5f359649-3f00-6b98-942e-c9bf686410ef.gif)
### 問題文からヒントの登録
登録された問題文（日本語）・解答文（韓国語）を形態素解析し、文から名詞・動詞・形容詞・副詞の原型を抽出し、それらをクリックすることで問題文の単語のヒントを登録できるようにしました。
![スクリーンショット 2023-07-15 18.55.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/61d2713e-280b-15fb-7e1e-dc7590c64743.png)
### 問題文の確認依頼・確認作業
問題製作者が作った問題を、問題確認者に確認依頼をする機能があります。
![スクリーンショット 2023-07-15 18.59.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/ba259b9f-19d5-3930-58f3-2640d7443322.png)
問題製作者が確認依頼を作成すると、問題確認者が問題文を確認し、内容が正しければ確認完了、修正が必要なら再提出の依頼をします。

![スクリーンショット 2023-07-15 19.00.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/e0831dbd-a04b-e703-6d29-33c2de2e4cd8.png)
![スクリーンショット 2023-07-15 19.02.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/5f2ccf1a-b3f6-84f2-0789-362a6ee39b79.png)
### 問題文の合成音声の作成
問題確認者によって確認が完了した問題は、合成音声を作成することができるようになります。
![create_audio.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/4324eae0-0d9a-e5b0-c356-3d1a143864f1.gif)
### 問題文の公開
確認・合成音声の作成が完了した問題は、そのままでは公開されませんので、公開作業を行います。
![release_question.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/46608699-6bb1-f65e-8965-112d83a07458.gif)

 
# 使用技術
- [Python](https://www.python.org/) 3.9.16
- [Flask](https://flask.palletsprojects.com/en/2.3.x/) 2.2.3
- [MySQL](https://www.mysql.com/) 8.0
- HTML/CSS/JavaScript
- [jQuery](https://jquery.com/) 3.7.8
- [Bootstrap](https://getbootstrap.com/) 5.2.3
- [Docker](https://www.docker.com/) 23.0.3/[Docker Compose](https://docs.docker.com/compose/) 1.29.2
- [Gunicorn](https://gunicorn.org/) 20.1.0
- [nginx](https://www.nginx.com/) 1.23

## API

### 翻訳
問題編集画面、ヒント登録画面で使用している翻訳APIはPapagoの「Neural Machine Translation」を使用しています。
[Neural Machine Translation - INTRO](https://developers.naver.com/products/papago/nmt/nmt.md) (Papago)
### 合成音声作成
解答の韓国語の音声は、Google Cloud Text-to-Speechを利用して作成しています。
[Text-to-Speech AI: 自然な音声合成  |  Google Cloud](https://cloud.google.com/text-to-speech)

## 形態素解析
日本語と韓国語の形態素解析を、MeCabとHanDicを使用して行いました。
詳細: [DockerでMeCabとHanDicを使用して韓国語の形態素解析(Python) - Qiita](https://qiita.com/yuri_t/items/919516b0970f26c44659)


# インフラ構成図
さくらのVPS上でDocker Composeを使用しコンテナを起動しています。今後、複数のWebアプリやサイトを同じVPS上でサブドメインで増やしていくための構成です。
メモリが1GBの契約のためMySQLのコンテナを複数起動することが非現実的なので、一つのMySQLコンテナを複数のアプリケーションで使うことにしました。
![sksk_koインフラ構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/0dabfbf4-9dc7-8056-781e-8f28c9d5ebe1.png)
### 参考
- [DockerでFlask+Gunicorn+Nginxの環境構築 - Qiita](https://qiita.com/khara_nasuo486/items/7dda3aeeea700817236a)
- [複数のWebアプリを1サーバーのDockerを使ってSSL対応のサブドメインで簡単に運用する | QUARTETCOM TECH BLOG](https://tech.quartetcom.co.jp/2017/04/11/multiple-ssl-apps-on-one-docker-host/)

# ER図
![sksk_ko (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925094/1b7c2460-ac97-2d42-eb8a-463655db9065.png)
[dbdiagram.io - Database Relationship Diagrams Design Tool](https://dbdiagram.io/home)を使用して作成

# 今後について
## 将来実装したい機能
### 各項目の達成度の表示
現在、どの項目をどれだけ解いたのかの表示が無いため、どこまで解いたのかがわかりません。これは継続した学習をする際にわかりづらいので、早急に実装したいです。

## 韓国語の確認
解答の韓国語が正しいかを、韓国語に熟練されている方や、将来的にはネイティブの方に確認してもらい、おかしいものは修正を行いたいです。

## 別言語版の開発
今後、「サクッと作文」シリーズとして、別言語版も開発する予定です。今のところ次に作る予定なのは英語です。その次は私の学習具合によってドイツ語か中国語になるでしょう。
別言語の形態素解析をするのは怖いようであり楽しみです。日本語はすんなりできましたが、韓国語の形態素解析は日本語・英語で得られる情報が少なくまあまあ手こずったので。

# 使用したツール等
- [Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)<br>コードエディタ
- [GitHub](https://github.com/)<br>ソースコード管理
- [さくらのVPS](https://vps.sakura.ad.jp/)<br>アプリケーションの公開
- [Storyset | Customize, animate and download illustration for free](https://storyset.com/)<br>アプリのトップページの画像
- [Favicon Generator for perfect icons on all browsers](https://realfavicongenerator.net/)<br>ファビコンの作成
- [Keynote - Apple（日本）](https://www.apple.com/jp/keynote/)<br>インフラ構成図の作成
- [dbdiagram.io - Database Relationship Diagrams Design Tool](https://dbdiagram.io/home)<br>ER図の作成
- [「PicGIF Lite」をMac App Storeで](https://apps.apple.com/jp/app/picgif-lite/id844918735)<br>アニメーションGIFの作成

# おわりに
初めて自分以外の人が使うことを想定したアプリケーションを開発してみて、苦労もありましたが非常に楽しかったです。

今まで自分用のアプリケーションを使っていた頃は、特にデザインの面で手抜きをしていましたが（CSSすら使わずHTMLのみでデザイン、色は白と黒）、今回はBootstrapを使用し見やすく使いやすいデザインを心がけました。

自分で使用してみての感想は非常に満足していますが、「今後について」でも書いた通り、達成度の表示がないためどこまで解いたか分からないのは大きな欠点ですので、なるべく早くに実装にとりかかりたいです。

また、このアプリの致命的な欠点は、韓国語のチェックを受けておらず、解答に信頼性がないところです。韓国語の確認を受けて修正し、「デモ版」ではない正式版をリリースしたいです。それが終わったら、多言語版も開発していきたいです。