Submit Search
Pyconjp2016 pyftplib
2 likes
2,466 views
Shinya Okano
PyConJP 2016 Pythonでpyftpdlibを使ってFTPサーバーを作る際に使ったテクニックの紹介
Technology
Read more
1 of 23
Download now
Download to read offline
1
2
Most read
3
4
5
Most read
6
7
8
9
10
11
12
13
14
15
Most read
16
17
18
19
20
21
22
23
More Related Content
What's hot
(20)
PDF
Python札幌 2012/06/17
Shinya Okano
PDF
Pythonによるwebアプリケーション入門 - Django編-
Hironori Sekine
PPTX
Pynyumon03 LT
drillan
PDF
スクレイピングとPython
Hironori Sekine
PDF
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
Yusuke Kon
KEY
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
PPTX
勉強会 Cvml python基礎
真哉 杉野
PDF
OSSと私
Hattori Hideo
PDF
サードパーティパッケージの歩き方
Takesxi Sximada
PDF
Python & PyConJP 2014 Report
gree_tech
PDF
Python3 プログラミング勉強会
Tetsuya Morimoto
PDF
10分でわかるPythonの開発環境
Hisao Soyama
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
PPTX
210630 python
Takuya Nishimoto
PDF
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
PPTX
Pythonでpdfをいじってみる
株式会社 システムヨシイ
PPTX
Stapy#17LT
drillan
PPTX
Pythonの環境導入 2014年春季版
Katsuhiro Morishita
PDF
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
PDF
久しぶりのPythonでgoogleのアレを制御してみた
Shohei Tai
Python札幌 2012/06/17
Shinya Okano
Pythonによるwebアプリケーション入門 - Django編-
Hironori Sekine
Pynyumon03 LT
drillan
スクレイピングとPython
Hironori Sekine
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
Yusuke Kon
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
勉強会 Cvml python基礎
真哉 杉野
OSSと私
Hattori Hideo
サードパーティパッケージの歩き方
Takesxi Sximada
Python & PyConJP 2014 Report
gree_tech
Python3 プログラミング勉強会
Tetsuya Morimoto
10分でわかるPythonの開発環境
Hisao Soyama
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
210630 python
Takuya Nishimoto
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
Pythonでpdfをいじってみる
株式会社 システムヨシイ
Stapy#17LT
drillan
Pythonの環境導入 2014年春季版
Katsuhiro Morishita
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
久しぶりのPythonでgoogleのアレを制御してみた
Shohei Tai
Viewers also liked
(20)
PDF
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
PDF
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Hironori Washizaki
PDF
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Antoine Choppin
PDF
Djangoフレームワークの紹介
Shinya Okano
PDF
Pythonで実現する4コマ漫画の分析・評論
esu ji
PDF
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
株式会社MonotaRO Tech Team
PDF
Djangoのエントリポイントとアプリケーションの仕組み
Shinya Okano
PDF
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
PDF
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
PDF
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
PPTX
Camp report for_kwskrb
rojiuratech
PPTX
Robot Framework (のSelenium2Libraryのお話)
泰 増田
PPTX
BPStudy#97 世界に価値を創り出すエンジニアの技術
Haruo Sato
PPTX
Taming robotframework
泰 増田
PDF
4コマ漫画 Machine Learning 分析データを集めたかった話
esu ji
PPTX
ちょっと真面目にPython&Django・基礎編
OMEGA (@equal_001)
PPTX
Pythonで入門するApache Spark at PyCon2016
Tatsuya Atsumi
PDF
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
Yusaku Kinoshita
PDF
Python入門
Shohei Okada
ODP
Djangoアプリの実践的設計手法
Ian Lewis
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Hironori Washizaki
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Antoine Choppin
Djangoフレームワークの紹介
Shinya Okano
Pythonで実現する4コマ漫画の分析・評論
esu ji
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
株式会社MonotaRO Tech Team
Djangoのエントリポイントとアプリケーションの仕組み
Shinya Okano
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
Camp report for_kwskrb
rojiuratech
Robot Framework (のSelenium2Libraryのお話)
泰 増田
BPStudy#97 世界に価値を創り出すエンジニアの技術
Haruo Sato
Taming robotframework
泰 増田
4コマ漫画 Machine Learning 分析データを集めたかった話
esu ji
ちょっと真面目にPython&Django・基礎編
OMEGA (@equal_001)
Pythonで入門するApache Spark at PyCon2016
Tatsuya Atsumi
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
Yusaku Kinoshita
Python入門
Shohei Okada
Djangoアプリの実践的設計手法
Ian Lewis
Ad
More from Shinya Okano
(12)
PDF
Djangoエンジニアの観点から見たHue
Shinya Okano
PDF
Djangoフレームワークのユーザーモデルと認証
Shinya Okano
PDF
Djangoフレームワークの紹介
Shinya Okano
PDF
Djangoフレームワークの紹介 OSC2015北海道
Shinya Okano
PPTX
Spring4Dの紹介
Shinya Okano
PDF
Hadoopとその周辺の紹介
Shinya Okano
ODP
Delphi ideを使わない開発スタイルの紹介
Shinya Okano
PDF
2011.06.01 和歌山高専
Shinya Okano
PDF
電子書籍の話
Shinya Okano
PDF
写真共有アプリのバックエンドサーバー
Shinya Okano
PDF
XenServerによるお手軽開発サーバ運用
Shinya Okano
PDF
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
Shinya Okano
Djangoエンジニアの観点から見たHue
Shinya Okano
Djangoフレームワークのユーザーモデルと認証
Shinya Okano
Djangoフレームワークの紹介
Shinya Okano
Djangoフレームワークの紹介 OSC2015北海道
Shinya Okano
Spring4Dの紹介
Shinya Okano
Hadoopとその周辺の紹介
Shinya Okano
Delphi ideを使わない開発スタイルの紹介
Shinya Okano
2011.06.01 和歌山高専
Shinya Okano
電子書籍の話
Shinya Okano
写真共有アプリのバックエンドサーバー
Shinya Okano
XenServerによるお手軽開発サーバ運用
Shinya Okano
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
Shinya Okano
Ad
Recently uploaded
(9)
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
PDF
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
PDF
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
PDF
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
PDF
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
2023年版Web3技術の理想と現実
Syuhei Hiya
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
Pyconjp2016 pyftplib
1.
Pythonでpyftpdlibを使って FTPサーバーを作る際に 使ったテクニックの紹介 Shinya Okano PyConJP 2016
2.
お前、誰よ • 岡野 真也 •
tokibito • Pythonを使って10年ぐらい仕事してます • https://twitter.com/tokibito • 所属: 株式会社ビープラウド
3.
伝えたいこと ソフトウェアを開発する際、 闇雲にコードを書いて作っていくのではなく、 手順(工程)を意識すること
4.
アウトライン 1. 題材としたFTPサーバーアプリケーションの紹介 2. ツール(アプリケーション)開発の流れ 3.
要件、仕様、設計を書き起こしてみよう 4. どこから書き始めるか 5. 先に外枠だけ作ってしまう(パッケージング、コマンド化) 6. 実装の仮組み 7. モジュールを分ける 8. テストコードを書く 9. 自動テストを設定する 10. 設定ファイルやログ出力の整備 11. Dockerで動かせるようにしてみる
5.
1.題材としたFTPサーバーアプリケーション の紹介 • FTPについては詳しくは説明しません • コンピュータ間でファイルを転送するのに使うプロトコルです •
RFCいくつもあるので調べれば出てきます • クライアントだとFFFTPなどが有名 • サーバー実装はいろいろあります • 今回のFTPサーバー • 1ユーザーのみ • なるべく設定項目を減らす • 既存のソフトウェアの設定が面倒なので、目的を果たす単機能なもの • マスカレードアドレス、パッシブモードとポートは設定できること • soloftpdという名前でPyPIに登録済み • https://github.com/tokibito/soloftpd
6.
2.ツール(アプリケーション)開発の流れ 1. 何をしたいのか、まとめる(企画、要件定義) 2. 要件を満たすシステムの入力や出力の詳細、データの流れやシ ステムの処理をまとめる(仕様策定) 3.
要件、仕様をどうやって実現するのか考えてまとめる(設計) 4. 設計に対応する実装をする、システムを構築する(実装) 5. 実装、構築して出来上がったものが、要件や仕様を満たしている か確認する(試験) 6. 完成 小さいツールなら、ある程度簡略化、省略するといいです。 参考: http://tokibito.hatenablog.com/entry/2016/08/01/000820
7.
3.要件、仕様、設計を書き起こしてみよう • 要件、仕様、設計の一例 • https://github.com/tokibito/soloftpd/blob/master/README.rst •
どんな機能が必要なのか、何を作るのか書き出してみよう • どのように使うのか、書き出してみよう • コマンド名やコマンドラインオプション • 設定ファイル • 入力ファイル、出力ファイルの仕様など • ちょっとしたツールなら、簡易的な記述でも十分 • コードをすぐに書けそうな状態=設計ができてる とても大切な工程です。 これができないまま進めると、完成は遠いです 何を作りたいのか、できるだけハッキリさせておきましょう。
8.
補足. pyftpdlib • FTPサーバーを実装するためのPythonモジュール •
認証のカスタマイズ • ストレージのカスタマイズ • FTPプロトコルの拡張
9.
4.どこから書き始めるか • 設計はできました。 • では作りましょう。 •
→どこから始める? • パッケージ設定、ライセンス、README • あんまり何も考えなくても定型的な部分 • 後回しにすると面倒な部分 • 最初のコミット • https://github.com/tokibito/soloftpd/commit/80dc9419a97046e5ee 6b148312859ef2c2ed1df3
10.
5.先に外枠を作ってしまう • まずは外枠のパッケージの部分を用意する • setup.pyを書く •
わからなければ、他のサードパーティモジュールなどの真似をすればいい • https://packaging.python.org/distributing/ • コマンドツールであれば、console_scriptsを設定するのが便利 • 誰かに見られて困るものでなければ、PyPIに登録して使えるようにし とくと楽 • 自分専用のツールだったとしても登録しとけば、便利です
11.
補足. ライセンス • OSSを利用するのであれば、大雑把にでもライセンス体系は把握し ておいたほうが良いでしょう •
自分のツールをどのライセンスで公開するのか、調べるのもいい勉 強になります。 • PythonのライセンスはPSF License(Python Software Foundation License)です。 • BSDスタイル、GPL互換 • https://docs.python.org/3/license.html
12.
6.実装の仮組み • 動かしながら作れるほうが、イメージは湧きやすい • とりあえず入出力できるようにしてみる •
細かい部分を後回しにして、処理の流れを先に実装する • 関数やメソッドの呼び出しで、仮の値を返す実装 • 設定によって分岐する部分を固定値にする • 仮実装の部分はTODOコメントを入れておく • 後でgrepなどで見つけやすいように • FTPサーバーの例. • 設定ファイルの読み込みなどは後で実装 • 認証ハンドラを固定のユーザーで実装 • FTPサーバーを起動して、クライアントから接続できるように
13.
7.モジュールを分ける • 仮組みができたら、細かい部分の実装をする • 機能に名前をつけられるなら、モジュール、クラスに分けておく •
機能単位で実装し、組み込んでいく • FTPサーバーの例. • 設定ファイルを読み込むクラスを実装 • 実装したクラスを組み込み • 認証クラスを実装 • 実装したクラスを組み込み
14.
補足. FTPサーバーのクラス関係
15.
補足. 関数 or
クラス • 関数とクラスのどちらを使うか • Pythonの関数とクラスの違い • 関数 = 処理 • クラス = 状態と処理 • 大雑把な経験則: • 状態(入力)によって処理の分岐が発生するなら、クラスにしたほうがよい • クラス同士を入れ子にする場合は、役割を文章で説明できる単位にする • 処理の共通化 • 仕様、設計の上で共通化していないものは、冗長でも分けておく(コピペ上等、設計直 せ) • クラスの継承は、安易に使わない • is-a関係とhas-a関係
16.
8.テストコードを書く • フレームワークは標準のunittestをまずは使う • テストコードの書き方 •
関数、クラス、モジュール単位でテストコードを書く • 結合テストは、設計変更に弱いのでなるべく単体から。 • 機能実装時に一緒にやれればなお良い • テストコードが書きづらい? • 関数、クラス、モジュール設計の問題 • ほとんどの場合がこれ • 処理をテストするために準備しないといけない状態が多すぎる • 処理が大きすぎ • 結合度が高すぎ • 対象がテストしづらい場合 • 非同期処理はテストしづらい。気合でやるしかない。つらい。
17.
補足. テストフレームワーク、テストランナー • テストフレームワーク •
TestCase、TestSuiteやアサーション関数、テストフィクスチャなど、テストコード を書くための機能、枠組みを提供 • doctest、unittest、pytest、noseなどが提供 • テストランナー • テストコードを実行し、結果を表示する機能 • テストコードを自動的に見つける機能を持つものもある • doctest、unittest、pytest、noseなどが提供 • フレームワークとランナーは、別のライブラリを使える • unittestフレームワークを使ってテストコードを書く • pytestでテストコードを実行する
18.
補足. テストの実行 • setup.pyのコマンドを使う方法 •
python setup.py test • py.testを使う場合 • py.test tests
19.
9.自動テストを設定する • 復数のPythonバージョン、実装でテストを実行したい • toxを使おう •
https://tox.readthedocs.io/en/latest/ • https://github.com/tokibito/soloftpd/blob/master/tox.ini • 継続的インテグレーション(Continuous Integration, CI)をしたい • TravisCIやCircleCIを使おう • Python復数バージョンでのマトリクスであればTravisCIのほうが簡単かも • https://travis-ci.org/ • https://github.com/tokibito/soloftpd/blob/master/.travis.yml
20.
10.設定ファイルやログ出力の整備 • 設定ファイルのフォーマット • Pythonの標準モジュールだとJSONやiniファイルが使いやすい •
その他だとXML、YAMLなど。 • 設定ファイルを読み込む処理をどこに持たせるか • 設定情報を扱うクラスに実装しておくとか • 設定情報は辞書で扱うこともできるが、属性になっているほうがコードは見 やすい • コード中の記号を減らせる • 設定項目が少ないならクラス化しないのもアリ • ログ出力は、loggingモジュールを使う • 設定ファイルから設定できるようにしておけば、作り込む必要はさほどない
21.
補足. loggingモジュールでログを出力する • モジュールのglobalにlogging.getLoggerでオブジェクトを用意してお いて、infoやerrorなどのメソッドを呼ぶ •
https://github.com/tokibito/soloftpd/blob/master/soloftpd/comman d.py#L8
22.
11.Dockerで動かせるようにしてみる • Dockerコンテナで動かせると便利なところ • OSのバージョン依存から脱却 •
インストール手順の省略 • PyPIに登録しているならば、requirements.txtだけ作ればすぐに登録 できるイメージを使える • https://hub.docker.com/_/python/ • official repository • python:3.5-onbuild • 例: • https://github.com/tokibito/docker-soloftpd • dockerコマンドのオプション指定が面倒な場合は、docker-compose を使うと楽
23.
まとめ • コードを書き始める前に • 作りたいものを決めて、要件、仕様、設計 •
コードを書く • 外枠(パッケージ) • 仮組み • モジュール化 • テストコード • 使いやすさ向上させる 自分にあった開発手順を持ち、 スムーズに品質良くソフトウェアを作れるようになれるといいですね。
Download