Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SFTPコンテナからファイルをダウンロードする
Search
ディップ株式会社
PRO
June 18, 2025
Technology
0
960
SFTPコンテナからファイルをダウンロードする
ディップ株式会社
PRO
June 18, 2025
Tweet
Share
More Decks by ディップ株式会社
See All by ディップ株式会社
AIエージェントの力を引き出すディレクトリ構成
dip_tech
PRO
0
58
若手エンジニアのための音声入力活用
dip_tech
PRO
0
40
新卒研修で学んだ業務でのAI活用のヒント
dip_tech
PRO
0
42
dipにおけるSRE変革の軌跡
dip_tech
PRO
2
920
DC卒業の話
dip_tech
PRO
0
10
【レコリン】音声録音AIサービス
dip_tech
PRO
0
42
Kiroを使ってAWS location service触ってみた
dip_tech
PRO
0
40
コンテナの可能性を極めてみた!一度ビルドしたら本番でも使うよ
dip_tech
PRO
0
35
知識ゼロの新人が研修で社内システムを構築した話
dip_tech
PRO
0
43
Other Decks in Technology
See All in Technology
ABEMAにおける 生成AI活用の現在地 / The Current Status of Generative AI at ABEMA
dekatotoro
0
650
つくって納得、つかって実感! 大規模言語モデルことはじめ
recruitengineers
PRO
19
4.9k
[OCI Skill Mapping] AWSユーザーのためのOCI(2025年8月20日開催)
oracle4engineer
PRO
2
140
人を動かすことについて考える
ichimichi
2
320
自治体職員がガバクラの AWS 閉域ネットワークを理解するのにやって良かった個人検証環境
takeda_h
2
380
退屈なことはDevinにやらせよう〜〜Devin APIを使ったVisual Regression Testの自動追加〜
kawamataryo
1
130
開発と脆弱性と脆弱性診断についての話
su3158
1
1.1k
あなたの知らない OneDrive
murachiakira
0
230
「守る」から「進化させる」セキュリティへ ~AWS re:Inforce 2025参加報告~ / AWS re:Inforce 2025 Participation Report
yuj1osm
1
110
見てわかるテスト駆動開発
recruitengineers
PRO
4
280
トヨタ生産方式(TPS)入門
recruitengineers
PRO
2
200
Goss: Faiss向けの新しい本番環境対応 Goバインディング #coefl_go_jp
bengo4com
0
1.4k
Featured
See All Featured
Balancing Empowerment & Direction
lara
2
590
Side Projects
sachag
455
43k
How GitHub (no longer) Works
holman
315
140k
Docker and Python
trallard
45
3.5k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Navigating Team Friction
lara
189
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
A better future with KSS
kneath
239
17k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
A Tale of Four Properties
chriscoyier
160
23k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Documentation Writing (for coders)
carmenintech
73
5k
Transcript
SFTPコンテナから ファイルをダウンロードする 2025/6/18 golang.tokyo#39 ディップ株式会社 村松彩
自己紹介 村松彩 🏢 ディップ株式会社 💻 新卒3年目 バックエンドエンジニア 🔧 バイトル認証基盤・社内ツールの保守運用など
📝 Go言語
💡 SFTPサーバーをAPIサーバーと接続し ローカルにファイルをダウンロードする
アジェンダ ➢ 開発するサービス ➢ サービス構成 ➢ 実装内容 ➢ まとめ ❏
イメージ、パッケージ ❏ SFTP接続 ❏ ファイルダウンロード処理 ❏ ZIP化処理 ❏ 今回のユースケース
サーバ上にあるバナー等のサイト画像を GUIで置き換える社内ツール ➢ サーバにあるファイルをユーザのローカルにダウンロードしたい ➢ SFTPでアップロード先サーバとコンテナを接続する ➢ ローカル環境では、SFTPコンテナを立て、APIコンテナと接続し ダウンロードする 開発するサービス
サービス構成 (一部抜粋)
サービス構成 (一部抜粋)
💡 APIのレスポンスとして ファイルを返却する
処理の流れ ➢ SSH接続の確立 ➢ SFTPクライアントを作成 ➢ ファイルダウンロード ➢ 分岐処理
◦ 1件のファイルを返却 ◦ 複数件のファイルをZIP化して返却
使用するイメージ・パッケージ ➢ Dockerイメージ ◦ atmoz/sftp ➢ GoのSFTPパッケージ ◦ github.com/pkg/sftp ➢
GoのSSH接続パッケージ ◦ golang.org/x/crypto
SFTP接続 ➢ SSHキーの準備 ➢ SFTPサーバーのホスト名、ポート番号、ユーザー名を指定 ➢ SSH接続の確立 ➢ SFTPクライアントの初期化 ➢
作成したクライアントを使用して、ファイル操作を実行 ➢ 処理が終了したら接続を閉じる
None
None
None
SFTPクライアントの機能 ➢ ファイルダウンロード機能 ➢ ファイルのZIP化機能
💡 ファイルダウンロード処理の実装
ファイルダウンロード処理 ➢ リモートファイルの読み込み ➢ バッファにコピーしインメモリで処理する
None
💡 ZIP化処理の実装
ZIP化処理 ➢ ZIP内のパスを構築 ➢ 元のディレクトリ構造を維持 ➢ ZIP内にファイルを作成 ➢ バッファに保存したファイルの内容をZIPにコピー
None
None
ユースケース 1. 単一ファイルをダウンロードしてレスポンスとして返却する 2. 複数ファイルをダウンロードした後、 ZIP化してレスポンスとして返却する
ユースケース1:単一ファイルの場合 1. SFTP経由でのファイルダウンロード ➢ SFTPサーバからファイルを取得してバッファに保存 2. ダウンロードしたファイル情報をスライスに保存 3. ファイル名の取得 4.
MIMEタイプの判定 5. ヘッダー設定 6. ファイルをレスポンスボディにコピー
None
None
None
None
ユースケース2:複数ファイルの場合 1. ダウンロードしたいファイルごとに処理 2. SFTP経由でのファイルダウンロード 3. ダウンロードしたファイル情報をスライスに保存 4. ZIPファイル名の生成 5.
ZIPファイルの作成 6. 各ファイルのZIP追加 7. ZIPファイルの送信
None
None
処理の流れのまとめ ➢ SSH接続の確立 ➢ SFTPクライアントを作成 ➢ ファイルダウンロード ◦ リモートからファイルをダウンロードし、バッファに保存 ➢
分岐処理 ◦ 単一ファイルの場合: MIMEタイプごとにヘッダーを設定し、バッファに保存したファイルをレスポンスに書き込み ◦ 複数ファイルの場合: レスポンスにZIPファイルを作成し、バッファに保存したファイルを書き込む (このとき元ファイルのディレクトリ構造を維持する)
まとめ ポイント ZIP化の方法 ➢ 一時ファイルを使用する方法と、インメモリで処理する方法 ユースケースごとにヘッダー設定を変更する必要がある ➢ ヘッダーを設定する順序によっては、反映されない場合がある
まとめ メリット 効率的なファイル処理の実装 ➢ 大きなファイルでも対応可能な設計 ➢ インメモリでファイルのやり取りを行い、メモリ効率の良い実装 ユーザー体験の向上 ➢ 複数ファイルをZIP圧縮で一括ダウンロード可能
➢ 元のディレクトリ構造を維持することで、ファイルの関連性を保持
ご清聴ありがとうございました