 <chapter id="project-management">
  <title>プロジェクト管理</title>
  
  <sect1 id="projects-intro">
  <title>プロジェクト管理の紹介</title>
  <para>
   開発中のプログラムやアプリケーションが小規模なもので、さらにお使いのマシン上でのみ動作させるならば、ソースファイルは単体である方がむしろ目的が達成しやすいことでしょう。それに対して、アプリケーションが非常に複雑なもので、複数のソースファイルで開発している場合、プログラムやリソースに対する作業の経過を把握しておくことが大事です。そのような <emphasis>プログラム</emphasis> は <emphasis>プロジェクト</emphasis> に該当します。
  </para>
  
  <para>
   コマンドライン・ツールの多くはプロジェクトをメンテナンスしたり管理するのに適しており、各ツールはそれ自身に独自のルールと能力があります。でも心配はご無用です - <application>Anjuta</application> はそれらの全てを引き受けます。
  </para>
  
  <para>
   プロジェクトをもっと柔軟にそして順応性のあるものにするために追加される他のツールまでも使用することが可能です。しかしながら、全ての Makefile の編集を開始する前に、それらのファイルを <application>Anjuta</application> が管理しているということを心に留めておいて下さい。これらのファイルは全て上書きされてしまいますから。
  </para>
  
  <para>
   手動でプロジェクトの各ファイルを編集したくないという場合は、リラックスして <application>Anjuta</application> に全て任せて下さい。
  </para>
  </sect1>
  
  <sect1 id="new-projects">
   <title>新しいプロジェクトの生成</title>
   <para>
    メニュー・アイテム <menuchoice><guisubmenu>ファイル(_F)</guisubmenu><guimenuitem>新規プロジェクト(_E)&hellip;</guimenuitem></menuchoice> を選択してアプリケーション・ウィザードを起動して下さい。<interface>最初のページ</interface> を注意深くお読み下さい。そして <guibutton>次</guibutton> ボタンをクリックして先に進んで下さい。
   </para>
   <para>
    <interface>二ページ目</interface> では開発するアプリケーションの種類を選択して下さい。そして <guibutton>次</guibutton> ボタンをクリックして先に進んで下さい。
   </para>
   <para>
    <interface>三ページ目</interface> でプロジェクトが必要とする詳細な情報を全て入力して下さい。これらの設定はあとで変更できないのでご注意下さい。このページの各エントリ・ボックスには下線 (_) とハイフン (-) 以外の空白や非アルファベット文字の入力はできません (但し <guilabel>作者</guilabel> の欄は除きます)。プロジェクトの初期生成時に使用される <guilabel>プログラミング言語</guilabel> もちゃんと選択してください。今のところ C/C++ 言語のみサポートされています。最後に <guibutton>次</guibutton> ボタンをクリックして先に進んで下さい。
   </para>
   <para>
	<interface>四ページ目</interface> ではプロジェクトについて短い説明を入力して下さい。そして <guibutton>次</guibutton> ボタンをクリックして先に進んで下さい。
   </para>
   
   <para>
    <interface>五ページ目</interface> では、貴方のプロジェクトで <application>gettext</application> (詳細は <ulink type="info" url="info:gettext">gettext info page</ulink> を参照下さい) を使って <emphasis>国際化のサポート</emphasis> を行うかどうかを指定して下さい。このオプションは貴方のプロジェクトで英語、仏語、蘭語... などのような他の国の言語をマルチリンガルでサポートできるようにします。そのオプションのそばにあるのは GNU コピーライトの条文を各ファイルの先頭に挿入するかどうかを選択するものです。そして必要であれば GNOME デスクトップのメニュー・エントリの項目も入力して下さい。最後に <guibutton>次</guibutton> ボタンをクリックして先に進んで下さい。
   </para>
   <para>
    最後のページでは貴方が入力した情報を確認するためのページです。プロジェクトを生成する場合は <guibutton>完了</guibutton> ボタンをクリックして下さい。
   </para>
   <para>
    プロジェクトの生成が完了すると、プロジェクトをビルドしたり実行したりすることができます。
   </para>
  </sect1>
  
  <sect1 id="loadsave-prjs">
   <title>プロジェクトの読み込みと保存</title>
   <sect2 id="loadingprj">
    <title>プロジェクトの読み込み</title>
    <para>
     プロジェクトを開く場合は、メニュー・アイテム <menuchoice><guisubmenu>ファイル(_F)</guisubmenu><guimenuitem>プロジェクトを開く(_R)&hellip;</guimenuitem></menuchoice> を選択して下さい。ダイアログの中からプロジェクトファイル (<filename>*.prj</filename>) を選択して <guibutton>OK</guibutton> ボタンをクリックして下さい。
    </para> 
    <para>
     最近使用したプロジェクトを開く場合は、メニュー・アイテム <menuchoice><guisubmenu>ファイル(_F)</guisubmenu><guisubmenu>最近開いたプロジェクト(_T)</guisubmenu></menuchoice> の中にある一覧から指定して下さい。その一覧からプロジェクトファイルを選択すると、プロジェクトが開きます。
    </para>
    <para>
     プロジェクトを開くと直ぐに、<application>Anjuta</application> は <emphasis>プロジェクト・モード</emphasis> に移行します。 
    </para>
   </sect2>
   <sect2 id="savingprj">
    <title>プロジェクトの保存</title>
    <para>
     現在使用中のプロジェクトを保存する場合は、メニュー・アイテム <menuchoice><guisubmenu>ファイル(_F)</guisubmenu><guimenuitem>プロジェクトの保存(_V)</guimenuitem></menuchoice> を選択するか、拡張ツールバーにある <guibutton>プロジェクトの保存</guibutton> ボタンをクリックして下さい。プロジェクトが保存されると、更新する必要があるファイルだけローカルディスクに書き込まれ、不必要な書き込みを行わないようにしています。
    </para>
    <para>
     プロジェクトの設定で <guilabel>プロジェクトファイルの上書きを無効にする</guilabel> というオプションが有効であるファイルに対しては何も行いません。
    </para>
   </sect2>
  </sect1>
  
  <sect1 id="add-rm-files">
   <title>ファイルの追加と削除</title>
   <para>
    <application>Anjuta</application> が管理するプロジェクトのファイルの種類はいろいろあります:
   </para>
   <para>
    <orderedlist>
      <listitem><para>ソースファイル</para></listitem>
      <listitem><para>ドキュメントファイル</para></listitem>
      <listitem><para>Pixmap ファイル</para></listitem>
      <listitem><para>ヘルプファイル</para></listitem> 
      <listitem><para>データファイル</para></listitem>
      <listitem><para>PO ファイル</para></listitem> 
    </orderedlist>
   </para>
   <para>
   これらの各種類はプロジェクト内部にある特定のディレクトリの中にあります。
   </para>
   <sect2 id="addingfiles">
    <title>ファイルの追加</title>
    <para>
     Choose the corresponding menu item from
     the 
<menuchoice><guisubmenu>プロジェクト(_P)</guisubmenu><guisubmenu>ファイルのインポート</guisubmenu></menuchoice> サブメニューの中から該当するファイルの種類を選択するか、<interface>プロジェクト一覧</interface> の中で右クリックしてポップアップする <guimenu>操作</guimenu> メニューにある <guisubmenu>ファイルのインポート</guisubmenu> サブメニューの中からファイルの種類を選択して下さい。ダイアログの中で追加するファイルを選択して <guibutton>OK</guibutton> ボタンをクリックして下さい。
    </para>
    <para>
     選択したファイルが既にプロジェクトに追加されている場合、<application>Anjuta</application> は再度そのファイルを追加することはありません。ファイルが既に追加されている旨を警告するだけです。
    </para>
    <para>
     選択したファイルが該当する種類のディレクトリの中に存在しない場合、ファイルをそのディレクトリにコピーしてもよいかどうか確認されます。<application>Anjuta</application> は適切なディレクトリ以外にあるファイルを追加したりしません。
    </para>
   </sect2>
   <sect2 id="removingfiles">
    <title>ファイルの削除</title>
    <para>
     プロジェクトからファイルを削除する場合は、<interface>プロジェクト一覧</interface> から削除するファイルを選択し、右クリックでポップアップする <guimenu>操作</guimenu> メニューから <guimenuitem>削除</guimenuitem> を選択します。
    </para>
    <para>
     すると確認ダイアログが表示され、そのファイルがプロジェクトから削除されます。
    </para>
    <important>
     <title>ファイルが削除されない！</title>
     <para>
     ファイルがファイルシステムから削除されていません。ファイルはまだ存在しており、お望みなら再びそのファイルをプロジェクトに追加することができます。ファイルは単にプロジェクト一覧から削除されたにすぎません。そのためコンパイル、ビルド、再配布... などといったプロジェクト操作の対象になっていません。
     </para>
     </important>
   </sect2>
  </sect1>
  
  <sect1 id="project-config">
   <title>プロジェクト設定</title>
   <para>
    FIXME:
   </para>
  </sect1>
  
  <sect1 id="project-information">
   <title>プロジェクト情報の取得</title>
   <para>
    現在使用中のプロジェクトの情報を表示するには、<menuchoice><guisubmenu>プロジェクト(_P)</guisubmenu><guimenuitem>プロジェクト情報(_I)</guimenuitem></menuchoice> を選択して下さい。プロジェクトを生成したときのオプションについて詳細な情報が表示されたダイアログ現れます。
   </para>
   <figure id="proj-info">
   <title>プロジェクト情報ダイアログ</title>
   <screenshot>
   <screeninfo>プロジェクト情報ダイアログ</screeninfo>
   <graphic fileref="figures/project_info.png" format="PNG" srccredit="andyp"></graphic>
   </screenshot>
   </figure>
  </sect1>
  
  <sect1 id="project-files">
   <title>プロジェクト・ファイルの管理</title>
   <para>
    このセクションではプロジェクト・ファイルの管理についてより高度な情報を紹介します。この低レベルな仕様について知りたくない場合は、このセクションを飛ばして頂いても結構です。
   </para>
   <para>
    <application>Anjuta</application> では次に示すプロジェクト・ファイルを管理します:
    <orderedlist>
      <listitem><para> プロジェクト・ファイル --&gt; [ <filename>*.prj</filename> ファイル ]</para></listitem>
      <listitem><para> トップレベルの configure.in --&gt; [ <filename>configure.in</filename> ]</para></listitem>
      <listitem><para> トップレベルの Makefile.am --&gt; [ <filename>Makefile.am</filename> ]</para></listitem>
      <listitem><para> ソースの Makefile.am --&gt; [ <filename class="directory">src</filename> サブディレクトリにある <filename>Makefile.am</filename> ]</para></listitem>
      <listitem><para> ドキュメントの Makefile.am --&gt; [ <filename class="directory">doc</filename> サブディレクトリにある <filename>Makefile.am</filename> ]</para></listitem>
      <listitem><para> ヘルプの Makefile.am --&gt; [ <filename class="directory">help</filename> サブディレクトリにある <filename>Makefile.am</filename> ]</para></listitem>
      <listitem><para> データの Makefile.am --&gt; [ <filename class="directory">data</filename> サブディレクトリにある <filename>Makefile.am</filename> ]</para></listitem>
      <listitem><para> Pixmap の Makefile.am --&gt; [ <filename class="directory">pixmaps</filename> サブディレクトリにある <filename>Makefile.am</filename> ]</para></listitem>
      <listitem><para> POTFILE.in --&gt; [ <filename class="directory">po</filename> サブディレクトリにある <filename>POTFILE.in</filename> ]</para></listitem>
    </orderedlist>
   </para>
   <para>
    個人のプロジェクトのビルドファイルで作業している場合、<application>Anjuta</application> が行うことの中で重複する作業は行わないで下さい。これらのファイルには手をつけないようにする事をお奨めします。
   </para>
   <para>
    それでもなお、これらのファイルを変更したい場合は、メニューバーから <menuchoice><guisubmenu>プロジェクト(_P)</guisubmenu><guimenuitem>プロジェクトの設定(_C)&hellip;</guimenuitem></menuchoice> を選択し、<guilabel>ビルドファイル</guilabel> のタブ・ページにある各プロジェクトファイルの上書きを無効にして下さい。
   </para>
   <para>
    プロジェクトの中にサブディレクトリを作成することも可能です。これらのディレクトリの中でビルドファイルを管理するのはもっぱら貴方の担当です。
   </para>
   <para>
    プロジェクトの中で複数の実行型式ファイルを管理する場合、ソースディレクトリの中でメインとなる実行型式ファイルと一緒に混ぜないで下さい。それぞれ別々のディレクトリを作成して下さい。もう一度警告します。それらを管理するのは貴方の担当です。
   </para>
   <para>
    作成したサブディレクトリに格納するモジュールを追加することを忘れないで下さい。その場合は、メニューバーから <menuchoice><guisubmenu>プロジェクト(_P)</guisubmenu><guimenuitem>プロジェクトの設定(_C)&hellip;</guimenuitem></menuchoice> を選択して、<guilabel>モジュール群</guilabel> タブのページにモジュール情報を追加して下さい。
   </para>
  </sect1>
  
  <sect1 id="project-build">
   <title>プロジェクトのコンパイル、ビルドと実行</title>
   <sect2 id="project-basics">
    <title>概要</title>
    <para>
     プロジェクトの実行型式ファイルは二つのステップで生成されます:
    </para>
    <para>
     <orderedlist>
      <listitem><para>コンパイル</para></listitem>
      <listitem><para>リンク</para></listitem>
     </orderedlist>
    </para>
    <para>
     この二つのステップをまとめて <emphasis>ビルド</emphasis> と呼びます。他のステップもビルド・プロセスの中に含まれますが、説明を簡単にするために、この二つのステップにだけ焦点をあてることにします。
    </para>
    <para>
     <emphasis>コンパイル</emphasis> はオブジェクトファイルが該当するソースファイルから生成されるステップです。例えば、ソースファイル <filename>hello.c</filename> をコンパイルすると <filename>hello.o</filename> が生成されます。通常、これらのオブジェクトファイルを気にとめる必要はありません - 最終的に生成される実行型式ファイルを作成する間に生成される中間生成物と考えて下さい。
    </para>
    <para>
     オブジェクトファイル (<filename>*.o</filename> files) が生成されたら、それらを全て (いくつかのライブラリも) 一緒にリンクして、最終的な実行型式ファイルを生成します。このステップを <emphasis>リンク</emphasis> と呼びます。
    </para>
   </sect2>
   <sect2 id="compiling-project">
    <title>ソースのコンパイル</title>
    <para>
     プロジェクトの中で、個人的に作成したソースファイルを別にコンパイルしてオブジェクトファイル (<filename>*.o</filename> files) にすることができます。しかしながら、これらのオブジェクトファイルを気にとめる必要はありません。最初にファイルをコンパイルするのが簡単だからです (例えば、文法エラーがないか確認して下さい)。プロジェクト全体をビルドするには多くの時間を費やします。特に大規模なプロジェクト、あるいはもっと複雑なアプリケーションの場合はなおさらです。それ故に、プロジェクトを進めている間は、編集-コンパイル-編集-コンパイル-... という繰り返し作業をおこなうことになります。
    </para>
    <para>
     一つのファイルをコンパイルする場合は、メニュー・アイテムle <menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>コンパイル(_C)</guimenuitem></menuchoice> を選択するか、拡張ツールバーにある <guibutton>コンパイル</guibutton> ボタンをクリックして下さい。すると、現在表示されているファイルがコンパイルされます。
    </para>
   </sect2>
   <sect2 id="building-exec">
    <title>実行型式ファイルのビルド</title>
    <para>
     <application>Anjuta</application> には分割リンクコマンドはありません。単に必要無いからです。ビルド・プロセスでは全てのソースファイルをコンパイルして、ライブラリと一緒にリンクします。ビルドコマンドはこれらのファイルが更新されている (これを <emphasis>依存性の確認</emphasis> と呼びます) とリビルドを行います。各ファイルがそれぞれコンパイル済みの場合、ビルド・プロセスではリンクのみ行います。また、プロジェクトが既にビルド済みで依存するファイルが更新されていない場合は、リンクのステップはスキップされます。
    </para>
    <para>
     では依存性のチェックはどのようにしてプロジェクト開発に影響を与えているのでしょうか？ 今変更したファイルがあるとすると、変更したファイルに依存しているソースファイルの全てがリコンパイルされます。ビルド・プロセスでは、プロジェクトにある全てのファイル (オブジェクトファイルや実行型式ファイルだけではなく) がこのチェックの対象となります。変更済みの他のファイルと依存関係をもつ特定のファイルが見つからない場合は、そのファイルが再生成されます。
    </para>
    <para>
     今、依存性のチェックについておおまかに理解できたことと思います。ここで、もし依存性のチェック機構が存在していなかったら、貴方のプログラミング・ライフがどのようになっているか想像できるでしょうか？もしその問いに答えることができないとしたら、大規模なプロジェクトを開始するときにお分かり頂けると思います！
    </para>
    <para>
     <menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>ビルド(_B)</guimenuitem></menuchoice> では <filename class="directory">src</filename> (ソース) ディレクトリにある全てのファイルをビルドして、実行型式ファイルを生成します。<menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>全てビルド(_A)</guimenuitem></menuchoice> ではプロジェクト全体 - 全てのサブディレクトリ (<filename class="directory">src</filename> も含む) が再帰的にビルドされます。
    </para>
   </sect2>
   <sect2 id="build-dist">
    <title>配布可能パッケージの生成</title>
    <para>
     プロジェクトの配布可能な tarball をビルドする場合は、<menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>配布可能ファイルの作成</guimenuitem></menuchoice> を選択して下さい。これは tarball (<filename>*.tar.gz</filename>) を作成して、プロジェクト・ディレクトリのトップレベルに格納します。そのファイルを配布するためにどこか安全な場所にコピーして下さい。
    </para>
   </sect2>
   <sect2 id="build-install">
    <title>インストール</title>
    <para>
     メニュー・アイテム <menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>インストール(_I)</guimenuitem></menuchoice> では生成したアプリケーションをお使いのシステムにインストールします。
    </para>
	<note>
	 <title>注記</title>
	 <para>
	 システム規模のインストールを行う場合は root でログインする必要があります。さらに GNOME アプリケーションはプロジェクトの中で Pixmap (アイコン) を使用するので、システム規模でインストールする必要があることに注意して下さい。さもないと、プロジェクトの中でアプリケーションが起動された時に、たくさん "pixmap not found" エラーが発生してしまいます。
	 </para>
	</note>
   </sect2>
   <sect2 id="configure">
    <title>Configure</title>
    <para>
     プロジェクトのトップ・ディレクトリにある <filename>configure</filename> スクリプトを実行する場合は、メニュー・アイテム <menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>Configure(_F)</guimenuitem></menuchoice> を選択して下さい。そのスクリプトはシステム規模のビルド条件を決定して、ビルドに必要ないくつかのファイル (<filename>Makefile</filename> と <filename>config.h</filename>) を生成します。これは必須です。その理由は、アプリケーションはこれらのオプションの特定の設定に依存しているかもしれないからです。
	</para> 
	<important>
	 <title>重要</title>
	<para>
     <filename>configure</filename> が完了するまで、プロジェクトのビルドを開始しないで下さい。
    </para>
	</important>
    <para>
     <filename>configure</filename> スクリプトは (通常) はじめてビルド・プロセスを行う時の最初のほうで一度実行されます - 例えば、今ちょうどプロジェクトの配布用ソース tarball を展開した直後とします。そのあと、configure によるビルド条件の検出は自動的にビルド・プロセスに続いて処理されます。<emphasis>アプリケーション・ウィザード</emphasis> を使用してアプリケーションを生成した場合は、<filename>configure</filename> を別に実行する必要はありません: ウィザードではプロジェクトの生成過程の一部としてこのスクリプトを実行します。
    </para>
    <para>
     configure スクリプトに対して追加オプションを指定することも可能です。<guimenuitem>Configure</guimenuitem> メニュー・アイテムを選択した後に、追加オプションを入力するためのダイアログが表示されます。
    </para>
     <figure>
       <title>Configure オプション・ダイアログ</title>
       <screenshot>
	   <screeninfo>Configure オプション・ダイアログ</screeninfo>
        <graphic fileref="figures/configure_dlg.png" format="PNG" srccredit="andyp"></graphic>
       </screenshot>
     </figure>
    <para>
     なにかオプションを入力して (あるいは、デフォルト値を使用するということで空白のままにして) <guibutton>OK</guibutton> をクリックして下さい。<filename>configure</filename> スクリプトで利用可能なオプションを確認する場合は、<userinput>--help</userinput> というオプションをオプション・エントリボックスに入力して <guibutton>OK</guibutton> ボタンをクリックして下さい。利用可能なオプションが <interface>メッセージ・ウィンドウ</interface> の中に表示されます。
    </para>
    <para>
     <filename>configure</filename> を一度だけ実行するために必要な条件は何もありません。いつでも実行可能で、通常は configure に対するオプションを変更する必要がある場合に行います。一つ注意してほしいことは、トップレベル・ディレクトリの中にある <filename>config.h</filename> ファイルが変更されたら、<filename>configure</filename> スクリプトを再度実行しても上書きすることはない、ということです。
    </para>
   </sect2>
   <sect2 id="auto-generation">
    <title>自動生成</title>
    <para>
     自動生成は二つのステップから構成されます: <application>automake</application> の実行とそのあとの <application>autoconf</application> の実行です。もしプロジェクト・ディレクトリのトップレベルに <filename>autogen.sh</filename> 実行スクリプトがあれば、このファイルが前述の二つのステップの代わりに実行されます。<emphasis>configure</emphasis> スクリプトのように、自動生成はビルド・プロセスによって自動的に処理されます。プロジェクトを configure するために別な場面 (複数のビルドファイルを編集したあとで同期に失敗したためにたくさんのエラーが発生するといったような) で実行することも可能です。
	</para>
	<note>
	<title>注記</title>
	<para> 
	 Configure とは異なり、自動生成は一度として実行する必要がありません - 実際、まったく実行する必要がないのです！オプションは利用可能です。その理由はいろいろな条件に対応することができるからです。
    </para>
	</note>
    <para>
     メニュー・アイテム <menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>自動生成(_G)</guimenuitem></menuchoice> を選択すると、プロジェクトの自動生成が始まります。
    </para>
    <para>
     これらのツールの動作について詳細については <ulink type="info" url="info:automake"><application>automake</application></ulink> と <ulink type="info" url="info:autoconf"><application>autoconf</application></ulink> の info ページを参照下さい。
    </para>
   </sect2>
   <sect2 id="build-clean">
    <title>Clean</title>
    <para>
     このオプションはプロジェクトをクリアして <guimenuitem>全てビルド(_A)</guimenuitem> を実行するために必要な状態にしてくれます。ビルド・プロセス実行時に生成された全てのファイルを削除します。そのファイルには <filename class="directory">src</filename> ディレクトリ (とその他のディレクトリ) の中にある、全てのオブジェクトファイル (<filename>*.o</filename> files) と実行型式ファイルが含まれます。
    </para>
    <para>
     メニュー・アイテム <menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>Clean</guimenuitem></menuchoice> を選択するとプロジェクトが clean されます。
    </para>
   </sect2>
   <sect2 id="build-cleanall">
    <title>全て Clean</title>
    <para>
     <guimenuitem>全て Clean</guimenuitem> (これは <emphasis>配布ファイル Clean</emphasis>、あるいは短縮して <emphasis>clean dist</emphasis> とも呼ばれます) について説明することはほとんどありません。プロジェクトをクリアして <guimenuitem>Configure</guimenuitem> と <guimenuitem>全てビルド</guimenuitem> を実行するために必要な状態にしてくれます。ビルド・プロセス実行時に生成された全てのファイルを削除します。そのファイルには全てのオブジェクトファイル (<filename>*.o</filename> files)、実行型式ファイルと全ての Makefile が含まれます。言い換えると、あたかも配布用 tarball をちょうど展開した直後のプロジェクトの状態にしてくれます。
    </para>
    <para>
     メニュー・アイテム <menuchoice><guisubmenu>ビルド(_B)</guisubmenu><guimenuitem>全て Clean</guimenuitem></menuchoice> を選択するとプロジェクトを完全にクリアします。
    </para>
   </sect2>
  </sect1>
 
 </chapter>
