Flutter Web デプロイのベストプラクティス
Web サイトや Web アプリを本番サーバーにデプロイするとき、「どうすれば安全に作業できるか」はとても重要です。
特に Linux/UNIX サーバーでは、昔から受け継がれてきた“事故らないための作法”があり、これを理解しておくと本番環境を扱うときの不安が一気に減ります。
この記事では、Flutter Web を例にしながら、SSH・rsync・vim を使ったシンプルで安全なデプロイ方法をまとめます。
1. SSH 接続を短縮する(~/.ssh/config)
毎回 IP アドレスやユーザー名を入力するのは面倒なので、SSH の設定ファイルに接続先を登録しておきます。
Host myserver
HostName 123.123.123.123
User username
IdentityFile ~/.ssh/id_ed25519
これで以下のようにコマンド入力を短縮できます:
- ssh myserver
- scp file myserver:/path/
- rsync ./local/ myserver:/path/
- sftp myserver
SSH を使うコマンドはすべてこの設定を共有します。
2. Flutter Web の成果物をビルドする
Flutter Web の成果物は build/web/ に生成されます。
flutter build web
このフォルダをそのまま本番に送れば OK です。
3. 本番デプロイは rsync が最強
本番環境に反映するときは、rsyncを使います。rsyncコマンドでは、 ローカル → サーバー の順にディレクトリを入力します。
rsync -avz ./build/web/ myserver:/var/www/html/
rsync のメリット
- 差分だけアップロード(速い)
- ディレクトリ構造を自動作成
- パーミッション維持
- SSH の設定をそのまま使える
「/」の有無が重要
web/→ 中身だけ送る(一般的にこちら)web→ フォルダごと送る(誤ると意図しないディレクトリ構造になってしまう)
4. 除外設定(exclude)について
rsync には、.gitignore のように特定のファイルやフォルダを除外する機能があります。
例えば以下のように書くと、.git/ を送らずに済みます:
rsync -avz --exclude='.git/' ./local/ myserver:/var/www/html/
複数の除外パターンをまとめたい場合は、--exclude-from を使って専用ファイルを読み込むこともできます。
ただし、Flutter Web の場合は build/web/ の中身をそのままデプロイするだけなので、通常は除外設定を使う必要はありません。
Flutter Web の成果物は純粋な静的ファイル(HTML/CSS/JS/画像)だけで構成されているため、余計なファイルが混ざることがほぼないからです。
5. dry-run(ドライラン)で安全確認
rsync の -n はテスト実行です。
rsync -avzn ./build/web/ myserver:/var/www/html/
実際には何も送らず、以下を確認できます:
- 何がアップロードされるか
- 何が変更されるか
- どのファイルが差分か
本番デプロイではほぼ必須の作法です。
6. 軽い修正は SSH + vim がシンプルで強い
ちょっとした修正なら、サーバーに直接入って vim で編集するのが一番速いです。
ssh myserver
cd /var/www/html/
編集前に必ずバックアップを作る
本番ファイルを直接編集する前には、必ずバックアップを作成します。
cp index.html index.html.bak
これは「作業前の状態を安全に残しておくためのバックアップ」です。
この .bak は “作業前に作成したもの” をそのまま残しておき、作業後に上書きしないようにしましょう。
作業後に上書きしてしまうと、作業前の状態に戻れなくなるためです。 しばらくの間は、作業前に作成した .bak をそのまま保持しておくほうが安全です。
編集
vim index.html
もし事故ったら復元
cp index.html.bak index.html
これで作業前の状態に戻せます。
7. rsync と SSH+vim の使い分け
| 用途 | 方法 | 理由 |
|---|---|---|
| 本番デプロイ | rsync | 差分・高速・安全 |
| 軽い修正 | SSH + vim | 即時・シンプル |
| 安全確認 | dry-run | 事故防止 |
| セーフポイント作成 | cp file file.bak | いつでも戻れる |
まとめ
- SSH の設定で接続を短縮
- Flutter Web は
build/web/をそのまま送ればOK - 本番デプロイは rsync(dry-run を挟む)
- 「/」の有無で挙動が変わる
- 除外設定は .gitignore のように使えるが、Flutter Web では通常不要
- 軽い修正は SSH + vim
- バックアップは “作業前に作成した .bak” を残し、作業後に上書きしない
この一連の流れを理解しておくと、本番環境を扱うときの不安が一気に減り、安心してデプロイ作業ができるようになります。