Gitを使ってテストサーバーへ安全にデプロイ(テストアップ)する方法
Webサイト制作において、ローカルで変更したファイルをテストサーバーにアップロードする作業は欠かせません。多くの場合、FTPソフトを使って手動で行われますが、こんなお悩みはありませんか?
- 「どのファイルを変更したか忘れてしまい、上げ漏れが発生した…」
- 「うっかり古いファイルを上書きして、先祖返りさせてしまった…」
今回は、こうしたミスを防ぎ、安全で効率的なテストアップを実現する「Gitを使ったデプロイ方法」の一例をご紹介します。
複数人のチーム開発でブランチが並行していたり、公開順序が流動的だったりする場合は慎重な運用が必要ですが、社内やSSH接続が許可されたテストサーバーがあり、LP制作のように公開時期が明確な案件では、Gitを使うメリットは非常に大きいでしょう。
【ステップ1】前準備
まず、Gitでデプロイを行うための環境を整えます。以下の2点が必要です。
- テストサーバーにSSH接続できるようにしておく
Gitの操作は、サーバーに直接ログインして(SSH接続)コマンドを実行します。もし設定がまだなら、サーバー管理者に確認するか、以下の情報を参考に設定してください。
▼参考サイト
https://webkaru.net/linux/ssh-command/
http://blog.jubatus.tokyo/106 - リモートリポジトリを用意する(Backlog、Bitbucketなど)
チームでソースコードを共有するための、インターネット上の置き場所(リモートリポジトリ)が必要です。BacklogやBitbucket、GitHubなどがよく使われます。
▼参考サイト
https://backlog.com/ja/git-tutorial/intro/intro4_1.html
https://qiita.com/adevalue/items/9bfed136d7e10255a4a4
【ステップ2】実践:サーバー側の初回設定
環境が整ったら、テストサーバー側でGitを使えるように初期設定を行います。SSHでサーバーにログインして作業しましょう。
- テストサイトのディレクトリへ移動する
まずはSSHでサーバーに接続し、cdコマンドでテストアップしたいWebサイトの公開ディレクトリ(ドキュメントルート)へ移動します。ilmito-no-MacBook-Pro:~ ito$ ssh visual@vers.jp -p 50022 [visual@vers ~]$ cd www/omni7.vers.jp/ git initでGitリポジトリを作成する
今いるディレクトリをGitの管理下に置くためのおまじないです。[visual@vers omni7.vers.jp]$ git init Initialized empty Git repository in /home/visual/www/omni7.vers.jp/.git/- リモートリポジトリを設定する
「前準備」で用意したネット上のリポジトリと、今いるサーバー上のディレクトリを紐付けます。「origin」という名前でリモートリポジトリのURLを登録するのが一般的です。[visual@vers omni7.vers.jp]$ git remote add origin ilm@ilm.git.backlog.jp:/SEVEN/omni7daimanzoku.git - (任意)リモートリポジトリの情報を取得する
git fetchを実行すると、リモートリポジトリにどのようなブランチが存在するかなどの最新情報を取得できます。(このステップは省略しても構いません)[visual@vers omni7.vers.jp]$ git fetch remote: Counting objects: 8214, done. ...(中略)... From ilm.git.backlog.jp:/SEVEN/omni7daimanzoku * [new branch] develop -> origin/develop * [new branch] feature/SEVEN-12 -> origin/feature/SEVEN-12 ...(後略)... masterブランチのデータを取得(pull)する
まずは基本となるmasterブランチのデータをサーバーに持ってきます。[visual@vers omni7.vers.jp]$ git pull origin master From ilm.git.backlog.jp:/SEVEN/omni7daimanzoku * branch master -> FETCH_HEAD- 作業用のブランチ(例:
develop)に切り替える
多くの場合、masterブランチは本番環境用とし、テストサーバーではdevelopブランチなどを使います。リモートのorigin/developブランチを元に、ローカル(サーバー上)にもdevelopブランチを作成して切り替えます。[visual@vers omni7.vers.jp]$ git checkout -b develop origin/develop Branch develop set up to track remote branch develop from origin. Switched to a new branch 'develop' - ブランチの状態を確認する
git branchコマンドで、現在どのブランチにいるか(*が付いているブランチ)を確認できます。[visual@vers omni7.vers.jp]$ git branch * develop master - 表示させたい他のブランチに切り替える(応用)
特定の機能ブランチ(例:feature/OISHII-512)の内容をテストしたい場合は、そのブランチに切り替えます。a)
git branch -aでリモートを含む全てのブランチ一覧を確認[visual@vers omni7.vers.jp]$ git branch -a * develop master remotes/origin/develop remotes/origin/feature/SEVEN-12 remotes/origin/feature/OISHII-512b)
git checkout -b [ローカル名] [リモート名]でブランチを作成・切り替え[visual@vers omni7.vers.jp]$ git checkout -b feature/OISHII-512 remotes/origin/feature/OISHII-512
【ステップ3】日々の運用方法
一度設定が完了すれば、日々のテストアップ作業はとても簡単になります。
基本的な運用フロー:
- SSHでテストサーバーにログインします。
cdコマンドで目的のディレクトリに移動します。(例:cd www/omni7.vers.jp/)git branchで、現在表示させたいブランチにいることを確認します。- もし違うブランチにいた場合は、
git checkout [ブランチ名]で移動します。
- もし違うブランチにいた場合は、
git pullコマンドを実行します。
これだけで、ローカルPCからリモートリポジトリにPush(アップロード)された最新の変更内容が、テストサーバーに即座に反映されます。FTPのように「どのファイルだっけ?」と悩む必要はもうありません。
運用パターンの例:
- パターン1:テスト用ブランチを決めておく
「renewal」や「develop」といったテストサーバー専用のブランチを1つ決め、ローカルでの作業が終わったら都度そのブランチにマージ&Pushします。テストサーバー側は常にそのブランチをpullするだけです。 - パターン2:ブランチを切り替えて確認する
機能Aの確認が終わったら、サーバー側でgit checkout [機能Bのブランチ名]を実行し、次は機能Bのテストを行う、といった形でブランチを柔軟に切り替えて使います。
よくある質問(FAQ)
- Q1: なぜFTPよりGitでのテストアップが良いのですか?
- A1: FTPはファイル単位で手動アップロードするため、「上げ忘れ」や「古いファイルの上書き」といった人的ミスが起こりがちです。Gitはバージョン(コミット)単位で変更を管理するため、リモートリポジトリの最新の状態を
git pullコマンド一つで正確に反映でき、ミスを防いで作業を大幅に効率化できるからです。 - Q2: SSH接続とは何ですか? なぜ必要ですか?
- A2: SSH(Secure Shell)は、暗号化された安全な通信でサーバーに接続し、コマンド操作を行うための仕組みです。今回はテストサーバー上で直接
git initやgit pullといったコマンドを実行する必要があるため、サーバーにログインするための手段としてSSH接続が必須となります。 - Q3:
git pullとgit fetchの違いは何ですか? - A3:
git fetchは、リモートリポジトリの最新情報を「取ってくるだけ」で、手元のファイルにはまだ反映しません。一方、git pullは、git fetch(情報を取ってくる)に加えてgit merge(取ってきた情報を手元のファイルに反映・合体させる)までを一度に行うコマンドです。テストサーバーに最新版を反映させたい場合は、git pullを使うのが一般的です。
