「漢字かな」仕様検討中~IDの割り当て方針~

アンドロイドアプリ「漢字かな」ですが、もうすぐ小学6年生までの漢字がそろいます。
そこで、以前から予定していた機能改修の仕様検討を始めました。

まず実現したいのは下記2点です。
①学習の記録を保持させて、苦手な問題を識別できるようにする。
苦手な問題を優先的に出題させたり、問題と正答率を一覧で出せるようにできればと考えています。

②新しい単語を容易に追加できるようにする。
初期開発時に突貫工事で作ったので、漢字データの保持の仕方が良くありません。
下記のように、values/strings.xmlの配列文字列にカンマ区切りで無理やり値を持たせて、JAVAソース側で取り出す際にこねくり回している感じです。

    <string-array name="w0">
        <item>一,いちねん,一年,どういつ,同一,ひとつ,一つ</item>
        <item>右,うへん,右辺,みぎて,右手,さゆう,左右</item>
        <item>・・・</item>
    </string-array>

今後、新しい単語を追加していきたいと考えているので、データの持たせ方についても見直す予定です。

今回は、上記の①、②を実現するためにまず必要となる各問題を識別するためのIDの割り振り方針について、検討を行いました。

まず、漢字一文字(例:「一」、「右」など)の識別は、文字コードを利用しようと考えています。
UTF-8とUTF-16を候補としましたが、例えば漢字の「一」の場合、
UTF-8だと「E4B880」、UTF-16だと「4E00」となります。

UTF-8は英数は1バイト、日本語は3バイトで表現されるのに対して、UTF-16は英数も日本語も全て2バイトで表現されるようです。
最近、仕事でもUTF-8の方を良く見かけますが、「漢字」をテーマにした本アプリのIDとして利用するのであればバイト数の少ないUTF-16で良いと判断しました。

手作業でコード変換をするのは手間なので、一括置換できる方法を検討したのですが、漢字かなの元データはExcel管理だったので、下記の計算式で取得できました。
=DEC2HEX(UNICODE(“一”))
※上記の計算式だと「4E00」と表示されます。
※「一」の部分に変換したい漢字のセル番号を入れて使用します。

次は単語を識別するIDです。
漢字の「一」であれば、現在、下記3つの単語が登録されています。
いちねん(一年)
どういつ(同一)
ひとつ(一つ)

同じ書き方の単語でも読み方が違うもの(例:今日=きょう=こんにち)も存在するので、一意に識別しようとすると読み書き両方を合わせて識別できるIDとする必要がありますが、ちゃんと識別しようとするとどうしてもIDが長くなってしまいます。。。
面倒なので「漢字一文字の識別のコード+連番」でも良いかなぁとも思ってきたり。
上記の例の場合、下記のようになります。
4E000001 いちねん(一年)
4E000002 どういつ(同一)
4E000003 ひとつ(一つ)

連番の部分が本アプリ固有の情報となり、汎用性に欠けるのが引っかかるところですが、他に良いアイデアが浮かばなければこれで行こうかと思っています。

長くなってきたので、今回はこの辺で。
本業の方が忙しくなってきたので、少し先になるかもしれませんが、続きはまたいずれ。

以上です。

サブコンテンツ

このページの先頭へ