PyCon JPとは
PyCon JPは、Pythonユーザが集まり、PythonやPythonを使ったソフトウェアについての情報を交換し、Pythonユーザが交流をするためのカンファレンスです。
PyCon JP 2017は2017年9月7日~10日に早稲田大学西早稲田キャンパスで行われ、メインイベントとなる9月8日、9日のカンファレンス来場者は約700人と大盛況でした(9月10日のスプリントのみMicrosoft社で実施)。ご参加いただいた皆様、本当にありがとうございました。
ここでは2日間のカンファレンスのなかから、選りすぐりの注目セッションやイベントをレポートしていきます。
1日目基調講演「Python for Data: Past, Present, and Future」 ― Peter Wang
(陶山嶺)
カンファレンス1日目の基調講演は、昨今非常に注目を浴びてきている「Python」と「Data」を題材にしたPeter Wang氏による講演でした。Peter氏は、Numpy、Scipyの開発者であるTravis Oliphant氏とともにContinuum Analyticsを設立し、データサイエンス向けディストリビューションであるAnacondaの開発やPyDataカンファレンス、PyDataコミュニティを立ち上げてきた方です。
この講演は、Peter氏の自己紹介とともにContinuum Analyticsを設立した2012年から現在までのPythonやデータサイエンスをとりまく環境とその変化を振り返りながら始まりました。2012年時点ではビッグデータに関するカンファレンスでもHadoopやJavaを利用したセッションが多かったようですが、現在ではPythonはCMにまで登場するほどポピュラーな言語になっている、とユーモアを交えて紹介されました。
さて、5年前とは打って変わって非常にポピュラーになったPythonですが、なぜデータサイエンス分野でPythonを使うべきなのでしょうか。Peter氏が示したのは下記の2点でした。
- Pythonは教育用プログラミング言語であるABCをルーツとしているため、教育やプロトタイピングに向いている
- Pythonはソフトウェア開発からデータ分析まで広い領域をカバーしている
また、Peter氏は「Data science != Software Development」とも話していましたが、実際にPyCon JP 2017の参加者の中にもソフトウェア開発よりデータ分析がメインという方も多いようでした。これは他のプログラミング言語のカンファレンスではあまり見ないPythonの特徴のひとつですね。
Peter氏からは「What's Next?」と題したPythonの将来についての話もありました。Peter氏は、「Apache Arrow formatにより言語間での相互運用性が高まる」、「メモリやストレージ、GPUの改善によってより多くのことがローカル環境で実行できるようになる」などの予測をしていました。
そして、講演の最後では、Pythonに関連するコミュニティについて言及し、その特徴を「Huge Maker Community」と表現しました。これは、ScipyのようなPythonのメジャーで巨大なライブラリ群がソフトウェア開発者ではなく、ユーザー自身の手で作られていることを表した言葉ですが、端的にその特徴を捉えていると非常に感心させられました。
講演後には質疑応答がありましたが、こちらも活発に質問が飛び交いとても盛り上がりました。キーノートの様子は質疑応答も含めてこちらで動画配信していますので、ぜひご覧ください。
1日目注目セッション「ベンリに使おう変数アノテーション - typing.pyとの楽しいお付き合い」 ―Takumi Sueda
(陶山嶺)
Takumi Sueda氏による変数アノテーションをテーマにしたセッションを紹介します。Sueda氏はFuller, Inc.に所属するエンジニアで、普段はPythonやGo言語を扱っており、この講演はGo言語にあるUnmarshalerという機能を、アノテーションを利用してPythonへ移植してみるという内容のセッションでした。
まずPythonのアノテーションの背景として、PEP 3107、PEP 484、PEP 526の紹介がなされた後、移植したい機能であるGo言語のUnmarchalerについての説明がありました。Sueda氏曰く、これは「PythonのjsonライブラリよりPythonic」だと感じる機能のようで、本セッションのモチベーションはこの点にあったようです。
そして、ここからは実際にPythonでbuiltin型、ジェネリック型、カスタムクラスを正しく区別し処理するUnmarshalerを作成した過程を見ていきます。
最初にアノテーションとして渡した情報が、ジェネリック型にどのように格納されているかを調べるところから始まりました。まずはジェネリック型であるList[str]のmro()を呼び出し追っていきます。すると、typing.GenericMeta.__getitem__
が呼ばれ、そこからさらに自分自身のインスタンスを生成して返していました。そしてその際にself.__args__
へ渡されたstr
を格納しています。これはつまり、ジェネリック型の情報は__args__から取得できるということになります。
ちなみに筆者も手元で実際にやってみましたが、たしかに__args__で情報が取れていました!
そして、ここからさらにbuiltin型、ジェネリック型、カスタムクラスを正しく区別する処理が紹介されました。判別の方法はbuiltin型かどうかを判定、builtin型でなければジェネリック型かどうかを判定、ジェネリック型でもなければカスタムクラスかどうかを判定するという流れで作成したようです。
ここまでの一連の流れの説明をもってセッションは終了しました。実際に実装したコードはpuhitaku/typedmarshalリポジトリにあるとのことです。
そして、このセッションの動画はこちらにあります。非常に内容の濃いセッションだったため、セッション動画を見ながら実際に手元で動かしてみることをおすすめします!
1日目注目セッション「Pythonによる文章自動生成入門!Python✖自然言語処理✖ディープラーニング」 ― Hiromitsu Ota
(海老原由夫樹)
Hiromitsu Ota氏の講演を紹介します。このセッションでは、Ota氏が執筆された論文「Pythonによる文章自動生成入門!Python✖自然言語処理✖ディープラーニング」の内容を説明してくださいました。もともとが論文ということもあるためか、アカデミックな雰囲気の元でセッションが行われました。
自然言語処理の研究区分には「解析系・生成系・変換系」の3つがあるそうで、このセッションはその中の「生成系」の区分に当たるもののようでした。
文章自動生成における仕様として、ここでは以下を定義していました。
- 剽窃になってはいけない。そのまま過去の文章の引用にならないこと
- 独自性がある
- 300~500文字の自然な文章であること
しかしながら、インプットするデータはスクレイピングした文章であり、オリジナリティを出せるかどうか懸念があるそうです。以上の3点を踏まえたうえで、文章自動生成の話は進みます。
本題に入る前に、文章自動生成の盛り上がりに触れていました。海外ではコンテストなども開催されており、盛り上がっているのだそうです。
今回実施した実験で、採用した「マルコフ連鎖・自動要約・リカレントニューラルネットワーク/LSTM/GAN」の手法での実験概要を説明したうえで、実験結果として自動生成された文章が提示されていました。実際生成されたものをみると文としてきちんと生成されていました。まだ「文章」としては改善の余地はあるそうで、今後の課題でもあるようです。
生成された文章を言い換えることによる非類似度の変化についての説明もあるなど非常にボリュームのある内容で、皆さん真剣に聞いていたのが印象的でした。全体を通して見ても聴講者の皆さんは真剣に聞いており、この分野の関心の高さが伺えるセッションだったのではないでしょうか。
1日目注目セッション「Pythonと機械学習によるWebセキュリティの自動化」 ―Isao Takaesu
(海老原由夫樹)
昨今日本でも注目を集めているセキュリティ。そんな中でPythonとWebセキュリティについて講演いただいたIsao Takaesu氏のセッションをご紹介します。
Takaesu氏は本職のセキュリティベンダーではシステムの脆弱性を探し出す仕事をされており、その傍で趣味として機械学習を勉強していらっしゃいます。その中で得た知見をセキュリティの業務に生かせないか、さまざまな試みを行っているそうです。
序盤は主に脆弱性診断の基礎やセキュリティエンジニアの思考についてでした。
まずTakaesu氏はWebセキュリティの自動化の話の前提として、「現在はセキュリティ人材が不足しており、人間のみでは限界ではないか?」というお話をされていました。書籍やテレビで時折セキュリティ人材の不足を指摘する記事などを見かける機会があるので、頷ける人も一定数いるのではないでしょうか。
そこでTakaesu氏が紹介したのは「情報セキュリティの完全自動化」です。講演ではご自身の専門である「Webアプリケーション診断」の自動化にスポットが当てられました。そもそもWebアプリケーションはどのように行われるのか、課題はなんであるのかを現在ご自身が開発している「自動でWebアプリの脆弱性を検出するスキャナを例にとって話してくれました。セキュリティにおける機械学習というと、防御する側が検知するなどの場面で利用する話は聞きますが、攻撃する側で使用する場面というのは初めて聞いた方も多いと思います。
中盤からはいよいよ本題である自動化についてのお話でした。機械学習をするにあたり使用した理論をどのように使用しているのか、具体的な例をを提示して説明していました。このあたりから機械学習についての紹介となってきたので、内容を耳にした方もある程度おられたのではないでしょうか。いかに効率よく検査値の作成や学習を行うのかを考えるうえで役に立つ内容に、皆さん深く聞き入っていたようでした。
後半では今までの話の内容を開発中のシステムのデモ動画で見せてくれました。文章だけではなく、実際に脆弱性スキャンをしている様子とその結果を見ることで、さらに理解が深まった方も多いと思います。
講演全体を通して、聴講者の皆さんが話に聞き入っているように見えたのは非常に印象的でした。最近何かと話題になりやすいセキュリティに関する内容であり、機械学習をまた違った視点から導入したものでもあったので、他ではなかなか聞くことのできない講演だったのではないでしょうか。
1日目注目イベント メディア会議
(小林正彦)
メディア会議は今年初めて行うイベントです。技術書の編集者、著者の方々に来ていただき、技術系書籍ができるまでの現場の生の声を届けてもらいました。
本イベントは、形式の異なる2つの企画による2部構成となっています。
第1部は「あなたとメディア、新たな出会い」です。テーマに沿って進行させていくパネルディスカッション形式の部です。第2部は「登壇者とmeet up 本を書きたいあなたと握手」です。こちらは、第1部とは趣を変えて、登壇者と直接会話できる場を設けるものでした。
第1部 あなたとメディア、新たな出会い
以下の3つのディスカッションテーマに沿って話を展開していただきました。
- 「売れる本」と「売れない本」の違いとは
- 本を書くためにすること
- 編集者と著者のマッチング
近年の技術系書籍・Python関連書籍の出版事情の話から始まり、気になるけれどちょっと聞きにくい著者になってからのお金の話や、実際の執筆の場では具体的にどのように執筆作業を進めていっているのかなどをお話いただきました。各テーマとも、興味深い内容で非常に盛り上がりました。
登壇者
- モデレーター
- 原 一浩(グレーティブ合同会社 代表)
- スピーカー
- 緑川 敬紀(翔泳社 編集) / 高屋 卓也(技術評論社 編集) / 大津 雄一郎(リブロワークス 編集) / 岩崎 圭(『スラスラわかるPython』著者)/ 杉谷 弥月(『いちばんやさしいPythonの教本』著者)
第2部 登壇者とmeet up 本を書きたいあなたと握手
第2部ではカフェテリアに場所を移し、登壇者と直接話せるmeet upを行いました。
メディア会議1部での話を聞いて「自分も本を書いてみたくなった」、「こういう本を書きたいと思っているのだがどうしたらよいか」といった疑問や不安について相談してみようと、多くの方に足を運んでもらいました。登壇者と対面で直接話せるということもあり、開催期間中は相談者が尽きない状態でした。こちらも、カンファレンス参加者にとって有益なイベントだったのではないでしょうか。
今回のイベントをきっかけに、新しい本や、著者が生まれることを楽しみにしています。
1日目ライトニングトーク
(小林正彦)
PyCon JP 2017では、1日目、2日目ともにクロージングでライトニングトークを行いました。
今年のライトニングトークは両日とも8枠用意しました。トーク希望者には会場に用意していあるトークボードに開催内容を記載していただきましたが、開場後すぐに用意した8枠が埋まってしまうほどの人気でした。
ここでは、カンファレンス1日目のクロージングに行われたライトニングトークから2つを紹介します。なお、当日の発表者と発表内容の一覧、および動画のリンクを後述していますのでぜひご覧になってください。
「Introducing wsgi_lineprof」Miyazaki Yusuke
Miyazaki氏のLTは、自身で作成したWebアプリケーションのプロファイラ「wsgi_lineprof」についてのお話です。
まず、Miyazaki氏が参加されているISUCONについての紹介がありました。ISUCONとは「お題となるWebサービスを決められたレギュレーションの中でどれだけ高速化することができるかを競い合うコンテスト」です。
サービスを高速化するためには、ボトルネックとなっている箇所を特定し、チューニングを行わなければなりません。そのためにはプロファイラを使用します。プロファイラはPython標準のものも含め数多くありますが、ISUCONのように短い時間の中で結果を出さなければならない状況では、複雑な設定が必要になるようなものは使うのが難しいとのことです。
そういった課題をクリアするために、WSGIのミドルウェアとして「wsgi_lineprof」を作成されました。本プロファイルはWSGIに対応しているアプリケーションやフレームワークを使用していれば動作が可能とのことです。Webアプリを作るのが好きな人や今よりも速く動かしたいと思っている人は、ここで紹介いただいたプロファイルをぜひ使ってみてください。
今後はISUCONでPythonを使って結果を残していきたい、とMiyazaki氏は意気込みを語っていました。
「Dockerをローカルでドカドカ使う」@nasa9084
@nasa9084氏は、コンテナプラットフォームであるDockerについて、「具体的にどういったものをコンテナ化していくか」、そして「そのメリットはどのようなものか」について話されました。
コンテナ化の対象として以下の4つを挙げました。
- 言語の実行環境のコンテナ化
- テスト環境のコンテナ化
- データベースのコンテナ化
- コマンドのコンテナ化
各ケースごとに具体的な実行例を示しながら、メリットとデメリットについて説明しました。
ローカルな環境でDockerを使うメリットとして、「OSに依存しない環境を用意できる」、「アプリケーションの配布が容易」、「テスト実行ごとに初期化した環境を用意できる」、などを挙げられていました。
Dockerは、アプリケーションやミドルウェア単位で利用することができるのも利点の1つです。Dockerをよくわからないという人は、いきなりプロダクションレベルでの利用を目指す前に、まずはローカル環境でVMのように使ってみてその便利さを実感して欲しいと強調していました。
1日目ライトニングトーク一覧
次回は?
1日目のカンファレンスレポート、いかがでしたでしょうか。PyCon JP 2017のカンファレンスは2日間で40を超えるセッションが開催されました。今回紹介できなかったセッションは下記のリンクから見ることができます。ぜひご覧になってください(ビデオや資料へのリンクも掲載する予定です)。
次回、カンファレンス2日目のレポートもお楽しみに!