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

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

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

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

5657閲覧

開発、本番環境のバージョン管理について

akaryu0206

総合スコア28

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

3グッド

7クリップ

投稿2016/12/19 04:32

###悩んでいること
Webアプリケーション開発でのフロントエンド、バックエンド、インフラのバージョン管理について、
どのようにリポジトリを分けるのがいいのか。

###質問内容
現状、フロントエンド、バックエンドがそれぞれ独立したリポジトリで各リポジトリにVagrant、Ansibleを利用したローカルの開発環境を含めています。

今後本番環境を構築する際に今のリポジトリ構成のまま、各リポジトリに本番環境構築用のAnsibleのplaybookを作って管理するのがいいのか、
環境構築用のリポジトリを1つ新しく作って、VagrantやAnsibleなどの環境構築に関わるファイルはそこにまとめるのか、
どちらがいいでしょうか?

フロントエンド、バックエンドのそれぞれに環境構築ファイルを含めると、クローンしてきてvagrant upするだけでローカルの開発環境が構築されるのであまり知識がない人にとっては比較的使いやすいかな、と思います。
ですが、環境構築に関わるファイルがリポジトリ間で分断されるので、インフラに関わる改修をする時はコミットがばらけたりして管理が煩雑になりそうです。

環境構築用のリポジトリを作った場合は環境構築に関わるコミットはひとつのリポジトリでまとめられるので管理はしやすいですが、
まず環境構築用のリポジトリをクローンしてきて、そのリポジトリ内のWebサーバのドキュメントルートとして扱われる共有フォルダにフロントエンド、バックエンドのリポジトリをsubmoduleなどで引っ張ってくる必要があるため、Gitに対してあまり知識がない人(デザイナーさんなど)には敷居が高いかな、と思いました。

私自身、一人や少人数で開発してきた経験しかなく、こういったところの効率的な管理方法を見極めれていない状態です。
これに関しては個人や職場の環境などで様々な方針があるため、明確な答えは出ないとは思いますが、皆様がどのように管理しているかなどをご教授頂ければ幸いです。

文字だらけの質問で恐縮ですが、よろしくお願いします。

zico_teratail, miyabi-sun, KiyoshiMotoki👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

Ansibleのplaybookファイルそのものは仕様書としても機能するのでプロジェクトに内包されている方が美しいでしょう。

環境構築用のリポジトリを1つ新しく作って

これはありだと思います。
しかし、上記の理由からPlaybookの全てをそちらのリポジトリへ運ぶべきではないでしょう。

フロント、バック両方のPlaybookは、依存しているモジュールのみを入れるシンプルなものだけ残しておき、
環境構築用のリポジトリには両方のマシンを同居させる場合の解決部分を記述した後、それぞれのPlaybookをインクルードしてくる設計にすると良さそうです。

環境構築用のリポジトリはこんな感じのフォルダが一例として考えられます。

Bash

1$ find . -type d 2./machines 3./machines/front-only # この中にVagrantfileが一つはいっている 4./machines/back-only # この中にVagrantfileが一つはいっている 5./machines/both # この中にVagrantfileが一つはいっている 6./provision # この中にPlaybook等が詰まっている

「運用時には全てのリポジトリは同階層に存在しているべし」のような運用ルールを設ける必要はありそうです。
Vagrantfileの3階層上にはフロントとバックのリポジトリがあると保証出来るのであれば
それぞれVagrantのsynced_folder機能で仮想マシン内とリンクした上で、プロビジョン時にそれぞれのPlaybookをインストールしてきて解決することが可能です。


別方面からの解決策として、
Vagrant+AnsibleではなくDockerに移行することが考えられます。

これで各々のプロジェクトに入っているPlaybook君達はお役御免になりプロジェクト内がスッキリします。
(その代わりにDockerfileがプロジェクト内に居座るわけですが…)

外部の環境構築用のマシンもAnsibleでDockerとdocker-composeファイルを入れればOKという風になり、
Vagrantfileも1個になり非常にスッキリするでしょう。

投稿2016/12/19 06:22

miyabi-sun

総合スコア21158

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

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

akaryu0206

2016/12/22 01:57

ありがとうございます。 確かにリポジトリ構造の単純さ、わかりやすさで言うと個々のリポジトリに内包するのがベストですね。 環境構築用のリポジトリは全てを管理している自分にとっては都合のいいものでしたが、他人が説明なしですぐに開発を始められるか、と言われると自信がありませんでした。 提案して頂いた環境構築用リポジトリの設計方法も参考にさせて頂きます。 Dockerの提案もありがとうございます。 Vagrant+Ansibleの方法でいったん満足してしまったところもあり、Dockerに関してはまだ積極的に学習はしていませんでしたが、これを機にDockerを利用した環境構築も検討してみます。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問