PyCon JP 2017座談会 概要
- 日時:2017年8月21日 19:30~21:30
- 場所:翔泳社 会議室
- 参加者:清水川貴之(しみずかわ・たかのり)、林田千瑛(はやしだ・ちえ)、武田俊之(たけだ・としゆき)、 嶋田健志(しまだ・たけし)、末田卓巳(すえだ・たくみ)
- 司会:海老原由夫樹(えびはら・ゆうき)
- 執筆:海老原由夫樹、小林正彦(こばやし・まさひこ)
第一部 普段やっていること編
Pythonをやりはじめたきっかけ
――Pythonを使うようになったきっかけを教えてください。
清水川:2003年にZopeというWebアプリケーションを友人から教えてもらいました。そのときは日記サイトを自分で運営するためにPerlで書かれたソフトを拾ってきて動かしていたんですけど、当時の私にはPerlが難しくてカスタマイズするのが大変だったんですよね。それが、Pythonの前にZopeに触れたきっかけでした。Zopeは機能拡張の仕組みが内蔵されており、拡張するにはScript(Python)というものを追加して書けばいいと分かって、Pythonを触りはじめたという感じですね。自分の日記サイトをカスタマイズしたくて触り始めました。
末田:そのZopeのサイトって今でも運営されているのですか?
清水川:Zopeはもう使っていません。コンテンツだけ抜き出して、今は静的サイトジェネレータとしてSphinxを使ってサイトを運用しています。アプリケーションサーバを立てるのが大変なので。昔は自宅サーバを立てたりもしていましたけどね。
林田:自宅サーバーの電力問題がありますよね。
清水川:そうそう、サーバー用の部屋にクーラーが効いているけれど、寝室にはかけないとか(笑)。
林田:Python初期の頃から触られていたんですか?
清水川:今からみるとそう見えるかも? Python 2.3が出た頃なんですけど、第一次Pythonブームが終わってPythonの毛深い人たちが一度離れていった頃なのかも。「もうPythonじゃないよね」みたいな雰囲気があった時代。Zopeブームも下火になったころにPythonに出会いました。
末田:そのころにもうPython終わりとか言われていたんですね(笑)。
武田:(Python)2.1、2.2がいまいちだったんですよ。
清水川:Python 2.3までは日本語パックが別途必要で、2.4から多言語パックが標準装備されて、そこからやっと標準で日本語が使えるぞという感じになりました。
林田:Unicode問題で悩んでいたのすら記憶から薄れている。
清水川:うらやましい(笑)。
――では次は林田さんに伺います。
林田:私は、大学の研究では音声合成のアルゴリズムをC++で書いていました。社会人になってインフラエンジニアチックなことをやるようになって、スクリプト言語に触る機会が増えていきました。そういう中でPythonという言語も便利だなという声がちらほら聞こえてくるので、最初は仕事ではなく趣味レベルで触り始めました。
インデントがブロックになるので、自ずとコードをきれいに書かざるをえないというところが気に入ったのが最初でした。そのうち、仕事で書くスクリプトもPythonで実装するようになったり、Sphinx、Ansible、AirflowなどのPython製のツールで気に入るものが増えてきて、触る機会がどんどん増えていったという感じですね。
――インフラエンジニアがデータを整形したり、処理を自動化したりするときに手軽に実現できるのでPythonを触りだした、というのはよく聞きますね。
林田:bashだと、二次元配列が表現できないとか、マルチプロセスで処理できないとか、制約があるじゃないですか。好きな言語はScalaですが、そういったコンパイル言語に手を出す程じゃないなっていうときに、かゆいところに手が届く感じが好きですね。
末田:Scalaが一番好きな言語ということですが、今回の発表ではPySparkをテーマにしているというのは少し不思議に思いました。
林田:会社がPython文化なので、Scalaで開発してしまうと今後のメンテナンスが大変になってしまうという事情もあり。ScalaとPythonでいうと、Scalaで書く場合とPythonで書く場合とでOSのリソースの使われ方とかプロセスの挙動が違っていたりする点は面白いですね。
――嶋田さんの場合はどうですか?
嶋田:私は、最初はCで開発をしていました。その時の現場がネットワークにアクセスできない環境で、かつ、そこで使用していいテストツールが2つしかなくて。それがActivePerlとActivePythonだったんですけれど。その2つのどちらを使うかで、なんとなくActivePythonを入れたのがPythonに触れたきっかけですね。テキスト処理を動かしてみて、正しい結果が出力されるのを確認するために仕事で使ったのが最初でした。それ以降も開発・検証を主にやっていたので、Pythonを使ってテストツールを作成する機会が多かったですね。
清水川:ActivePythonを使っていたのはいつごろの話ですか?
嶋田:2005年くらいだったと思います。バージョンは2.4でした。触り始めてからは、仕事とは関係のない日常的に起こる処理を自動化するためにPythonを使っていました。面倒くさいことを一番手慣れていたPythonで書いていこう。という感じでしたね。
――自動化処理をPythonでという人は多いですよね。
嶋田:ActivePerlも使っては見たのですが、シジル(Perlの変数名などの先頭につく記号のこと)がよく分からなくて挫折しました。Pythonではそれがないので読みやすかった。
清水川:シジルという言葉をさらっと言われてどうしようかと思った。みんな知らなくてよかった(笑)。
――末田さんはいかがでしょうか。
末田:学生の頃はC、C++を頑張っていました。高専3年のときに現職の経営陣に会う機会があって、翌年にインターンに行くことになりました。その頃は自由度の高い言語としてPythonとRubyのどちらを選択するか迷っていたのですが、弊社CTOがPythonを使っていたということもあり、とどめを刺してもらったという感じですね。当時はちょうど3.3がリリースされた頃で、最初から3系を触れたのでいいタイミングだったとも思います。それから練習を始めて、どんどん楽しくなっていって、ユーティリティを書いたり、卒研もPythonでコードを書きました。
会社に入ってからは、ユーティリティも書いてますし、AWSにデプロイするコードなど、ほとんどPythonで書いてきました。最近はGoも触っています。
――会社はPython文化ということですか?
末田:そうですね。Rubyを書く人もいますが、今後保守をしていく上ではPythonで揃えたほうが良いよねという感じになっています。PEP8で書けば大抵きれいになるので。今日もPythonを書いてこちらに来ました。
――最後に武田さんお願いします。
武田:大学に勤め出したのが1990年で、それからUNIXのネットワーク管理や、データ管理、ユーザ登録などのいろんなスクリプトを自分の手で書いていました。最初はshellで動かしていたのをPerlに置き換えて、生産性が上がり内容も高度化しました。しかし、Perlではいくらでも読みにくいスクリプトが書けてしまいます。特に大学の仕事は一年単位のことが多いので、一年に一度しか見ないスクリプトは後から読めなくなったりします。なので、いろんなスクリプト言語の中で他にもっといいものがないかなと探しはじめて、Tclを使ってみたり、1995年くらいにRubyやPythonを見つけました。ただ、まだまだPerlを置き換えられるような完成度ではなかったんですよね。
Pythonをちゃんと触るようになったのは1990年代後半のバージョン1.5.2からです。その後、教育支援やコンテンツマネジメントにZope2を使いはじめました。「Environmental Acquisition」というオブジェクトで、環境の属性やメソッドを使えるというZopeの変わった機能が好きでした。
それから2005年くらいに並列計算をサポートするためにPythonを書き始めました。Hadoop以前のことで、当時はGlobus Toolkitというものを使っていました。並列処理をするためのプログラムはPythonのコードを中心に置き、そこからRなどをキックして動かすものでした。文系の大学なので並列と言っても30台位の規模でしたが。
末田:PythonとRのコミュニケーションはラッパーを使用するのですか?
武田:そうですね。rpy2というPythonからRを利用するインターフェースを使っています。
――皆さんの話を聞いていると、Perlを挫折してPythonを始めるケースが多いのかなという印象を受けました。
武田:挫折とは、ちょっと違うかなと思います。PythonもPerlもよいと思っていますが、自分の場合にはPerlは読みにくいプログラムになりがちで、Pythonの方がきれいに書きやすかったということです。
末田:思想が正反対ですよね。
清水川:Rubyも思想は近いので同じことになりそうですよね。自分もRuby書いてたときは、メソッドチェーンでガーっと書けるのがラクで楽しかったんですけど、やりすぎてあとで見たときに何を書いたか分からなくなりました。
末田:文法の中にある暗示的な動作がないから読みやすいのかなと思います。「Explicit is better than implicit.」とあるように言葉で書き下しますから、見ただけで動作が読めるというのが他の言語との違いですよね。
清水川:あとは、同じ目的のスクリプトは誰が書いても同じものができあがるというスローガン(There's Only One Way To Do It./TOOWTDI)がPythonにはありますよね。Perlは「いろんな書き方ができますよ(There's More Than One Way To Do It./TMTOWTDI)」というもの。真逆ですね。
武田:それとワンライナーで書ける素晴らしさと。
清水川:ただし読めない(笑)。