TL;DR
context7-mcpは、LLMやAIコードエディタ向けの最新コードドキュメントを提供するMCPサーバーです。
今回はこちらを利用して、以前作成したRustのコードのリファクタリングを行います。
- 使用するMCPサーバー:upstash/context7: Context7 MCP Server -- Up-to-date code documentation for LLMs and AI code editors
- 使用するRustのコード:
背景
生成AIとRustの相性
私のプロンプトが悪いこともあるかもしれませんが、Rustに関するコードを生成AIに書かせると、
存在しないメソッドを大量に生成をしたり、所有権周りのエラーを頻発したりと、あまり良い結果が得られません。
そのため、結局Rustのコードを書く際はかんたんな箇所はAIに任せつつも、
公式ドキュメントを参照して自走して書くことが多いです。
Context7-mcpの登場
そんな中で、Upstash社が公開したcontext7-mcpは、LLMやAIコードエディタ向けに最新のコードドキュメントを提供するMCPサーバーです。
これを利用することで、生成AIが最新のRustドキュメントを参照しながらコード生成を行えるようになるため、
Rustコードの生成精度が向上することが期待できます。
検証内容
今回は、以前作成したタイタニックの生存予測を行うRustコードを対象に、context7-mcpを利用してリファクタリングを行います。
もし、リファクタリング前よりもコードの品質が向上すれば、context7-mcpがRustコード生成に有用であることの一つの証明になると考えています。
検証手順
- context7がある状態とない状態で、Rustコードのリファクタリングを生成AIに依頼をします。
- 生成されたコードの品質を比較します。
検証結果
- context7-mcpを利用しないでリファクタリングをした場合は、ビルドさえも通らないコードが生成されました(LazyFrameにscan_csvメソッドが存在しない等)
- context7-mcpを利用してリファクタリングをした場合もビルドは失敗していましたが、手直ししたのは
Println!にて所有権がすでに移動している変数を参照している箇所のみで、そこを手動で修正したらビルドが通りました。ただ、生成途中で数回コンパイルエラーが発生していたため、初回から完璧なコードが生成されたわけではなかったです。 - context7-mcpを利用する前は
LazyCsvReaderを使っていなかったですが、context7-mcpを利用した後はLazyCsvReaderを利用してコードが簡潔になっていました。
// before
let mut df = CsvReadOptions::default()
.with_has_header(true)
.try_into_reader_with_file_path(Some(train_data_path.into()))?
.finish()?;
// after
let df = LazyCsvReader::new(train_data_path)
.with_has_header(true)
.finish()?
まとめ
- context7-mcpを利用することで、生成AIが最新のコードドキュメントを参照しながらコード生成を行えるため、Rustコードの生成精度が向上する可能性があります。
- 今回の検証では、context7-mcpを利用した場合の方が、コードの品質が向上し、ビルドが通るコードが生成されました。
感想
- 最新のドキュメントを取ることで、生成AIがより良いコードを生成できる可能性があることがわかりました。
- ただし、現状ではまだ完璧なコードが生成されるわけではないため、今後の洞察に期待したいです。
- また、使用するモデルによって結果は変わる可能性があるため、他のモデルでも試してみたいと感じました。
- context7のドキュメントを見るとkeyの発行はoptionと読み取れましたが設定をしないとエラーが出てしまっていたので設定しました。