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
1.1k
SFTPコンテナからファイルをダウンロードする
ディップ株式会社
PRO
June 18, 2025
Tweet
Share
More Decks by ディップ株式会社
See All by ディップ株式会社
Agent Skils
dip_tech
PRO
0
120
Databricksについて.pdf
dip_tech
PRO
0
120
なぜ今_私たちはDDDに向き合うのか_佐藤薫.pdf
dip_tech
PRO
0
110
AIに仕事を丸投げしたら、本当に楽になれるのか
dip_tech
PRO
0
77
【dip】価値が「伝わる体験」を設計する ディップのDevRelが実践する、Findyサービス活用戦略
dip_tech
PRO
0
42
プロフェッショナルへの道:ビジネスを動かすエンジニアリング思想
dip_tech
PRO
0
120
ユーザーファーストを実現するためのチーム開発の工夫
dip_tech
PRO
0
94
1年目エンジニアが働いてみて感じたリアルな悩みと成長
dip_tech
PRO
0
44
ベイズマルチファクターモデルとbPCausal
dip_tech
PRO
0
36
Other Decks in Technology
See All in Technology
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
160
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
210
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
680
22nd ACRi Webinar - NTT Kawahara-san's slide
nao_sumikawa
0
100
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
180
AIエージェントに必要なのはデータではなく文脈だった/ai-agent-context-graph-mybest
jonnojun
1
220
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
AI駆動開発を事業のコアに置く
tasukuonizawa
1
340
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
200
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
590
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Tell your own story through comics
letsgokoyo
1
810
The Spectacular Lies of Maps
axbom
PRO
1
530
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Balancing Empowerment & Direction
lara
5
890
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
310
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圧縮で一括ダウンロード可能
➢ 元のディレクトリ構造を維持することで、ファイルの関連性を保持
ご清聴ありがとうございました