python & pyconjp 2014 report

93
Python & PyConJP 2014 Report UtilityTeam Toshimitsu.kamei & Infra Team Kazuki Nakano

Upload: greetech

Post on 07-Jul-2015

663 views

Category:

Technology


2 download

DESCRIPTION

グリー社内勉強会「Mini Tech Talk」発表資料 20141031 Python & PyConJP 2014 Report / 亀井 利光 & 中野 和貴 ※「Mini Tech Talk」とは、グリー社内で毎週金曜のランチタイムを利用して開催されている技術勉強会です

TRANSCRIPT

Page 1: Python & PyConJP 2014 Report

Python &

PyConJP 2014 Report

UtilityTeam Toshimitsu.kamei &

Infra Team Kazuki Nakano

Page 2: Python & PyConJP 2014 Report

Welcome to

Our Slide :)

Page 3: Python & PyConJP 2014 Report

の前に

Page 4: Python & PyConJP 2014 Report

お前、だれよ?

• 亀井といいます

• 社内系システムを作ってます(いわゆるDevOps)

• Pythonおぢさん(33)

Page 5: Python & PyConJP 2014 Report

さて

Page 6: Python & PyConJP 2014 Report

What is PyConJP ?

Page 7: Python & PyConJP 2014 Report

PyConJP

• 日本で一番大きなPythonのカンファレンス

• 日本では2010年からスタート

• 世界20カ国で開催されています

Page 8: Python & PyConJP 2014 Report

今回GREEがPyConJP 2014

に ゴールドスポンサーとして 出資をしてくれました

Page 9: Python & PyConJP 2014 Report

Thank you GREE!!! (手前味噌♥)

Page 10: Python & PyConJP 2014 Report

PyConJPの話の前に

Page 11: Python & PyConJP 2014 Report

Pythonについて

Page 12: Python & PyConJP 2014 Report

Python?

Page 13: Python & PyConJP 2014 Report

インデントを強制する変態言語

!

(と思われがち)

Page 14: Python & PyConJP 2014 Report

でも…

Page 15: Python & PyConJP 2014 Report

こんなニュースも

出典 GIGAZINE: http://gigazine.net/news/20140715-python-most-popular-language/

Page 16: Python & PyConJP 2014 Report

出典: techcrunch http://jp.techcrunch.com/2012/02/10/20120209awwwwwwwwwwwwwwwwww/

Page 17: Python & PyConJP 2014 Report

Why Choose Python?

Page 18: Python & PyConJP 2014 Report

Beautiful Coding

•綺麗に

•簡潔に

•素早く}作ることができるから

Page 19: Python & PyConJP 2014 Report

Pythonの思想

There should be one and preferably

only one obvious way to do it. (たったひとつの冴えたやりかたがあるはずだ。)

Page 20: Python & PyConJP 2014 Report

その思想からくるもの

•Battery Included

•>>> import this

Page 21: Python & PyConJP 2014 Report

Battery Included

Page 22: Python & PyConJP 2014 Report

標準モジュール

•非常に多彩

•そして強力

•無駄がない(あると切られる)

Page 23: Python & PyConJP 2014 Report

このおかげで

•アイディアをすぐに実現できる

• 綺麗で手間なく簡潔

Page 24: Python & PyConJP 2014 Report

外部ライブラリも充実

Page 25: Python & PyConJP 2014 Report

Pypi

Page 26: Python & PyConJP 2014 Report

そして

Page 27: Python & PyConJP 2014 Report

import this

• Zen of Python(Pythonの設計思想)を示す物

• これを心に止めておけば常にクリーンな設計やコードを保つことができる(はず)

• これも標準モジュール

Page 28: Python & PyConJP 2014 Report

いくつか

• Beautiful is better than ugly(汚いよりきれいな方がいい)

Page 29: Python & PyConJP 2014 Report

いくつか

• Explicit is better than implicit(暗黙的より明示的のほうがいい)

Page 30: Python & PyConJP 2014 Report

いくつか

•Readability counts.(読みやすさが重要だよ)

Page 31: Python & PyConJP 2014 Report

当たり前のことだけども !

この思想は 我々エンジニアにとって

非常に重要

Page 32: Python & PyConJP 2014 Report

何故なら 現在も未来も

楽しくハッキングするため

Page 33: Python & PyConJP 2014 Report

これがPython

Page 34: Python & PyConJP 2014 Report

そんなPythonのお祭り PyConJP 2014

に いってきました

Page 35: Python & PyConJP 2014 Report

興味深いセッションが たくさんあった

Page 36: Python & PyConJP 2014 Report

• Deep Learning for Image Recognition in Python (ja)

• Djangoによるスマホアプリバックエンドの実装 (ja)

• リファクタリングツールあれこれ

• OpenCVのpythonインターフェース入門 (ja)

• Pythonによる非同期プログラミング入門 (ja)

• Pythonとscikit-learnではじめる機械学習 (ja)

• データ分析の世界へようこそ!~マーケティングに活かせるPythonライブラリ~ (ja)

Page 37: Python & PyConJP 2014 Report

どれもこれも 面白そうで

仕事に良い影響を 与えてくれそうなものばかり!

Page 38: Python & PyConJP 2014 Report

僕が見たセッション• Micro Python で組み込み Python (ja)

• PyNES: Python programming for Nintendo 8 bits. (en)

• パッケージングの今 (ja)

• Pythonではじめる野球プログラミング (ja)

Page 39: Python & PyConJP 2014 Report

_人人人人人人人人人人人人人人_ >  組み込み系ばっかり!! < ‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y‾

Page 40: Python & PyConJP 2014 Report

何故組み込み系…• 自分の中で6502が熱い

•Pythonでかかれた Apple II エミュレーターを読んでしまったから

•AppleII が作りたい!!

• (一部だけ作った。Pythonで)

•実際の 6502 CPUを叩いてる

Page 41: Python & PyConJP 2014 Report
Page 42: Python & PyConJP 2014 Report

というわけで 僕の無駄話は後半で

🐍時間があればね!

Page 43: Python & PyConJP 2014 Report

僕が見たセッション• Micro Python で組み込み Python (ja)

• PyNES: Python programming for Nintendo 8 bits. (en)

• パッケージングの今 (ja)

• Pythonではじめる野球プログラミング (ja)

Page 44: Python & PyConJP 2014 Report

というわけでPyNes

• Pythonで書いたコードを6502アセンブラに変換してくれる。

• Nesファイルも吐ける

• というか、ファミコンのゲームが作れる

Page 45: Python & PyConJP 2014 Report

そして、 同じCPU!!(ちょっとだけ違うけど)

Page 46: Python & PyConJP 2014 Report

しかし今更ファミコン…?

• 名作がたくさんある!!

• “ゲーム”の技術としては歴史的にも重要じゃね!?

• プロトタイピングに使えないかな?

Page 47: Python & PyConJP 2014 Report

というわけで…

•このセッション用にDEMOを作ってみた

Page 48: Python & PyConJP 2014 Report

D E M O

Page 49: Python & PyConJP 2014 Report

なんですが・・・

Page 50: Python & PyConJP 2014 Report

DEMOについて本日はこのスライドをご覧いただき

ありがとうございます。 !

大変申し訳ありませんが、 どう考えても著作権に問題がある

キャラクターが出来上がってしまったため、 ご覧になることができません。

!

またの御アクセスをお待ちしております

© GREE

Page 51: Python & PyConJP 2014 Report

結果• 動かせた!!!!

• パレット3色(透明を入れれば4色)しかないのに・・・当時のドット絵師すごい

• キャラクタ作るの超大変・・・・

• 綺麗な黄色は単色/2色カラーのキャラしか無理

Page 52: Python & PyConJP 2014 Report

プロトタイプにはむかなかった

結論

Page 53: Python & PyConJP 2014 Report

!

\(^o^)/

N E S

Pythonでファミコンプログラミング ~ プロトタイピングとは何だったのか ~

Page 54: Python & PyConJP 2014 Report

さて、そろそろまじめに まとめ

Page 55: Python & PyConJP 2014 Report

このセッションのまとめ

Pythonを使えば 色々なことが

簡潔 に 綺麗 に 素早くできるよ

Page 56: Python & PyConJP 2014 Report

Webシステム作成も

Page 57: Python & PyConJP 2014 Report

ゲーム作成も

Page 58: Python & PyConJP 2014 Report

CLIツールも

Page 59: Python & PyConJP 2014 Report

画像解析も

Page 60: Python & PyConJP 2014 Report

数値系/化学系も

Page 61: Python & PyConJP 2014 Report

学習用途にも

Page 62: Python & PyConJP 2014 Report

Minecraftの操作だって!

Page 63: Python & PyConJP 2014 Report

Try It !

Page 64: Python & PyConJP 2014 Report

そして・・・

Page 65: Python & PyConJP 2014 Report

お客様の中に いらっしゃいませんか!?

• Pythonが好きな人, 使ってみたい人,質問がある人

• Apple II が好きな人 / 6502が好きな人

Page 66: Python & PyConJP 2014 Report

是非お友達になりましょう

:)

Page 67: Python & PyConJP 2014 Report

お前、だれよ?• 中野 和貴

• インフラストラクチャ統括部

• 開発部 システムデザインチーム

• Creatio

• OpenStack上のVMコントロールポータル

• 社内利用に最適化された形で初期化までする

• Python + Django + Celery

Page 68: Python & PyConJP 2014 Report

ということで 参加してきたセッション

• 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/#/

Page 69: Python & PyConJP 2014 Report

ということで 参加してきたセッション

• Keynote

• Python実装系総ざらい

• リファクタリングツールあれこれ

Page 70: Python & PyConJP 2014 Report

Keynote• Python3.x系ってまだまだこれからなものだ

• スタンダードライブラリが壊れてたりする

• HTTPライブラリとかでも問題があるとこがあったり

• Python2.x系がまだまだスタンダードなPythonなのかも

• pipからのモジュールダウンロード数

• 2系に比べてまだまだ8分の1強ぐらいしか

Page 71: Python & PyConJP 2014 Report

Keynote• なんでこうなった?

• 前からPythonを使ってる人が中々移行しない

• しかし、新しくPythonを使おうとしている人は3.x系から使い始めている人が多い?

• この結果、Python使いの間に分断が起きた

• でもそれじゃあやっぱりよくない

Page 72: Python & PyConJP 2014 Report

Keynote• どうしていけばいいか

• もっと3.x系にみんな触れてみよう

• もっとフィードバックしていこう

• そうやって、2つを1つにしていければ素晴らしいと思う

Page 73: Python & PyConJP 2014 Report

ということで 参加してきたセッション

• Keynote

• Python実装系総ざらい

• リファクタリングルールあれこれ

Page 74: Python & PyConJP 2014 Report

Python実装系総ざらい

• Pythonの処理系には色々なものがある

• 標準実装はCPythonと呼ばれるもの

• 他にも色々あって状況に応じたプログラム資産を使うことが出来る

Page 75: Python & PyConJP 2014 Report

Python実装系総ざらい• 紹介されていたもの

• CPython

• Jython

• IronPython

• PyPy

• Pyston

Page 76: Python & PyConJP 2014 Report

Python実装系総ざらい• CPython

• 一番使われている標準実装

• Pythonで出来ない事や高速性が必要なところがあれば、C/C++で拡張モジュールが作れる

• ctypesモジュールを使ってDLLをロードできる

• Jython

• JVM上で動作するPython

• Javaのライブラリを使うことができる

Page 77: Python & PyConJP 2014 Report

Python実装系総ざらい• IronPython

• .NET Framework上で動作するPython

• Python tools for Visual Studioで導入できる

• 最新版は.NET 4に対応

• DLR(動的言語ランタイム)上に実装されている

• ここまでがライブラリ資産を効率的に使うための実装系

• 次は高速実行するための実装系

Page 78: Python & PyConJP 2014 Report

Python実装系総ざらい• PyPY

• Pythonに幾つか制約を加えたRPythonで記述

• 早さを売りにしている

• JITコンパイラ機能を利用している

• Pyston

• Dropbox社で作られている実装系

• LLVMでビルド、LLVM IRに変換して実行される

• ループ系処理速度がまだ弱くそこは今後に期待

Page 79: Python & PyConJP 2014 Report

Python実装系総ざらい

• グルー言語としてのPythonは便利

• Pythonの実行を効率化しようとする動きは複数あるらしい

Page 80: Python & PyConJP 2014 Report

ということで 参加してきたセッション

• Keynote

• Python実装系総ざらい

• リファクタリングルールあれこれ

Page 81: Python & PyConJP 2014 Report

リファクタリングツール• Pythonにはコミュニティが推奨するコーディングスタイルが存在します

• PEP8

• 推奨されるコーディングスタイルのガイド

• PEP257

• 推奨されるdocstrings(ドキュメンテーション文字列)の書き方のガイド

Page 82: Python & PyConJP 2014 Report

リファクタリングツール• 例えばPEP8の場合

• インデントはスペース4つで

• 行の長さは最大で79文字

• トップレベルの関数やクラス間は2行空ける

• クラス名はCapWords方式を使いましょう

• 関数名は小文字のみ、単語間はアンダーバーを使いましょう

• etc...etc...

Page 83: Python & PyConJP 2014 Report

リファクタリングツール• 別に守らなくても動きます

• しかしながらこれを守って書くのが基本

• ある程度意識して書いていてもたまには沿ってないところも出てくる

• というわけで、チェックツールがあります

Page 84: Python & PyConJP 2014 Report

リファクタリングツール• pep8

• PEP8ガイドラインに沿っているかチェック

• pep257

• PEP257ガイドラインに沿っているかチェック

• pyflakes

• 文法エラーがないかのチェック

• 他にも使ってないimportや変数も教えてくれる

• flake8

• pep8 + pyflakesを合わせてチェックしてくれるツール

Page 85: Python & PyConJP 2014 Report

リファクタリングツール• flake8を使うのが結構一般的

• 某社コードレビューのファーストステップでも使われているらしい

• 機能拡張も可能

• flake8-docstringを入れればPEP257も合わせてチェック可能

• 循環的複雑度分析も可能らしい

• setup.cfgを置くことでチェック内容のカスタマイズも可能

• 一行の長さは79文字じゃなくて100文字にしたい等

Page 86: Python & PyConJP 2014 Report

リファクタリングツール

• 基本的にflake8でチェックして直せば大丈夫

• とはいえ、手で一々修正していくのも、、、

• ある程度は自動で修正して欲しい

• そんなのあるの?

Page 87: Python & PyConJP 2014 Report

リファクタリングツール• 代表的な自動整形ツール

• autopep8

• PEP8に沿った形に自動整形してくれる

• autoflake

• 使ってないimportや変数の削除をしてくれる

Page 88: Python & PyConJP 2014 Report

リファクタリングツール• 他にもこんなものがあります

• docformatter

• PEP257に沿ったdocstringに整形してくれる

• unify

• シングルクォーテーションに統一した形に整形してくれる

• etc...

• あまり過信しないで上手く使えばコーディング時間が短縮できる

Page 89: Python & PyConJP 2014 Report

リファクタリングツール• リファクタリングとは外れるが便利なもの

• jedi

• エディタ上で補完機能を提供してくれるツール

• ドット区切り時に自動補完

• 関数の引数ヒントを表示

• Docstringの表示

• 関数定義場所へjump

Page 90: Python & PyConJP 2014 Report

リファクタリングツール• さらに突っ込んでリファクタリングしたい

• リファクタリング専用ツールを使う

• Rope

• jediよりさらにリファクタリングに特化したツール

• vim上でropeprojectを作成しコードを分析をさせる

• 対処ソース情報をdbとして保存

• 変数/関数/クラスのリネーム機能、ムーブ機能

• さらにはimport文の追記等色々とやれる

Page 91: Python & PyConJP 2014 Report

リファクタリングツール

• より定量的にリファクタリング箇所を探したい

• コードメトリックスを見る

• コードの複雑度のチェックをする

• 潜在的にバグになりそうな箇所特定の参考に

Page 92: Python & PyConJP 2014 Report

リファクタリングツール• Radon

• ABC評価でソースコードを評価してくれる

• 循環的複雑度でのチェック

• 保守容易性指数でのチェック

• 上手く利用することで適切に改善が図れる

• しかし、時間は有限

• オールAを目指して時間を費やすのは必ずしも良いことではない

Page 93: Python & PyConJP 2014 Report

リファクタリングツール• リファクタリングに有用なツールはPythonにも紹介した物以外にも沢山あるらしい

• コードを書く時間は有限

• 手に馴染むツールを見つけて適切に使う

• 注力すべき場所に注力する