textlintがMCP(Model Context Protocol)に実験的に対応したので早速試してみた
まずは自己紹介
はじめまして!TRUSTART株式会社でシニアマネージャーというロールを任されております片ノ坂 卓磨(かたのさか たくま)と申します。高専で情報工学を専攻して以来、一貫してIT分野に携わってきました。
今回のテーマ選定
所属会社の技術ブログの記事を執筆するにあたりお題について検討しました。やはり「時代はAI」ということで、AI活用に関する内容を記事にしたいと思いました。それからアンテナを張って情報収集をしていたところ2つの候補が見つかりました。
- textlintがMCP(Model Context Protocol)に実験的に対応したので早速試してみた
- emacsでvibe coding! gptelを導入してemacsでLLMを利用しよう!
今回はその中でも多くの人が利用しそうな1をテーマとして選択しました。2についてニーズがありそうなら、次回また自分が担当のする際に執筆したいと思います!リアクションお待ちしております!
前提知識
textlintとは?
読者の皆様、textlintというOSSをご存知でしょうか?
GitHubのリポジトリにあるREADMEにもあるように、プラグインを用いて拡張が可能な自然言語向けlintツールです。プログラミング言語向けの同様のツール(例:eslint、ruffなど)についてはよく知られていることかと思いますが、その自然言語版です。蛇足ですが、自然言語とは人間が会話や文書に利用する言語のことです。
LLMによる校正とは異なり静的解析であることから冪等性がある(同じテキストを何回解析かけても必ず同じ結果になる)ため、文章の品質を安定して向上することができます。
なお、作者が日本人なのもあって日本語のドキュメントが充実しており、とても導入が容易なOSSとなってます。
MCP(Model Context Protocol)とは?
MCPは言わば〈LLMのためのAPIインターフェースの統一規格〉です。公式サイトのイントロダクションの図(https://modelcontextprotocol.io/introduction)を見ていただくとわかりますが、MCPクライアント(Visual Studio Code、Claude、Cursorなどなど)とデータソースやWeb APIの橋渡しを行うためにMCPは存在しています。MCPの登場によって、いつものツールや自前のデータを利用をLLMが利用できるようになり、より便利により賢くLLMを利用できるようになりました。
textlint × MCP
ここまでの内容をまとめると、「読者の皆様が普段利用されるLLM(ChatGPT、Gemini、Copilotなどなど)がエディタなどのMCPクライアントを通してtextlintを操作することができるようになる」という話になります。
従来まではbashやzshなどのコマンドラインインターフェース(以下、CLI)からコマンドを用いてツールを動かしていました。これからの時代は自然言語で操作するように徐々に変わっていくのだなってことを感じさせられますね。
実際にやってみた
説明はここまでとして、参考文献の内容をもとに実際に自分の環境に導入してみました!
1. 検証環境
端末は会社支給の端末、ツールのバージョンは執筆時点(2025/06/16)での最新安定版としています。なお、ツールのチョイスは自分の好みです。
- 端末
- MacBook Pro(14インチ、11月 2023)
- CPU Apple M3 Pro
- メモリ 36 GB
- macOS 14.7.3(23H417)
- MacBook Pro(14インチ、11月 2023)
- ランタイムバージョン管理
- mise
- 2025.6.4 macos-arm64 (2025-06-13)
- mise
- JavaScript実行環境
- node.js
- 22.16.0
- pnpm
- 10.12.1
- node.js
- MCPクライアント(エディタ)
- Visual Studio Code(以下、VSCode)
- 1.101.0
- Visual Studio Code(以下、VSCode)
2. 手順
miseの導入方法については本記事では割愛します。詳細は公式サイト(https://mise.jdx.dev/getting-started.html)をご覧ください。
2.1. node.jsのインストール
node.jsの最新安定版については公式サイト(https://nodejs.org/ja/about/previous-releases)に記載があります。LTS版は22、マイナーバージョンについては執筆時点で16だったので、22.16.0を選択します。
以下のコマンドでmiseがサポートしているnode.jsのバージョンを確認します。
バージョン一覧が表示されるので、その中に22.16.0が存在することを確認します。
mise ls-remote node
確認が取れたので、実際にインストールします。
mise install node@22.16.0
今回textlintを導入するリポジトリでランタイムバージョンを固定化たいため、以下のコマンドを用いて mise.toml
を作成します。
mise use node@22.16.0
2.2. pnpmのインストール
pnpm(https://pnpm.io/ja/)についても同様に最新バージョンがmiseで使えるか確認します。
mise ls-remote pnpm
確認が取れたので、実際にインストールします。
mise install pnpm@10.12.1
こちらもnode.jsと同様に固定化します。
mise use pnpm@10.12.1
この時点で mise.toml
の内容は以下のようになっています。
[tools]
node = "22.16.0"
pnpm = "10.12.1"
2.3. textlintのインストール
ランライムとパッケージ管理の準備が整ったので実際にtextlintをインストールします。pnpmはnpmとコマンドを似せてくれているので、参考文献のコマンドのnpmの箇所をpnpmに書き換えるだけで良いです。なお、参考文献ではtextlintのインストールに合わせて日本語技術文書向けのプラグイン textlint-rule-preset-ja-technical-writing
を一緒にインストールするようになっています。
pnpm install --save-dev textlint textlint-rule-preset-ja-technical-writing
以下のようなログが流れて無事インストールができました。
Downloading kuromoji@0.1.2: 21.83 MB/21.83 MB, done
Packages: +464
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 464, reused 0, downloaded 464, added 464, done
devDependencies:
+ textlint 14.8.4
+ textlint-rule-preset-ja-technical-writing 12.0.2
Done in 10.2s using pnpm v10.12.1
2.4. textlintの設定ファイル作成
設定ファイルの作成はnpxコマンドを用います。これは参考文献に記載のコマンドと同じですね。
npx textlint --init
実行すると、プロジェクトルートに .textlintrc.json
が作成されます。今回は更なるプラグインの追加はしません。ですが、プラグインとインストールしてこのファイルを更新することでtextlintを拡張することができます。
{
"plugins": {},
"filters": {},
"rules": {
"preset-ja-technical-writing": true
}
}
ここまでの手順にてCLI上で動作する状態になっています。正しくインストールおよび設定ができているのかを試してみましょう。
npx textlint README.md
ちなみに、今回の対象文書では以下のような結果になっています。
50:42 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
54:5 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
83:14 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
87:24 error 一文に二回以上利用されている助詞 "に" がみつかりました。
次の助詞が連続しているため、文を読みにくくしています。
- "に"
- "に"
同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
ja-technical-writing/no-doubled-joshi
87:28 error Cannot find a pairing character for (.
You should close this sentence with ).
This pair of marks is called 丸括弧() ja-technical-writing/no-unmatched-pair
97:36 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
132:36 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
208:15 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
220:20 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
265:52 ✓ error 【dict2】 "することができます"は冗長な表現です。"することが"を省き簡潔な表現にすると文章が明瞭になります。
解説: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression#dict2 ja-technical-writing/ja-no-redundant-expression
266:75 ✓ error 【dict2】 "することができます"は冗長な表現です。"することが"を省き簡潔な表現にすると文章が明瞭になります。
解説: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression#dict2 ja-technical-writing/ja-no-redundant-expression
287:27 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
291:10 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
305:25 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
312:30 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
316:45 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
✖ 16 problems (16 errors, 0 warnings)
✓ 2 fixable problems.
Try to run: $ textlint --fix [file]
2.5. VSCode向けMCP設定
MCPの設定のため、.vscode/mcp.json
を参考文献の内容に倣って作成します。
{
"servers": {
"textlint": {
"type": "stdio",
"command": "npx",
"args": [
"textlint",
"--mcp"
]
}
}
}
2.6. チャットを使ってtextlintを動かしてみる
実際にVSCodeのCopilot Chatを使ってtextlintを動かしてみましょう!
2025年6月27日追記:AgentModeを使わない場合はコンテキストにtextlintを加える必要があるみたいです。
無事に動作したようなのでREADME.mdに反映します!
念のため、検証のためCLIでも動かして確かめてみましょう。
npx textlint README.md
2つのfixable problemsと何か1つが修正されたみたいですねー。
5:144 error 箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "です。"
Total:
である : 0
ですます: 5
ja-technical-writing/no-mix-dearu-desumasu
35:24 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
38:24 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
83:14 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
87:24 error 一文に二回以上利用されている助詞 "に" がみつかりました。
次の助詞が連続しているため、文を読みにくくしています。
- "に"
- "に"
同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
ja-technical-writing/no-doubled-joshi
97:36 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
122:34 error 箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である : 0
ですます: 5
ja-technical-writing/no-mix-dearu-desumasu
133:38 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
218:14 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
230:19 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period
267:13 error 箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である : 0
ですます: 5
ja-technical-writing/no-mix-dearu-desumasu
287:50 error 箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である : 0
ですます: 5
ja-technical-writing/no-mix-dearu-desumasu
288:69 error 箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である : 0
ですます: 5
ja-technical-writing/no-mix-dearu-desumasu
✖ 13 problems (13 errors, 0 warnings)
参考文献
- textlint v14.8.0をリリースしました - MCP(Model Context Protocol)をサポート
最後に
TRUSTART株式会社は、一緒に働くメンバーを募集しています!インターンメンバーも大募集中です!
興味をお持ちいただけた方は、ぜひ弊社の採用ページをご確認ください。

「人とデータで全てを可能にする」 不動産領域に関連する、あらゆるビジネスのDX化にチャレンジし、「テクノロジー×人」の力で社会課題を解決するTRUSTART株式会社のテックブログです! 採用情報はこちら:trustart.co.jp/recruit/
Discussion