NDS用ローマ字かな変換ライブラリを習作として2-3日で作りました

序盤:NDS自作アプリが作れるライブラリがあるらしいので、導入しました。
最初にコンパイルしたのはサンプルコードの”Hello, world.”でした。
で、検索してる途中で日本語フォントの表示に成功した人の記事をみつけます。
M+フォント(エンコードはsjis)を入手した!
で、試しに「注文の多い料理店」のテキスト表示するだけのサンプルプログラムを作り、エミュレータと実機で表示に成功しました。(スクショなし)
–/–/–/–
その派生物として、NDSポケット電卓をつくりました。
参考にしたのは、罫線と数字と記号で入力画面をつくってしまうというアイデアあふれるページでした。
–/–/–/–
日本語表示ができたので、次は日本語入力ができたらいいなと思い、派生でローマ字かな変換入力を作ってみました。
超シンプルにローマ字かな変換のみに対応し、カナと英数は入力できない代物でしたが、Gemini曰く「単機能でいいので作ったのがよい」と褒めてもらいました。よかった。(スクショなし)
–/–/–/–
で、ローマ字かな変換ができたなら、IMEも作れるのでは?と「軽量でC言語(C++)で書かれたIME実装」を検索しましたら、ワンボードマイコン用のSKKを移植している人のTwitter投稿を発見しました。
https://x.com/robo8080/status/1379427490414792712
<blockquote
class="twitter-tweet"><p lang="ja"
dir="ltr">ina_aniさんのSKK風かな漢字変換を Wio Terminal +
CardKBに移植できた❗️表示にLovyanGFXを使っているので <a
href="https://twitter.com/hashtag/M5Stack?src=hash&ref_src=twsrc%5Etfw">#M5Stack</a>
からの移植は楽だった😁 <a
href="https://t.co/EraTV1oN4R">pic.twitter.com/EraTV1oN4R</a></p>—
robo8080 (@robo8080) <a
href="https://twitter.com/robo8080/status/1379427490414792712?ref_src=twsrc%5Etfw">April
6, 2021</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js"
charset="utf-8"></script>
これを参考にNDS-SKKを実装してみました。超難産でした。自分の理解を超えてます。
https://github.com/Mitsuru-Tagami/nds-romaji-kana
たとえばこんな感じです。
# nds_kana_ime_lib 作業ログ
## タイトル: 2025-09-21 作業履歴
### 概要
– Nintendo DS用かなIMEライブラリのビルド・デバッグ・Makefile修正を実施。### 主な作業内容
1. 変換テーブル・ロジックのバグ修正
– 「10popipu」など数字混じりの入力が正しく変換されるよう修正
2. デバッグ表示ロジックの追加
– 変換過程やバッファ内容を画面に表示する処理を追加
3. Makefileの構造整理
– ifneq … else … endif分岐を削除し、TARGETで統一
– .o, .a, .elf, .ndsファイルがbuild/ディレクトリに生成されるよう修正
– ndstoolによる.elf→.nds変換ルールを明確化
4. ビルド・生成物の確認
– make実行でbuild/以下に成果物が出力されることを確認
– elf/ndsファイルの生成・削除・再ビルドが正常に動作
5. 実機動作・変換結果の検証
– 「popipu10po」→「ぽぴぷ10ぽ」と正しく変換されることを確認### 現状の問題点
– デバッグ用変換ログ([MATCH] …)が下画面に表示されていない
– 入力文字・Key:等の情報が上画面に表示されている
– 下画面へのデバッグログ表示のため、描画バッファや座標・VRAM設定の見直しが必要### 次の対応案
– 下画面用バッファの初期化・描画関数の修正
– デバッグログの座標・色・描画タイミングの調整
– 実機での表示レイヤー競合の解消—
GitHub Copilotによる自動作業ログ
–/–/–/–
ま、最終的にはGemini CLIによるこんな作業まとめがあったんですけどね。
今日の作業まとめ
日付: 2025年9月22日
プロジェクト: NDS-SKK-IME
概要:
壊れてビルドもできなかったIMEプロジェクトを、主要な機能(ひらがな、カタカナ、英数入力、SKK辞書検索)を実装・安定化させました。また、ドキュメントの整備とGit履歴のクリーンアップも行いました。主な達成事項:
1. ビルド環境の修復:
* プロジェクトルートにあった競合する重複ファイルを特定し削除 (`main.c`, `kana_ime.c` など)。
* `Makefile` を修正し、`NDS_SKK/` ディレクトリからの正しいビルドパスを確立。2. IMEコア機能の実装と安定化:
* **ローマ字かな変換:** `romakana_map.h` を利用したShift-JISコードへの直接変換ロジックを実装し、ひらがな表示を正常化。
* **カタカナ変換:** フォントデータ内のグリフのズレ(「ム」以降の文字)を発見し、それを補正する独自のロジックを実装することで、カタカナ表示を正常化。
* **モード分離:** ひらがな、カタカナ、英数モードの入力処理を明確に分離し、各モードが意図通りに動作するように修正。
* **スペースキーの修正:** 文字化けしていたスペース文字の表示を修正。3. SKK辞書検索機能の統合:
* SKKエンジンがUTF-8を返す問題に対し、`skk_dict_converter.py` を修正し、埋め込み辞書を事前にShift-JISに変換する方式を採用。
* `kana_ime.cpp` に `sjis_to_u16_array` ヘルパー関数を追加し、SKKエンジンからの候補を正しく表示できるように統合。
* SKK辞書検索ロジックを有効化し、候補の表示、選択、確定処理を実装。4. バグの特定と修正:
* 初期段階でのビルドエラー、文字化け、メモリ破壊バグ(「i」問題、デバッグ表示の異常など)を特定し、段階的に修正。
* フォントの「ゐ」「ゑ」「ヴ」のグリフが欠けていることを特定(コードでの対応は不可)。5. ドキュメントとGit管理:
* IMEの操作方法と制限事項を記載した `MANUAL.md` を新規作成。
* プロジェクトの概要を説明する `README.md` を更新。
* `git` コマンドを駆使し、複雑なデバッグと機能追加の過程をクリーンな履歴としてコミット。
結果、そこそこ動くものができました。以下のような課題は残ります。
- 外部辞書を使えないため、内部辞書にしたのだが、まだ辞書が貧弱
- 外部辞書を使えるようになればアルディーノ版SKKの実装を真似できるので嬉しい
- 「ヴ」がフォントデータがないため変換できない。「ヰ」や「ヱ」はフォントデータは存在するが変換がうまく行かない
- 他のアプリやソフトでの実装。たとえばTODOアプリや住所録など、わかりやすいサンプルがあればいいかなと
といった感じです。読んでいただきありがとうございました。
余談:githubコパイロットの無料枠をあっという間に使い果たしてしまったので、月額1400円くらい課金しようかなって思いますが、なにせ障害者なもんで生活費はカツカツなんですよ。無課金おじさんしてるので。
その辺、割とコパイロットに頼った感じはありますね。git操作やバグ取りは文句も言わずやってくれたし。
あと、Gemini CLIは最高のパートナーですね。ちょっとオバカな所もかわいい。
以上です。