Soumettre la recherche
Mettre en ligne
Pyconjp2016 pyftplib
•
2 j'aime
•
2,440 vues
Shinya Okano
Suivre
PyConJP 2016 Pythonでpyftpdlibを使ってFTPサーバーを作る際に使ったテクニックの紹介
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 23
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
Shinya Okano
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
Kei IWASAKI
Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjp
Takeshi Komiya
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッション
Tetsuya Morimoto
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Kei IWASAKI
Python札幌201406
Python札幌201406
Shinya Okano
Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門
Takayuki Shimizukawa
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
Recommandé
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
Shinya Okano
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
Kei IWASAKI
Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjp
Takeshi Komiya
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッション
Tetsuya Morimoto
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Kei IWASAKI
Python札幌201406
Python札幌201406
Shinya Okano
Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門
Takayuki Shimizukawa
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
Python札幌 2012/06/17
Python札幌 2012/06/17
Shinya Okano
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
Hironori Sekine
Pynyumon03 LT
Pynyumon03 LT
drillan
スクレイピングとPython
スクレイピングとPython
Hironori Sekine
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
Yusuke Kon
Windowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
勉強会 Cvml python基礎
勉強会 Cvml python基礎
真哉 杉野
OSSと私
OSSと私
Hattori Hideo
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
Takesxi Sximada
Python & PyConJP 2014 Report
Python & PyConJP 2014 Report
gree_tech
Python3 プログラミング勉強会
Python3 プログラミング勉強会
Tetsuya Morimoto
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hisao Soyama
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
210630 python
210630 python
Takuya Nishimoto
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
Pythonでpdfをいじってみる
Pythonでpdfをいじってみる
株式会社 システムヨシイ
Stapy#17LT
Stapy#17LT
drillan
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
Katsuhiro Morishita
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた
Shohei Tai
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Hironori Washizaki
Contenu connexe
Tendances
Python札幌 2012/06/17
Python札幌 2012/06/17
Shinya Okano
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
Hironori Sekine
Pynyumon03 LT
Pynyumon03 LT
drillan
スクレイピングとPython
スクレイピングとPython
Hironori Sekine
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
Yusuke Kon
Windowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
勉強会 Cvml python基礎
勉強会 Cvml python基礎
真哉 杉野
OSSと私
OSSと私
Hattori Hideo
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
Takesxi Sximada
Python & PyConJP 2014 Report
Python & PyConJP 2014 Report
gree_tech
Python3 プログラミング勉強会
Python3 プログラミング勉強会
Tetsuya Morimoto
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hisao Soyama
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
210630 python
210630 python
Takuya Nishimoto
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
Pythonでpdfをいじってみる
Pythonでpdfをいじってみる
株式会社 システムヨシイ
Stapy#17LT
Stapy#17LT
drillan
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
Katsuhiro Morishita
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた
Shohei Tai
Tendances
(20)
Python札幌 2012/06/17
Python札幌 2012/06/17
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
Pynyumon03 LT
Pynyumon03 LT
スクレイピングとPython
スクレイピングとPython
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
Windowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
勉強会 Cvml python基礎
勉強会 Cvml python基礎
OSSと私
OSSと私
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
Python & PyConJP 2014 Report
Python & PyConJP 2014 Report
Python3 プログラミング勉強会
Python3 プログラミング勉強会
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
210630 python
210630 python
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Pythonでpdfをいじってみる
Pythonでpdfをいじってみる
Stapy#17LT
Stapy#17LT
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた
En vedette
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Hironori Washizaki
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Antoine Choppin
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論
esu ji
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
株式会社MonotaRO Tech Team
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
Shinya Okano
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
Camp report for_kwskrb
Camp report for_kwskrb
rojiuratech
Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)
泰 増田
BPStudy#97 世界に価値を創り出すエンジニアの技術
BPStudy#97 世界に価値を創り出すエンジニアの技術
Haruo Sato
Taming robotframework
Taming robotframework
泰 増田
4コマ漫画 Machine Learning 分析データを集めたかった話
4コマ漫画 Machine Learning 分析データを集めたかった話
esu ji
ちょっと真面目にPython&Django・基礎編
ちょっと真面目にPython&Django・基礎編
OMEGA (@equal_001)
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016
Tatsuya Atsumi
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
Yusaku Kinoshita
Python入門
Python入門
Shohei Okada
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法
Ian Lewis
En vedette
(20)
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
マイクロサービスを利用する側のパフォーマンス向上策 (PyCon JP 2016)
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
Camp report for_kwskrb
Camp report for_kwskrb
Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)
BPStudy#97 世界に価値を創り出すエンジニアの技術
BPStudy#97 世界に価値を創り出すエンジニアの技術
Taming robotframework
Taming robotframework
4コマ漫画 Machine Learning 分析データを集めたかった話
4コマ漫画 Machine Learning 分析データを集めたかった話
ちょっと真面目にPython&Django・基礎編
ちょっと真面目にPython&Django・基礎編
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
データ分析-の波乗り遅れた気がしてる人のための Python×データ分析の超基礎の基礎 v1.0-20160831
Python入門
Python入門
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法
Similaire à Pyconjp2016 pyftplib
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
Pyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
civic Sasaki
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlab
Yutaka Kobayshi
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
Introduction Pycon2010
Introduction Pycon2010
(shibao)芝尾 (kouichiro)幸一郎
vscode pipenv docker
vscode pipenv docker
ikdysfm
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Takeshi Komiya
runC概要と使い方
runC概要と使い方
Yuji Oshima
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
mganeko
Django で始める PyCharm 入門
Django で始める PyCharm 入門
kashew_nuts
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
dcubeio
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
Hideo Takahashi
Softlayer勉強会#2
Softlayer勉強会#2
Shuichi Yukimoto
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
Naoki Shibata
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Takayuki Shimizukawa
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
Yusuke Ando
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
johgus johgus
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
Kazuto Kusama
Similaire à Pyconjp2016 pyftplib
(20)
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
Pyconjp2014_implementations
Pyconjp2014_implementations
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlab
How to run P4 BMv2
How to run P4 BMv2
Introduction Pycon2010
Introduction Pycon2010
vscode pipenv docker
vscode pipenv docker
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
runC概要と使い方
runC概要と使い方
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
Django で始める PyCharm 入門
Django で始める PyCharm 入門
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
Softlayer勉強会#2
Softlayer勉強会#2
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
Plus de Shinya Okano
Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHue
Shinya Okano
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証
Shinya Okano
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
Shinya Okano
Spring4Dの紹介
Spring4Dの紹介
Shinya Okano
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介
Shinya Okano
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介
Shinya Okano
2011.06.01 和歌山高専
2011.06.01 和歌山高専
Shinya Okano
電子書籍の話
電子書籍の話
Shinya Okano
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー
Shinya Okano
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
Shinya Okano
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
Shinya Okano
Plus de Shinya Okano
(12)
Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHue
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
Spring4Dの紹介
Spring4Dの紹介
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介
2011.06.01 和歌山高専
2011.06.01 和歌山高専
電子書籍の話
電子書籍の話
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
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.
まとめ • コードを書き始める前に • 作りたいものを決めて、要件、仕様、設計 •
コードを書く • 外枠(パッケージ) • 仮組み • モジュール化 • テストコード • 使いやすさ向上させる 自分にあった開発手順を持ち、 スムーズに品質良くソフトウェアを作れるようになれるといいですね。
Télécharger maintenant