「Protocol BuffersをPythonで処理したい」
「JSON・XMLより、高速かつ小さい転送量でデータを扱いたい」
このような場合は、protobufの出番です。
protobufを使えば、PythonでProtocol Buffersに対応できます。
本記事の内容
- protobufとは?
- protobufのシステム要件
- protobufのインストール
- protobufの動作確認
それでは、上記に沿って解説していきます。
protobufとは?
protobufとは、Protocol Buffers(プロトコルバッファー)を扱うためのPythonライブラリのことです。
Protocol Buffersは、Googleが開発したシリアライズフォーマットになります。
そして、Protocol BufferはXMLのように構造化されたデータに対応しています。
「XMLが遅いから、新しく作ったった!」ということなんでしょう。
Google曰く、XMLの20〜100倍高速ということです。
同時に、データ量が3〜10倍小さくもなるとGoogleは主張しています。
あと、jsonと比較しても10倍以上は高速になるというデータもあります。
jsonやXMLよりも、転送量と処理速度がいづれも改善されるということです。
そんなProtocol BuffersをPythonで扱う際には、protobufの出番となります。
以上、protobufについて説明しました。
次は、protobufのシステム要件を確認します。
protobufのシステム要件
現時点(2021年10月)でのprotobufの最新バージョンは、3.18.1となります。
この最新バージョンは、2021年10月06日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、注意が必要となります。
公式(setup.py)には、つぎのように記述されています。
でも、Python 3.5以降しかインストールができないようになっています。
setup.pyには、次のように記述されています。
Python 3.5であったとしても、Pythonの公式開発サイクルには準じていません。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月 |
3.7 | 2018年6月27日 | 2023年6月 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
2021年末には、Python 3.6もサポート対象外となります。
そう考えると、Pythonのアップグレードをしておいた方がよいでしょう。
ここまでの内容をまとめると、OSは基本的には何でもOK。
ただし、Python 3.5以降が必須ということになります。
以上、protobufのシステム要件を説明しました。
次は、protobufをインストールします。
protobufのインストール
まずは、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 21.2.4 setuptools 58.2.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、protobufのインストールです。
protobufのインストールは、以下のコマンドとなります。
pip install protobuf
インストールは、すぐに終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ---------- ------- pip 21.2.4 protobuf 3.18.1 setuptools 58.2.0
protobufが依存するパッケージは、ないようです。
これなら、どんな環境にでも容易にprotobufを導入できます。
以上、protobufのインストールを説明しました。
最後は、protobufの動作確認を行います。
protobufの動作確認
動作確認は、公式の手順に従うと結構面倒です。
https://developers.google.com/protocol-buffers/docs/pythontutorial
そこで、動作確認に必要なモノ一式を用意しました。
公式の手順に従いつつ、面倒な部分をショートカットできるようにしています。
上記から、ファイルをダウンロードします。
ダウンロードしたファイルを解凍した中身は、以下。
上記のうち、次の二つはGitHub上でも公開されているサンプルコードです。
- add_person.py
- list_people.py
公開されているURLは、以下。
https://github.com/protocolbuffers/protobuf/tree/master/examples
ただし、add_person.pyは次の箇所を変更しています。
try: raw_input # Python 2 except NameError: raw_input = input # Python 3
Python 2は対象外であるため、try部分を除去する形です。
では、これらファイルを使ってprotobufの動作確認を行いましょう。
ファイルは、すべて同じ階層に設置します。
まずは、次のコマンドを実行します。
personの情報を、ADDRESS_BOOK_FILEに追加する処理になります。
python add_person.py ADDRESS_BOOK_FILE
実行すると、次のように入力を求められます。
>python add_person.py ADDRESS_BOOK_FILE ADDRESS_BOOK_FILE: File not found. Creating a new file. Enter person ID number:
適当に以下のように入力していきます。
>python add_person.py ADDRESS_BOOK_FILE ADDRESS_BOOK_FILE: File not found. Creating a new file. Enter person ID number: 12345 Enter name: test_person Enter email address (blank for none): test@test.com Enter a phone number (or leave blank to finish): 09011112222 Is this a mobile, home, or work phone? work Enter a phone number (or leave blank to finish):
処理が完了すると、同じ階層上にADDRESS_BOOK_FILEファイルが作成されています。
このファイルを無理やり、エディタで開いてみます。
バイナリファイルを無理やりエディタで開いたような感じです。
今度は、ADDRESS_BOOK_FILEを確認します。
次のコマンドで確認できます。
python list_people.py ADDRESS_BOOK_FILE
実行した結果は、以下。
>python list_people.py ADDRESS_BOOK_FILE Person ID: 12345 Name: test_person E-mail address: test@test.com Work phone #: 09011112222
入力した値が、表示されています。
ここまで確認できれば、protobufの動作確認は問題ありません。
以上、protobufの動作確認を説明しました。