FAQ

Inkscape開発の最終目標は何ですか?

Inkscapeがなりたいものは、完全にSVGに準拠したベクタ画像エディタです。 規格準拠以外の主要な目標としては、安定性、性能、 最新のベクタ画像エディタとしての機能、 そして効率的で想像力に富んだユーザインタフェースが挙げられます。

Inkscsapeのビルドにはどの言語とツールキットが使われていますか?

InkscapeがSodipodiから受け継いだコードはC/Gtkベースでした。 現在これをC++/Gtkmmに変換していくための作業をしています。 最終目標は、コードをシンプルにしてさらにメンテナンスを容易にすることです。 ぜひ一緒にやりましょう。 ただしQtの名前を出すのだけはやめてくださいね。

他のプロジェクトとのコード共有についてどう考えていますか?

はい、条件さえ整えば、 他のプロジェクトとコードライブラリを共有するのは非常に望ましいことです。 ライブラリとして優秀な候補は、成熟していて、広く配布され、きちんとドキュメントが書かれ、 活発にメンテナンスが行われているものです。 エンドユーザに依存関係の問題を引き起こすものであってはなりませんし、 安定して強力で軽量なものであるべきです。 また、あるひとつのことに特化して、それをきちんとこなすものであるべきです。 基準すべてを満足しないライブラリについては、 ケースバイケースで検討します。

どうすればInkscapeのエクステンションを作成できますか?

便利なエクステンションを作成するにあたっては、 Inkscapeの内部について詳しく知る必要はありません。 Inkscapeに付属しているPhythonエクステンションのうち多くの作者であるAaron Spikeは、 Phythonでエクステンションを作成するための有用な情報をWebページにまとめています (PerlとRubyもサポートされています)。

コードに慣れるための良い方法は何ですか?

まずDoxygenドキュメントから始めると良いでしょう。 ここでは、一般的なDoxygenによる情報の他、 Inkscapeのソースに関してカテゴリ別に分類された情報が置かれています。

InkscapeサイトのDocumentationには、ハイレベルな図表や、manページなどへのリンクがあります。 以前はコードについてはあまりきちんと文書化されていなかったため、 コードそのものを開いてみるしか情報源がない場合が多々ありました。 しかし、現在はこの状況を改善することが重要と考えており、 開発を進めながらドキュメントを整備しています。

他の開発者がコードに変更を加える様子を見ながら、 パッチを試験することがコードに慣れる最短の方法だと考える開発者もいます。 興味を引く要求機能(おそらく自分自身が欲しいと思う機能)を選んで、 どう実装したら良いか考えるのが好きな開発者もいます。 ときどき、コード全体にわたって単調な変更を加えなくてはならないことがありますが、 こうした場合にはほとんど経験のない人でも簡単に重要な貢献ができます。

初期段階を脱してコードを理解する次のステージに進むのは、 ドキュメントが不足しているためなかなか大変ですが、 やる気があれば乗り越えられます。 クラッシュするバグを修正するため実行ファイルをトレースしてサブシステムの中を調べることは、 プログラムの流れを掴むのに有効だと考える開発者もいます。 面白いと思うダイアログボックスからコード内の関数コールをトレースするのも、 勉強になることがあります。 または、SVGファイルのローダからパーサへの流れを追ってみるのも良いでしょう。 コード中にコメントを書き込む作業が、 特定の分野のコードを理解するのにとても役立つと考える開発者もいます。 さらにその恩恵として、将来の開発者の役にも立ちます。

十分間なんだと思ったら、実際に機能を実装してみると経験と理解が深まります。 その際、忘れずにテストケースとドキュメントも書いてください。 そうすれば将来の開発者にとってとても助けになりますし、 そのことはコードの寿命を伸ばすことにもつながるのです。

レンダリングエンジンには何を使っていますか?

現在は、livarotと呼ばれる自前のレンダリングエンジンを使っています。 Cairoが十分に成熟したら、そちらに移行する予定です。 バージョン0.46において、アウトラインモードではCairoが使われています。

開発プラットフォームは何ですか?

開発者の多くはLinuxを使っています。 しかし、Windows上でInkscapeをコンパイルすることも可能です。 Win32Port のページでWindowsでのコンパイルに関する情報が提供されています。

SubversionからコードをダウンロードするためのLinux上のコマンドを教えてください。

一般的な手順は、InkscapeのsourceforgeページにあるSubversionのページに書かれています。 しかし、sourceforgeページに書かれたコマンドでは、 Inkscapeプロジェクト全体のコードをすべてのブランチを含めてチェックアウトすることになるので、 注意してください。

  • メインブランチ("trunk" とも呼ばれています) の最新のコピーだけをチェックアウトするには、 次のコマンドを実行してください。

    svn checkout https://svn.sourceforge.net/svnroot/inkscape/inkscape/trunk/
    
  • Inkscapeの別のモジュールのtrunkだけをチェックアウトするには、 次のコマンドを実行してください。

    svn checkout https://svn.sourceforge.net/svnroot/inkscape/MODULE_NAME/trunk/
    

    MODULE_NAMEの部分には、チェックアウトしたいモジュール名が入ります。 チェックアウトできるモジュールには、次のようなものが含まれます。 experimentalはプロトタイプを作成するための作業場、 inkscape_webはWebサイトに関するファイル、 inkscape_projectにはconfigファイルやプロジェクトレベルのものが置かれています。 Subversionビューアから、利用可能なモジュール名を参照できます。

  • あるブランチの、あるモジュールだけをチェックアウトするには、 次のコマンドを実行してください。

    svn checkout https://inkscsape.svn.sourceforge.net/svnroot/inkscape/MODULE_NAME/branches/BRANCH_NAME/ 
    

    MODULE_NAMEの部分はチェックアウトしたいモジュール名、 BRANCH_NAMEの部分は興味のあるブランチの名前が入ります。 Subversionビューアから、利用可能なモジュールとブランチの名前を参照できます。

これらのコマンドでは、 チェックアウトするのがtrunkかbranchかに応じて、 要求したモジュールをtrunkあるいはBRANCH_NAMEというディレクトリの下にダウンロードします。

  • 後で別のブランチのInkscapeモジュールを試験したい場合、 作業中のコピーで次のようなコマンドを実行すると良いでしょう。

    svn switch https://inkscape.svn.sourceforge.net/svnroot/inkscape/MODULE_NAME/branches/BRANCH_NAME
    

    MODULE_NAMEには作業中のモジュール名、 BRANCH_NAMEにはスイッチしたいブランチ名が入ります。

  • 次のコマンドでもタグのついたブランチに似たようなことができます。

    svn switch https://inkscape.svn.sourceforge.net/svnroot/inkscape/MODULE_NAME/tags/BRANCH_NAME
    

Subversionではサブディレクトリの作業用コピーを個別に移す機能がサポートされているので、 作業用コピーをすべて別のブランチにスイッチしたいときには、 svn switchを作業コピーのrootディレクトリで実行してください。

実装する要求機能はどのように選択されるのですか?

開発者の多くは「かゆいところに手を伸ばしたい」という理由で参加していますから、 ある機能について作業したいと思えば、 実装するかどうかはその人の注意を引くかどうかにかかります。 機能は主にこのようにして実装されています。

Inkscapeはまた、ユーザからの要求を真摯に受け止めるよう努めています。 簡単に実装可能なものや、開発者がやりたいと思っていることと関連したもの、 あるいは要求しているユーザが他の面でプロジェクトに貢献している場合などなら、 なおさらそうです。

もし本当に実装して欲しい機能があり、誰もそれに関して作業をしていない場合には、 コードを調べて自分で開発するのが正しい方法です。 こうしたことを念頭において、 開発プロセスをオープンでわかりやすいものに保つことが非常に重要だと考えているのです。

インタフェースを〜〜にしたいのですが。

当然のことながらユーザの多くは他のプログラム(IllustratorやGIMPなど)に慣れ親しんでおり、 Inkscapeがその仕様に従ってくれるとうれしいと思っています。 Inkscapeの開発者は常に他のプロジェクトをチェックして、 より良いインタフェースを模索しています。 主要な原動力は、GNOME Human Interface Guidelinesに従ってアプリケーションを作成することで、 ここにはどのようにインタフェースを作るべきかというルールが細かく規定あれています。 Inkscapeの開発者はまた、 GIMPやAbiWordやGnumericなど他のGUIアプリケーションの設計者の助言をあおいでいます。 我々より長い期間にわたってGUIに携わってきた分、実践的な情報源だと考えているからです。

しかし、Inkscapeのインタフェースとは、最後の最後は「Inkscapeインタフェース」 であることを理解してください。 他のドローツールとの互換性、ユーザからの要求、すぐれたワークフロー、 開発者の創造性、UIガイドラインへの準拠との間でバランスを取ろうと努力しています。 いかにバランスを取ろうとも、すべての人の要求を満たし、 さまざまなプラットフォーム依存のインタフェースガイドラインをすべて100%達成し、 開発者全員の考えを実装したりするのはおよそ無理な話ですし、 おそらく良い考えとも言えないでしょう。

我々がインタフェースの見た目について議論する場合、 それぞれのユーザがちょっと設定を変更すればアプリケーションを自分にとって便利なものできるよう、 設定変更可能なものとするという結論にたどりつくことが通常です。 しかし、本当に必要な場面で難しい決断を下すのを避けるために、 柔軟性を言い訳に使うべきではありません。