ごまだれ日記

プログラミングの技術メモとか

PyCon JP 2019に参加してきた

pycon.jp

にわかPython使いですが、掲題の通りPyCon JP 2019に参加してきたので、遅ればせながら感想を書きます。
PyCon JPは今回が初参加です。

1日目

Pythonでの開発を効率的に進めるためのツール設定

www.slideshare.net

普段Pythonを書いてないものですから、静的解析ツール、コードフォーマッター、UTフレームワークなどにどのようなものがあるか知りませんでした。
そういうことが知りたいなーと思って聴講したのですが、まさにこちらのセッションで一通り知ることができました。本格的にPythonを書くなら必須の知識となりそうですね。
flake8は静的コード解析ツール、blackはコードフォーマッターで、mypyはtype hintのチェッカー、pytestはUTフレームワーク、そしてtoxは複数バージョンのPythonでテストを実行するためのvirtualenvやテストタスクの管理ツールです。
だいたいpipでインストールできて楽なのがPythonの良いところですね。

ちょっと遅れてしまったのと、レシーバーがないと聴けないセッションだったのに気づかずにあたふたしてしまったことで
冒頭は聴けなかったのですが、スライドを後から見直すことができて助かりました。

Djangoで実践ドメイン駆動設計による実装

現時点ではスライドが上がっていないようですが、動画はありました。
動画が上がるならわざわざ現地に行かなくてもいいのではないだろうか?
www.youtube.com
ドメイン駆動設計自体について「言葉は聞いたことあるなあ」という程度の認識だったのですが、
Djangoでの例の前に、ドメイン駆動設計自体についても説明があったので助かりました。
まあ理解できたかというと微妙ですが…発表ではなく私の理解力の問題で。

「エリック・エヴァンスのドメイン駆動設計」という定番の本があり、私もKindle版を持っている(読んだとは言っていない)のですが、
こちらの本は抽象的で難解とのことでした。ちょっとガックリ…

こちらのサイトがわかりやすいとのことなので、時間を見つけて読みます。
nrslib.com

Python による日本語自然言語処理 〜系列ラベリングによる実世界テキスト分析〜

speakerdeck.com
MeCabやKuromojiは知っていましたが、Pythonにはnagisaという類似のツールがあるということでした。nagisaはもちろんpipでインストールできます。
ただ、前2つが形態素解析を行うツールであるのに対し、nagisaは原型を求める処理がないところが形態素解析とはちょっと違うそうです。

手元でnagisaをインストールして動かしながらやりましょう、ということだったのですが、あいにくノートPCを持っていなかったのでできませんでした。
やっぱりこういったカンファレンスではノートPCは持参したほうがいいんですかねぇ。

ちなみに家で試してみたところ、「すもももももももものうち」はうまく解析できませんでした。kuromojiだと正しく解析してくれるのですが。ちょっと残念。まあ、何か設定やらオプションやらを変えたらできる可能性もありますが、そこまでは検証していません。

Pythonを使ったAPIサーバー開発を始める際に整備したCIとテスト機構

speakerdeck.com
本格的に開発するなら、CIも必須ですよね。普段の業務ではJenkinsを使っているのでよくわかります。
CIツールを使って、最初の「Pythonでの開発を効率的に進めるためのツール設定」で紹介されたようなツールを動かすわけですね。
(まあ、実行タイミングとしてはCIだけじゃないのですが)

Pythonでは具体的になんというツールを使うのかな、というのが知りたくて聴講しました。
CIツールの選択肢はいくつかあるようでしたが、こちらの発表ではCircel CIを使った事例が紹介されました。それがPython開発においてはスタンダードなのか?ということまではわかりませんでした。今思えば質問すればよかったですね…

CIツールの話だけでなく、そもそもどのようにUTを書くのかという内容もありました。
たとえば「外界」との接続が発生するコードのテストについて、私は全部モックでやればいいじゃんと思っていたのですが、
DB接続が発生するコードについては、SQLが本当に正しいのかのチェックなどのためにあえてテスト用DBを立ててテストする手もあるという話でした。
なるほど!

ちなみに、最初の発表で出てきたflake8、mypy、pytestなどはこちらの発表でも出てきました。

ListはIteratorですか?

docs.google.com
Pythonの組み込み型の継承関係、および型を意識したコーディングのやり方についての発表です。
タイトルの問いの答えはNoで、ListはIteratorではないがIterableであるということでした。どうでもいいですが、JavaのListでも同じですね。
関数の引数として、ListではなくIterableを受け取るようにすれば便利だねという話なのですが、Pythonは動的型付けなので、通常は静的な型のチェックはできません。
そこでtype hintが登場するわけですが、type hintは実行時は無視されるため、チェックツールが必要になります。そういうわけで、(私から見れば)3度目のmypy登場です。とてもよく使われるツールなのですね。

2日目

unittestで始めるユニットテスト入門

docs.google.com
Pythonの標準ライブラリとして組み込まれているunittestについての紹介でした。
UTフレームワークが標準で使えるのはさすがPythonといったところでしょうか。JavaでいうならJUnitが標準で入っているようなものですから。まあRubyとかGoでもそうだった気がするので、この場合Javaがアレなんじゃないかという気もしますが。
まあそれはともかく、使い方を事細かく説明されていたのでよかったです。あと、unittestではモックも使えるんですね。JUnitより高機能かもしれません。

それと、pytestについての紹介と、unittestからの移行方法についても発表がありました。pytestもまた(私から見れば)3度目の登場です。
unittestはけっこう高機能だと思いましたが、pytestはもっと高機能なようです。結局、可能であれば最初からpytestを使ったほうがいいんですかね?

Anaconda環境運用TIPS 〜Anacondaの環境構築について知る・質問に答えられるようになる〜

GitPitch Slide Deck
condaコマンドとpipは可能な限り共存しないほうがいい話と、仮想環境便利という話でした。
前者はcondaコマンドを優先して使い、condaコマンドでインストールできないライブラリについてだけpipでインストールすべきということでした。
逆にcondaを封印してpipで統一するのでもいい気がしたのですが、どうなんでしょうね。これも質問すればよかったかも。

pytestによるCIレボリューション

speakerdeck.com
またしてもpytest、Circle CIです。とても人気なんだなということがよくわかりました。
類似の内容の発表が既にあったというのと、あと2日目の最後ということで、疲労もあって内容をはっきりとは覚えてないです。(すみません)
スライドを見返してみますと、VS CodeやPyCharmでのpytestの実行方法、Circle CIとSlackの連携などが説明されており、
実務に即した良い発表だったと思います。

その他

ランチセッション、ポスターセッション、LTなどもあったのですが、あまり参加できませんでした。

まとめ

Pythonについては興味があって多少は勉強してきたのですが、実務でどのようなツールを使うのかは全然知りませんでした。
しかし、今回のセッションのおかげで実務で具体的にどんなツールが使われているのか知ることができました。
3回も出てきたmypy、4回も出てきたpytestはバッチリ覚えました。

特に印象的だったのはmypyです。mypyはtype hintのチェッカーですから、mypyを使うということは、動的型付けであるPythonであえて型を明示するということですからね。
私は普段業務でJavaを書いていますから、静的型付けのありがたみはよくわかっているつもりです。逆に動的型付けの言語ではどうやって品質を担保するのだろうと思っていたのですが、結局型を明示するんかい!
他の動的型付けの言語はともかく、少なくともPythonではそういう方向に進んでいるんですね。とても興味深いです。

そんなわけで、2日間でたくさんの収穫がありました。今後私がPythonを実務で使うことになるかどうかはわかりませんが、もしそうなったら今回学んだことは直接的に役に立ちそうです。ありがとうございました。