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を使うと日本語のインクリメンタルサーチがとても快適だ。もう手放せない。
