Python 
& 
PyConJP 2014 
Report 
UtilityTeam Toshimitsu.kamei 
& 
Infra Team Kazuki Nakano
Welcome 
to 
Our Slide :)
の前に
お前、だれよ? 
• 亀井といいます 
• 社内系システムを作ってます(いわゆるDevOps) 
• Pythonおぢさん(33)
さて
What is PyConJP ?
PyConJP 
• 日本で一番大きなPythonのカンファレンス 
• 日本では2010年からスタート 
• 世界20カ国で開催されています
今回 
GREEがPyConJP 2014 
に 
ゴールドスポンサーとして 
出資をしてくれました
Thank you GREE!!! 
(手前味噌♥)
PyConJPの話の前に
Pythonについて
Python?
インデントを強制する 
変態言語 
! 
(と思われがち)
でも…
こんなニュースも 
出典 GIGAZINE: http://gigazine.net/news/20140715-python-most-popular-language/
出典: techcrunch http://jp.techcrunch.com/2012/02/10/20120209awwwwwwwwwwwwwwwwww/
Why Choose Python?
Beautiful • 綺麗に 
}Coding 
• 簡潔に 
作ることができるから 
• 素早く
Pythonの思想 
There should be one and 
preferably 
only one obvious way to do it. 
(たったひとつの冴えたやりかたがあるはずだ。)
その思想からくるもの 
•Battery Included 
•>>> import this
Battery Included
標準モジュール 
•非常に多彩 
•そして強力 
•無駄がない(あると切られる)
このおかげで 
• アイディアをすぐに実現できる 
• 綺麗で手間なく簡潔
外部ライブラリも充実
Pypi
そして
import this 
• Zen of Python(Pythonの設計思想)を示す物 
• これを心に止めておけば常にクリーンな設計や 
コードを保つことができる(はず) 
• これも標準モジュール
いくつか 
• Beautiful is better than ugly 
(汚いよりきれいな方がいい)
いくつか 
• Explicit is better than implicit 
(暗黙的より明示的のほうがいい)
いくつか 
• Readability counts. 
(読みやすさが重要だよ)
当たり前のことだけども 
! 
この思想は 
我々エンジニアにとって 
非常に重要
何故なら 
現在も未来も 
楽しくハッキングするため
これがPython
そんなPythonのお祭り 
PyConJP 2014 
に 
いってきました
興味深いセッションが 
たくさんあった
• Deep Learning for Image Recognition in Python (ja) 
• Djangoによるスマホアプリバックエンドの実装 (ja) 
• リファクタリングツールあれこれ 
• OpenCVのpythonインターフェース入門 (ja) 
• Pythonによる非同期プログラミング入門 (ja) 
• Pythonとscikit-learnではじめる機械学習 (ja) 
• データ分析の世界へようこそ! 
~マーケティングに活かせるPythonライブラリ~ (ja)
どれもこれも 
面白そうで 
仕事に良い影響を 
与えてくれそうなものばかり!
僕が見たセッション 
• Micro Python で組み込み Python (ja) 
• PyNES: Python programming for Nintendo 8 bits. (en) 
• パッケージングの今 (ja) 
• Pythonではじめる野球プログラミング (ja)
_人人人人人人人人人人人人人人_ 
>  組み込み系ばっかり!! < 
‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y‾
何故組み込み系… 
• 自分の中で6502が熱い 
• Pythonでかかれた Apple II エミュレー 
ターを読んでしまったから 
• AppleII が作りたい!! 
• (一部だけ作った。Pythonで) 
• 実際の 6502 CPUを叩いてる
というわけで 
僕の無駄話は後半で 
 時間があればね!
僕が見たセッション 
• Micro Python で組み込み Python (ja) 
• PyNES: Python programming for Nintendo 8 bits. (en) 
• パッケージングの今 (ja) 
• Pythonではじめる野球プログラミング (ja)
というわけでPyNes 
• Pythonで書いたコードを6502アセンブラに変 
換してくれる。 
• Nesファイルも吐ける 
• というか、ファミコンのゲームが作れる
そして、 同じCPU!! 
(ちょっとだけ違うけど)
しかし今更ファミコン…? 
• 名作がたくさんある!! 
• “ゲーム”の技術としては歴史的にも 
重要じゃね!? 
• プロトタイピングに使えないかな?
というわけで… 
•このセッション用に 
DEMOを作ってみた
D E M O
なんですが・・・
DEMOについて 
本日はこのスライドをご覧いただき 
ありがとうございます。 
! 
大変申し訳ありませんが、 
どう考えても著作権に問題がある 
キャラクターが出来上がってしまったため、 
ご覧になることができません。 
! 
またの御アクセスをお待ちしております 
© GREE
結果 
• 動かせた!!!! 
• パレット3色(透明を入れれば4色)しかない 
のに・・・当時のドット絵師すごい 
• キャラクタ作るの超大変・・・・ 
• 綺麗な黄色は単色/2色カラーのキャラしか無理
結論 
プロトタイプには 
むかなかった
Pythonでファミコンプログラミング 
~ プロトタイピングとは何だったのか ~ 
! 
\(^o^)/ 
N E S
さて、そろそろまじめに 
まとめ
このセッションのまとめ 
Pythonを使えば 
色々なことが 
簡潔 に 綺麗 に 素早くできるよ
Webシステム作成も
ゲーム作成も
CLIツールも
画像解析も
数値系/化学系も
学習用途にも
Minecraftの操作だって!
Try It !
そして・・・
お客様の中に 
いらっしゃいませんか!? 
• Pythonが好きな人, 使ってみたい人,質問がある人 
• Apple II が好きな人 / 6502が好きな人
是非お友達になりましょう :)
お前、だれよ? 
• 中野 和貴 
• インフラストラクチャ統括部 
• 開発部 システムデザインチーム 
• Creatio 
• OpenStack上のVMコントロールポータル 
• 社内利用に最適化された形で初期化までする 
• Python + Django + Celery
ということで 
参加してきたセッション 
• Keynote 
• https://speakerdeck.com/kennethreitz/python-2-dot-7-and-python-3- 
a-sacred-love-story 
• Python実装系総ざらい 
• http://www.slideshare.net/masahitojp/pyconjp2014 
• リファクタリングツールあれこれ 
• http://tell-k.github.io/pyconjp2014/#/
ということで 
参加してきたセッション 
• Keynote 
• Python実装系総ざらい 
• リファクタリングツールあれこれ
Keynote 
• Python3.x系ってまだまだこれからなものだ 
• スタンダードライブラリが壊れてたりする 
• HTTPライブラリとかでも問題があるとこがあったり 
• Python2.x系がまだまだスタンダードなPythonなのかも 
• pipからのモジュールダウンロード数 
• 2系に比べてまだまだ8分の1強ぐらいしか
Keynote 
• なんでこうなった? 
• 前からPythonを使ってる人が中々移行しない 
• しかし、新しくPythonを使おうとしている人 
は3.x系から使い始めている人が多い? 
• この結果、Python使いの間に分断が起きた 
• でもそれじゃあやっぱりよくない
Keynote 
• どうしていけばいいか 
• もっと3.x系にみんな触れてみよう 
• もっとフィードバックしていこう 
• そうやって、2つを1つにしていければ素晴らし 
いと思う
ということで 
参加してきたセッション 
• Keynote 
• Python実装系総ざらい 
• リファクタリングルールあれこれ
Python実装系総ざらい 
• Pythonの処理系には色々なものがある 
• 標準実装はCPythonと呼ばれるもの 
• 他にも色々あって状況に応じたプログラム資産 
を使うことが出来る
Python実装系総ざらい 
• 紹介されていたもの 
• CPython 
• Jython 
• IronPython 
• PyPy 
• Pyston
Python実装系総ざらい 
• CPython 
• 一番使われている標準実装 
• Pythonで出来ない事や高速性が必要なところがあれば、C/C++で 
拡張モジュールが作れる 
• ctypesモジュールを使ってDLLをロードできる 
• Jython 
• JVM上で動作するPython 
• Javaのライブラリを使うことができる
Python実装系総ざらい 
• IronPython 
• .NET Framework上で動作するPython 
• Python tools for Visual Studioで導入できる 
• 最新版は.NET 4に対応 
• DLR(動的言語ランタイム)上に実装されている 
• ここまでがライブラリ資産を効率的に使うための実装系 
• 次は高速実行するための実装系
Python実装系総ざらい 
• PyPY 
• Pythonに幾つか制約を加えたRPythonで記述 
• 早さを売りにしている 
• JITコンパイラ機能を利用している 
• Pyston 
• Dropbox社で作られている実装系 
• LLVMでビルド、LLVM IRに変換して実行される 
• ループ系処理速度がまだ弱くそこは今後に期待
Python実装系総ざらい 
• グルー言語としてのPythonは便利 
• Pythonの実行を効率化しようとする動きは複数 
あるらしい
ということで 
参加してきたセッション 
• Keynote 
• Python実装系総ざらい 
• リファクタリングルールあれこれ
リファクタリングツール 
• Pythonにはコミュニティが推奨するコーディングスタ 
イルが存在します 
• PEP8 
• 推奨されるコーディングスタイルのガイド 
• PEP257 
• 推奨されるdocstrings(ドキュメンテーション文字 
列)の書き方のガイド
リファクタリングツール 
• 例えばPEP8の場合 
• インデントはスペース4つで 
• 行の長さは最大で79文字 
• トップレベルの関数やクラス間は2行空ける 
• クラス名はCapWords方式を使いましょう 
• 関数名は小文字のみ、単語間はアンダーバーを使いましょう 
• etc...etc...
リファクタリングツール 
• 別に守らなくても動きます 
• しかしながらこれを守って書くのが基本 
• ある程度意識して書いていてもたまには沿ってな 
いところも出てくる 
• というわけで、チェックツールがあります
リファクタリングツール 
• pep8 
• PEP8ガイドラインに沿っているかチェック 
• pep257 
• PEP257ガイドラインに沿っているかチェック 
• pyflakes 
• 文法エラーがないかのチェック 
• 他にも使ってないimportや変数も教えてくれる 
• flake8 
• pep8 + pyflakesを合わせてチェックしてくれるツール
リファクタリングツール 
• flake8を使うのが結構一般的 
• 某社コードレビューのファーストステップでも使われているらしい 
• 機能拡張も可能 
• flake8-docstringを入れればPEP257も合わせてチェック可能 
• 循環的複雑度分析も可能らしい 
• setup.cfgを置くことでチェック内容のカスタマイズも可能 
• 一行の長さは79文字じゃなくて100文字にしたい等
リファクタリングツール 
• 基本的にflake8でチェックして直せば大丈夫 
• とはいえ、手で一々修正していくのも、、、 
• ある程度は自動で修正して欲しい 
• そんなのあるの?
リファクタリングツール 
• 代表的な自動整形ツール 
• autopep8 
• PEP8に沿った形に自動整形してくれる 
• autoflake 
• 使ってないimportや変数の削除をしてくれる
リファクタリングツール 
• 他にもこんなものがあります 
• docformatter 
• PEP257に沿ったdocstringに整形してくれる 
• unify 
• シングルクォーテーションに統一した形に整形してくれる 
• etc... 
• あまり過信しないで上手く使えばコーディング時間が短縮できる
リファクタリングツール 
• リファクタリングとは外れるが便利なもの 
• jedi 
• エディタ上で補完機能を提供してくれるツール 
• ドット区切り時に自動補完 
• 関数の引数ヒントを表示 
• Docstringの表示 
• 関数定義場所へjump
リファクタリングツール 
• さらに突っ込んでリファクタリングしたい 
• リファクタリング専用ツールを使う 
• Rope 
• jediよりさらにリファクタリングに特化したツール 
• vim上でropeprojectを作成しコードを分析をさせる 
• 対処ソース情報をdbとして保存 
• 変数/関数/クラスのリネーム機能、ムーブ機能 
• さらにはimport文の追記等色々とやれる
リファクタリングツール 
• より定量的にリファクタリング箇所を探したい 
• コードメトリックスを見る 
• コードの複雑度のチェックをする 
• 潜在的にバグになりそうな箇所特定の参考に
リファクタリングツール 
• Radon 
• ABC評価でソースコードを評価してくれる 
• 循環的複雑度でのチェック 
• 保守容易性指数でのチェック 
• 上手く利用することで適切に改善が図れる 
• しかし、時間は有限 
• オールAを目指して時間を費やすのは必ずしも良いことではない
リファクタリングツール 
• リファクタリングに有用なツールはPythonにも 
紹介した物以外にも沢山あるらしい 
• コードを書く時間は有限 
• 手に馴染むツールを見つけて適切に使う 
• 注力すべき場所に注力する

Python & PyConJP 2014 Report