Cygwin の Emacs で migemo を使うには

migemoはEmacs上で日本語のインクリメンタルサーチを快適にしてくれる。 ローマ字入力のまま日本語をインクリメンタルサーチできる。

例えば「ローマ字」という語をインクリメンタルサーチするには”romaji”とキー入力すれば良い。

Emacsからmigemoを使うには migemo.elと正規表現を生成するライブラリが必要

migemoは、ローマ字入力の検索文字列から日本語を含む正規表現を生成して、その正規表現でインクリメンタルサーチを実現する。

そのため正規表現を生成するライブラリと、Emacsと通信するEmacs Lispが必要になる。

正規表現を生成するライブラリは当初はRuby/Migemoを使うものだった、C/Migemoが出来てからはC/Migemoを使うのが主流のようだ。

C/MigemoとEmacsを通信するEmacs Lispはmigemo.el だ。

大雑把な関係は下の図のような感じ:

CygwinのEmacsでC/Migemoを使うにはCygwin上でビルドする必要がある

ところで、CygwinのEmacsでmigemoを使うには、Cygwin上でC/Migemoをビルドする必要がある。

C/Migemoの開発元であるKaoriYaさん ではWindows nativeでビルドされたバイナリが配布されているが、残念ながらCygwin上では上手く動かな。 (少なくとも私のCygwin環境では動かない…。Windowsのコマンドプロンプトからはちゃんと動くのだが。)

ここでは、CygwinでのC/MigemoのビルドとEmacsの設定について説明する。

nkfのインストール

C/Migemoのビルドには nkf か qkc のいずれかが必要だ。私は使い慣れているnkfをインストールした。

https://ja.osdn.net/projects/nkf/ からnkfのソースコードをダウンロードする。 この時点で私がダウンロードしたのはversion 2.1.4 だった。

tar xvf nkf-2.1.4.tar.gz
make
make install

C/Migemoのインストール

ソースコードを https://github.com/koron/cmigemo からダウンロードする。

zipファイルを展開する。その後は展開したディレクトリにある cmigemo-master/doc/README_j.txtの通りに実行する:

./configure
make cyg
make cyg-dict
make cyg-install

2025年7月23日追記

2025年7月の時点では make cygは失敗する。

dllwrap is deprecated, use gcc -shared or ld -shared

のようにWarningが出る。

Make_cyg.makを修正する必要がある。以下のようなpatchを当てればbuildは可能だ。

--- Make_cyg.mak.orig   2025-07-23 23:42:31.803058600 +0900
+++ Make_cyg.mak        2025-07-23 23:43:01.139607700 +0900
@@ -27,8 +27,7 @@ include compile/clean.mak
 #
 $(libmigemo_LIB): $(libmigemo_DSO)
 $(libmigemo_DSO): $(libmigemo_OBJ) $(srcdir)migemo.def
-       dllwrap -o $(libmigemo_DSO) --dllname $(DLLNAME) --implib $(libmigemo_LIB) --def $(srcdir)migemo.def $(libmigemo_OBJ)
-
+       gcc -shared -o $(libmigemo_DSO) $(libmigemo_OBJ) -Wl,--output-def,$(srcdir)migemo.def -Wl,--out-implib,$(libmigemo_LIB)

 install-lib: $(libmigemo_DSO) $(libmigemo_LIB)
        $(INSTALL_DATA)         $(libmigemo_LIB) $(libdir)

dictの場所

dictの場所は

/usr/local/share/migemo/utf-8/migemo-dict

になる。

動作確認の例

動作確認した例を下に示す。romaと入力した結果だ:

~$ cmigemo.exe -d /usr/local/share/migemo/utf-8/migemo-dict -e
migemo_open("/usr/local/share/migemo/utf-8/migemo-dict")=0x6000003c0
clock()=0.093000
QUERY: roma
PATTERN: \(ロ\s-*マ\|浪\s-*漫\|ろ\s-*ま\|r\s-*o\s-*m\s-*a\|ル\s-*ー\s-*マ\s-*ニ\s-*ア\|羅\s-*馬\|ロ\s-*\(マ\|ー\s-*マ\)\|r\s-*o\s-*m\s-*a\)
QUERY:

migemo.elのインストール

https://github.com/emacs-jp/migemo からダウンロードしてload-pathのどこかに置くか、または M-x package-install (RETURN) migemo (RETURN)でインストールする。

設定

~/.emacs.d/init.el には下のように書いておく:

(load "migemo")
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict")

(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8)
(migemo-init)    

(setq migemo-coding-system ‘utf-8)がないと上手く動かないようだ。

migemoを動かしている例

実際にmigemoを動かしている例を下に示しておく。

C-sでミニバッファーの”I-search”の表示のまえに[MIGEMO]となっています。これでmigemoが有効になっていることが分かる。

このインクリメンタルサーチの例では”kokumin”とローマ字で入れている。バッファーでは漢字の「国民」にマッチしているのが分かる。

migemoを使うと日本語のインクリメンタルサーチがとても快適だ。もう手放せない。