開発言語 Python(その10)

【連載】

にわか管理者のためのLinux運用入門

【第171回】開発言語 Python(その10)

[2019/03/26 07:00]後藤大地 ブックマーク ブックマーク

  • サーバ/ストレージ

サーバ/ストレージ

サードパーティ製パッケージ

前回、Pythonでモジュールを作成してデプロイし、コードから読み込んで利用する方法を紹介した。ここまで進めばサードパーティ製パッケージを利用するための準備はほとんどできたようなものだ。「The Python Tutorial」にサウンドパッケージを作成する場合のサンプルが載っており、これを見るとパッケージのことがよくわかるようになる。

まずは「サードパーティ製パッケージ」というのが何なのかを知っておいたほうがよいだろう。Pythonのサードパーティ製パッケージは「PyPI - the Python Package Index」に多くが登録されている。まずは、このサイトを覗いてみてほしい。

PyPI - the Python Package Index

例えばPythonを使っていて、タブ区切りのデータファイルを処理する必要が出てきたとする。自分で処理を書いてもよいのだが、タブ区切りデータというのは結構一般的なデータ形式の1つなので、すでにこのデータを扱うための機能が実装されている可能性が高い。PyPIでタブ区切りデータ(tsv; tab-separated-value data)で検索すると、次のようにいくつもパッケージ(ライブラリ)を見つけることができる。

tsvで検索した結果

こうやって自分の欲しいパッケージを探し出せれば、自分で実装する場合と比べて開発時間を短縮することが可能になる。となると、スキルとしてはパッケージの検索やどのパッケージが良いのかを見極める能力が重要になるわけだ。自分で実装するのではなく、すでに実装されているものを探してきて使う。――これは本連載の主旨である”手抜きをする”ための最も基本的な方法でもある。

パッケージとは「モジュールをまとめたもの」

そこで、この便利なパッケージを使うために、まずはパッケージとはどういったものであるかを知っておきたい。答えはシンプルで、パッケージとは「モジュールをまとめたもの」だ。チュートリアルに掲載されている次のディレクトリ構造例を見ると、それがよく理解できる。

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

上記では「sound」というディレクトリがパッケージのトップディレクトリで、そのなかに「formats」「effects」「filters」というサブディレクトリが存在している。サブディレクトリには、モジュールにあたるPythonファイルが置いてある。このディレクトリ構造がそのままimportで指定するパスになっているわけだ。このように、複数のディレクトリを作成して利用できるようにすることで名前空間の切り分けを可能にしており、パッケージ間の名前の衝突を回避しやすくしているのである。

ここで、トップディレクトリの下に「__init__.py」というファイルが用意されている点に注目しておきたい。このファイルが存在していると、Pythonはこのディレクトリがパッケージのトップディレクトリだと認識する。__init__.pyファイルの中身は空でもよく、まずは存在していることが大切だ。

後は、このディレクトリを読み込み対象となるディレクトリにデプロイしておけばよい。この場合、例えばパッケージに含まれているモジュールを個別に読み込んで使用することができる。上記の場合、「echo.py」を利用したいなら、次のようにimportすればよい。

import sound.effects.echo

こんな感じで特定のモジュールを読み込んだ場合、次のようにフルパスを指定してモジュールに記載されている関数を利用する。

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

これを毎回書くのは面倒なので、次のようにimportすればもうちょっと短い名前で利用することができる。

from sound.effects import echo

この場合、次のように先ほどよりも短い記述でアクセスすることができる。

echo.echofilter(input, output, delay=0.7, atten=4)

名前が衝突しないようなら、次のように関数を直接importするような使い方も可能だ。

from sound.effects.echo import echofilter

この場合は直接関数名を指定して記述することができる。かなりスッキリ書けるようになったことがわかる。

echofilter(input, output, delay=0.7, atten=4)

このように、パッケージはモジュールをまとめたものなので、基本的にはモジュールを使うのと同じ要領で利用すればよい。

パッケージを活用しよう

では、パッケージがたくさん存在しているから開発が楽になるかと言うと、ちょっとそれはまた別の話だったりはする。パッケージを利用するというのは、他人が書いたドキュメントまたはソースコードやAPIリストを見て、その人がどのような考え方でそのコードを書き、利用可能な関数がどういった動きをするかを予測する能力というのを求められる。そうしたことが苦手な場合には、パッケージの利用は逆に多大な苦痛を伴うことになると思う。

それならば、ゴリゴリ自前で全部作ってしまえばよいのだが、開発時間的にそれは現実的ではないこともある。ある程度楽をしようとすれば、やはり多くのユーザーが利用していて、バグ修正なども活発に行われているパッケージを利用することを考えたい。うまく行けば、自分の労力をほとんど費やさずに、ほんの数十分のコーディングで目的を達成することができるようになるからだ。

他人のソースコードやドキュメントを読み、中身を予測して飲み込み、すぐに使いこなせるようになること。これは、これからのシステム管理者や開発者に求められるとても大切な能力だ。

【参考資料】
The Python Tutorial

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

ガートナー ジャパンは10月31日~11月2日、都内で「Gartner Symposium/ITxpo 2017」を開催。11月1日には同社 主席アナリストの青山浩子氏が登壇し「CIOが理解すべき統合システムの3大インパクト」と題する講演を行った。本稿では、講演の内容をダイジェストでお届けする。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
ソフトウェア開発自動化入門
PowerShell Core入門
徹底研究! ハイブリッドクラウド
[解説動画] Googleアナリティクス入門講座
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る