---
title: "MeCabとは？インストール・出力の読み方・辞書選びとPython実装を実測で解説"
url: "https://www.issoh.co.jp/tech/details/3509/"
published: 2024-09-05
updated: 2026-10-15
categories: ["AI"]
publisher: "株式会社一創"
---

# MeCabとは？インストール・出力の読み方・辞書選びとPython実装を実測で解説

MeCabは、日本語の文を単語（形態素）に切り分け、それぞれに品詞や原形を付ける解析エンジンです。検索インデックスの作成、問い合わせログの集計、機械学習の前処理といった場面で、いまも日本語処理の入口を担っています。ただし本体の最終リリースは0.996、日付は2013年2月18日。標準辞書のIPAdicにいたっては2007年8月版のまま止まっています。「どう動かすか」だけでなく「どこまで古さを許容できるか」まで含めた判断が要る、というのが現在の実情です。この記事では導入コマンドから出力フォーマットの読み方、辞書による解析結果の違い、TF-IDFへ渡す実装まで、検証環境（macOS 26.6 / Python 3.9.6 / mecab-python3 1.0.12 / Homebrew mecab 0.996）で実行した結果を添えて説明します。形態素解析という処理そのものの定義は[形態素解析の仕組みと具体例](/column/details/4146/)にまとめてあるので、用語から確認したい場合はそちらを先にご覧ください。

## まとめ

- Python から使うなら `pip install mecab-python3 unidic-lite` の2パッケージだけ。コンパイルもOS別の手順も不要です。ただしARM版Windowsにはwheelが配布されていません。
- 出力の形式は辞書で変わります。IPAdicは表層形＋カンマ区切り9列、UniDicは表層形＋タブ区切り7列で、互換性はありません。
- 未知語では素性が7列に減り、原形が `*` になります。読みと発音は列そのものが消えます。
- TF-IDFやBM25へ渡すときは、品詞で絞り込んで原形に揃えたトークン列を作る関数を1つ用意すれば足ります。
- 本体0.996は2013年、IPAdicは2007年、NEologdの更新は2020年9月で停止。新語を扱うならユーザー辞書の運用が前提になります。
- 速度は8,600字あたり数ミリ秒。バッチ前処理では問題になりませんが、速度は選定の決め手にはなりません。

以下、導入から辞書の運用まで順に見ていきます。

## MeCabが担う処理と、2013年で更新が止まった本体の扱い

### 1行のテキストから取り出せる品詞・原形の情報と係り受け解析との境界

MeCabに文を渡すと、1行につき1形態素が返ります。各行は「表層形」とタブ区切りの「素性（feature）」で構成され、文の終わりには `EOS` が付きます。素性に入るのは品詞、品詞細分類、語形変化の型、語形変化の形、原形、読み、発音。後段の処理で実際に使うのは、たいてい品詞（名詞だけ残す等）と原形（語形変化を原形に揃える）の2つだけです。

係り受けまでは扱いません。主語と述語の関係を取りたいなら、CaboChaやGiNZAといった係り受け解析器を重ねる構成になります。MeCab単体でできるのは、単語への分割と品詞付与まで。ここが処理範囲の境界です。

### 最終リリース0.996から13年、それでも使われ続ける仕様上の理由

[MeCab公式サイト](https://taku910.github.io/mecab/)の新着情報に載っている最新版は0.996で、日付は2013年2月18日。[GitHubのtaku910/mecab](https://github.com/taku910/mecab)にはタグもリリースも作られておらず、デフォルトブランチで2020年以降に入ったコミットは`libmecab.html` と `index.html` というドキュメントHTMLの更新だけです（2026年10月時点の最終コミットは2025年2月の `Update index.html`）。開発は事実上終了しています。

それでも現役なのは、仕様が固まっていて壊れないから。公式サイトが説明するとおり、MeCabはパラメータの推定に条件付き確率場（CRF）を用いています。モデルが確定しているため、同じ辞書と同じ入力からは何年経っても同じ結果が返ります。検索インデックスや過去ログの再集計のように「去年と同じ切り方」を保証したい用途では、更新が続くツールより有利に働く性質です。

逆に、新しい語彙を継続的に拾いたい用途では選ばないでください。商品名やサービス名が毎月増えるECの検索ログ分析、SNSの投稿分析といった領域だと、辞書のメンテナンス工数が本体の安定性のメリットを上回ります。

### GPL・LGPL・BSDの3択ライセンスと商用組み込みの判断

公式サイトはMeCabを「GPL、LGPL、またはBSDライセンス」で配布すると明記しています。0.93（2006年7月）でLGPL単独からこの3択に変わった経緯も新着情報に残っています。利用者側が3つのうち1つを選べる形式なので、BSDを選べば社内システムや商用サービスへの組み込みに実質的な制約はかかりません。コピーレフトを避けたい案件でも、BSDを選べば済みます。

ただし本体と辞書のライセンスは別物です。IPAdicは奈良先端科学技術大学院大学（NAIST）が著作権を持つBSD系の条件、NEologdはApache License 2.0で配布されています。商用サービスに載せる前に、辞書側の条件を必ず個別に確認してください。

## Pythonはpipのみ、CLIはOS別のインストール手順と導入条件

### Python環境で必要な2パッケージと本体・辞書を導入する最短手順

いちばん短い導入手順がこれです。MeCab本体（libmecab）はwheelに同梱されているため、Homebrewやapt、Visual Studioのビルドツールを別途そろえる必要はありません。

```
python3 -m venv .venv
. .venv/bin/activate
pip install mecab-python3 unidic-lite
python -c "import MeCab; print(MeCab.Tagger().parse('形態素解析を試す'))"
```

`mecab-python3` が持つのはライブラリ本体だけで、辞書は含まれません。[mecab-python3のREADME](https://github.com/SamuraiT/mecab-python3)も、使うには辞書を別に入れる必要があり、最初の1つとして `unidic-lite` を勧めています。辞書を入れずに `MeCab.Tagger()` を呼ぶと辞書が見つからないというエラーになります。`unidic-lite` を入れておくと、引数なしの `MeCab.Tagger()` がそれを自動で拾う実装です。IPAdic形式の出力が欲しい場合は `pip install ipadic` を追加してください。最終行の1行で解析結果が表示されれば導入は完了です。

Windowsでもこの手順は変わりません。1.0.12では `win_amd64` のwheelがcp38からcp314まで配布されており、インストーラ版のMeCabを別途入れずに済みます。READMEの注記どおり、Windowsのwheelは「Visual C++ 再頒布可能パッケージ」が入っている前提です。Apple Siliconも同様で、`macosx_11_0_arm64` のwheelが用意されています。Linuxは `manylinux_2_17` のx86\_64とaarch64が両方そろっています。

### ARM版Windowsでpip installが失敗する原因と回避策

例外がARM版Windows（Snapdragon搭載のCopilot+ PCなど）です。1.0.12の配布物に `win_arm64` のwheelは無く、ARM64版Pythonでは `pip install` がソース配布物からのビルドへ回り、MeCab本体が入っていない環境ではそのまま通りません。配布の有無はwheelだけを取りに行くと確かめられます。ARM64版Python 3.14の手元環境で2026年10月に実行した結果が次です。

```
> pip download mecab-python3==1.0.12 --only-binary=:all: --no-deps --platform win_arm64 --python-version 3.13 -d wheels
ERROR: Could not find a version that satisfies the requirement mecab-python3==1.0.12 (from versions: none)
ERROR: No matching distribution found for mecab-python3==1.0.12

> pip download mecab-python3==1.0.12 --only-binary=:all: --no-deps --platform win_amd64 --python-version 3.13 -d wheels
Saved ./wheels/mecab_python3-1.0.12-cp313-cp313-win_amd64.whl
```

同じ条件で `win_amd64` を指定するとwheelが取れるので、原因はARM向けの配布が無いことに尽きます。回避策は2つ。x64版のPythonを入れてエミュレーションで動かすか、WSL2のUbuntu上で `pip install mecab-python3 unidic-lite` を実行するかです。本番環境がLinuxなら、開発機もWSL2に寄せたほうが辞書のパスや文字コードの差を持ち込まずに済みます。

### コマンドライン版が必要になる条件とOS別の入れ方・辞書の確認方法

シェルから `mecab` コマンドを叩きたい、あるいはユーザー辞書をコンパイルしたい場合は、本体をOSのパッケージマネージャで入れます。ユーザー辞書の作成に使う `mecab-dict-index` はpipのwheelに含まれないため、後述の辞書カスタマイズをやるならこちらが必須です。

```
# macOS (Homebrew)
brew install mecab mecab-ipadic

# Debian / Ubuntu
sudo apt install mecab libmecab-dev mecab-ipadic-utf8

# 動作確認
mecab --version
```

Homebrewの場合、`mecab --version` が返すのは `mecab of 0.996` という1行。辞書の場所は `/usr/local/etc/mecabrc` の `dicdir` 行で決まり、mecab-ipadicを入れると `/usr/local/lib/mecab/dic/ipadic` が設定されます。いま有効な辞書の確認には `mecab -D` を使ってください。

### Google ColabとDockerでのpipによる導入と辞書コンパイルの条件

Colabのノートブックなら、セルの先頭で1行流せば準備が終わります。

```
# Colab のセル
!pip install mecab-python3 unidic-lite
```

Dockerでも考え方は同じです。slim系のベースイメージにpipで入れるだけで通ります。

```
# Dockerfile
FROM python:3.13-slim
RUN pip install --no-cache-dir mecab-python3 unidic-lite
```

ビルドツールの追加は要りません。OS側にMeCabを入れる従来の手順（`apt-get install` からのシンボリックリンク作成）が不要になる点で、wheelにlibmecabが同梱されている効果がいちばん分かりやすく出る場面です。ユーザー辞書をイメージ内でコンパイルする必要がある場合だけ、`apt-get install mecab` を足してください。

## コマンドラインでの使い方：実行結果と出力フォーマットの切り替え

### IPAdicの既定出力の9列とEOSの読み方・該当しない列の扱い

標準入力に文を流すと、IPAdicでは次の形式で返ります。

```
$ echo "東京都の形態素解析エンジンを使う" | mecab
東京	名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
都	名詞,接尾,地域,*,*,*,都,ト,ト
の	助詞,連体化,*,*,*,*,の,ノ,ノ
形態素	名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析	名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
エンジン	名詞,一般,*,*,*,*,エンジン,エンジン,エンジン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
使う	動詞,自立,*,*,五段・ワ行促音便,基本形,使う,ツカウ,ツカウ
EOS
```

タブの左が表層形、右がカンマ区切りの素性です。IPAdicの素性は9列。順に品詞、品詞細分類1、品詞細分類2、品詞細分類3、語形変化の型、語形変化の形、原形、読み、発音を表し、該当しない列は `*` で埋まります。最終行の `EOS` は文の終端を示す制御行であって解析結果ではありません。行を1件ずつ処理するときは `EOS` を必ず除外してください。

### \-Owakati・-Oyomi・-Fによる用途別の出力の切り替え

分かち書きだけが欲しい、読み仮名だけが欲しいといった用途には、専用の出力モードがあります。必要な列だけを取り出せるので、後段でのパース処理を丸ごと省けます。

```
$ echo "東京都の形態素解析エンジンを使う" | mecab -Owakati
東京 都 の 形態素 解析 エンジン を 使う

$ echo "東京都の形態素解析エンジンを使う" | mecab -Oyomi
トウキョウトノケイタイソカイセキエンジンヲツカウ

$ echo "東京都で解析した" | mecab -F'%m,%f[0],%f[6]\n' -E'---EOS---\n'
東京,名詞,東京
都,名詞,都
で,助詞,で
解析,名詞,解析
し,動詞,する
た,助動詞,た
---EOS---
```

`-F` が各形態素の出力書式、`-E` が文末の書式を指定します。`%m` は表層形、`%f[n]` は素性のn番目（0始まり）を指すので、`%f[0]` が品詞、`%f[6]` が原形です。指定子の一覧は[公式の出力フォーマット解説](https://taku910.github.io/mecab/format.html)にあり、単語生起コストの `%c` や文字種の `%t` も同じ書式で取り出せます。`-Owakati` の出力は各語の後ろに半角スペースが入り、行末にも1つ残る仕様です。そのまま `split()` へ渡す前提なら支障はありませんが、文字列比較に使うなら `strip()` が要ります。

## PythonからのMeCab呼び出しと未知語で崩れる素性への対処

### parseで文字列を受け取る最小コードと辞書の明示・Taggerの再利用

`MeCab.Tagger` を1つ作り、`parse()` に文字列を渡すのが基本形です。返り値はコマンドライン版と同じ書式の文字列なので、行ごとに分割してタブで切ります。

```
import MeCab
import ipadic

tagger = MeCab.Tagger(ipadic.MECAB_ARGS)

for line in tagger.parse("東京都の形態素解析エンジンを使う").splitlines():
    if line == "EOS":
        break
    surface, feature = line.split("\t")
    fields = feature.split(",")
    print(surface, fields[0], fields[6])
```

`Tagger` の生成にはコストがかかるので、モジュール内で1つ作って使い回してください。リクエストごとに生成する実装だと、辞書の読み込みが毎回走ります。なお `ipadic.MECAB_ARGS` は `-r` と `-d` を組み立てた文字列です。これを渡さなければ `unidic-lite` が使われるため、辞書を明示しない実装は環境によって出力が変わります。本番コードでは必ず指定してください。

### 分かち書きだけを取り出す1行と-Owakatiによる単語リストの取得

形態素の情報が要らず単語の並びだけ欲しい場合は、`Tagger` の引数に `-Owakati` を渡します。素性のパースが不要になるぶん、実装は1行で済みます。

```
wakati = MeCab.Tagger(ipadic.MECAB_ARGS + " -Owakati")
words = wakati.parse("東京都の形態素解析エンジンを使う").split()
# ['東京', '都', 'の', '形態素', '解析', 'エンジン', 'を', '使う']
```

`split()` を引数なしで呼べば、行末の余分な空白も同時に落ちます。word2vecの入力を作るだけなら、この形で十分間に合います。

### parseToNodeと、未知語で素性が7列に減る落とし穴への対処

トークン単位で扱うなら `parseToNode()` を使います。ここで踏みやすいのが、辞書に無い語（未知語）では素性の列数そのものが減るという挙動です。IPAdicで「スマートウォッチ」を解析すると、次のようになります。

```
import MeCab
import ipadic

tagger = MeCab.Tagger(ipadic.MECAB_ARGS)

node = tagger.parseToNode("スマートウォッチを検索した")
while node:
    if node.surface:
        fields = node.feature.split(",")
        print(node.surface, len(fields), node.stat, node.feature)
    node = node.next

# スマートウォッチ 7 1 名詞,一般,*,*,*,*,*
# を 9 0 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
# 検索 9 0 名詞,サ変接続,*,*,*,*,検索,ケンサク,ケンサク
# し 9 0 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
# た 9 0 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
```

既知語は9列、未知語は7列しかありません。7列目（インデックス6）の原形は `*` で、読みと発音にいたっては列そのものが存在しません。未知語に付く品詞は[公式の未知語処理の定義](https://taku910.github.io/mecab/unk.html)どおり文字種ごとに決まり、カタカナの連続なら「名詞,一般」になります。`fields[6]` で原形を取るコードは例外を出さずに `*` を返すため、集計結果に `*` という語が混ざったまま気づかない、という壊れ方をします。`fields[7]` まで触れば今度は `IndexError` です。未知語かどうかは `node.stat` で判別できます（0が既知語、1が未知語）。

```
fields = node.feature.split(",")
base = fields[6] if len(fields) > 6 and fields[6] != "*" else node.surface
```

この分岐を入れておけば、未知語では表層形がそのまま原形として扱われます。ただしインデックス6という位置はIPAdic固有です。UniDicでは別の位置になるので、辞書ごとに定数として切り出してください。語彙集計では、この1行の有無で上位語のランキングが変わります。集計まで含めた流れは[テキストマイニングの手法とやり方](/column/details/13368/)で扱っています。

## MeCabの分かち書きをTF-IDF・BM25の検索や分類の入力へ渡す実装

### TfidfVectorizerへ品詞フィルタ付きトークナイザを渡すコード例

分かち書きした結果を数値化するところまで進めると、MeCabの出番は「トークナイザ関数」1つに集約されます。[scikit-learnのTfidfVectorizer](https://scikit-learn.org/stable/modules/generated/sklearn.feature%5Fextraction.text.TfidfVectorizer.html)は `tokenizer` 引数に任意の関数を受け取るので、前章の未知語対策を入れた関数をそのまま渡せます。

```
import MeCab
import ipadic
from sklearn.feature_extraction.text import TfidfVectorizer

tagger = MeCab.Tagger(ipadic.MECAB_ARGS)
KEEP_POS = {"名詞", "動詞", "形容詞"}
DROP_SUB = {"非自立", "代名詞", "数", "接尾"}

def tokenize(text):
    words = []
    node = tagger.parseToNode(text)
    while node:
        fields = node.feature.split(",")
        if node.surface and fields[0] in KEEP_POS and fields[1] not in DROP_SUB:
            base = fields[6] if len(fields) > 6 and fields[6] != "*" else node.surface
            words.append(base)
        node = node.next
    return words

docs = [
    "問い合わせへの返信が遅い",
    "返信メールが届かない",
    "請求書を再発行してほしい",
]
vec = TfidfVectorizer(tokenizer=tokenize, token_pattern=None, lowercase=False)
X = vec.fit_transform(docs)
print(vec.get_feature_names_out())
print(X.shape)
```

押さえどころは3つあります。`token_pattern=None` は、独自の `tokenizer` を渡したときに既定の正規表現が使われない旨の警告を止めるための指定です。`lowercase=False` にしておくと、英字の製品名を勝手に小文字へ寄せません。品詞は名詞・動詞・形容詞だけを残し、「こと」「もの」のような非自立語や数詞は落とします。助詞を残したままだと、どの文書にも出る「が」「を」が上位の特徴語に紛れ込む原因です。重み付けの計算式やコサイン類似度での使い方は[TF-IDFの仕組みと実装](/tech/details/15207/)で詳しく説明しています。

問い合わせの自動分類や解約の兆候検知のように、このトークン列をモデルの特徴量として使う段階まで進めるなら、前処理・学習・評価を分けずに設計したほうが手戻りが減ります。辞書の選定から精度評価まで含めて任せたい場合は[機械学習モデル開発](https://www.issoh.co.jp/service/ai/machine-learning/)の範囲として相談できます。

### BM25やハイブリッド検索へ渡すときに分割単位を揃える注意点

検索用途でも同じ `tokenize` 関数が使えますが、条件が1つ増えます。インデックス作成時とクエリ解析時で、辞書と品詞フィルタを完全に一致させることです。文書側をIPAdicで「形態素」の1語、クエリ側をUniDicで「形態」「素」の2語に分けると、語が一致せずスコアが0になります。辞書を切り替えるときは、インデックスを全件作り直す前提で計画してください。

BM25で日本語を扱う際の実装上の落とし穴は[BM25の計算式とPython実装の解説](/tech/details/4388/)に、ベクトル検索と組み合わせる構成は[BM25とベクトル検索を統合するハイブリッド検索](/tech/details/8014/)にまとめています。検索エンジン側で形態素解析を持つ場合は、Elasticsearchのkuromojiが同じ役割を担います。設定方法は[Elasticsearchの日本語全文検索とkuromojiの辞書追加](/tech/details/17033/)をご覧ください。

## 辞書の選び方：IPAdicとUniDicで変わる分割単位と出力列

### 同一文をIPAdicとUniDicで解析したときの分割単位と出力列の差

辞書は精度の設定値ではなく、出力の仕様そのものを決めます。同じ「東京都の形態素解析エンジンを使う」を両方で解析すると、列の構造も語の切り方も一致しません。

```
# IPAdic（助詞の行は省略）
東京	名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
都	名詞,接尾,地域,*,*,*,都,ト,ト
形態素	名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析	名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ

# UniDic (unidic-lite)（助詞の行は省略／末尾の空欄はアクセント等の未使用列）
東京	トーキョー	トウキョウ	トウキョウ	名詞-固有名詞-地名-一般			0
都	ト	ト	都	名詞-普通名詞-一般			1
形態	ケータイ	ケイタイ	形態	名詞-普通名詞-一般			0
素	ソ	ソ	素	接尾辞-名詞的-一般
解析	カイセキ	カイセキ	解析	名詞-普通名詞-サ変可能			0
```

まず目に付くのが形式の違いです。IPAdicは表層形のあとにカンマ区切りの9列が来るのに対し、UniDicは表層形のあとにタブ区切りで7列（発音・読み・語彙素・品詞・語形変化の型・語形変化の形・アクセント）が並びます。IPAdic前提で書いた `surface, feature = line.split("\t")` は、UniDicでは要素が8個になり `ValueError: too many values to unpack` で落ちます。

より厄介なのが `parseToNode` 経由の場合です。UniDicでも `node.feature` はカンマ区切りで返りますが、列数は26前後あり、`fields[6]` が指すのは原形ではなく語彙素読み（「東京」なら `トウキョウ`）。例外は出ないまま、カタカナの読みを原形として集計し続けることになります。辞書を差し替えるなら、素性のインデックスは必ず総点検してください。

分割単位も違います。IPAdicは「形態素」を1語と見なす一方、UniDicは「形態」と「素」に分けます。UniDicが採用する短単位語という基準では、複合語をより細かく割るためです。検索インデックスの再構築で辞書を入れ替えるとヒットする語が変わるのは、これが理由です。品詞体系も別物で、IPAdicが接尾（地域）とする「都」をUniDicは普通名詞として扱います。品詞名で条件分岐しているコードは、辞書を変えた瞬間に全滅すると考えてください。

### IPAdicは2007年版、NEologdは2020年9月で更新停止

更新状況は選定の前提になるので、数字で押さえておきます。

| 辞書      | pipパッケージ          | 元データの版                  | 素性の形式        |
| ------- | ----------------- | ----------------------- | ------------ |
| IPAdic  | ipadic 1.0.0      | 2.7.0-20070801（2007年8月） | 表層形＋カンマ区切り9列 |
| UniDic  | unidic-lite 1.0.8 | UniDic 2.1.2            | 表層形＋タブ区切り7列  |
| NEologd | なし（自前ビルド）         | 2020年9月10日で更新停止         | 表層形＋カンマ区切り9列 |

IPAdicは19年間更新されていません。Homebrewのmecab-ipadicも、Ubuntuのmecab-ipadicパッケージも、上流の版番号は同じ2.7.0-20070801です。NEologdは新語に強い拡張辞書として広く使われましたが、[mecab-ipadic-NEologdのリポジトリ](https://github.com/neologd/mecab-ipadic-neologd)に入った最後の定期更新は2020年9月10日版で、最終コミットも2020年9月14日のまま止まっています（2026年10月時点）。2020年以降に生まれた製品名やサービス名は、どちらの辞書にも入っていないと考えてください。新語対応が要件なら、NEologdを入れて済ませるのではなく、次に説明するユーザー辞書を運用へ組み込む必要があります。

### ユーザー辞書で固有名詞を1語にまとめるCSV作成とコンパイルの手順

未知語は文字単位で細かく割れます。「鬼滅の刃」はIPAdicで「鬼」「滅」「の」「刃」の4語になり、作品名としては集計できません。1語にまとめるには、CSVを書いて `mecab-dict-index` でコンパイルします。CSVの列定義とコストの考え方は[公式の単語の追加方法](https://taku910.github.io/mecab/dic.html)に従っています。

```
# seed.csv（表層形,左文脈ID,右文脈ID,コスト,品詞,細分類1..3,語形変化の型,語形変化の形,原形,読み,発音）
# 文脈IDを空欄にすると自動推定される
スマートウォッチ,,,1000,名詞,一般,*,*,*,*,スマートウォッチ,スマートウォッチ,スマートウォッチ
鬼滅の刃,,,1000,名詞,固有名詞,一般,*,*,*,鬼滅の刃,キメツノヤイバ,キメツノヤイバ
```

```
$ /usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index \
    -d /usr/local/lib/mecab/dic/ipadic -u user.dic -f utf-8 -t utf-8 seed.csv
reading seed.csv ... 2
emitting double-array: 100% |###########################################|
done!

$ echo "鬼滅の刃とスマートウォッチを検索した" | mecab -u user.dic
鬼滅の刃	名詞,固有名詞,一般,*,*,*,鬼滅の刃,キメツノヤイバ,キメツノヤイバ
と	助詞,並立助詞,*,*,*,*,と,ト,ト
スマートウォッチ	名詞,一般,*,*,*,*,スマートウォッチ,スマートウォッチ,スマートウォッチ
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
検索	名詞,サ変接続,*,*,*,*,検索,ケンサク,ケンサク
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS
```

コンパイルは一瞬で終わり、`-u` で指定するだけで反映されます。先ほど `*` しか返さなかった「スマートウォッチ」も、原形と読みが埋まった状態に変わりました。コストの値は小さいほど優先されます。既存の語より確実に優先させたい固有名詞は、まず1000前後で登録し、意図通りに切れなければ数百まで下げて調整してください。Pythonから使うなら `MeCab.Tagger(ipadic.MECAB_ARGS + ' -u user.dic')` のように引数へ足します。

## MeCabを使わないほうがよい場面と新語対応・Python実装の移行先

速度で困る場面はまずありません。43字の同じ文を200回つないだ8,600字のテキストを50回解析したところ、処理時間の中央値はIPAdicで6.8ミリ秒、unidic-liteで18.5ミリ秒でした（macOS 26.6 / Python 3.9.6）。毎秒にすると数十万字から100万字台。数十万件のログをバッチで回す程度なら、MeCabがボトルネックになることはありません。避けるべき理由は速度以外にあります。

### 新語が継続的に増える対象での移行先＝Sudachiと辞書の運用コスト

辞書更新が止まっている以上、新語はユーザー辞書で誰かが追加し続けることになります。SudachiのPython辞書 `SudachiDict-core` は20260723版が2026年9月に公開され、解析器も[sudachi.rs](https://github.com/WorksApplications/sudachi.rs)のv0.7.0（同じく2026年9月、PythonバインディングのSudachiPy 0.7.0はPython 3.10以上が対象）まで更新が続いています。語彙の追加を自前で抱え込まずに済む構成です。ECの商品名やSNSの流行語のように語彙が毎月増える対象なら、辞書の運用コストまで含めた総額はSudachiのほうが低く収まります。分割の粒度をA・B・Cの3モードから選べる点も、検索用と分析用で使い分けたい場面では効いてきます。

### 新規のPython実装でfugashiを選ぶ条件と属性による素性の参照

`mecab-python3` は本体のSWIGラッパを維持する立場のため、APIは0.996当時のままです。同じメンテナ（Paul O’Leary McCann氏）が開発している[fugashi](https://github.com/polm/fugashi)（1.5.2、2025年10月リリース、Python 3.14対応を追加）はCythonで書き直されており、`word.surface` や `word.feature.pos1` のように属性でトークンを扱えます。素性を自前でsplitする必要が無くなるぶん、前述のインデックス問題を踏みにくくなる点が実務では大きい違いです。

解析エンジン同士の精度・辞書・向く用途の比較は[MeCab・Sudachi・JUMAN++の用途別の選び方](/column/details/5798/)にまとめています。自前で解析器を持たずクラウドの言語処理サービスへ寄せる選択肢を検討するなら[自然言語処理APIの比較と組み込み手順](/tech/details/15339/)、分かち書きではなく意味の近さで文書を扱いたい場合は[Pythonでのembedding生成](/tech/details/4081/)が出発点です。形態素解析がNLP全体のどこに位置するかは[自然言語処理（NLP）の仕組みとLLMとの関係](/column/details/15340/)で整理しています。

## よくある質問

MeCabの読み方、インストール時のエラー、Windows・Rでの使い方、JUMAN++との選び分けについて、検索の多い5つの質問に答えます。

### MeCabの読み方は何ですか？

「めかぶ」と読みます。海藻の和布蕪（めかぶ）が名前の由来で、開発者の工藤拓氏が好きな食べ物から取ったものです。英語表記の正式な綴りはMeCabで、MとCが大文字になります。検索では表記ゆれや打鍵ミスによる別の綴りでたどり着く場合もありますが、指しているソフトウェアはいずれも同じです。

### MeCabのインストールで辞書が見つからないというエラーが出るのはなぜですか？

`mecab-python3` にライブラリ本体しか含まれておらず、辞書が別パッケージだからです。`pip install unidic-lite` または `pip install ipadic` を追加してください。コマンドライン版で同じエラーが出るなら、まず `mecab -D` を実行します。現在有効な辞書のパス・文字コード・サイズが表示されるので、`mecabrc` の `dicdir` が実在するディレクトリを指しているかをここで突き合わせられます。

### MeCabをWindowsで使うにはインストーラが必要ですか？

x64版のPythonから使うだけなら不要です。mecab-python3 1.0.12は `win_amd64` のwheelを配布しているため、`pip install mecab-python3 unidic-lite` だけで動きます。ARM版Windowsではwheelが無いので、x64版PythonかWSL2を使ってください。コマンドライン版が要る場合は公式のインストーラ（mecab-0.996.exe、IPA辞書同梱）を使いますが、途中で辞書の文字コードをSHIFT-JIS・UTF-8・UTF-16・EUC-JPの4つから選ばされ、初期選択はSHIFT-JISです。UTF-8のテキストを扱うならここでUTF-8を選んでください。

### MeCabをRから使うことはできますか？

RMeCabパッケージを使えば可能です。RMeCabはCRANに登録されておらず作者の独自リポジトリで配布されているため、`install.packages("RMeCab", repos = "https://rmecab.jp/R", type = "source")` のように配布元を指定します。内部で呼ぶのは本体のlibmecabなので、先にOS側へMeCabと辞書を入れておくことが前提。頻度表を直接返す `RMeCabFreq()` や、形態素のリストを返す `RMeCabC()` が用意されている分、テキストマイニング用途ではPython版より手数が少なく済みます。

### MeCabとJUMANはどちらを選べばよいですか？

目的で分かれます。分割の速さと実装例の多さを重視するならMeCab、文脈を踏まえた精度を重視するならJUMAN++です。JUMAN++は[公式リポジトリ](https://github.com/ku-nlp/jumanpp)の説明どおり再帰型ニューラルネット言語モデル（RNNLM）で単語列のもっともらしさを評価するため、精度は高い一方で処理は重くなります。リリースは2023年10月のv2.0.0-rc4が最新で正式版はまだ出ていませんが、コミットは2026年10月時点でも継続中です。辞書や向く用途まで含めた比較は[形態素解析ツールの比較記事](/column/details/5798/)で表にまとめています。

## 関連記事

- [MeCabとSudachiの違いを実測比較｜JUMAN++・GiNZA・Janomeを含む形態素解析ツールの選び方](/column/details/5798/)
- [形態素解析とは？仕組み・具体例・ツールの選び方をわかりやすく解説](/column/details/4146/)
- [TF-IDFとは？単語の重み付けの仕組みとコサイン類似度・ベクトル検索での使い方を実装目線で解説](/tech/details/15207/)
- [ハイブリッド検索とは？RAGでBM25とベクトル検索を統合する仕組み・RRF・実装コード](/tech/details/8014/)
- [テキストマイニングとは？手法・やり方・無料ツールから企業の導入判断まで解説](/column/details/13368/)

---

出典: [MeCabとは？インストール・出力の読み方・辞書選びとPython実装を実測で解説](<https://www.issoh.co.jp/tech/details/3509/>)（株式会社一創）
