Gitでデプロイ入門!ファイルの上げ漏れを防ぐテストアップ術

Gitを使ってテストサーバーへ安全にデプロイ(テストアップ)する方法

Webサイト制作において、ローカルで変更したファイルをテストサーバーにアップロードする作業は欠かせません。多くの場合、FTPソフトを使って手動で行われますが、こんなお悩みはありませんか?

  • 「どのファイルを変更したか忘れてしまい、上げ漏れが発生した…」
  • 「うっかり古いファイルを上書きして、先祖返りさせてしまった…」

今回は、こうしたミスを防ぎ、安全で効率的なテストアップを実現する「Gitを使ったデプロイ方法」の一例をご紹介します。

複数人のチーム開発でブランチが並行していたり、公開順序が流動的だったりする場合は慎重な運用が必要ですが、社内やSSH接続が許可されたテストサーバーがあり、LP制作のように公開時期が明確な案件では、Gitを使うメリットは非常に大きいでしょう。

【ステップ1】前準備

まず、Gitでデプロイを行うための環境を整えます。以下の2点が必要です。

  1. テストサーバーにSSH接続できるようにしておく
    Gitの操作は、サーバーに直接ログインして(SSH接続)コマンドを実行します。もし設定がまだなら、サーバー管理者に確認するか、以下の情報を参考に設定してください。
    ▼参考サイト
    https://webkaru.net/linux/ssh-command/
    http://blog.jubatus.tokyo/106
  2. リモートリポジトリを用意する(Backlog、Bitbucketなど)
    チームでソースコードを共有するための、インターネット上の置き場所(リモートリポジトリ)が必要です。BacklogやBitbucket、GitHubなどがよく使われます。
    ▼参考サイト
    https://backlog.com/ja/git-tutorial/intro/intro4_1.html
    https://qiita.com/adevalue/items/9bfed136d7e10255a4a4

【ステップ2】実践:サーバー側の初回設定

環境が整ったら、テストサーバー側でGitを使えるように初期設定を行います。SSHでサーバーにログインして作業しましょう。

  1. テストサイトのディレクトリへ移動する
    まずはSSHでサーバーに接続し、cdコマンドでテストアップしたいWebサイトの公開ディレクトリ(ドキュメントルート)へ移動します。

    ilmito-no-MacBook-Pro:~ ito$ ssh visual@vers.jp -p 50022
    [visual@vers ~]$ cd www/omni7.vers.jp/
  2. git init でGitリポジトリを作成する
    今いるディレクトリをGitの管理下に置くためのおまじないです。

    [visual@vers omni7.vers.jp]$ git init
    Initialized empty Git repository in /home/visual/www/omni7.vers.jp/.git/
  3. リモートリポジトリを設定する
    「前準備」で用意したネット上のリポジトリと、今いるサーバー上のディレクトリを紐付けます。「origin」という名前でリモートリポジトリのURLを登録するのが一般的です。

    [visual@vers omni7.vers.jp]$ git remote add origin ilm@ilm.git.backlog.jp:/SEVEN/omni7daimanzoku.git
  4. (任意)リモートリポジトリの情報を取得する
    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
    ...(後略)...
  5. master ブランチのデータを取得(pull)する
    まずは基本となる master ブランチのデータをサーバーに持ってきます。

    [visual@vers omni7.vers.jp]$ git pull origin master
    From ilm.git.backlog.jp:/SEVEN/omni7daimanzoku
     * branch            master     -> FETCH_HEAD
  6. 作業用のブランチ(例: 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'
  7. ブランチの状態を確認する
    git branch コマンドで、現在どのブランチにいるか(* が付いているブランチ)を確認できます。

    [visual@vers omni7.vers.jp]$ git branch
    * develop
      master
  8. 表示させたい他のブランチに切り替える(応用)
    特定の機能ブランチ(例: 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-512

    b) git checkout -b [ローカル名] [リモート名] でブランチを作成・切り替え

    [visual@vers omni7.vers.jp]$ git checkout -b feature/OISHII-512 remotes/origin/feature/OISHII-512

【ステップ3】日々の運用方法

一度設定が完了すれば、日々のテストアップ作業はとても簡単になります。

基本的な運用フロー:

  1. SSHでテストサーバーにログインします。
  2. cd コマンドで目的のディレクトリに移動します。(例: cd www/omni7.vers.jp/
  3. git branch で、現在表示させたいブランチにいることを確認します。
    • もし違うブランチにいた場合は、git checkout [ブランチ名] で移動します。
  4. 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 initgit pull といったコマンドを実行する必要があるため、サーバーにログインするための手段としてSSH接続が必須となります。
Q3: git pullgit fetch の違いは何ですか?
A3: git fetch は、リモートリポジトリの最新情報を「取ってくるだけ」で、手元のファイルにはまだ反映しません。一方、git pull は、git fetch(情報を取ってくる)に加えて git merge(取ってきた情報を手元のファイルに反映・合体させる)までを一度に行うコマンドです。テストサーバーに最新版を反映させたい場合は、git pull を使うのが一般的です。

CONTACT

webサイト制作、デザインに関するご相談、御見積のご依頼など、弊社へのお問い合わせはこちら