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

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

ただいまの
回答率

90.52%

  • Git

    1271questions

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

  • バージョン管理

    31questions

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

gitでのバージョン管理&デプロイ環境構築について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 199

ukotsu

score 7

 前提

gitを使用しWebサイトのバージョン管理&デプロイ環境を作ろうとしています。

・本番環境 … 一般ユーザに公開。
・ステージング環境 … クライアントに公開。本番環境+未リリースの内容を含む。表示の崩れ等はNG。
・開発環境 … 社内のみ。作業途中などで表示が崩れてもOK。

の3つのサーバーを用意し、それぞれ master・staging・develop のブランチを割り当てる予定です。
リモートリポジトリにはBacklogを使用します。

以下、質問事項になります。

 質問事項

 【1】環境依存の設定ファイルについて

各環境で共通のファイルをgitで管理することは用意に想像できるのですが、
環境依存のファイル、例えば

・本番とステージングでincludeのパスが違うファイル
・メール送受信のアドレスが違うファイル
・データベースの設定ファイル
・本番環境のみにしか存在しないファイル

などの管理はどうするのがセオリーなのでしょうか。
これらはバージョン管理に含めないという選択肢は、大きな問題になり得るでしょうか。

 【2】作業フローについて

サイトを更新する場合、

1. 'master' から 'feature/○○○○' ブランチを切る
2. 作業完了後、社内確認のため 'develop' にmergeしてpush(開発環境へデプロイ)
3. 社内確認後、'staging''feature/○○○○' をmergeしてpush(ステージング環境へデプロイ)
4. クライアント確認後、'master''staging' をmergeしてpush(本番環境へデプロイ)

という作業フローを考えています。

軽微な変更(一部のテキスト変更など)は、

1. 〃
2. 作業後 'staging' にmergeしてpush
3. 'master' にmergeしてpush

とする予定です。
上記フローで、何か起こりうる問題点等ございますでしょうか。

 【3】一部機能のみを反映させたい場合

ステージング環境に「本番環境+機能A+機能B」がアップされているとします。
このうち機能Aのみを本番環境へアップする場合、具体的にどういった手順を踏めばよろしいのでしょうか。

 補足情報

社内にはバージョン管理の文化が全く無く、
本番環境のファイルを直接編集したり、サーバー上にリネームしたファイルをバックアップとして置いておくようなレベル感です。
私自身、gitは自分の更新履歴程度にしか使っておらず、今回、初めて運用としての利用を試みております。
極々初歩的な質問かもしれませんが、何卒よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

全体的に「正解」は無いと思いますので「自分だったらこうする」という回答になりますが、ご容赦ください。

【1】環境依存の設定ファイルについて
サーバーごとに環境変数を設定するのはいかがでしょうか?
環境変数を読み込むようなソースの書き方をすれば、ソース自体は同じもので大丈夫なはずです。

【2】作業フローについて

3. 社内確認後、'staging' に 'feature/○○○○' をmergeしてpush(ステージング環境へデプロイ)

この箇所は
社内確認後、'staging' に 'develop' をmergeしてpush(ステージング環境へデプロイ) 
が良いように感じます。

軽微な修正に関しては書かれている流れで問題ないかと思います。

【3】一部機能のみを反映させたい場合
ステージング環境は基本的に本番とほぼ同じ状態にしておくべきですので、ステージング環境の方を「本番環境+機能A」という状態に戻す(developブランチが「本番環境+機能A+機能B」という状態)が正しいフローかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/04 10:09

    ご回答ありがとうございます。
    仰る通り、絶対的な正解は無いと思いますので事例や知見をお教えいただけますと幸いです。

    【1】環境依存の設定ファイルについて
    >サーバーごとに環境変数を設定するのはいかがでしょうか?
    >環境変数を読み込むようなソースの書き方をすれば、ソース自体は同じもので大丈夫なはずです。
    各サーバーにそれぞれ設定ファイルを設置する、ということでしょうか。
    ということは、その設定ファイル自体はgitの監視に含めない(=バージョン管理をしない)という認識でよろしいでしょうか。

    【2】作業フローについて
    'develop(開発環境)' は複数の人間が複数の機能を社内確認用にアップしているので、必ずしも全てがstagingにmergeできる状態ではありません。
    この場合でもdevelopからstagingへmergeするほうがベターでしょうか。(チェリーピック等を使って?)

    【3】一部機能のみを反映させたい場合
    >ステージング環境は基本的に本番とほぼ同じ状態にしておくべきですので、ステージング環境の方を「本番環境+機能A」という状態に戻す(developブランチが「本番環境+機能A+機能B」という状態)が正しいフローかと思います。
    なるほど。
    1. ステージングを「本番環境+機能A」の状態にする
    2. 本番環境へmerge
    3. ステージングを「本番環境+機能B」の状態にする
    というフローを踏むということで合っていますでしょうか?

    キャンセル

  • 2018/06/04 11:51

    【1】環境依存の設定ファイルについて
    >各サーバーにそれぞれ設定ファイルを設置
    そうですね。その認識で良いかと思います。
    こちらのページがわかりやすいです。
    https://blog.excite.co.jp/exdev/27192382/

    >設定ファイル自体はgitの監視に含めない
    こちらもその認識ですね。
    .envを.gitignoreに追加してgitの監視に含めないという流れです。

    【2】作業フローについて
    >必ずしも全てがstagingにmergeできる状態ではありません。
    その場合であれば直接の方が良いかもしれないですね。

    【3】一部機能のみを反映させたい場合
    はい、その認識です。

    キャンセル

  • 2018/06/04 17:41

    再度のご回答ありがとうございます。

    【1】環境依存の設定ファイルについて
    .envについて調べていたところ、ちょうどお教え頂いた記事を読んでおりました。
    導入を検討しようと思います。

    【2】作業フローについて
    ご検討ありがとうございます。一旦そのフローで運用をしてみようと思います。

    【3】一部機能のみを反映させたい場合
    ありがとうございます。
    こちらもそのフローで運用を致します。

    キャンセル

0

今時はどのフレームワークでも.envの仕組みがあるのでは。
Push to Deployの前にフレームワークとか調べて世間一般で当たり前に行われてることを知っておかないと
.envと同じものを自分で作るような無駄な作業することになる。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/04 10:11

    ご回答有り難うございます。
    サーバーサイドにはphpを使っておりますが、一般的なフレームワークは使用しておりません(社内のフレームワークです)
    .envのような仕組みがあるかを確認致します。

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    gitでリモート追跡ブランチの追跡をやめる設定

    リモート追跡ブランチを追跡しないようにする方法がわかりません。 リモートに複数のfeatureブランチが生えてる時など大量の追跡ブランチができて見づらいので何とかしたいです。

  • 解決済

    HerokuにデプロイするときのGitの使い方がわからない

     環境 macOS Sierra Python 3.6.0 :: Anaconda 4.3.0 (x86_64) Flask  やりたいこと 作成したアプリをHe

  • 解決済

    mergeについて

    master,develop,human1,human2ブランチがあります。(masterは本番用としてここでは使わない。) masterのファイルはtext1.txtです。hu

  • 解決済

    gitの単語?について

    gitのリモートブランチのことお思うのですが origin master と origin/masterでは何が異なるのですか?

  • 受付中

    Python でデプロイする時のエラー

     前提・実現したいこと Python でデプロイしたいです。  発生している問題・エラーメッセージ (myvenv) MacRyo:djangogirls ryousuke$

  • 解決済

    Django Heroku デプロイ

    DjangoにてHerokuでデプロイ過程でエラーが発生しましたが、原因が一向にわかりません。  発生している問題・エラーメッセージ (myenv) YYY-mac:Proje

  • 解決済

    GitHub pushエラー

     やりたい事 ターミナルからpushしてリポジトリをアップしたい  困っている事 このようなエラーが発生しています。調べて見たところ権限がなくそうなっているとなっていましたが何

  • 解決済

    [git]開発中に起こること(branch )

    git branchについてです。 feature/a(例) というブランチで開発をしていたところ developブランチでviewファイルの中だったりroutes、contr

同じタグがついた質問を見る

  • Git

    1271questions

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

  • バージョン管理

    31questions

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