サーバーへのファイルのアップロードや、ファイルのダウンロードを簡単にできるFTP接続。ウェブデザイナーやコーダー、エンジニア等を始め、記事コンテンツ作成の際にPDFや画像ファイル等の関連ファイルをアップロードするため、所定のファイルを定期的にダウンロードするなど、ウェブに関係する人であれば使ったことのある人も多いはずです。
ファイル数が多い時や反映するファイルがディレクトリを跨いで複数ファイルあったりするとアップロードし忘れの発生、間違えたディレクトリへアップロードしてしまうといったミスが起こりがちです。
FTP接続を否定するつもりは全くありませんが、ファイル反映にはGitによるデプロイという方法もありますよーという内容の記事です。Gitを使っている人、Gitに興味のある人、FTPのファイル反映に面倒や手間を感じている人に向けたニッチな内容となります。
目次
FTPを使ったファイル転送はミスが起こりがち
2018年と少し古い記事になりますが、以下の記事でFTPを使ったファイル転送からGitを使った方法に変更することでのメリットを書きました。
ファイル自体をアップロードするのではなく、反映したファイルのみを自動検知して反映する仕組みになります。こうすることでアップし忘れや他の人がアップした内容を上書きしたりされたりといったヒューマンエラーが起こりにくい状態を作ることができます。(中略)自分一人で進行するプロジェクトでも十分使う価値ありです。FTPを使わないことでセキュリティ的にも安心!
2018年を振り返ってウェブディレクターが勉強してメチャよかったツールや技術
通常FTPの場合、ローカル(手元の作業中のパソコン)にあるファイルやディレクトリをサーバーにアップしたり、サーバーにあるファイルやディレクトリをダウンロードするのに利用します。
これはシンプルでわかりやすいのですが、結構手間なときがあります。例えばディレクトリを跨いだ複数ファイルの場合。都度ローカルとサーバーのディレクトリを移動して対象のファイルを転送する必要があり、どちらかディレクトリを間違えたり対象ファイルを間違えると厄介です。
またはファイル数が数百、数千の場合は通信環境にも影響されるため、途中で転送が停止してしまったり、転送失敗することもあります。時間がかかった転送で、一定時間後FTPを見てみると失敗していて再度やりなおし……という経験がある人も少なくないと思います。
Gitを使ったファイル反映は安全でラク、そして速いとメリットしかない
一方Gitの場合、GithubやBitbucketといったリポジトリ(Gitで作成したファイルや変更履歴等の情報を保存しておく場所)を使ったり、サーバーにリポジトリを用意した上で、Gitコマンド(といっても使うのは限られているのでGitの基本でOK)によりリポジトリから対象のファイルのみをサーバーに反映することが可能です。例えば以下のようにFTPに比べていいことだらけです。
- 対象ファイルやディレクトリを自分で選択してアップロードする必要がない
- それにより上記に書いたようなミスや転送失敗がまずない(コンフリクトが起きた等の対処が発生したら対応は必要)
- 複数人で同じファイルを修正・変更しても問題ない、もし重複の場合でもコンフリクトで教えてくれる
- FTPを使わないためポートを閉じることができる(セキュリティ対策)
- アップロード前にバックアップを取る必要が無い(
git reset --hard HEAD@{1}
で前の状態に戻せる) - サーバー側にあるリポジトリからの反映となるサーバー間転送のため大量ファイル・大容量サイズでも高速
- BacklogやRedmineといったプロジェクト管理ツールと連携できる
弊社では受託開発や一定の保守管理業務においてはプロジェクト管理ツールであるBacklogを利用して管理しており、ソースコードの開発・修正時のコミットログ内に課題番号を挿入することで、push
時に自動的にBacklogの対象の課題のコメントが更新され、同時にBacklog内のGitリポジトリへの確認も可能です。
Gitを使ったデプロイ方法
それではGitによるファイル転送方法のご紹介です。前提条件としてGithubやBitbucket等のサービスを使うかまたはサーバー内にリポジトリを作成します。また本番サーバーへSSH接続できる状態にしておきます。
ローカル側での作業
ローカル側ではファイル作成や修正後、コミットしてリポジトリへ転送します。
Gitの作業はGUIでもCUIでもいつも行っている方法で実施します。これからGitを始める、という方はご自身にあった方法で構いません。「コマンド作業はなれていない」というのであれば「Git GUI」や「Sourcetree」といったGUIツールでも全く問題有りません。
個人的にはGUIでしたら Sourcetree は使っていてストレスもなくおすすめです。
リポジトリへ転送する際は push
コマンドを使いますが、master ブランチとして push
するとします。
push
後、リポジトリに正しくファイルが転送されていることを確認します。
サーバー側での作業
サーバーにSSHで接続しログインします。以下、gitコマンドの作業です。
- gitリポジトリ(
.git
ファイル)のある場所まで移動 git checkout master
でマスターブランチに切り替えるgit pull origin master
でリポジトリから最新のファイルをコピーしてマージすることで、対象のファイル or ディレクトリが反映される(反映したファイルが表示される)
これだけです。ご覧の通り checkout
と pull
しか使いません。そもそもマスターブランチしか運用していないようなら checkout
も不要かも。
pull
コマンドは fetch
と merge
の合体なので、pull
の代わりに fetch
+ merge
でも可能です。
Gitをすでに使っている人も、これから使う人も
以上、Gitを使ったデプロイ方法のご紹介でした。
今までFTPでしかファイル転送していなかった場合は、Gitを使った転送方法も知ることでより効率的に、安全に素早く実施することができます。
私はGitを一度諦めたのち再度2018年頃に学び始め、現在も学習しながらですが業務でも少しずつ使えるようになりました。今回の記事は以下参考記事をもとに書きましたが、2014年の当時ではGitのデプロイ方法というのはまだまだエンジニア向けの情報だったと思いますので、7年前に作成されたことに敬意を表します。
コメントを残す