ここままでエディターとしての最低限の機能は実装できたと思います。
一旦これで機能追加は止めてコードの改善を行いたいと思います。
Rustではリンターとしてclippyが使えます。
cargo clippy
clippyを実行することでコードを静的解析して問題点を指摘してくれます。
clippyの解析結果は問題箇所だけではなくどのように書き直せばよいのかも指摘してくれるので素晴らしいです。
実行結果からの主な修正点としては無駄な変数の束縛やmap()からfold()への切り替え等です。詳しくはこちらをご覧ください。
なぜclippy?
clippyと聞くと日本人としてはなんだろう?と思うのですが欧米人にはあのclippyか!とピンとくるようです。
日本人としてはカイルくんや冴子先生の方が馴染みがあるでしょうか。
これらのキャラクターはかつてMicrosoft Officeに搭載されていたAIアシスタントでした。つまり、Office製品の使い方に困った場合、このキャラクターたちに質問すると使い方を教えてくれるというものでした。
しかし時代はまだ1990年代、今のChatGPTのようにまともな回答がされることは稀でした。また、当時の非力なPCではCPUやメモリ負荷が激しく、起動するだけでフリーズに近い動作を引き起こしユーザを苛つかせました。
インターネットが一般人にも利用できるようになりはじめた頃なので現在のように気軽に検索して答えを見つけるようなことは難しく書籍やアプリケーションのヘルプで調べることが多かった時代の話です。
ヘルプを呼び出すたびにフリーズしてはたまらないので直ぐに機能をオフにしてこれらのキャラクターを見ることはそれ以来なかったという悲しい出来事は当時の人々の記憶に残っているのでしょう。
そのAIアシスタントであるclippyがRustで蘇った!ということで欧米人としてはニヤリとしてしまうのではないでしょうか。
勿論RustのclippyはMicrosoft Officeのものとは違い素晴らしいです。ただし、AIを使っていないのでインタラクティブではないです。現代ではChatGPTがその役割を果たしているといっていいかもしれません。
後に、これらのAIアシスタントは製品からも消え去り終焉かと思いきや、Cortana、Microsoft Copilot(Bing Chat)と不死鳥の如く消滅と新生を繰り返しています。
レビュー:マイクロソフトのクソダサセーターWindows Ugly Sweater Clippyエディション(笠原一輝) | テクノエッジ TechnoEdge
毎年年末になると発売される米Microsoftの「世界一ダサイ」(筆者調べ)セーター。今回は実際にセーターを着て渡米してみたので、真面目にレビューしていきたいと考えている。
カイルくんよりこっちだろ! AI「冴子先生」をOfficeアシスタントに復帰させる方法/「ChatGPT」ベースだが、ちゃんと冴子先生としての自我もあり【レビュー】
以前、弊誌で「ChatGPT」を搭載したカイルくんの「Microsoft Excel」マクロ「カイルくんGPT」を紹介したところ、ぜひこれの「冴子先生」バージョンがほしいとの声が多く寄せられたそうで、姉妹製品「冴子先生GPT」が開発された。本稿ではこれを実際に試してみたい。
enumの処理を改善
書き込みモードの処理で下記のようなコードを書いていたのですがenum自体に値をもたせることができるので書き換えをトライしてみました。
let mode = {
use crate::message::WriteMode::*;
match message.write_mode() {
OverWrite => " OVR ",
Insert => " INT ",
}
};
しかし、数値をもたせることは容易でしたが文字列は手軽に持つことが難しいようです。
そこでDisplayトレイトを使って文字列を返すように実装し直しました。
impl fmt::Display for WriteMode {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::OverWrite => write!(f, " OVR "),
Self::Insert => write!(f, " INT "),
}
}
}
// モード取得
let mode = message.write_mode().to_string();
シンプルになりましたね。
その他、コメントを加えて0.1.0としました。

TOC
- 準備
- ターミナル入出力を試す
- ターミナル系crateを利用する
- 編集データと表示処理
- 画面制御
- 編集データへの入出力
- その他
GitHubにコードをアップロードしています。
コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。
# Example
$ cargo run --example first_step