// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= IDEでのC/C++リモート開発のモード
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: IDEでのC/C++リモート開発のモード - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, IDEでのC/C++リモート開発のモード

2014年3月 [リビジョン番号: V8.0-1]

この記事では、C/C++モジュールがインストールされている場合にNetBeans IDEで使用可能なリモート開発機能と、開発環境でそれらを使用する最善の方法を選択する方法について説明します。













== リモート開発とは

リモート開発は、Microsoft Windows、Mac OS X、Oracle SolarisまたはLinuxを実行しているコンピュータでIDEを実行し、Oracle SolarisまたはLinuxを実行している別のコンピュータ上のプログラムをビルド、実行およびデバッグできるようにするNetBeans IDEの機能です。


== リモート開発を使用する場合

次のいずれかの状況に該当する場合は、リモート開発を使用できます。

* デスクトップ・システムがOracle SolarisまたはLinuxを実行していない。

* 負荷が高くなることのある共有SolarisシステムでIDEを実行している。

* Oracle SolarisまたはLinuxを実行しているシステムへのアクセスが、セキュリティ上の理由からSecure Shell (SSH)に制限されている。

* Solaris環境でのグラフィカル・ユーザー・インタフェース・ツールの実行が難しい。

* 開発しているソフトウェアを、SolarisまたはLinuxを含む複数プラットフォーム上でコンパイルおよび実行する必要がある。


== リモート開発の機能

IDEには、リモート・ホストの管理機能が用意されています。C、C++およびFortranプロジェクトのビルド、実行およびデバッグに使用するようにリモート・ホストを構成できます。リモート・ホストは次の条件を満たす必要があります。

* リモート・ホスト・オペレーティング・システムはOracle SolarisまたはLinuxである必要があります。

* リモート・ホストはSSHデーモン`sshd`を実行する必要があります。

* 少なくとも1つのツール・コレクション(GNU、Oracle Solaris StudioまたはSun Studio)がリモート・ホスト上でアクセス可能である必要があります。

* ホストにユーザー・アカウントが必要です。

リモート・ホストは、IDEの「サービス」ウィンドウで管理できます。

image::images/services_window.png[]

リモート・ホストを構成し、接続した後で、ローカル・システムの場合と同様にプロジェクトをビルド、実行およびデバッグできます。リモートIDEコマンドはSSH上で実行されます。

リモート開発ホストを使用する場合、ローカル・ホストとリモート・ホストの両方がプロジェクト・ファイルにアクセスする必要があります。このアクセスは、ファイル共有またはファイルのセキュアなコピーを通じて実現できます。IDEがローカル・システムとリモート・システム間のファイル共有を使用するには、その前に共有ファイルシステムまたはフォルダを設定し、両方のシステムからアクセス可能にする必要があります。リモート・ファイルは、SFTP、またはホストが実行しているオペレーティング・システムで使用可能な別のファイル共有メカニズム(たとえば、Network File System (NFS)、Samba、WebDAV)を通じてアクセスされます。

ファイル共有が可能でない場合は、「自動コピー」を使用し、SSHを使用してファイルをサーバーにコピーできます。


== リモート開発の利点

リモート開発には次の利点があります。

* すべてのプロジェクトに同じ開発環境を使用できます。

* デスクトップ・システムのリソースがより効率よく利用されます。

* ネットワーク・トラフィックが最適化されます。

* IDEレスポンス時間が向上します。

* IDEからリモート・ファイル・システムを参照できます。

* リモート・ホスト用にIDEにターミナル・ウィンドウを開くことができます。

* これをSSHのみのセキュアな環境で使用できます。

 image::images/modes_diagram.png[]

単純モードでは、ソース・ファイルは主にローカル・ホストに存在します。プロジェクトをビルドする場合、ソース・ファイルはSSHファイル転送プロトコル(SFTP)を使用してリモート・ホストにオンデマンドで配信されます。

混合または共有モードでは、ソース・ファイルは、NFS、Samba、WebDAVまたはその他のファイル共有システムを使用してローカル・ホストとリモート・ホスト間で共有される場所に存在します。

完全リモート・モードでは、ソース・ファイルはリモート・ホストに存在します。IDEは、SFTPを使用してファイルにアクセスします。


== 使用するリモート開発モードの決定

特定の状況に最適な開発モードは、作業している開発環境によって決まります。次の各項では、1つの開発モードが最大の利点を提供する開発環境の例について説明します。


=== 単純モード

単純モードは、次の図で説明される開発環境を使用している場合に、ニーズに最適なリモート・モードです。

image::images/simple_mode_diagram.png[]

この環境では、単純モードに次の利点があります。

* ローカル開発とリモート開発に同じIDEを使用できます。

* IDEでホストとプラットフォーム間を簡単に切り替えることができます。

* SSHのみの環境でIDEを使用できます。

* モビリティが向上します。


=== 混合(共有)モード

混合または共有モードは、開発環境が次の図に示す環境に似ている場合に適切な選択肢です。

image::images/mixed_mode_diagram.png[]

この環境で混合モードを使用する利点は次のとおりです。

* IDEでホストとプラットフォーム間を簡単に切り替えることができます。

* 他の2つのモードで発生するようなファイル(キャッシング)の重複がありません。

* ネットワーク・スループットは、ファイル共有メカニズム(NFS、Samba、WebDAVなど)と同じぐらい良好です。


=== 完全モード

完全モードは、開発環境が次の図に示す環境に似ている場合に最適なモードです。

image::images/full_mode_diagram.png[]

この環境で完全リモート・モードを使用する利点は次のとおりです。

* X-window転送またはVNCの使用からの移行が事実上シームレスです。

* IDEレスポンス時間が向上します。

* 開発ホストのリソースへの依存度が軽減されます。

* 開発ホストの負荷が低いため、Oracle Solarisの負荷が軽減されます。

* リモート・バイナリ・ファイルから新規リモート・プロジェクトを作成できます。


== リモート開発モードの選択

使用するリモート開発モードは、リモート・ビルド・ホストの構成方法によって決まりますが、IDEでプロジェクトにアクセスする方法によっても決まります。

各モードについて、link:./remotedev-tutorial.html[+C/C++リモート開発のチュートリアル+]およびIDEヘルプの説明に従ってリモート・ビルド・ホストを最初に構成する必要があります。

「ホストのプロパティ」ダイアログ・ボックスを使用してIDEでリモート・ホストに単純モードまたは混合モードを選択して、ホストを使用する際にプロジェクト・ファイルにアクセスする方法を指定できます。

「サービス」ウィンドウを開き、「C/C++ビルド・ホスト」ノードを展開し、リモート・ホストを右クリックして「プロパティ」を選択します。

image::images/host_properties_dialog.png[]


=== 単純モード

単純モードでは、「次の方法でプロジェクト・ファイルにアクセス」を「自動コピー」に設定します。

プロジェクトを右クリックし、「ビルド・ホストを設定」を選択し、自動コピーを介してプロジェクト・ファイルにアクセスするように構成したリモート・ホストを選択できます。これで、単純リモート開発モードを使用することになります。プロジェクトをビルドすると、プロジェクト・ファイルがリモート・ホスト上のNetBeansユーザー・ディレクトリに自動的にコピーされます。


=== 混合モード

混合モードでは、「次の方法でプロジェクト・ファイルにアクセス」をシステム・レベル・ファイル共有に設定します。

プロジェクトを右クリックし、「ビルド・ホストを設定」を選択し、システム・レベル・ファイル共有を介してプロジェクト・ファイルにアクセスするように構成したリモート・ホストを選択できます。これで、混合リモート開発モードを使用することになります。プロジェクトをビルドすると、プロジェクト・ファイルはローカル・ホストとリモート・ビルド・ホストからアクセスできるため、同じ場所に残ります。


=== 完全リモート・モード

IDEで完全リモート・モードを使用するには、次の項で説明するリモート開発ツールバーを使用します。


== ツールバーを使用した完全リモート開発

完全リモート・モードでは、ローカル・ホストで実行されているIDEを使用して、リモート開発ツールバーを使用することによりリモート・ホストに存在するプロジェクトを操作できます。

次の図にツールバーを示します。

image::images/RemoteToolbar.gif[] 

IDEにツールバーが表示されない場合は、「表示」→「ツールバー」→「リモート」を選択して表示できます。

リモート・ツールバーを使用して、すでに構成したリモート・ホストを選択し、ローカルの場合と同じようにリモート・ホスト上のプロジェクトおよびファイルを操作できます。

次の表で説明するアイコンを使用します。

|===
|image::images/connected24.gif[]
 |

接続ステータス。アイコンをクリックして、アイコンの横のリストで選択したサーバーに接続します。すでに接続している場合は、このアイコンをクリックしてサーバーから切断できます。

アイコンは、接続されている場合に緑に、接続されていない場合に赤に変わることで接続ステータスを示します。

 

|image::images/newProject24.gif[]
 |

リモート・プロジェクトを作成します。アイコンをクリックして、現在接続しているホストに新規プロジェクトを作成します。

デフォルトでは、プロジェクトはリモート・ホストの`~/NetBeansProjects`ディレクトリに作成されます。

 

|image::images/openProject24.gif[]
 |

リモート・プロジェクトを開きます。アイコンをクリックして、現在接続しているホストの既存のプロジェクトを開きます。

リモート・ファイル・システムのプロジェクトを参照できます。

 

|image::images/openFile24.gif[]
 |

リモート・ファイルを開きます。アイコンをクリックして、現在接続しているホストのファイルを開きます。

リモート・ファイル・システムのファイルを参照できます。

 
|===


== キャッシュとセキュリティ

リモート・ファイルに高速にアクセスするために、IDEはローカル・システム上のディスク・キャッシュを使用します。キャッシュは`_userdir_/var/cache/remote-files`にあり、`_userdir_`はユーザーに固有で、その場所はIDEを実行しているプラットフォームにより異なります。

link:http://wiki.netbeans.org/FaqWhatIsUserdir[+http://wiki.netbeans.org/FaqWhatIsUserdir+]で、`_userdir_`の説明と各プラットフォームでの場所を参照してください。

単純および共有モードでリモート開発を使用している場合、システム・ヘッダーのみローカル・キャッシュを通じてアクセスされるため、セキュリティ・リスクがありません。

完全リモート・モードでは、ファイルはリモート・ホストにありますが、プロジェクトはローカル・コンピュータ上で解析されます。ソース・ファイルは解析のためにアクセスされるため、ローカル・ホストの`_userdir_/var/cache/remote-files`にキャッシュされ、最終的にすべてのソース・ファイルがキャッシュに入ります。

モバイル・コンピュータでは、これがセキュリティ・リスクとみなされることがあります。セキュリティ向上のために、キャッシュ・ディレクトリを暗号化するか、定期的に削除できます。

リモート・ホストの`~/.netbeans/remote`に存在するキャッシュは、単純モードを使用する場合に作成され、プロジェクトをビルドするとローカル・ホストからリモート・ホストにオンデマンドで自動的にコピーされます。これらのファイルは、サーバー上の他のファイルと同程度にセキュアであるため、セキュリティ上の懸念はありません。


== 詳細情報

詳細は次の場所を参照してください。

* IDEの「ヘルプ」メニューでは、IDEの使用に関する詳細情報にアクセスできます。

* link:./remotedev-tutorial.html[+C/C++リモート開発のチュートリアル+]は、単純なリモート開発の手順を示します。

* link:https://netbeans.org/kb/trails/cnd.html[+C/C++の学習+]は、IDEでのC/C++を使用した開発に関する複数の記事とチュートリアルを提供します。


link:/about/contact_form.html?to=3&subject=Feedback:%20C/C++%20Remote%20Development%20Modes%20-%20NetBeans%20IDE%20Article[+ご意見をお寄せください+]link:mailto:users@cnd.netbeans.org?subject=Feedback:%20C/C++%20Remote%20Development%20Modes%20-%20NetBeans%20IDE%20Article[+この記事に関するご意見をお寄せください+]


