質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2233閲覧

開発環境とのベストなソースコード共有方法

d2869508

総合スコア13

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/09 12:59

開発環境についてですが、
便利なソフトが多いためソースコードを編集したりは基本的に Windows で行っています。
実際にデプロイする先は Linux OS のため開発時も VM を利用して同バージョンの Linux 環境で実行するようにしています。

その際、編集したソースコードを VM の Linux と共有する必要があるのですがベストな方法は何があるでしょうか?
ありがちなケースかと思うのですが調べてもこれがベストと言えそうな方法が見当たりません。
いろいろ試したけどとりあえず妥協してこれ、とかそういうのが多いです。
個人開発の人の日記とかであっても高度なことを書いてる本職の人らしき人が紹介してるのは全然見当たりませんでした。
仕事で開発してる人たちにもありそうなことだと思うのですが、そうないケースなのでしょうか?

想定してる開発内容は、Node.js、PHP、Pythonなど Web 系のサービスを作ることです。

以下は自分が試したことや考えてることです。

  1. 共有ツールを使う

編集するのは Windows 側のみのため、 WinSCP 等を利用して Windows の編集を監視して Linux に反映させる。
簡単ではあるものの、毎回開発開始時に同期を開始する必要がある。
忘れててうまく反映されずエラー探して見つからなくて困った結果同期が始まってなかったということも何度か。
また、反映されるまでに少し遅延があるので編集後に保存ボタン押してすぐに確認してもまだソースが反映されてなくてもう一度リロードしないといけないときもある。

  1. Linux が Windows をマウント

マウントしてるので同期の開始とか不要ですぐに反映される。
しかし OS 管理のファイルシステムではないため不都合もある。
1つ目はシンボリックリンクが作れないこと。
例えば npm のインストールではシンボリックリンクが作れないとエラーになる。
シンボリックリンクを作成しないオプションもあるがシンボリックリンクがないと npm run で実行できないなど不便になる。
ネットワーク経由のマウントではなく、 VirtualBox を使ってマウントをする場合は、管理者権限が必要だがシンボリックリンクの作成を許可できる。
ただし、起動時に管理者として実行をしないといけない他VirtualBoxを使わないといけないという制限ができる。
2つ目はファイルの監視ができないこと。
フロントエンドのビルドツールはいろいろあるがいくつか試してもマウント環境の場合はエラーになり正常に自動更新できなかった。
フロントエンドならば Windows 側で監視してビルドした結果を Linux が参照ともできる。
だが、 Node.js での node-dev や pm2 を使って編集があればサーバサイドプログラムを再起動するということはどうしようもないと思う。

  1. Windows が Linux をマウント

まだ試していないが、 1. や 2. は使ってるという話は聞いたことはあるがこれは全然聞かない。
一見 2. の問題が解決しそうなのに使われていないのなら知らないだけで欠点があるのかと思う。
考えられるのだと、使い捨て感のある VM にコード本体を置いておくのが不安、もしくは VM が起動していないときにちょっとコードを確認したいということができないということ。
しかし、 git を使ってリモートに置いておけば VM が吹き飛んでも困らないし github 等のブラウザから確認できるものだと見るのにも困らない。
IDE によっては変更監視を行っていて 2. のようなことが Windows 側で起きるのだろうか。

  1. git pull

即変更を反映させるのではなく、コミットしてから push/pull で Linux で確認する。
コミットできる単位になるまでは確認しない。
そういうことしてる人がいたから候補に上げてみたが、コミット単位になる前に作業中にどんな感じに動くかこまめに確認したいのでこれは無理だと思う。
コミット後にバグあって直してまたコミットは無駄なコミットが増えるし。
Windows にも実行環境を用意した上で、普段は Windows で実行してコミット後に Linux でも同じように動くか確認というのならありかもしれないが二度手間感が否めない。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/09 14:34

「便利なソフトが多いためソースコードを編集したりは基本的に Windows で行っています。」 とありますが linux版がリリースされてない開発ツールってなんでしょう
d2869508

2018/09/09 15:58

エディタにしてもgitクライアントにしても、また直接開発に使うというわけではなくてもキーボードユーティリティなど作業の効率を上げる常駐ツールなどいろいろあると思います。「テキストを編集する」や「gitを操作する」などはLinuxのソフトでもできますが個人の好みや使いやすさで選ぶと個人的にはWindowsのツールのほうが良いことは多いです。「最初からLinuxで開発すれば良い」という意図での質問かと思いますが、多くの人は開発自体をLinuxでしているのでこういう問題が起きること自体がレアケースだということでしょうか
d2869508

2018/09/09 16:01

あまりサンプル数はないのであてにならないのかもしれませんが、自分の周りで職業プログラマな人では、コードを書いたりするのも Linux という人はかなり少なく、 vim が好きという人くらいです。ほとんどが Windows で、一部 Mac の人もいるくらいです。
m.ts10806

2018/09/10 04:03

タグは「バージョン管理」「SVN」「Git」などのほうが適切ではないでしょうか。他にもありそうなので、要件に合うタグをつけてください。https://teratail.com/tags
guest

回答2

0

git を使う一択だと思いますが。

別に無駄であろうがコミット増えても構わないんでは
Linuxで動作確認が取れればその旨コミットメッセージ入れるなりタグつけるなりすればわかるでしょう。
二度手間、というのはどういうことなのかよーわかりませんが、共有ストレージだとその二度手間は出ないんでしょうか。

#どうもそこらへんの理解/経験が足りないため、いらぬ懸念を抱いてるように思われます

投稿2018/09/09 13:37

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spookybird

2018/09/09 13:46

私もGitに1票。1票どころか100票でも。Gitの使い方をちゃんと知れば何も問題ないかなと。
d2869508

2018/09/09 13:57

ちょっと編集して動作確認したいというだけでコミットするということでしょうか 試してやっぱりうまくいかないからこうしてみよう、とあるたびにコミットするのでしょうか? ソースコードを変えて動かし直して見るなんて1時間に何十回とやると思うのですが、そういうのはWindows側でやった上でという前提でしょうか? 二度手間というのは Windows と Linux 両方で動かす環境を作らないといけなく、Windows で動いた後にLinuxでもう一度確認する必要があるということです なにかしらOS固有の問題で動かない場合は Linux 用に直す必要がでてきます そもそも Windows で動かさなければこれらの手間はありません これらの意味で二度手間と書いています
y_waiwai

2018/09/09 14:06

VirtualBoxを使うなら、そこで共有フォルダを設定すれば自由にゲストーホストのファイル共有はできるでしょ。 それで開発していって、節目でコミットする、というテで。 #ってそういうレベルの話だったのか
d2869508

2018/09/09 14:09

VirtualBox でホストのファイルをゲストへ共有する方法では 2. で書いたようなシンボリックリンクやファイルの変更監視で不便なので他の良い方法はないものか、という話です
退会済みユーザー

退会済みユーザー

2018/09/09 14:13

そんなに面倒なら デュアルブートでgnomeデスクトップなどguiコントロール可能なosをお使いください。
y_waiwai

2018/09/09 14:24

共有フォルダでもシンボリックリンクやら変更監視やら噛ませればいいのでは。 それでダメと言うならそれこそWindows/Linuxで別マシンを用意してもらうということにしかなりませんわな
d2869508

2018/09/09 15:51

なるほどわかりました。ありがとうございます。
guest

0

ベストアンサー

この辺Windowsで気の利いたベストプラクティスの話は聞きませんね。

WindowsにはWSLがありますので、
もうUbuntu入れてファイル操作が必要な箇所はLinux内に引きこもればよくね?みたいな発想なのでは…
VirtualBoxを使わなければならないという発想を捨てて、WSLでどうにかできないか検討してみてはどうですか?


私がWindowsで色々頑張っていたのは2014年頃で、
当時の記憶でいうとVagrant越しにVirtualBoxを起動してVirtualBoxに付属している共有フォルダ機能で同期するのが一般的でした。

しかしVirtualBoxの共有フォルダ機能ではパーミッションが変更出来ない、
Apacheのファイル変更通知が認識しないのでキャッシュがクリア出来ていない等の問題が発生し色々と調査することにしました。

  • rsync: Linuxで用意されているマシン間のファイル共有コマンド、Windowsには存在しないツールで、cygwin等を利用して無理やり入れる事も出来るが、Vagrant越しに使うとオプションが特殊だったりして死ぬほどハマって休日が何日も平気で飛んだのでボツ
  • Samba: WindowsのLAN内ファイル共有設定、LinuxではSambaという互換ソフトが開発されておりWindowsとファイル共有が簡単に行える、Vagrantではこれを利用してファイル共有を行うプラグインがある。Windows+Vagrantでは最も有力
  • VirutalBoxの共有フォルダを我慢して使う: どうせ開発環境なのでApacheの静的ファイルのキャッシュを切ればどうとでもなるし、パーミッションで死ぬような事もめったにないから目をつむる、ディスクアクセスの激しい作業はしないと割り切るし、ベンチも所詮VirtualBoxの中身だと参考値しか出ないのでやめる
  • NFS: MacOS版のSambaみたいなもの、いつの間にか共有が剥がれるので都度Vagrant再起動しなおしが面倒(かなり乱暴な解釈だが)

結果Windowsでは共有フォルダを我慢して使っており、
Macbookに移行してそれきりという感じです。
MacbookではrsyncやNFSを利用しており、知人のWindowsを見る時にSambaを使ってみましたが結構好感触でしたね。
Windows+VirtualBoxで使うなら、間にVagrantをかませてSambaと共有フォルダの二択でしょう。

私はその後どうしたのかというと、Docker for Macが正式リリースされたので、
VirtualBoxを捨てて乗り換えました。
WindowsにもDocker for Windowsや、WSLが来たので、多くのエンジニアはVagrant+VirtualBoxからそちらに移住したと思いますので一度その方向で調査してみてください。

投稿2018/09/10 05:22

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d2869508

2018/09/10 14:47

VirtualBoxの共有フォルダを利用したマウントとネットワーク経由でのマウントは試していて 2. の問題が起きています。 共有フォルダである以上一部の問題は諦めるしかない部分なのですね。 Docker は使っていないのですが、以前使ってる人に聞いたら結局はVirtualBoxとかHyperVとか仮想化するツールに依存するのでそれの共有機能使うことになるから同じと言われた覚えがあります。 WSL は考えたのですが、本番が CentOS で、同じディストリビューションがないのでデメリットも多いかと思っています。 単純なファイル提供やスクリプトを動かすだけのサーバ機能であればディストリビューションはそう気にすることでもないのですが、OS・ディストリビューションに依存するようなところを扱うこともあり、そういうところほどコードを編集しながら何度も動かいて試したいわけで・・・。 ひとまず、ファイル共有できてファイル監視なども問題なく動くような完璧な方法が当たり前にあって自分が知らないだけではないということがわかったので良しとします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問