身内向けで恐縮ですが、今後の気づきの種まき
いつも通り、データを送るような処理をレビューして、テストをしていたある日。
送るファイルの指定:OK、終了ファイルの指定:OK、ディレクトリの指定:OK・・・確認は順調だ。
「よし、テストしちゃうぞ! おや、、、様子がおかしい。」
「何故かうまくいかない… なんでだろう… んー」
- 前提の確認漏れ
そもそも、要件には『SFTP』と記載あるにもかかわらず、FTPで実装を進めていた。(ちゃんと読めよ)
*FTP:サーバーへファイルをトランスファーするためのプロトコルのことをいい、暗号化はしていない。[1]
*SFTP:FTPで転送される情報を「SSH(Secure Shell)」を利用して暗号化するプロトコルのことです。[2]
要するに、FTPは何も安全に関する加工せず送っているため、加工しているSFTPの方が安全な連携
- 突然ぶつかった壁
ネット上にある、phpでSFTP送信を試みる処理、ライブラリがいくつかあった。
①https://qiita.com/taiba/items/6a1cfd53f0fdcfce14bf
②https://weblabo.oscasierra.net/php-phpseclib-2/
上記を参考に②を利用して作ってみた。
よし、これなら行けるだろう。テスト実施。うまくいかない。
エラーとしては、タイムアウトし続け、なぜだなぜだと考えた。
teratermの様なファイル転送ツールでは、問題なく繋がった。
きっと書き方が悪いのだろう。修正を繰り返すもなかなかうまくいかない。
社内で少し、事例を聞いたところ、SFTP接続するには、インフラの設定が必要とのことだ。
あとがき
- 何か外部と連携するものを作るときは、ちゃんと仕様書の確認をすること
- 目的を達成するために別の確認手段があったら試すこと(今回でいうteratermのログイン確認)
- 確認を行った上で、事象を周囲のメンバー、先輩に確認すること
そうすれば、自ずと答えにもたどり着き、自らの知見と経験になります。
定期的に予期せぬ壁にぶつかっていきたいですね。(トリッキーな内容でもなかったけど、思い出に)
以上
引用・参考
[1][2]:https://liginc.co.jp/398039