大阪大学医学部 Python会

Now is better than never.

Python会とPythonとPython会で使われているPython

2020-07-03(Fri) - Posted by 小川 in 技術ブログ    tag:Python

Contents

    Python会は、Pythonを主に勉強したり研究に使ったりしています。 また、会の運営上の道具としてもPythonを利用しています。

    なぜPython会ではPythonなのか、そして研究以外で例えばどのように使っているか、あらためて紹介してみたいと思います。

    (主に新入会員向けの内容です。 すべて個人の見解です。 あと技術ブログなのに技術的内容には乏しいですがご容赦を。。)

    なぜPythonか?

    まず前半ではあらためて、なぜPython会ではPythonを学んでいるのか? についての僕なりの説明を試みてみたいと思います。

    プログラミング言語宗教戦争

    プログラミング言語の選択は宗教であるとも言われます。 実際に、プログラミング言語宗教論争あるいは宗教戦争のようなものは、人類誕生以来幾度となく繰り返されてきました。

    これはとても根強いもので、例えば本会「Python会」の名前を見るだけで、あいつらも宗教だ、などと言う人もきっといます。 [注1]

    そういう全ての言語が敵に見えるような仁義なき宗教戦争の中にあって、とりわけPythonは、支持者も多いが敵も多い、といった印象があります。 また他の言語ではC++などもそうです。 なぜでしょうか。

    汎用言語としてのPython

    これもまったく個人的な見解ですが、PythonとC++、両者の共通点は、きわめて汎用的で、あらゆるところで使われていることです。 [注2]
    それゆえ、あらゆる分野で他言語派から敵視されたりもするわけです。

    Python会では名前の通り、主にPythonを中心に (「だけ」ではないですが) 学ぶことにしています。 Pythonを選ぶことの利点を、新入会員の人たちは勉強会などでもいくつか聞いたかもしれませんが、僕はこの汎用性が最大のポイントだと思います。 実際、これほどあらゆる分野で、<高度かつ不安定な技術で無理矢理に>などではなく、普通に一線の言語として使えるものは他に選択肢がないと言っても過言ではありません。

    Python会では、やはり基本的に多くの人が医科学系の学術研究に興味を持っているので、その観点の話を聞くことは多いでしょう。 それだけでも、内容・分野は多様多岐にわたります。 でも同じPythonで、さらにその他にももっと色々なことができます。 その例はこのブログの記事にも多数あります。 最近のリレー投稿でも時々登場していますよね。 本稿の後半で紹介するのも、そのような例の一部です。

    あるいは例えばMacにはPythonが標準で入っていますが、それはシステムの一部がPythonで書かれているからです。 YouTubeDropboxなど多くのサービスやアプリケーションも、Pythonを主力として開発されています。

    広い世界を見る

    逆の方向を考えてみましょう。 各個別分野には、それぞれのガラパゴス化した世界が確かにあります。 様々な言語が使われています。 研究室などに入っても、Pythonなんかやめてウチの業界ではこの言語を使え、このソフトを使え、とか偉そうに言ってくるおすすめしてくれる人たちはいるかもしれません。

    でも基本的にはできるだけ耳を貸さない方がいいです。 タコ壺です。 その人たちには物凄く狭い世界しか見えていません。 その人たちとは違ってこれから多くの可能性と選択肢のある若者が、真に受けてはいけません。 [注3]
    実際の個別分野の研究でも、Pythonが使い物にならない分野なんてどこにあるのか?とも思います。 [注4]

    まあともかく、Pythonはそんな言語です。 もちろん多くの言語を習得し、場面に応じて使いこなせればそれが一番です。 でも医学系の人は基本的にはそれが本職でも、そこまで暇でもありません。 それなら、適所だといってガラパゴス言語に集中するより、Pythonを通して色んな分野や世界を見ることができた方がいい。 どちらも高いレベルでできるなら勿論よいですが、どちらかであれば圧倒的に後者がいい。 僕はそう考えています。

    Python会で使われているPython

    ここから後半です。 Python会自身が、会の運営用途などでどのようにPythonを活用しているか、各主要開発者等了承のもとで少しだけ例をあげて紹介します。

    同じ言語で同じPython会ですが、研究用途とは全く違う使い方です。 (繰り返しですが、それができるのがPythonです。)

    会Webサイトの作成運営

    このPython会Webサイトは、Pythonで作られています。 正確にはPythonで書かれたPelicanというシステムを使い、各ページのhtmlファイルなどを自動生成しています。 [注5]

    設定ファイルはすべてPythonコードで (変数の値などを) 書き、独自機能を追加したい時はPythonでプラグインを書きます (現在、Python会Webサイトオリジナルのものが10個程度あります) 。 その他の補助ツール群も、Pythonとシェルスクリプトの組み合わせで作られています。

    この用途に限れば、Python一択ということは別段ありません。 GitHubが標準として採用しているのはPelicanと似たJekyllというシステムで、こちらはPythonでなくRubyです。 [注6]
    またJavaScriptベースのものなども人気があります。

    しかし前記の通り、共通言語のPythonで書かれていれば、最低限のことは会員誰でも見ればわかります。 興味を持ったらすぐに勉強することができます。 コード資産のロストテクノロジー化を防ぐ意味でも、これは結構大事です。 Rubyの得意な先輩が卒業したらシステムを管理できる人がいなくなった、では笑えないですからね。

    なお現Webサイトの原型はPelicanの選択も含めてOBの平岡さんによるもので、さすがの慧眼だと思います。

    Slack Botの作成運用

    Slackで自動的にお知らせなどを流してくれる、あれです。 現在はoumpyというBotをSlackに配置し、その裏で2種類のPythonプログラムを独立に動かしています。

    Bot作成に関しても再び、これだけなら必ずしもPythonでなくてもいいです。 Web検索してみると、むしろJavaScript系言語の方が多いくらいです。 でもPythonを選んでいるのは、やはり上記と同じ理由です。 例えば医科学研究で解析にJavaScriptを使う人などはさすがにあまり聞いたことがないし、そのあたりが再び、狭い特定用途だけを見ていてはわからない違いになります。

    リレー投稿の順番お知らせ

    リレー投稿ちゃんねるのメンバーリストを見て、次週の担当をお知らせするBot。 会ではすっかりお馴染みに?なりました。

    順番を保ちつつ、途中の入退会にも対応するとか、祝日はお休みとか、実はそれなりに複雑な要素があります。 順番予定を投稿したり、リマインダを出したり、スレッド内とチャンネル投稿を切り替えるなど、必要に応じて使える豊富なオプション機能もあります。

    会員有志により、すべてPythonで一から書かれています。 [注7]

    AtCoder AC数ランキング

    毎週毎月、あるいは半期や年度ごとに、AtCoder Problemsをチェックし、各人がAtCoderで期間内に新しく解いた問題数 (AC数) を、会内ランキングにして発表。 途中経過を出す機能もあり、実際に利用しています。

    実は作られたのはこちらが先で、上記のリレー投稿Botはその改造版です (競プロのPython会への貢献例) 。 他の人が頑張っているのをランキングで見ると、自分もちょっとやる気になったりしますよね。

    競技プログラミング

    Python会存立に必須と言っても過言ではない (個人的見解) 競技プログラミング (主にAtCoder) には、もちろん多くの会員がPythonを主力言語として参戦しています。

    今年行われたシステム更新で、実行速度上のハンデは従来よりもさらに小さくなりました。 少なくとも初心者向けのABC (AtCoder Beginner Contest) の範囲では、Pythonで時間内に解けないような問題はまず出ません。 Python一本で、イエローコーダー (レート2000以上) までは最低でも到達可能です。 その先はそれが見えてから考えればいいです。

    まとめ

    • Pythonは汎用言語
      • これを通じて色んな分野、色んな世界を見よう
    • 研究以外にもPython会で実用的に使っているPython
      • Webサイト作成、Bot作成、競プロなど

    何でもPythonでやってみよう!!

    おしまい。

    注記

    注1 : 「Python会は宗教」

    まあ大抵、こういうことを言う人自身の方が実はもっとずっと、プログラミング言語の宗教性に囚われているものではあります。

    注2 : PythonとC++の汎用性

    この2言語の間でも、汎用性の意味や形はかなり異なります。 両言語が直接競合する場面は比較的限定的で、相互補完的に使われることが多いと思います。 例えば医科学研究でC++をガリガリ書く場面などは、 (分子シミュレーションなど一部分野を除き) そう中々あるものではないでしょう。

    また元々Pythonで確立・実装されたソフトウェアやライブラリを、実行速度その他のためにC++で再実装することなどは珍しくありません。 (例 : ChainerPyTorch)

    注3 : 耳を貸さない、真に受けない

    一方で大人の事情はどこにもありますから、社会人としてのお付き合いもほどほどに大切ではあります。

    あとPythonをやめるのではなく他のものもちょっとやってみること自体は、もちろん勉強にもなるし全く悪いことではありません。

    注4 : Pythonが使い物にならない分野

    汎用性の低い特定言語等が分野内で業界標準となっており、技術的にはともかくコミュニティとして、それを使わないと相手にされないケースなどはなくはないと思います。

    ただ、そういうところは遠からず分野コミュニティごと滅びないか、と側から見て心配ではあります。

    注5 : Pelican

    システムはすばらしいのですが名前が一般名詞すぎて、ググラビリティが異常に低いのが難点です。 公式サイトには、名前の由来としてなんとかのアナグラムであるとか意味不明なことが書かれています。 アナグラム前の方がましだよ。。

    注6 : Ruby

    まつもとゆきひろ氏開発の日本原産プログラミング言語。 中途半端なPythonとは違い完全オブジェクト志向であるなど、それ自体は非常に優れた言語です (と、理解しています。 普段自分では全く使いませんが) 。

    現在はWeb系言語の色彩が強いですが、環境が整えば、将来Pythonに匹敵する汎用言語として台頭する可能性も、あるんじゃないのかなと思っています。 今すぐ、とはいきませんが。。

    注7 : Pythonで一から書かれている

    PythonはC/C++などと同じく、配列添字が 0 から始まる 0-indexed 言語です。 なので仮に完全フルスクラッチなら、「零から書かれている」と言う方が正しいです。 しかし本Botの場合、さすがにライブラリの類はSlack APIをはじめ色々使われており、零からは言い過ぎ、よって一から、ということになります。 (うん、つまんないですね、、失礼しました。)