PyCon JP 2019 カンファレンスレポート

2日目:農業もライブも! ますます広がるPythonの可能性

先日公開したPyCon JP 2019 1日目のカンファレンスレポートはいかがでしたでしょうか? 本レポートでは引き続き、2日目の様子をご紹介します。

PyCon JPは日本国内外のPythonユーザーが一堂に会し、互いに交流を深め、知識を分け合い、新たな可能性を見つけられる場所として毎年9月中旬に開催される国際カンファレンスです。今年は2019年9月14日のスプリント(HENNGE株式会社⁠⁠、9月15日のチュートリアル、9月16日〜17日のカンファレンス(大田区産業プラザPiO)と4日間の会期で開催されました。

今回は2日目に行われたカンファレンスの中から、注目セッションやイベントの様子を運営スタッフがレポートします。

各講演・セッションの紹介の最後に、動画やスライドのリンクも紹介してますので、当日参加した方もできなかった方も、気になったものをさらにチェックしてみてください。

基調講演「Pythonで切り開く新しい農業」―小池 誠

(nikkie)

2日目は、きゅうりの自動選別機の開発で有名な小池誠氏による基調講演から始まりました。

これまでの作品を紹介してから、⁠Pythonでなにか作って楽しむ人」と自己紹介した小池氏は

  • Makerのコミュニティに広がるPython
  • Pythonではじめる新しい農業

という2つのトピックについて話しました。

Pythonと農業について話す小池氏
Pythonと農業について話す小池氏

内容をもう少し詳しく紹介していきます。

オープンソースのソフトウェアには、ソースコードを見て、触発されてソフトウェアを書くという文化があります。これがハードウェアに広がったことがMaker movementの本質であると小池氏は説明しました。小池氏が今年MakerFaireに出展した「草取り自動運転ロボット」donkeycarをベースにしているそうで、触発されたモノづくりの一例だと思います。

そんなMakerのモノづくりにPythonが広がっているそうです。小池氏はその理由を共有しました。

1つ目は、⁠ロボットに高度な認知行動をさせたい」ために、Pythonを選択してディープラーニングに取り組むこと。 2つ目は、Pythonやmicropythonをサポートしたハードウェアが整ってきたこと(Raspberry PiやJetson Nanoなど多くのデバイスが紹介されました⁠⁠。

3つ目は、Pythonは読みやすく書きやすいため、ラピッドプロトタイピングに向いていることです。

実際、小池氏の作品を見ると、短い周期で発表されている上に、Pythonで組み込み開発やディープラーニング、Webアプリと広範な領域を扱っています。この3つの理由には納得ですね。

「Pythonでなにか作って楽しむ」小池氏は、農業にPythonを持ち込みます。小池氏の家はきゅうり農家を営んでいます。きゅうりをはじめとする果菜類は米やキャベツなどに比べて労働時間がかかります。収穫作業、選別を含む出荷作業、苗の世話をする管理作業など、手作業が多く、機械化が難しいと言われます。このうちの出荷作業の自動化に小池氏は取り組みました。出荷作業に時間をかけてもきゅうりの品質は上がらず、収量も増えないため、出荷作業時間を短縮して管理作業の時間を増やしたいというモチベーションからです。

画像認識分野におけるディープラーニングの目覚ましい成果に注目した小池氏は、きゅうりの画像を2,475枚用意して、9つのクラスに分類する試作1号機を2016年に製作します。きゅうりの画像データ収集期間が短く、データに偏りがあったためたまたまとのことですが、正答率は80%でした。

正答率を上げることを考えた小池氏は、人が選別するときにさまざまな方向からきゅうりを見ることに着想を得ます。そして上・横・下の3方向からきゅうりを撮影してデータを集めます。きゅうり8,500本分の画像を集め、分類モデルを作ったところ、正答率は91.6%でした。

そこで、ベルトコンベアを自作して、選別を自動化する2号機を完成させます。熟練者に見てもらうと、2号機の分類精度はまあまあでしたが、⁠ベルトコンベアの移動できゅうりのイボがとれてしまう」⁠選別が遅い」という欠点も分かりました。

ここで小池氏は方針を転換します。2号機まではAIで出荷作業を自動化することを考えていましたが、AIのサポートで人間の作業を効率化することにしたのです。3号機は、実用を考え、カメラの台数を1台に減らし、選別スピードを上げるためにカメラの解像度を落としました。そのため、きゅうりの画像と長さ・表面積・太さのデータから学習させたモデルの正答率は79.4%とこれまでより落ちました。しかしながら、実作業で半年間稼働させ、初心者が選別する場合より1.4倍スピードアップするという結果が出たそうです。

きゅうりの太さが季節ごとに変わるため、モデルに入力する長さなどのデータをキャリブレーションするというのは、農作物を扱う場面ならではのノウハウだと思いました。

3号機を利用する中で、小池氏自身がきゅうりの選別ができるようになったそうです。これは、熟練者のノウハウがAIで再現され、AIから小池氏が学んだということで、農業のノウハウの継承の可能性と評価していました。

現在小池氏は博士課程の学生として、農作物の品質を上げる研究や、農作物のデータ分析に携わっているそうです。⁠未来には農業のノウハウもpip installのように簡単にインストールできるようにしたい」と語る小池氏が印象的でした。

最後のまとめで「I don't learn for start something new, I try to start something new to learn.(何かを始めるために学ぶのではなく、学ぶために何かを始める⁠」という小池氏のマインドセットの共有がありました。全ては学ぶためと考えると、失敗はなくなるそうです(この点には私自身、非常に共感しました!⁠⁠。たしかに、小池氏はきゅうりの選別機の製作においても、試作機をアウトプットし、やってみてわかったことをインプットして、次のアウトプット(試作機)につなげています。New Eraということで「Python3で新しいこと始めてみませんか?」と結ぶ、PyCon JP 2019にふさわしい基調講演でした!

注目セッション「知ろう!使おう!HDF5ファイル!」―thinkAmi

(nikkie)

thinkAmi氏による「知ろう!使おう!HDF5ファイル!」をレポートします。

株式会社日本システム技研(所在:長野市)所属のthinkAmi氏は、ブログメモ的な思考的なやDjango Congress JP 2018、2019の登壇などで精力的にアウトプットしています。今回はHDF5ファイルについてのトークでした(ちなみに、thinkAmi氏の他にも日本システム技研のメンバーがIoTやライブコーディング(続くレポート)と多彩な発表でPyCon JPを盛り上げています!⁠⁠。HDF5ファイルは、たとえばKerasを使った機械学習で、モデルの保存に使われますね。

HDF5ファイルについて説明するthinkAmi氏
HDF5ファイルについて説明するthinkAmi氏

最初のパート「知ろう!」は、HDF5ファイルは初めてという方向けの導入でした。HDFはHierarchical Data Formatの略で、階層構造を持ったデータフォーマットを指します。あるディレクトリの下のディレクトリツリーをエクスプローラーやFinderで見ることができますが、HDF5ファイルは、そのディレクトリツリーをまるごとファイルにしたものと理解しました。5というのは現在のバージョンで、過去には4というバージョンもあったそうです。

HDF5ファイルは、次の3つの要素から構成されます。

  • データそのもので、ファイルに相当する「Dataset」
  • Datasetを入れるもので、ディレクトリに相当する「Group」
  • DatasetやGroupの注釈となる「Attribute」

HDF5ファイルの特徴のひとつは、クロスプラットフォームで使えることだそうです。

HDF5ファイルを見るためのツールを紹介した後、⁠使おう!」ということで、いよいよPythonからHDF5ファイルを操作します。サードパーティモジュールh5pyまたはPyTablesで操作できるそうです。画像やExcelファイルを読み込んで、create_datasetメソッドでGroupに保存したり、HDFファイルに含まれるDatasetをvisititemsメソッドで検索してから目的のDatasetを開いたりといった操作の紹介がありました。

HDF5ファイルはローカルに保存するだけではなく、REST APIを介してHDF5ファイルを共有できるサーバ(h5serv)や、サーバの機能をクラウドで使うためのサービス(HSDS)も提供されているそうです。

最後にHDF5ファイルのバージョンについての共有です。現在は1.8系と1.10系があり、1.8系は2020年5月でパッチリリース終了、また、1.10.2以前と1.10.3以降とでは互換性がないそうです。このトークを機に触ってみようという方にとってありがたい情報ですね。

機械学習で登場するHDF5ファイルがいったい何物なのか、このトークを聞いてわかりました。機械学習で使っているHDF5ファイルを覗いてみると、このトークで聞いたことの理解を深められそうです。

注目セッション「Pythonでライブをしよう -FoxDotを使った新時代のPython活用法-」―田中慎太郎

(横山直敬)

株式会社日本システム技研所属の田中慎太郎氏による発表です。

FoxDotとは、音響合成用プログラミング環境・言語のSuperColliderをPythonから操作するためのライブラリです。SuperColliderを用いるとリアルタイムに音響を合成することができます。SuperCollider自体は独自のプログラミング言語ですが、FoxDotによりインタラクティブシェルやJupyter NotebookからPythonの文法でSuperColliderの機能を使うことができます。

田中 慎太郎氏
田中 慎太郎氏

音楽や映像をインタラクティブに生成するパフォーマンスを「ライブコーディング」と呼びます。⁠ライブコーディング」の特徴は、偶然性と即興性のあるアルゴリズミックなアプローチができることです。

田中氏はDTMを趣味にしており「ライブコーディング」の存在自体は知っていましたが、当初はプログラミングする必要性に疑問を持っていたそうです。しかしそのDJたちは「コード」で踊らせる─⁠─人間と機械が⁠共創⁠するアルゴレイヴの世界という記事に触発されてライブコーディングを始めました。

FoxDotで使える音色は大きく分けて3種類です。

  1. play:ドラム音源。文字ごとに別々の音源が割り当てられている。
  2. loop:自前で用意した音声ファイルのループ。
  3. それ以外:シンセサイザーのような音。

FoxDotでは、PlayerObjectと呼ばれるオブジェクトで音色とその設定であるSynthDefsを操作します。SynthDefsでは、属性を編集することで音色や音高、長さを変更できます。

SynthDefsの中では繰り返し表現をしたり時間による変化をつけることができます。繰り返し表現はPatternObjectを使い、listの先頭にPをつけて表します。PatternObjectを使うことで冗長なコードを避けることができます。時間による変化はTimeDependentVariablesを使います。実行ごとに結果を変えることができます。

以下に示すのがFoxDotのコード例です。普段、目にしているPythonの文法とは大きく異なっています。PlayerObjectへのSynthDefsの割り当てにはシフト演算子が使われていますし、PatternObjectはlistが元になっています。この通常のPythonと異なる振る舞いはPythonのオブジェクトが持つ特殊メソッドを使って、元の振る舞いを上書きすることが実現していると説明していました。

d1 >> play("X-O-")
p1 >> pluck([0, 1, 2, 3, 4, 3, 2, 1], dur=1/2, amp=1.5) 
p2 >> pluck(P[[0, 1, 2, 3, 4])

Pythonは主にWeb開発やデータ分析で活躍していますが、これからはそこにライブコーディングも加わっていきそうです。トークセッションでは実際に田中氏がFoxDotを使ったライブコーディングを行う一幕もありました。実際にどのようなパフォーマンスができるのか気になる方はぜひ動画もチェックしてみてください。

注目セッション「新米Pythonistaが贈るAirflow入門 & 活用事例紹介」―松田直樹

(平尾元紀)

松田直樹氏による「新米Pythonistaが贈るAirflow入門 & 活用事例紹介」のセッションの紹介です。

Airflowとは元Airbnb製のPythonで作られたオープンソースで、バッチ処理からなるワークフローのスケジューリング&モニタリングが可能なプラットフォームです。現在はApacheソフトウェア財団が管理、開発を活発に行っています。AirflowではPythonコードでワークフローをDAG(Directed acyclic graph, 有向非巡回グラフとも)表現します。これによりワークフローを構成するタスクを作成し、処理を実行していきます。

Pythonコードでのワークフロー定義(DAG)を説明する松田直樹氏
Pythonコードでのワークフロー定義(DAG)を説明する松田直樹氏

続いて社内での活用事例について、その背景と解決方法、アーキテクチャについて共有がありました。 背景として、松田氏が所属する社内向けのデジタル広告プランニングツールプロダクトでは、データがRDBに入っていないことがあり、必要なデータの用意が大変であるという問題に直面したそうです。 そこで解決方法として、開発プロダクト用データマートを作成することで、RDBにファクト、ディメンションテーブルをETLで作成する方法を紹介していました。 具体的なアーキテクチャとしては、AWS Fargate上でAirflowを利用し、カラム名を寄せるなどの処理を実現し、活用可能なデータの取り出しを実現するというものです。 解決方法を実現する上でハマったポイントとして、タスク間のデータのやり取りと、Dockerを用いたローカル開発環境の構築について共有がありました。

松田氏はエンジニア業務に入って9月で1年とのことでしたが、AirflowとAWSのサービスを組み合わせ、開発をより円滑にするための業務改善に生かしている点が素晴らしいと思いました。筆者もそうですが、データ処理で困っているときは、タスクをワークフローで処理できるAirflowの発表を聞き直して活用していきたいです。

注目セッション「Ansibleを通じて「べき等性」を理解してみよう」―Kazuya Takei

(平尾元紀)

Kazuya Takei氏による「Ansibleを通じて「べき等性」を理解してみよう」のセッションの紹介です。セッションの前半は冪等性とAnsibleの関係について、後半はAnsibleがどのようにして冪等性を担保しているかについて話していました。

冪等性とはざっくりいうと、ある操作を何度実行しても、同じ結果になる性質を持つことを意味します。AnsibleはPython製の構成管理ツールで、主にサーバーのセットアップに用いられます。Ansibleでは「動作」でなく「状態」を定義して使用する特徴があります。Takei氏はこの理由を設定ファイル内のPlaybookを見ながら説明をしていました。 同じPlaybookを実行しても2回目以降は状態に変化がないことから、ある操作を何度実行しても同じ結果になるので、Ansibleは定義された「状態に対する冪等性」を担保されるようになっています。

Ansibleの概要を説明するKazuya Takei氏
Ansibleの概要を説明するKazuya Takei氏

セッションの後半に移り、実際のAnsibleのコードを読みながら、Ansibleがどのようにして冪等性を担保しているかについて話していました。pipコマンド経由で、Pythonパッケージの状態を管理するpipモジュールを例として取り上げていました。コードの内部では、求める状態に応じて、地道にコマンドを生成していました。実行結果(リターンコード、標準出力、標準エラー)を見ながら、状態に変化があったかどうかを判定していました。

Ansibleが実現している冪等性について理解するとともに、発表で取り上げられていたコード断片を見ていると、Ansibleの内部ではリターンコードの値を見ながら処理していて、人気のあるライブラリも中では地道に作られているのだな、ということを知る良い機会となりました。これを機に人気のOSSのコードをもう少し読んで、中で何を実現しているのかを理解したいと思いました。

ライトニングトーク

1日目と同様に、2日目のクロージングでも7枠の発表がありましたが、その中から2つのライトニングトークを紹介します。

「Python製シェルXonshの紹介」―Shunsuke Kawai

(nikkie)

日本人で一番Xonsh(コンシュ)にコントリビュートしていると自負するKawai氏によるXonshの紹介ライトニングトークです。

Xonshとは、Pythonとシェルスクリプトを扱えるシェル環境です。pip install xonshで導入できます。

書き慣れたPythonの構文やモジュールを使ってシェルを扱えるため、敷居が低いシェルという紹介でした。

Pythonの構文でシェルのコマンドを作れる例として、

  • pickleで保存したpandasのDataFrameを整形してシェル上に表示する
  • matplotlibで描画したグラフをシェル上に表示する

が紹介されました。

コマンドとしてまとめられるのはipythonより便利かもと感じました。Xonsh試してみたいです。

Xonshのコマンド例について話すKawai氏
Xonshのコマンド例について話すKawai氏

「PyConJP2018で勇気をもらってPythonエンジニアになった話」― Mizuki Sato

(横山直敬)

2日目の当日LT、Mizuki Sato氏による「PyConJP2018で勇気をもらってPythonエンジニアになった話」を紹介します。

現在、Mizuki氏はDjangoやVue.jsを使ってWeb開発をするPythonエンジニアとして働いています。去年のPyCon JP 2018の時点では、HR系システムのヘルプデスクで働いていました。手を動かしてものづくりをしたいと思って入社したMizuki氏は、少しSQLを書いたりトラブルシューティングのためにJavaやCOBOLのソースコードを読むくらいしか技術的なことができない環境に悩みながらもプログラミングの独学を続けていました。

独学していてもどこか自信が持てなかったMizuki氏は、初めて参加したPyCon JPで似たような境遇にあった@__yumechi氏のLT「PyCon JPで転職してみた人のホンネ」を聴いて「自分にでもできるかも」と思えるようになりました。そこから、Pythonエンジニアになるという目標を立て、⁠DjangoでWebアプリケーションを作って公開する」⁠ブログに学習記録を書く」という2つのことに挑戦し始めました。そして、その結果としてPythonエンジニアになることができ、さらに今ではDjango Girlsでプログラミング初学者にプログラミングを教える活動も行っています。

最後にMizuki氏は、2018年の自分のような境遇にいる人に対して、自分の経験を見て「できるかも」と感じてほしいというメッセージを伝えて発表を終えました。

「今年はPythonエンジニアとしてここに立っています!」という言葉に胸を熱くした参加者の方は多いのではないでしょうか。私もその一人で、PyCon JPはカンファレンスを通じて知識や技術を共有する場所というだけでなく、Mizuki氏や@__yumechi氏のように自分のキャリアを大きく変えるチャンスがある場所でもあることを強く認識することができました。

Mizuki Sato氏
Mizuki Sato氏氏

ライトニングトーク一覧

今回ご紹介しきれなかったものも含め、ライトニングトークの一覧はこちらです。また、PyCon JPの公式アカウントにライトニングトークの動画がアップロードされています。

  • Python製シェルXonshの紹介:Shunsuke Kawai
  • pythonで、処理をより効率化するためのTips集:長谷川大耀
  • Python in the Belle II experiment:Huang Kunxian
  • 1000人のっても大丈夫!!なWi-Fiを建てるお仕事:PyCon 2019 NOC Team
  • PyConJP2018で勇気をもらってPythonエンジニアになった話:Mizuki Sato
  • PyCon JP スタッフをして思うこと:nikkie
  • ZAPPA悲哀物語:IOSIF TAKAKURA

クロージング

スライド:PYCON JP 2019 COMMITTEE report

参加者報告

座長の吉田氏から今年の来場者数の発表がありました。9/14のスプリントには103名、9/15のチュートリアルには106名、9/16, 17のカンファレンスには951名が参加し、トータルで1,160名の参加者となり、今年も1,000人を超える大きなイベントとなりました。

参加者アンケート結果

PyCon JP 2019終了時に参加者の方に回答頂いたアンケートでは、ベストトークに池田大志さんの「Pythonによる日本語自然言語処理 〜系列ラベリングによる実世界テキスト分析〜」が選ばれました(詳しくはアンケート結果発表Blogに掲載⁠⁠。

一般社団法人PyCon JPおよび米Pythonソフトウエア財団からの報告

1つ目に一般社団法人PyCon JPから商標権の報告がありました。⁠Python」を商標登録している会社に対し、米Pythonソフトウエア財団(PSF)と一緒に行動するとのことでした。

2つ目に一般社団法人PyCon JPは、2019年は4つのPythonカンファレンスを支援し、10回のPython Boot Campを開催・計画したという報告がありました。また新しい試みとしてOSCにPyCamp Caravanとして参加することや、PyLadies Caravan、Python Boot Campの参加者にPyCon JPへの遠方参加支援を始めたとのことです。PyCon JP 2019でも金銭的なサポートや運営の相談に乗ってもらっており、一般社団法人PyCon JPはコミュニティを支える、なくてはならない存在となっています。

セッションの裏側ではコミュニティのミートアップも行われ、盛況だったとのことです。東京のPyCon JPだけではなく、ぜひタイミングがありましたら地方のPyConにも参加してみてください。

来年のPyCon JP開催予定

2020年度のPyCon JPの日程が8/28(金⁠⁠、8/29(土)と発表されました。場所は2019年と一緒の大田区産業プラザPioです。座長はまだ未定です。クロージングでは3年間座長を務めた吉田さんへ花束が贈呈されました。

来年のPyCon JPも楽しみですね。

追記:2020の座長が決定しました!PyCon JP ブログ

おすすめ記事

記事・ニュース一覧