Unity上でFTP/SFTP機能を扱えるようにしたかったので、作り始めると自分の無知さと知見が溜まったことからこの記事を書こうと思いました。
[注意点]
C#の話しが出て来ますが、UnityのC#ではなく、**.NETのC#**として捉えてからUnityだと...という解釈をお願いします。
環境について
- MacBookPro 13
- macOS High Sierra 10.13.3
- 使ったFTPクライアントのアプリ
- Cyberduck
-
Unity 2017.4.5f1
- .NET 4.6
-
(FTP)Docker
- Ubuntu 16.04.5 LTS
-
(SFTP)GCP VMインスタンス
- Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-1018-gcp x86_64)
概要について
環境の概要ですが、GCPのVMインスタンスに対してFTP(File Transfer Protocol)を最初していて、途中からSFTPでしか接続できないことが分かりました笑汗
なので一旦、FTP接続のサーバ側のテストに関しては、Dockerを使ってローカルにほぼほぼGCPと同じ環境を用意して、確認作業できるようにしました。
DockerでFTPサーバを用意する方法について
最初は、 @nononote さんのDockerでFTPサーバーやSFTPサーバーをたてるのーとを参考に作ろうとしていましたが、環境が違いすぎるので問題が起きた時のキャッチアップが面倒になるなぁと思い、途中からGCPと同じ環境を用意したいと作業を切り替えました。
そのため、@engineer_oscaさんのDockerでUbuntu 16.04 LTSのイメージを利用してみようを参考に用意しましたー
だがしかし、Ubuntuでvsftpdを用いたFTPサーバの構築が面倒なのですよねぇ...
いろんな記事を参考に設定しているもののなぜか
# service vsftpd start
* Starting FTP server vsftpd
* vsftpd failed - probably invalid config.
という感じでなかなか解決できない状況^^;
C#でFTP
C#でFTPをするとなると無難に以下の2つを使うことになると思います。
Microsoftが用意しているドキュメントでFTPの実装方法や詳細を解説しているので、FtpWebRequest
とFtpWebResponse
の詳細は、Docs < .NET < .NET Framework < .NET Frameworkのネットワークプログラミング < FTPを見てくださいー
C#でSFTP
C#のSFTPですが、FtpWebRequest
とFtpWebResponse
だけでは実装できません。
名前にあるようにSSHをベースにFTPを実装する必要があるため、別のモジュール・ライブラリを扱う必要があるようです。
今のところ把握していることとしては、
という感じでできそうな感じはするもののもう少し調査・検証が必要かなという感じです。
まとめ
一瞬、C言語のレイヤーからFTP/SFTPの実装をやろうかと考えましたが、先にすでにあるものを使って実現させて、余力があればすでにあるものがどうやって作られているのか把握する勉強になるのでC言語でのFTP/SFTPの実装をやろうかと考えています笑
さて、元々やりたいこととしては、Unity上でFTP/SFTPが扱えるようにすることなので、エディター拡張関連は全く考えていませんw
なので、先にFTPが実装できたらエディター拡張を作っていこうかと。
進捗があったら記事作るなりアップデートするなりする予定ですー