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
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SFTPコンテナからファイルをダウンロードする
ディップ株式会社
PRO
June 18, 2025
More Decks by ディップ株式会社
See All by ディップ株式会社
はじめての環境構築!デプロイ〜Docker基礎を学べるワークショップ!
dip_tech
PRO
0
36
【TSKaigi2026登壇資料】決定論的な型チェックへ Go 製コンパイラによる10倍速の裏側で stableTypeOrdering から見える並列化への挑戦
dip_tech
PRO
2
380
【TSKaigi2026登壇資料】バイトル」のTypeScriptリニューアル — 積み上がったレガシーとパフォーマンスに挑む現在地
dip_tech
PRO
1
350
【新卒研修】ライブデモ + compose.yaml読解_講義資料
dip_tech
PRO
0
240
【ディップ|26年新卒研修資料】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
380
【ディップ|26年新卒研修資料】Docker_ハンズオン研修
dip_tech
PRO
0
350
【ディップ|26年新卒研修資料】TDD実装演習
dip_tech
PRO
0
400
ハッカソンや個人開発で何作る? テーマ発見〜アイデア発想ハンズオン! 技育CAMPアカデミア
dip_tech
PRO
0
87
技育祭登壇|「AIを使える」は、勘違いだった。 コードが書けてもプロになれなかった僕の1年戦記
dip_tech
PRO
0
140
Other Decks in Technology
See All in Technology
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
530
チームで実践する AI-DLC 思考の軌跡を残すチェックポイント設計
belongadmin
0
3.1k
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
280
Dynamic Workersについて
yusukebe
2
640
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
310
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
230
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
210
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
150
React、まだ楽しくて草
uhyo
7
4.2k
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
790
なぜ Platform Engineering の土台に Kubernetes を選ぶのか
r4ynode
1
300
Agentic Defenseとともにセキュリティエンジニアが輝き続けるには / How Security Engineers Can Keep Excelling with Agentic Defense
yuj1osm
0
130
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A better future with KSS
kneath
240
18k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
820
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
840
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Context Engineering - Making Every Token Count
addyosmani
9
950
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
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圧縮で一括ダウンロード可能
➢ 元のディレクトリ構造を維持することで、ファイルの関連性を保持
ご清聴ありがとうございました