Upload
greetech
View
663
Download
2
Embed Size (px)
DESCRIPTION
グリー社内勉強会「Mini Tech Talk」発表資料 20141031 Python & PyConJP 2014 Report / 亀井 利光 & 中野 和貴 ※「Mini Tech Talk」とは、グリー社内で毎週金曜のランチタイムを利用して開催されている技術勉強会です
Citation preview
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色カラーのキャラしか無理
プロトタイプにはむかなかった
結論
!
\(^o^)/
N E S
Pythonでファミコンプログラミング ~ プロトタイピングとは何だったのか ~
さて、そろそろまじめに まとめ
このセッションのまとめ
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にも紹介した物以外にも沢山あるらしい
• コードを書く時間は有限
• 手に馴染むツールを見つけて適切に使う
• 注力すべき場所に注力する