😽
【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