😽

【Linux入門】SSHでサーバーに直接アクセスしてファイル操作する目的とは?〜Gitとの違いも解説〜

に公開

はじめに

git によってファイル内容を変更・更新できるのに、なぜわざわざサーバーに直接アクセスしてファイルを操作するんだろう?という疑問を持ちました。
そこで、Gitによるファイル内容の更新とサーバへの反映(git pullなど)と、サーバーに直接アクセスしてファイルを操作することの違いについてChatGPTに質問した結果をまとめました。
本記事は、その質問結果を簡潔にまとめています。
※なお、表はChatGPTの解説のものを引用しております。

SSHでサーバーに直接アクセスする目的とは?

結論

  • SSHは主に「Gitで管理されないもの」にアクセスするために使う
  • GitとSSHは目的が違う(バージョン管理 / サーバ運用)
  • ログ確認、権限修正、.env操作などにはSSHが必須

1. Gitによるコード管理と運用は別物だから

  • Gitの目的:「バージョン管理・共有

  • SSHの目的:サーバー上での「運用・実行

つまり、
Gitは「コードを書く/管理する」ためのもので、
SSHは「コードを本番で動かす/確認する」ための通路という目的の違いがあります。

2. Git管理外のものを見るため

例えば以下のような 一時的な・動的なファイルや情報は Git に残りません。

用途 内容の例
ログ確認 /var/log/nginx/error.log, Laravelのstorage/logs/
キャッシュ確認 Laravelのbootstrap/cache/など
実行結果の確認 画像アップロード、生成されたファイルなど
サーバ設定 .env, nginxの/etc/nginx/nginx.conf など Git 管理外が多い
トラブル対応 PHP設定(php.ini)の即時変更、権限修正 など

3. 即時対応・デバッグのため

例えば、

  • エラーが出て「log を今すぐ確認したい」
  • 「DBが落ちている? systemctl で確認しよう」
  • 「権限設定が壊れてる。chmodして修正」

こういった対応は、GitではできずSSHが必須です。

目的の違いまとめ

Gitの目的 SSHの目的
コードのバージョン管理・共有 サーバー上でコードを動かし、確認・修正・保守
履歴を残して安全に管理 今動いている環境の中身を直接見る・操作する
本番に反映するために git pull で使う ログ確認・設定修正・トラブル対応などで使う

サーバー上で直接ファイルを操作する主なケース

次のような Git管理外のファイルや環境固有の設定ファイル に対して行なう場合がほとんどです。

用途 内容 理由
.env などの環境設定 本番用の .env.production など 環境依存で、Gitに含めるとセキュリティ上問題あり
ログファイル storage/logs/*, *.log 実行中に生成され、Gitで管理すべきでない
ユーザーのアップロードファイル public/uploads/* など 本番ではユーザーによって動的に変わるため
一時的な修正・デバッグ 特定のバグ調査のため一時的に修正 本番での一時対応など、緊急時対応として行なう
パーミッション・オーナー設定 chmod, chown コマンドで操作 Gitでは管理できない、OSレベルの設定操作

サーバー上でGit管理に含めるべきではないファイル一覧

カテゴリ ファイル / ディレクトリ例 理由
認証・秘密情報 .env, .env.production, .pem, .key, .crt パスワードやAPIキー、秘密鍵などを含むため漏れると致命的
サーバごとの設定 config/*.php(一部), nginx.conf, php.ini, .htaccess サーバ環境依存の内容で、開発環境と本番環境で異なることが多いため
ログファイル storage/logs/*, /var/log/*, *.log 実行中に生成され、バージョン管理すべきでない
容量も肥大化する
キャッシュファイル bootstrap/cache/*, storage/framework/cache/*, node_modules/, vendor/ 自動生成される一時ファイル
Gitに含めると競合や破損の原因になる
アップロードされたファイル storage/app/public/*, public/uploads/* ユーザーがアップしたファイル
開発環境と本番で共有すべきでない
セッション・キュー storage/framework/sessions/*, storage/framework/queue/* 一時的な実行中データ
バージョン管理に不適
ローカル用の設定ファイル .DS_Store, *.swp, *.bak, .vscode/, .idea/ 個人の開発環境に依存
チーム開発ではトラブルの元になる

Git管理外にすべき理由のまとめ

理由 内容
セキュリティ APIキーやパスワードを漏洩させないため
容量管理 ログやキャッシュは大量に増えるため
環境依存 本番と開発で違う設定ファイルを混同しないため
自動生成 ビルド/キャッシュ/ログは毎回変わるため不要
バグ防止 意図しないファイルのマージやコンフリクトを避ける

まとめ

Git管理できるファイルと管理できないファイルがあり、主に後者を管理するためにSSHによりサーバーにアクセスして直接ファイルを操作することがわかりました。
「未経験からバックエンドエンジニアを目指す中で、"ファイル操作が必須"」とよく言われますが、その理由はいまいち理解できませんでした。
しかし、今回調べた結果、全てがGitで管理できないことが主な理由だとわかりました。
この点についてわからなかった方にとって少しでもお役に立てれば幸いです。

最後までお読みいただき、ありがとうございました。

Discussion