AKARI Tech Blog

燈株式会社のエンジニア・開発メンバーによる技術ブログです

pyOpenSci Pythonパッケージガイド日本語版を公開しました

こんばんは! 今週のAKARI Tech Blogは、DX Solution 事業本部 Dev の小山が担当いたします。

私は現在、DX Solution 事業本部でAIの社会実装に取り組んでいます。その際に使用しているPythonは、今や世界中で最も人気のあるプログラミング言語の1つとなりました。その適用範囲も非常に広く、データ解析、機械学習、Webなどの分野で広く使用されています。科学や工学の分野でも例外ではなく、Pythonは科学計算や数値解析の分野でも高い評価を受けています。

ここ数年、オープンソースPythonパッケージが次々と公開されたことにより、それらをサポートする「pyOpenSci」というコミュニティの取り組みが注目されています。

この度、私のプライベートでのpyOpenSciにおける取り組みとして、「pyOpenSci Pythonパッケージガイド」の日本語版を公開いたしました。本ガイドは、pyOpenSciが提供する科学分野向けのPythonパッケージの概要を説明しており、各パッケージの特徴や使い方を詳しく解説しています。今回は公開を記念して、このガイドを学ぶことにどのような意義があるのかについて解説をさせていただきます!

目次

TL;DR

Python パッケージの作成とコミュニティ運営についてのベストプラクティスについて学べるページを公開しました。 また、Python のパッケージングを支援するために利用可能なパッケージングツールの活発なエコシステムを知ることができます。

想定読者:自分の研究を社会実装やオープンソースへの貢献に興味がある研究者や開発者

Pythonパッケージを共有すると何がうれしいのか?

研究開発の分野では、今日もコードや個人開発のツールが大量に作成されています。しかし、それらのコードの共有が重視されていないのが現状です。これらのコードを共有する際、Pythonのパッケージを活用すると、研究開発のコードを簡単にパッケージ化して共有することが考えられます。

そもそも、Pythonのパッケージとはなんでしょう?

Pythonのパッケージとは、関連するモジュール(.pyファイル)をまとめたディレクトリ構造のことです。プログラムを部品化し、再利用しやすく整理するための仕組みです。パッケージを使うことで、機能ごとにコードを分割できるため、保守性や拡張性が向上します。また、外部のライブラリを自作のプロジェクトに簡単に取り込むことができるのも、パッケージの利点です。

たとえば、数値計算を効率的に行うためのnumpy やデータ解析を支援する機能を提供する pandas といった有名なライブラリも、すべてパッケージとして提供されており、pip install コマンドや conda installコマンドで簡単にインストールし、import 文で利用できます。

import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6]])
a.shape

このように、Pythonのパッケージはコードの整理、共有、再利用のための基本単位となっており、Python開発において欠かせない存在です。

NumPypandasPythonのライブラリの中でもかなり汎用的なライブラリです。これらのライブラリは、何千人もの人々が、様々な種類のデータを使った様々なアプリケーションに利用しています。このような広範なアプリケーションと大規模なユーザーベースを持つパッケージを公開する機会は私たちにはほとんどないでしょうが、特定の限られた研究分野に特化したライブラリも多く公開されています。

例えば、Crowsetta:というライブラリは、動物の発声や生物音響データの注釈付けを行うために設計されたパッケージです。このパッケージは、ユーザー固有の研究ワークフローに関連する特定の個々の研究アプリケーションに焦点を当てるのではなく、科学者がさまざまなタイプの生体音響データを処理するのを支援します。pyOpenSci Open Peer Review & Accepted PackagesというページにはpyOpenSciコミュニティが収集されたパッケージの一覧が公開されています。ぜひ皆さんが専門にしていたり、興味を持たれている分野のパッケージを探してみてください。

Pythonのパッケージ化は研究開発や社会実装の現場でのコード共有を促進するための有効な手段です。パッケージ化により、コードの再利用性が高まり、研究開発の効率化につながり。また、パッケージとしてコードを提供することで、ユーザーにとってもインストールや利用が容易になります。

オープンソースで公開されている科学分野のPythonパッケージ群

パッケージガイドの内容紹介

この節ではパッケージガイドの内容について紹介をさせていただきます。パッケージガイドというと、パッケージをPyPIやconda-forgeに公開してインストールできるようにすることだけを解析していると考えるかもしれません。

しかし、コードをPythonのパッケージとして公開することは、単にソースコードGitHubに置くだけではありません。それにより発生する、ドキュメントの整備、テストの実装、依存関係の管理、バージョン管理、ライセンスの明記、PyPIへの配布など、総合的なソフトウェア整備のプロセスを意味します。これは言い換えれば、あなたの技術や専門知識を再利用可能な形で社会に共有して社会実装をしてもらうという営みになります。

以下の図は、Pythonパッケージ化に伴って発生する開発・公開・利用の流れを示しています。このガイドブックではこららの全ての流れについて詳細な手順をサポートしています。

Pythonパッケージングのフロー

パッケージ作成後のサポートについて

前節までで、パッケージ作成のためにパッケージを公開することの意義と、それにより学ぶべき事項について解説しました。これらは、かなりワクワクする活動ですが、皆さんが第一歩を踏み出す心理的なハードルが上がったかもしれません。そんな皆さんのために、私たちのコミュニティはそのハードルを下げるためのサポートもしています。それが、pyOpenSciが行っているpeer reviewという活動です。以下の図にこの活動の内容についての流れを説明しています。

①これは研究者が論文をレビューを受けるように皆さんのパッケージをpyOpenSciコミュニティでレビューをします。それにより、皆さんのパッケージが前節でご紹介したガイドの基準に沿っているかをレビューします。

②皆さんが公開したパッケージをJOSSというジャーナルに投稿することを支援します。JOSS(Journal of Open Source Software)は、オープンソースソフトウェアのための査読付き学術ジャーナルです。研究コミュニティが開発したソフトウェアの信用性や再現性を高め、引用可能な形で公開・共有することを目的としています。これにより、皆さんのパッケージが研究や社会実装に使用された際に、その論文を引用することで皆さんの実績を構築することを支援することができます。

③皆さんのパッケージのメンテナンスが他の大きなコミュニティのサポートを受けられないかを判断します。例えば、天文学の分野のパッケージであればAstropyコミュニティの支援が受けられるなどの判断が行われます。

以上のようなサポートをコミュニティで行っていますので、ぜひ気軽に今回公開したガイドを使用して皆さんの成果をPythonパッケージとして公開することを検討してみてください。

まとめ

本記事では、科学技術分野におけるPythonパッケージの重要性と、それを支援するコミュニティ「pyOpenSci」の取り組みについて紹介しました。

Pythonは研究や社会実装の現場で広く使われており、パッケージ化によってコードの共有・再利用が容易になります。特に、研究者自身が自分のツールやアルゴリズムをパッケージ化することで、他の研究者や開発者にも活用される可能性が広がります。

今回ご紹介した「pyOpenSci Pythonパッケージガイド(日本語版)」では、単なるコードの公開にとどまらず、ドキュメント整備、テスト、ライセンス管理、PyPI公開など、社会実装を見据えたパッケージ開発の流れを丁寧に解説しています。

また、pyOpenSciのコミュニティでは、パッケージの品質向上を目的としたピアレビューや、JOSSへの論文投稿支援、大規模コミュニティとの連携支援なども行われており、はじめてパッケージを作る人でも安心して取り組むことができます。

自身の研究成果や開発物をより多くの人に届けたいと考えている方は、ぜひこのガイドを活用し、Pythonパッケージとしての公開に挑戦してみてください。

ライセンスについて

本記事の画像はpyOpenSciの画像を使用させていただきました。ライセンスはhttps://github.com/pyOpenSci/python-package-guide/blob/main/LICENSE - (CC BY-SA 4.0)です。

We’re Hiring!

燈では、Pythonを使用して最新技術を社会実装するAIエンジニアを募集しています! 興味がある方は、ぜひカジュアル面談でお話しましょう!

akariinc.co.jp

www.wantedly.com