// 
//     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.
//

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

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

このドキュメントでは、C/C++/FortranプロジェクトにおけるNetBeans IDEのリモート開発機能の使用方法を示します。

== 要件

*このチュートリアルに従うには、次のソフトウェアが必要です。*

|===
|ソフトウェア |必須バージョン 

|NetBeans IDE (C/C++のサポートを含む) |link:https://netbeans.org/downloads/index.html[+バージョン7.3、7.4または8.0とNetBeans C/C++プラグイン+] 

|Java Development Kit (JDK) |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+バージョン7または8+] 
|===


必要なソフトウェアのダウンロードとインストールについては、link:../../../community/releases/80/install.html[+NetBeans IDEのインストール手順+]およびlink:../../../community/releases/80/cpp-setup-instructions.html[+C/C++/Fortran向けのNetBeans IDEの構成+]を参照してください。


== 概要

このチュートリアルでは、C/C++プロジェクトのリモート開発の使用方法を示します。

Windows 7やMac OS Xが実行されているラップトップでSolarisまたはLinuxアプリケーションを開発する必要がありますか。IDEから離れずにアプリケーションを異なるオペレーティング・システム上でテストする必要はありますか。あるいは大規模アプリケーションをコンパイルするため、通常使用しているワークステーションよりも速いマルチコア・サーバーを使用する必要がありますか。NetBeans IDEには、これらすべてのニーズに答えるリモート開発機能があります。


== リモート開発の概念

リモート開発を行う場合は、クライアント・システム上でNetBeans IDEを実行すると、ローカル・プロジェクトで行うのと同じように、プロジェクトの作成、ファイルの編集およびコード支援機能を使用できます。ただし、プロジェクトをビルド、実行またはデバッグするとき、それらのプロセスはリモートのSolarisまたはLinuxサーバー上で実行され、入出力がクライアント・システムに転送されます。リモート・ビルド・ホストを一度設定すれば、ローカル開発とリモート開発でのワークフローに違いを感じないというのが理想的です。

IDEは、link:./remote-modes.html[+C/C++リモート開発モード+]で説明されている様々なモードのリモート開発をサポートします。リモート・ホストで開発を行う方法を決定できます。


=== リモート開発の要件

ツールの実行にリモート・ホストを使用できるようにするため、次の条件を満たす必要があります。

* IDEがインストールされているローカル・クライアント・システムで、Windows、Mac OS、Oracle Solaris 10、Oracle Solaris 11またはLinuxが実行されている必要があります。
* リモート・ホストでOracle Solaris 10、Oracle Solaris 11またはLinuxが実行されている必要があります。
* 共有リソースを使用するか、Secure Shellプロトコル(SSH)を使用するかのどちらかの方法で、ローカル・クライアント・システムとリモート・システムからプロジェクト・ファイルにアクセスできる必要があります。
* プロジェクト・ファイルが共有フォルダにある場合でも、クライアントはSecure Shell (SSH)でリモート・システムに接続できる必要があります。
* リモート・システムは、サポートされているツール・コレクションにアクセスできる必要があります。
* プロジェクトでコード支援を有効にするために必要なサポート・システム・ライブラリが、リモート・システムにある必要があります。


=== ソースの共有

クライアント・システムとリモート・サーバーの両方から、ソース・ファイルが認識できる必要があります。ソース・ファイルは、共有ネットワーク・パスに配置することも、IDEによって、ローカル・システムからリモート・システムにセキュアにコピーすることもできます。異なるシステム上で共有フォルダを設定する方法の詳細は、<<system,システムの設定>>を参照してください。


=== 接続

クライアントとサーバー間のすべてのデータ転送は、SSH (Secure Shell)プロトコルを介して行われます。SSHとは、ネットワーク接続された2つのデバイス間で、セキュア通信を行うための共通プロトコルです。サーバーにはSSHサーバーがインストールされ、クライアント・システムとサーバー間のSSH通信が許可される必要があります。


=== ツール・コレクション

IDEは、GNUコンパイラ・コレクション、Sun StudioまたはOracle Solaris Studioの、リモート・ホスト上でサポートされているツール・コレクションを見つけることができる必要があります。ツールの実行可能ファイルは、IDEが簡単にツールを見つけることができるように、リモート・ホスト接続に使用するユーザー・アカウントのパスに置くようにしてください。これは特に、ツールがデフォルト以外の場所にインストールされている場合に当てはまります。


=== コード支援

コード補完や意味解釈の強調表示、「クラス」ウィンドウなどのエディタ機能が正常に動作するには、プロジェクトを正しい環境(システム・インクルード、マクロ定義、プラットフォームなど)で使用する必要があります。この情報はすべてリモート・サーバーから収集されてクライアント・システムにローカルに保存されるため、プロジェクトがリモート・ビルド・ホストを使用するように設定されている場合でも、ローカルで編集するときにコード支援が機能します。


== システムの設定

リモートのLinuxまたはSolarisサーバーで、IDEを実行しているクライアントからのSSHプロトコルを介した通信が許可されている必要があります。IDEがリモート・サーバーにファイルをコピーできるようにするかわりにファイル共有を使用する場合、ファイル共有が両方のシステムのネットワーク内で設定されている必要があります。


=== SSHプロトコル

SSHサーバーは通常LinuxおよびSolarisオペレーティング・システムに組み込まれており、ほとんどの場合、デフォルトで実行されます。そうでない場合は、link:http://en.wikipedia.org/wiki/Secure_Shell[+http://en.wikipedia.org/wiki/Secure_Shell+]でSSHのインストールおよび管理についての情報を参照できます。

IDEは自身のSSHクライアントを提供するため、SSHクライアントをローカル・マシンにインストールする必要はありません。

SSH接続はクライアント・システムとサーバー・システムの両方で許可されている必要があります。これは通常、両方のサーバーでポート22が開かれている必要があることを意味します。ポート22が無効になっている場合、rootアクセス権またはシステム管理者のヘルプが必要です。

「自動コピー」オプションまたはSFTPオプションを使用してプロジェクト・ファイルをリモート・サーバーへ転送していない場合でも、SSHはシステム間で有効になっている必要があります。


=== ソースの共有

他の用途のために、WindowsシステムとUNIXリモート・ホスト間のファイル共有をまだ設定していない場合、小規模から中規模のプロジェクトではファイル共有のかわりに自動コピーまたはSFTPを使用する方がより簡潔です。何千ものファイルがビルドに関与する大規模なプロジェクトで作業している場合は、コピーは長時間を費やすため、共有する方が効率的です。

WindowsからUNIX®への構成の場合、ソースを共有するための主な方法として次の2種類があります。

* UNIXシステム上でSambaサーバーを使用
* Windowsシステム上にインストールされたWindows Services for UNIX (SFU)パッケージを使用


==== SambaまたはSMBを使用したソースの編成

Sambaサーバー(SMBのオープン・ソース・バージョン)を使用すると、Windowsユーザーは共有NFSフォルダをWindowsネットワーク・ドライブとしてマップできます。Sambaパッケージ、あるいは同等のSMBまたはCIFSは、LinuxおよびSolarisオペレーティング・システムのほとんどのディストリビューションに含まれています。Sambaがディストリビューションに含まれていない場合、link:http://www.samba.org/[+www.samba.org+]からダウンロードできます。

サーバーへの優先アクセス権がある場合、次のリンクの手順に従ってSambaを設定できます。そうでない場合、システム管理者に連絡する必要があります。

* Oracle Solaris 11: link:https://blogs.oracle.com/paulie/entry/cifs_sharing_on_solaris_11[+https://blogs.oracle.com/paulie/entry/cifs_sharing_on_solaris_11+] (一般情報)。詳細情報については、link:http://docs.oracle.com/cd/E26502_01/html/E29004/smboverview.html[+Managing SMB File Sharing and Windows Interoperability in Oracle Solaris 11.1+]を参照してください。
* Oracle Solaris 10: link:http://blogs.oracle.com/timthomas/entry/enabling_and_configuring_samba_as[+http://blogs.oracle.com/timthomas/entry/enabling_and_configuring_samba_as+]
* Linux: link:http://www.linux.com/articles/58593[+http://www.linux.com/articles/58593+]

Sambaの開始後は、Windowsのフォルダと同じようにUNIXサーバーのフォルダをマップできます。


==== Windows Services For UNIX (SFU)

もう1つのオプションは、Microsoftが提供する一連のユーティリティのWindows Services For UNIXです。これを使用すると、WindowsからNFSファイル・システムにアクセスできます。
これらはlink:http://www.microsoft.com/downloads/details.aspx?FamilyID=896c9688-601b-44f1-81a4-02878ff11778&displaylang=en[+Microsoftダウンロード・センター+]からダウンロードできます。link:http://technet.microsoft.com/en-us/library/bb496506.aspx[+Unix向けWindowsサービスのページ+]でドキュメントを読むこともできます。

Windows VistaまたはWindows 7ユーザーは、SFUパッケージを使用できません。Windows VistaおよびWindows 7 Enterprise EditionおよびUltimate EditionにはServices for Unixコンポーネントが組み込まれており、Subsystem for UNIX-based applications (SUA)およびClient for NFS v3に名前変更されています。詳細は、link:http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX#Subsystem_for_UNIX-based_Applications_.28SUA.29[+http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX+]を参照してください。


==== Mac OS Xの構成

Mac OS Xは、Sambaサーバーへの接続をサポートしています。また、Mac OS XはサーバーからNFS共有をマウントすることもできます。

「Finder」>「移動」>「サーバーへ接続」を使用して、サーバー・アドレスを入力できます。

SMB/CIFS (Windows)サーバーおよび共有フォルダに接続するには、次のいずれかの形式でサーバー・アドレスを入力します。

[source,bash]
----
`smb://_DNSname/sharename_
smb://_IPaddress/sharename_`
----

共有フォルダのユーザー名およびパスワードの入力が要求されます。詳細は、Appleナレッジ・ベースのlink:http://support.apple.com/kb/ht1568[+Windowsファイル共有(SMB)への接続方法+]を参照してください。

NFSサーバーに接続するには、次のいずれかの形式でサーバー名およびNFS共有フォルダのパスを入力します。

[source,bash]
----
`nfs://_servername/path/to/share/_
nfs://_IPaddress/path/to/share_`
----

詳細は、Appleナレッジ・ベースのlink:http://support.apple.com/kb/TA22243[+Finderを使用してNFSエクスポートをマウントする+]を参照してください。

ユーザー名およびパスワードは要求されませんが、Mac UIDを確認して認証が行われます。UIDは、UNIX系のオペレーティング・システム(Mac OS X、Solaris、Linuxなど)でユーザー名に割り当てられる一意の整数です。NFSを使用するには、Mac UIDがサーバーのアカウントのUIDと同じである必要があります。


==== UNIX - UNIXの構成

SolarisまたはLinuxシステム間のファイル共有では、特別な設定は必要はありません。システムの1つでフォルダを共有するか、または、homeディレクトリがネットワーク・ファイル・サーバー上でマウントされており、両方のシステムからアクセスできる場合は、このディレクトリを使用できます。


=== パス・マッピング

共有ソース・モデルを使用する場合、ローカル・ホスト上のソースの場所を、そのソースにアクセスするリモート・ホストで使用されるパスにマップする必要があります。

たとえば、次のような構成について考えます。

* Solarisサーバー ``solserver`` に共有フォルダ ``/export/pub`` がある
* SFUがインストールされたWindows XPを実行するワークステーションで、パス ``\\solserver\export\pub`` がドライブ ``P:`` にマウントされている
* プロジェクト・ソース・ファイルは ``solserver`` のフォルダ ``/export/pub/myproject`` にある

この場合、サーバーから見て、ソース・ファイルは ``/export/pub/myproject`` にあります。しかし、クライアントから見ると、ソース・ファイルは ``P:\myproject`` にあります。IDEで次のパスがマップされていることが認識されるようにする必要があります。
 ``/export/pub -> P:\`` 

パス・マッピングを設定するため、ビルド・ホストのプロパティを編集できます。

NetBeans IDEでリモート・ホストを構成する前にソース・ファイルの共有リソースを設定すると、ほとんどの場合に必要なパス・マッピングが自動的に検出されます。


== IDEの設定

次の例では、クライアント・ホストはWindows Vistaが実行されているワークステーションです。 ``edgard`` という名前のリモート・ホストは、Oracle Solarisオペレーティング・システムが実行されているサーバーです。

1. 「ウィンドウ」>「サービス」と選択して、「サービス」ウィンドウを開きます。
2. 「C/C++ビルド・ホスト」ノードを右クリックして、「新規ホストの追加」を選択します。
image::images/remotedev-add-host.png[]「新規リモート・ホストのセットアップ」ダイアログ・ボックスで、IDEがローカル・ネットワークのホストを検出します。ホスト名はこのダイアログ・ボックスの表に追加され、緑色のインジケータはSSHサーバーを実行しているかどうかを示します。

[start=3]
. 使用するサーバー名をダブルクリックするか、「ホスト名」フィールドにサーバー名を直接入力します。「次」をクリックします。
image::images/remotedev-setup-host.png[]

[start=4]
. 「ホストのセットアップ」画面に、リモート・ホストへのログインに使用するユーザー名を入力し、認証方法を選択します。このチュートリアルでは、「パスワード」を選択して「次」をクリックします。image::images/remotedev-setup-host-auth.png[]

SSHキーを使用する場合は、まずIDEの外部で設定されている必要があります。そうするとIDEでSSHキーの場所を指定できるようになり、IDEがそのキーを使用してリモート・ビルド・ホストへのSSH接続を行えるようになります。


[start=5]
. サーバーに接続されたら、「認証」ダイアログ・ボックスにパスワードを入力します。

[start=6]
. オプションで「パスワードの記憶」をクリックすると、IDEによってパスワードが暗号化されてローカル・ディスクに保存され、IDEがリモート・ホストに接続するたびにパスワードを入力する必要がなくなります。

IDEによってリモート・ホストが構成され、リモート・ホスト上のツール・コレクションが検索されます。


[start=7]
. ホストが正常に構成された場合、サマリー・ページに、プラットフォーム、ホスト名、ログインに使用されるユーザー名、および見つかったツール・コレクションなどのリモート・ホストに関する情報が示されます。
image::images/remotedev-setup-host-summary.png[]

[start=8]
. サマリー・ページの最下部に、2つのオプションが表示されます。複数のツール・コレクションが見つかった場合、それらのコレクションのうちの1つを「デフォルト・ツール・コレクション」として選択できます。

[start=9]
. 次のオプションによるプロジェクト・ファイルへのアクセスの場合:
* クライアント・システムとリモート・ビルド・ホストにプロジェクト・ファイルへの共有アクセスがない場合は、「自動コピー」を選択します。「自動コピー」を選択した場合、プロジェクト・ファイルは、sftpコマンドを使用して、サーバー上の自分のホーム・ディレクトリにコピーされます。これは、単純リモート開発と呼ばれます。
* クライアントとサーバーに、同一のフォルダへのアクセス権がある場合、システム・レベル・ファイル共有を選択します。これは、共有または混合リモート開発と呼ばれます。
* Secure File Transfer Protocolを使用してプロジェクト・ファイルをリモート・ホストにコピーするには、SFTP (NetBeans 7.4および8.0のみ)を選択します。自動コピーと同じです。

[start=10]
. 「終了」をクリックしてウィザードを完了します。

[start=11]
. 「サービス」ウィンドウで、「C/C++ビルド・ホスト」ノードの下に新しいリモート・ホストが表示されています。新しいホストのノードを展開すると、「ツール・コレクション」の一覧に1つまたは複数のツール・コレクションが表示されます。
image::images/remotedev-remote-toolchain.png[]


=== ツール・コレクションが表示されない場合

リモート・ホスト・ノードの下にツール・コレクションが表示されない場合は、次のタスクを試行してください。

* リモート・ホストで、ホストのユーザー・パスにツール・コレクションのbinディレクトリを追加します。リモート・ホストで使用できるツール・コレクションがない場合は、GNUコンパイラ・コレクション、Sun StudioソフトウェアまたはOracle Solaris Studioソフトウェアをリモート・ホストにインストールする必要があります。
* ツールの実行可能ファイルのパスがリモート・ホストのユーザー・パスに設定されたら、ローカル・システムでツール・コレクションの再設定を試行できます。「サービス」ウィンドウでホストを右クリックして「デフォルトのツール・コレクションを復元」を選択すると、IDEによってリモート・ホストのツール・コレクションが再度検索されます。
* または、「サービス」ウィンドウでホストを右クリックして「ツール・コレクションの追加」を選択し、リモート・ホストのツール・コレクションのパスを指定または参照します。

ツール・コレクションが表示されたら、新しいリモート・ビルド・ホストの作成は完了です。

次の項では、単純リモート開発を試行できます。


== リモート・ホストでのローカル・プロジェクトのビルド

1. 「ファイル」>「新規プロジェクト」を選択して新しいサンプル・プロジェクトを作成します。
2. 「サンプル」>「C/C++」と展開して、「ようこそ」を選択します。「次」をクリックします。

この例では共有フォルダを使用しないため、提案されているプロジェクトの場所(共有されていないWindowsユーザー・ディレクトリのNetBeansProjectsフォルダ)を保持できます。

共有ソース・ファイルを使用する場合、「プロジェクトの場所」として、リモート・サーバーで共有されているパスを指定していることを確認してください。


[start=3]
. 「ビルド・ホスト」に、新しいリモート・ホストを選択します。「ツール・コレクション」の一覧が更新され、リモート・ホストで使用できるツールが表示されます。
image::images/remotedev-new-project.png[]

[start=4]
. 「終了」をクリックしてプロジェクトを作成します。 

「プロジェクト」ウィンドウでWelcome_1プロジェクトが開かれます。


[start=5]
. 「プロジェクト」ウィンドウでプロジェクト名の上にカーソルを置くと、プロジェクトの場所と、プロジェクトがビルドされるように構成されたリモート・ホストがツールチップに表示されます。

[start=6]
. ツールバーで「ビルド」ボタンをクリックするかWelcome_1プロジェクト・ノードを右クリックして、「ビルド」を選択します。サンプル・プロジェクトが、選択したビルド・ホストでリモートでビルドされます。

[start=7]
. ソース・ファイルの ``welcome.cc`` を開きます。

次のスクリーンショットでは、表示する ``argc`` シンボルの上にカーソルを置いて[Ctrl]+[Space]キーを押したときに、コード支援サポートが機能することを確認できます。

「出力」ウィンドウに、アプリケーションのビルド元のホスト名と、リモート・コンパイラおよびmakeユーティリティがビルドに使用されたことが表示されます。プロジェクト・ファイルは、リモート・ホスト上のユーザーの ``.netbeans/remote/`` ディレクトリにあります。

image::images/remotedev-built-small.png[]

リモート・ホストを設定した後は、ワークフローにほとんど違いはありません。ビルド、実行、テスト、デバッグなど、ローカルで実行するすべての編集機能を使用できます。


== リモート・ホストでのターミナル・セッションの開始

Secure Shellターミナル・セッションをIDEから開始して、リモート・システムまたはローカル・システムに接続できます。この機能は、ネイティブでSSHをサポートしないWindowsプラットフォームの場合に特に便利です。

1. 「出力」ウィンドウの左マージンでターミナル・アイコンをクリックします。
image::images/remotedev-terminal-icon.png[]

IDEでは、ローカルまたはリモートのどちらの場合でも、現行プロジェクトの作業ディレクトリで「ターミナル」タブが開かれます。プロジェクトがリモート・ビルド・ホストを使用中で、IDEから接続済の場合は、再度ログインする必要はありません。

image::images/remotedev-terminal.png[]

IDEの内蔵ターミナルは、通常のSSHセッションでリモート・ホストに行うどのような作業にも使用できます。

「ターミナル」タブの左マージンのアイコンを使用して、もしくは「ウィンドウ」>「出力」>「ターミナル」のメニュー・オプションを使用して、新規のローカルまたはリモートのターミナル・セッションを作成できます。


== リモート開発のヒント

* プロジェクト・ノードを右クリックして「ビルド・ホストを設定」を選択すると、プロジェクトのビルド・ホストを切り替えられます。
image::images/remotedev-set-remote-host-menu.png[]
* 「サービス」ウィンドウでホストを右クリックして「プロパティ」を選択すると、初期設定後にリモート・ビルド・ホストのプロパティを変更できます。
* リモート・ホストを使用してグラフィカルUIを持つアプリケーションをビルドおよび実行している場合、ホスト・プロパティの「X11の転送を有効化」を選択すると、リモート・ホストでの実行中にUIがローカル・システムで表示できるようになります。
* プロジェクトのビルドによってリモートでライブラリがコンパイルされる場合や、メインのビルド結果以外のその他のファイルが生成される場合、IDEはファイルをローカル・システムにダウンロードすることを確認します。変更されたファイルのうちどれをダウンロードするかを選択できます。
* プロジェクトおよびツールがリモート・ホスト上にある場合は、完全リモート・モードでプロジェクトの作業ができます。詳細は、IDEの一体型ヘルプかlink:./remote-modes.html[+C/C++リモート開発モード+]の記事を参照してください。
* 「サービス」ウィンドウのみでなく、IDEの「ツール」メニューからでもリモートのホストおよびツールの情報にアクセスできます。「ツール」>「オプション」>「C/C++」>「ビルド・ツール」と選択してから、「ビルド・ホスト」リストの横にある「編集」ボタンをクリックします。
* プロジェクト・ファイルのファイル共有を使用する場合、パス・マッピング機能を使用してローカルおよびリモートのパスを共有フォルダにマッピングできます。次のいずれかを実行して、マッピングを設定できます。
* 「サービス」ウィンドウで、「C/C++ビルド・ホスト」を開き、ホスト名を右クリックして「パス・マッパー」を選択します。
* IDEの「ツール」メニューから「オプション」>「C/C++」>「ビルド・ツール」と選択し、「編集」ボタンをクリックして、リモート・ホストを選択してから「パス・マッピング」ボタンをクリックします。


== 詳細情報

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

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

* link:./remote-modes.html[+C/C++リモート開発モードの記事+]では、リモート開発の様々な使用方法を説明します。

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

link:mailto:users@cnd.netbeans.org?subject=Feedback:%20C/C++%20Remote%20Development%20-%20NetBeans%20IDE%208.0%20Tutorial[+このチュートリアルに関するご意見をお寄せください+]


