開発合宿や、ちょっとカフェで開発、みたいなことをすると、どうしても「ノートパソコン」に開発環境をいれないといけません。
でも、やっぱり「デスクトップ環境」で広い画面をたっぷり使いながら開発したいんですよね・・・
で、この2日間くらい、何故かすごく悩みながらいろいろやってみました。結果はこの通り。

結論は単純なんですが、意外に苦労したのでメモとして残しておきます。
絵を描いて説明・・・、とか思ったんですが、もう疲れ果てたのでテキストオンリーで。
砂を噛むように味気ない文章なんですが、よろしければ参考までにどうぞ。
■やりたいこと
外ではノートで、会社では デスクトップPC で「シームレス」に開発したい!
■基本ルール
それ Mac 使えばできるよ・・・というのは無し。Let's Note 最強。
■ベースとなる開発環境
ノートパソコンに vmware player + CentOS をいれて、ノートパソコン単体では開発できるようにしてある。
つまり、ノートパソコンが開発用サーバー。
■会社にあるPC
Mac mini も含めて、4台全部使って開発したい。検証も楽々。
■とにかく
・どこのネットワークにつないでもすぐ開発できる。
・ネットワーク上のどの PC のブラウザからでも開発中の画面が確認できる。
・ネットワーク上のどの PC からでも開発中のコードを参照・編集できる。
・公衆無線LANなどではセキュリティにも配慮したい
■ということで、要は
A. 開発環境の Web サーバーに外部からアクセスできるようにする
B. 開発環境のファイルシステムを外部から参照・編集できるようにする
ということだけなんですよね。
■VMWare の NAT 環境で実現してみよう!
安全だし手軽ですからね。ゲストOSをNAT環境で運営する方法。で、これは嵌りまくって断念。
特に B. の「ファイルシステム」ですね。
開発環境の CentOS には Samba を入れてあるのですが、これを生かす場合は NAT の「ポート転送」を設定しないといけない。
137~139番ポートの転送は簡単なのですが、445番ポートの転送が非常に厳しい。
Windows では DHCP クライアントを落としたくないので、別途 IP アドレスを確保して云々・・・
参考:仙石浩明の日記: Windows「ファイルとフォルダの共有」をリモートな Windows VISTA マシンからアクセスする方法 (1)
で、もう一つ思いついたのが、ゲストOSでNFSサーバーを動かして外部からmountする方法。
Windows からの mount は Windows Services for UNIX などを使うことで簡単に実現できます。
問題はまたしてもポート転送。Windows が 111 番の portmapper を握っているので、結局 NAT の中にいるゲストOSのNFSサーバーを外部から mount するのは難しい、と。
その他、ssh でトンネル掘ってファイルを共有、とか考えたのですが、そこまでする必要はないだろう、と。。
そんなわけで、残る選択肢は「ブリッジ接続」になります。
■ブリッジ接続で環境構築してみよう!
ブリッジ接続を使う場合、ゲストOS は DHCP で IPアドレスを取得するようにしたいので、ゲストOS の IPアドレスが何になるかわからない、という問題があります。
これを Samba と hosts ファイルと apache プロクシで解決します。
順を追って説明しますね。
■ブリッジ接続:ゲストOSのネットワークは DHCP にする
どんな環境でも動作するように、ホストOSはもちろん、ゲストOSもDHCPが基本になると思います。
これは /etc/sysconfig/network-scripts/ifcfg-eth0 に
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
のように記述すればいいだけですね。
この段階で、vmware 上のゲストOSはブリッジ接続でもNAT 環境でも動作するようになります。
セキュリティの設定に悩むより、公衆無線LAN環境などでは、さくっとNATに切り替えて運用するのがいいでしょう。
※vmware のメニューから NAT に変更し、ゲストOSで /etc/rc.d/init.d/network restart とすれば切り替え完了です。
■ブリッジ接続:ゲストOS のWebサーバーにアクセスできるドメイン名を割り当てる
DHCP でブリッジ接続を行ったら、ファイルエクスプローラーなどで「\\(ゲストOSのホスト名)」で、ネットワーク上のどの*Windows*PCからでも共有ファイルが閲覧できる状態になっていると思います。
※閲覧できない場合は Samba の設定がまずい可能性が高いです。
さて、ここで、開発をしている人なら、例えば「trackfeed.local」など、テスト用のドメイン名を使ってゲストOSのWebサーバーにアクセスしたいと思うはず。。
すると、trackfeed.local という仮想ドメイン名を ゲストOS の(動的に割り当てられた) IPアドレスに変換する必要があります。
そこで、ホストOS のhosts ファイルを利用します。
ゲストOSのホスト名が guest だとすると、ノートパソコンの C:\Windows\system32drivers\etc\hosts に以下のように追加します。
guest trackfeed.local
guest feedmeter.local
...
ポイントは「IP アドレスで指定しない」点です。
※2008/5/12 訂正 : IPアドレスでないと駄目なようです。すいません、間違いでした。たまたまDNSサーバーに登録していたのでうまく動作していたようです。申し訳ありません。...
これにより、このホスト OS に聞けば、「trackfeed.local」というドメイン名の名前解決が行えるようになります。
■ブリッジ接続:テスト環境のURLにどのマシンからでもアクセスできるようにする
上記のhostsファイルへの追記をすべてのパソコンで実施・・・なんてやりたくないです。
ということで、ホストOS (Windows) に proxy サーバーを立てます。
apache サーバーを入れて ポート 8080 などで運用してみます。
httpd.conf をちょっと書き換えます。
Port 8080
LoadModule proxy_module modules/mod_proxy.so
AddModule mod_proxy.c
<IfModule mod_proxy.c>
ProxyRequests On
<Directory proxy:*>
Order deny,allow
allow from all
</Directory>
CacheSize 0
</IfModule>
こんな感じですかね。
そして、プロクシ設定用の .pac ファイルを用意します。
function FindProxyForURL(url, host) {
if ( dnsDomainIs(host, ".local" ) )
return "PROXY your-note-pc-name:8080";
else
return "DIRECT";
}
ドメイン名が「.local」の場合は、your-note-pc-name の 8080 番をプロクシとして使う、という設定ですね。
これを適当なファイル名で Web からアクセスできる場所に保存します。
そして、IE, Firefox, Safari などのプロクシ設定で、この .pac ファイルを使うように指定します。
すると、それらのブラウザから「trackfeed.local」などにアクセスできるようになります。
.pac ファイルを使うとその場で名前解決は行われず、pacファイルのルールに従ってノートパソコンのホストOSにアクセスし、そこでプロクシが動作し、そのプロクシは hosts ファイルによりゲストOSのIPアドレスを特定し、ゲストOSのWebサーバーにアクセスできるようになる、という仕組みですね。
IP が動的に変更されても、NAT・ブリッジ環境問わず大丈夫!
なお、上記 .pac ファイルの「your-note-pc-name」はノートパソコンのホストOSの名前ですので、mac の場合は IP アドレスを指定する必要があるかと思います。
あと、Windows ファイアウォールでホストOSのポート 8080 番を空けておくのをお忘れなく。
■あとは Synergy でもいれて
あとは Synergy でもいれておけば、マウスとキーボード一つですべてのパソコンから操作できます。
開発マシンから、ゲストOSのファイルシステムをファイル共有しておけば、さくさく開発できて、その場でブラウザから検証も可能になります。
ふとカフェに行きたくなったり、明日から開発合宿に、という場合でもノートパソコンだけ持ち歩けば「画面が小さくなった」くらいの制約しかありません。
再び会社に戻ってきたら、会社のネットワークにつないで、今度はデスクトップでそのまま開発続行、と。
ということで、まぁ、ブリッジ接続すばらしー、というだけの結論なのですが、最近主流のノートパソコン開発といえど、やっぱりデスクトップや大画面で開発したい人も多いはず、、で、参考までにメモとして。。。
#もはやここまでして Windows 使う必要があるのか・・・Mac でいいんじゃないかw
#途中から相当疲れてきたので、メモとしても雑な内容ですいません・・・
サイボウズ在籍中に、通常のHTMLで構築されたウェブサイトのRSS化を実現するサービス「MyRSS.jp」を始めた赤松洋介氏。最初は、サイトの更新情報を自ら確認するのが面倒だという理由で、自分のために趣味で立ち上げたサービスだった。このサービスを一般公開したのが2004年1月で、その後赤松氏は2005年7月末にサイボウズを退社、8月1日にはMyRSS.jpをはじめとするRSS関連のサービスを提供する企業としてサイドフィードを設立した。
2008年05月09日 15時55分
2008年04月28日 18時10分
2008年04月24日 15時57分
2008年04月15日 17時46分
2008年04月11日 19時05分
2008年03月22日 00時02分
2008年03月03日 18時49分
2008年02月27日 21時17分
2008年02月20日 21時22分
2008年02月13日 12時00分
記事・企業検索