🐏

C#でWPF向けのSpellCheckerを自作した話

に公開

デモ版を徹夜して追加(25/7/02)

いいね、いいね解除、チャンネル登録、ダサいUI呼ばわりが励みになります。

実は有料化を検討中のため、ソースコードは載せられませんが概要だけ説明します。

※同じ内容のモノをZenに載せる予定

開発動機

どうしてもffmpegのスペルチェッカーが欲しかった。ただそれだけ。
(※あまりにもそっけないので追記。)
Visual Studioのスペルチェック機能を模したSpellCheckerを作りたくて色々調べました。
古いものか、かなり高額なコンポーネントとして販売されているだけのものが現状であり、WPFのC1SpellCheckerなどはもはや古い環境では動きませんでした。
このため、ニッチな需要が見込めるのではないかと考えました。

あと自作の動画変換アプリにスペルチェック機能を搭載させて自慢したかった。

外観と動作

エラー箇所に赤い波線を引きます。
DLLをLoadさせることにより、TextBox、ComboBoxの2種類のコントロールでSpellCheck機能を動作させる事ができます。

↓自作の動画変換アプリに読み込ませた例(ComboBox)
bandicam 2025-06-29 13-30-32-020_Harua.mp4.gif

↓TextBoxでの動作実演

https://x.com/sheephuman/status/1924098473605070891

↓執筆時撮影
表示領域のみに赤い波線を引きます。
https://www.youtube.com/watch?v=s4k09WkvH3I

スペースは全角、半角区切り問わず、どんな文字(2バイト文字)を入れても動作する(はず)です。

デモ版を徹夜して作成(眠い)

起動してから5分間だけ試用可能なデモ版を用意しました。お試しください。
(HintPath指定が誤っていたのを修正 25/7/02)
DLLロード・実装例のサンプル。
image.png

どちらも常にSinWave描画を行わせることも可能です(どうやるか考えてみよう)。

gitコマンド
gsudo //管理者権限 インストール推奨
git clone https://github.com/Sheephuman/MakizunoUI.SpellCheckerDemo.git

https://github.com/Sheephuman/MakizunoUI.SpellCheckerDemo

よろしければリポジトリにもスターをお願いします!

後でバイナリを単体で上げます。

辞書

DLLと同じディレクトリにrules.Jsonを置きます。これがチェックしたい正規のコマンド(辞書)となります。

開発中のSinpleSample.dllとrules.json。

image.png

こんな風に指定している
{
  "profile1": {
    "input": "inputfile.mp4",
    "output": "output.mp4",
    "options": [
      "-codec:v",
      "libx265",
      "-vf",
      "yadif=0:-1:1",
      "-pix_fmt",
      "yuv420p",
      "-acodec",
      "aac",
      "-threads",
      "2",
      "-r 60"
    ]
  },
  "profile2": {
    "input": "inputfile.mp4",
    "output": "output.gif",
    "options": [
      "-filter_complex",
      "[0:v] fps=10,scale=320:-1:flags=lanczos,palettegen=stats_mode=diff [p];[0:v][p] paletteuse"
    ]
  }
}


まだ数値入力に対応できないため、ffmpeg用のParserを自作予定です(既存のCommandLineParserだと比較的単純なモノしか解析出来ない ※1)

Mono.Optionsを拡張しようかなとも思ってるけど悩み中。

\color{Gray}{\tiny \textsf{※1 検証済み。特に":"が入っているffmpeg特有のcommandは解析出来ない -Codec:vなど}}

このような形式にすることにより、User(開発者)が手軽に自作の辞書を定義出来ます※2。

$\color{Gray}{\tiny \textsf{
※2文章のエラーチェックには向いていません。コマンドだけ}}$

仕組み

有料化を検討しているため、Note辺りに載せます。
現状ではコントロールにForcusがある場合にCheckerが作動するようになっています。

本当にザックリ解説

rules.jsonを読み込んで正規のコマンドとして登録されたものをParse(文字化)します。
→ 値を取り出す作業。
Error候補となる文字列をTextBox(ComboBox内含む)から取得し、正規の文字列と比較

値クラスを作って、正規・エラー候補ともに読み込ませてインデックスする。正規コマンドとエラーコマンドの値の総数は違うので、その分だけダミーデータ追加しとく。

あとは本当に流出しかねないんで勘弁してください。はは。
まあAI時代だから無理なのかもしれない。

開発について

実のところ、設計部分はAIが吐き出したのですが、大部分の調整や改行への対応などは自分でやりました。本当は基礎部分も自分で組むべきだったなと。何かに負けた気がしている。

実際、そこまで難しいアルゴリズムではないのですよね。分かってしまえばなんということはないというか。

今後の課題(Issue)

・あまりに長いテキストだと重くなる(改善予定)
・DLLの読み込み制限、メール認証等、やることが山ほどあるのに全然進まない
・今は数値入力の変化に対応するためParserの開発を検討中

あとがき

本当はC#でWPF向けのSpellCheckerを自作して収益化までこぎつけた話にしたかった件。時間がなくて終わらねえ。

ちなみにこの巻き角SpellChecker(仮称) は1000Yen前後の販売を検討しています※3。無料で公開すればこのような手間は要らないのだが。

\color{Gray}{\tiny \textsf{※3 このようなSpellCheckerは現状では無料のモノはなく、有料販売でもバチは当たらないはずである。}}

Discussion