パスワードを忘れた? アカウント作成
52262 story

.NETで動くテキストエディタエンジン「Azuki」の開発者に聞く 8

ストーリー by morihide
Mono対応が待ち遠しい 部門より

SourceForge.JPでは、同サイトを利用するオープンソース・プロジェクトを毎月1つピックアップし、その開発者にインタビューする「今月のプロジェクト」というコーナーを設けています。今回は、.NET Framework用のテキストエディタエンジン「Azuki」の作者YAMAMOTO Suguruさんにお話を伺いました。

プロジェクトの概要

Azuki は .NET Framework と .NET Compact Frameworkの両方で動作するテキストエディタエンジンです。 zlibライセンスで開発しています。

プロジェクト管理者へのインタビュー

このソフトウェアはどんなソフトウェアですか?

.NET Compact Framework を含めた .NET 環境用の、 C# で作られているテキストエディタの「エンジン」です。 Visual Studio を使っていればドラッグ&ドロップで配置できる GUI コンポーネント、ドキュメント、ビュー、シンタックスハイライターなどを提供しています。

基本的な用途であれば GUI コンポーネントをドラッグ&ドロップしただけでもう使えるはずです。

エディタではなく、エディタエンジンを作ろうと思ったのはなぜですか?

実は、エディタは作っています。 AiB Tools という重度視覚障害者向けシステムに含まれているエディタで、点字・音声による操作環境でのプログラミングに特化しています。これには Windows 標準の RichEdit を使って開発していたのですが、 RichEdit に感じていた限界を越えるべくエンジンを探したところ私が実現したい特殊ニーズ(割愛)に応えられるエンジンが見つからず、自作するに至りました。

プロジェクトを始めた動機は? また、どうやって始めましたか?

前述の AiB Tools 用にエンジンを探しているときに Scintilla の優れた設計に触れ、触発されたのが動機です。ただ Scintilla を C# から使用すると内部文字コードの違いや .NET ネイティブでないことから不都合が多いため、プライベートな実験としてエンジンの実装を始めました。

Azukiの名前の由来は?

実は前述の AiB Tools の名称案の一つで、私自身が気に入っていたものです。 AiB Tools の前身を学会発表したのが岡山の倉敷で、そこから備の国、備前、備前長船、小豆長光、小豆という連想ゲームからひねり出した名前です。周囲から「さすがに分かりにくい」と不評(笑)だったので採用しなかったのですが、いつか使ってやろうと思っていました。その「いつか」が、現在の Azuki の元になった実験プロジェクトだった、というわけです。

このソフトウェアのターゲットユーザーは?

.NET でエディタを作りたい人です。特に.NET Compact Framework で作りたい人から興味をもってもらいたいですね。

このソフトウェアをどれくらいのユーザーが利用しているとお考えですか?

あまり考えたことは無いですが・・・数名程度ではないかと思っています(笑)。

プロジェクトがうまく行っていると感じるのはどんなときですか?

ユーザからのフィードバックがフォーラムに書き込まれているのを知ったときです。

このプロジェクトをやっていて最も驚いた出来事は?

驚きというよりショックというべきかもしれませんが……。友人に .NET Compact Framework 版も作ってくれないかと言われて作ったところ、性能(計算・描画)のシビアさを思い知りました。これは、世界が少しだけ変わる体験でしたね。

このプロジェクトで最も苦労している点は?

実装の話で申し訳ないのですが、パフォーマンス向上の工夫です。内容変更による再描画とシンタックスハイライトが、ドキュメント全体あるいは画面全体を再スキャンするようなアルゴリズムで作るとモバイル環境では遅すぎるので、必要な部分に絞って実行しています。こうした最適化は他のデスクトップ用エンジンでは行っていないため参考にできず、独自に設計・実装しています。

今後のプロジェクトの方向性は?

今まで通り、とにかく堅実に進めようと思っています。

作ってから改めて思ったのですがエディタのエンジンって、信頼性が要求されるものなんですよね。万が一エンジンのバグでテキストデータが破損しようものなら、エンジンではなくそれを使っているエディタの信用が失墜してしまいます。ですから「やっぱりフリーのエンジンなんかウチの製品には使えない」なんて言われないようにしないと、ユーザに申し訳が立ちません。無償であることは、責任が無いということではないと思っていますので。

どのような要望がユーザーからあがっていますか?

現在挙がっているのは日本語禁則処理を含むワードラップ機能、 TeX の文法をハイライトできる機能、アセンブリへの電子署名、そして検索機能です。また「私」というユーザからは、箱形選択、コード・フォールディングがあります。

これらすべてについて、できるところから無理なく対応していきたいと思っています。

このソフトウェアあるいはプロジェクトについて誇れるところは?

正直なところ、まだ走り出したばかりという気分でして……(苦笑)。 Azuki の本当の価値はユーザフィードバックから知ることになると思うので、誇れる点が分かるとしても先の話なのかなと思います。

このプロジェクトでどこかやり直せるとしたら、どこを変更したいですか?

また実装の話で申し訳ないですが、選択に関する構造設計です。現在の Azuki では選択状態を開始インデックスと終了インデックスので定義する範囲「一つ」で保持しています。複数の選択範囲を持てるよう設計しなかった上、選択範囲が一つしかないことを前提にした実装部分がすでに存在しています。これが原因で箱型選択が実現できていません。

あなたの本業は何ですか?

プロジェクト立ち上げ時は大学院生でしたが、今は大手 SI 企業で設計開発をしています。

あなたの開発環境は?

検証機として次のようなものを使っています。

  • デスクトップ自作機(Windows Vista Buisiness x64 Edition)
  • Advanced/W-ZERO3[es] (Windows Mobile 6)
  • ThinkPad T42 (Windows XP Professional)
  • 自作サーバ機 (SuSE Linux 11.1)

開発環境は主に次のものです。

  • Visual Studio 2005 Accademic
  • Visual Studio 2008 Accademic
  • Mono 2.0

なお現在の Azuki は Mono で動作するわけではありません。ただ将来的に対応したいので、「予想通りなエラーで動作しないこと」を確認しています。

バージョンヒストリー:

  • 0.8: 公開
  • 0.9: 折り返し表示、自動インデント
  • 1.0: シンタックスハイライター、マルチドキュメント
  • 1.1: 空白文字入力の自動変換(タブや全角スペースを半角スペースに)
  • 1.2: 各種言語用ハイライターを内蔵、サンプルアプリを簡易エディタ Ann に変更

ロードマップ:

  • 1.3: テキスト検索
  • 2.0以前: 箱形選択
  • 2.0以降: コード・フォールディング
  • 対応時期不明: Mono対応

このプロジェクトに貢献するには?

使ってください。ダウンロードカウンターが増えるだけでやる気が出ます(笑)フィードバックがあれば、なお嬉しいですね。

SourceForge.jpへの要望をお聞かせください。

うーん、現在のサービスで十分満足なので特に無いです(苦笑)ありがとうございます。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by oltio (3848) on 2009年01月27日 16時46分 (#1500135) 日記

    その「特殊なニーズ」こそが知りたかった。なぜ割愛したの???

  • by nique (17169) on 2009年01月27日 17時25分 (#1500159) 日記

    パフォーマンスを追及したCompact Framework環境用の実装は、昔懐かしいAPIコールの塊になったりします。
    当然そこには昔懐かしいバグと再利用しにくいコードができてしまうわけで、フルな.NET Framework用に設定した仕様は無理がありすぎる気がします。
    まあ一人プロジェクトのようですから、本人のやる気でカバーするというのなら問題ないのかもしれませんが。

  • by Anonymous Coward on 2009年01月27日 16時49分 (#1500139)

    ちょうど簡易エディタ内蔵のプログラムを
    Visual C# で作ろうとしてたところだったので、
    かなり興味を持ちました。
    少なくとも検索機能は欲しいと思っていますので、
    1.3 のリリースを心待ちにしております。
    作者様、頑張って下さい。応援してます。

typodupeerror

ソースを見ろ -- ある4桁UID

読み込み中...