🌊

LaravelアプリがFTPと相性悪い理由を解説します。

2024/11/04に公開

はじめに

先日、Laravelアプリの修正を新入社員にやってもらった際に、コマンドラインでのSSH接続ができないのでグラフィカルなFTPクライアントアプリで接続して直接ファイルを置かせたい、という話がありました。

その環境はシェルスクリプトでデプロイすることを前提にしていて、ソースはGitからプルする想定になっています。

さて、FTPで編集したファイルだけ上書きして良さそうでしょうか?
もちろん良くはないのですが、なぜ良くないのか?
初心者の方にも分かりやすく、噛み砕いて話してみたいと思います。

CUIの操作はGUIの操作より簡単という誤解。

CUI=キャラクタ・ユーザ・インターフェース
GUI=グラフィカル・ユーザ・インターフェース

キャラクタとは文字という意味だと翻訳してもらえればよいです。
ミッキーマウスとかマリオとかハローキティとかではありません。

これ、非エンジニアの方には意外かもしれません。
キーボードだけで操作するアプリがマウス操作より簡単なわけがない。
そう思い込んでいる方は多いのではないでしょうか?

なんだか黒い画面に謎の呪文を打ち込んでいて難しそう。
初心者プログラマーにはキツイのでは?
と、感じているかもしれません。

しかし、実際は逆で、CUIは決まった処理を行うにはGUIとは比べ物にならないほど簡単です。
まず、コピペができる。

2024年現在、GUIの操作ではコピペは不可能です。
もしこの記事を読んでいるのが2050年とかなら、AIが再現する時代が来ているかもしれませんが。

さらに、GUIアプリは頻繁に操作方法が変わったりするし、先輩達との質疑応答も大変です。
わからない箇所を聞くにもいちいちスクショとったり、画面共有しないと伝わりません。

GUIなら、打ったコマンドをそのままコピペして送るだけです。

シェルスクリプトが使える。

シェルスクリプトというのは複数のコマンドを順番通りに実行する簡易プログラムのようなものです。
基本的には実行するコマンドを上から列挙するだけなので難しい知識も不要です。
(勉強すれば条件分岐や繰り返しなどの制御も可能)

そうすると何が嬉しいのかというと、一回作ったらあとはそのスクリプトを実行するだけで全部やってくれるってことです。
更にスクリプトをコピーして必要な箇所だけ変えれば、初心者でもベテランと同じことが出来てしまいます。
そして、操作ミスもありえません。

例えば20行の操作がある場合、GUIなら20行分の操作を毎回やるしかありません。
マウス操作は非常に危険で、誤って違うフォルダに入れてしまうなんてこともしばしば起きます。
1つの課題でアップするファイルが10個あったりしたらもう気が狂うレベルで大変です。
もしアップ後に動作不良が見つかったら10個すべて配置ミスしていないか確認する必要あります。
バックアップ操作とかも含めるとゾッとしますね。

シェルスクリプトなら1行のコマンドをコピペしてエンター押して全部終わりです。
もっというと上キー押したら履歴出るのでコピペも必要なかったりします。

Gitが競合する危険性

デプロイ手順にもよりますが、場合によっては・・・というより大抵のケースではGitプルを前提にした環境にFTPで上書きしたら、次回、プルするときに競合してデプロイできなくなったりします。
その場合の一番の解決策は、「置いたファイルを置かなかったなことにする。」です(Gitリセット)。
なので修正した内容が消えます。

手順通りコミットしていれば何も起きないかもしれませんがわざわざ好き好んで危ない橋を渡る必要もないと思います。

そもそも動かない。

色々書いてきましたが、
根本的な問題として、Laravelはファイルを置いただけでは認識しない修正が多くあります。
例えば新規画面のためのルーティングを作ったら専用のコマンドを打たないとシステムエラーで開けないし、設定ファイルの変更もそうです。

主にサーバ側のキャッシュを対応するコマンドで作り直さないといけないのですが、これはFTPクライアントでは基本的に不可能です。

ライブラリの追加やテーブル定義の変更もコマンドが必要です。

基本的に、と書くと、じゃあ出来る方法もあるんでしょ?って思うかもしれませんが、通常のSSHから入ってコマンド打つ方法に比べると桁違いに難しい方法を自作しないといけません。

例えば、ファイルがアップされたらシェルスクリプトが起動する監視プログラムを作るとか、シェルスクリプトを動かすためのWeb画面をつくって、そこにアクセスするとか。
でもそんな画面に誰でもアクセスできたら大変なことになるので、IPアドレスで自分以外触れないようにブロックするとかのセキュリティ対策が必要です。

でもそんな事が一人でできるような上級者ならそもそもCUI使えるので実質意味ないです。
(それ用意してあげればいいじゃない、といえばそうですが、そこまでして頼むくらいなら大変すぎるのでもう頼みません。自分でアップします・・・となりますね。)

こういうのはクライアントがFTP接続しか許可してくれないトンデモ案件のための苦肉の策です。
そもそも、そんな条件でLaravel開発を受注した時点で詰みかけていますが。

おわりに

いかがだったでしょうか?
読みやすく書いたつもりですが少しでも伝われば幸いです。

株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp

Discussion