17年周期ゼミ「ブルードX」から見たPythonの変遷
読む所要時間: 13 分
米国東部では17年おきにブルードXと呼ばれる種類のセミが、数十億匹も地中から這い出してきます。前回の発生が2004年、そして今年2021年に再び羽化の時期を迎えます。
これらのセミたちが追い付くには多くのことが変化した17年ですが、Pythonプログラミング言語も非常に多くの更新を経てきました。2004年5月にリリースされたPython 2.3.4を調べて、この周期ゼの視点から、現在のPythonでのコーディングと異なる点を確認しましょう。
from may_2004 import newest_python_version
旧バージョンのPythonはpython.orgから引き続き入手可能です。前回周期ゼミが発生した頃のPython 2.3.4も含まれます。
このリリースアーカイブページには、Windowsインストーラーのほか、2つのtarballソースリリースファイルが置かれています。これらのファイルは自ら手動でコンパイルするか、MacPythonで使用することができます。私はMacユーザーですが、利便性から主に仮想マシンでWindowsインストーラーを実行して使用しています。
インストール後、Pythonシェルを開いて好きなコードを実行できます。
現在、この機能は言語に組み込まれ、インポートの必要はありません。
ブーリアンタイプ
Python 2.3以前のTrue
とFalse
は言語に含まれる定数でしたが、専用のタイプを持たない単なる1と0の整数値でした。2004年バージョンでは、bool
タイプとして言語に組み込まれ、任意のPython値をTrue
またはFalse
に変換するコンストラクタを備えています。
厳密なタイプチェックを言語に追加するためでなく、コードを読みやすくすることが目的でした。現在でも、あえてこれらの値を整数として扱うことが可能です。
リリースノートには、Pythonはこのような厳密さは不要と記されており、その点は現在も受け継がれているようです。
2004年の周期ゼミによるPythonの使用方法
Pythonの開発環境は、前回の周期ゼミ発生時とは大きく変化しています。そこで、現在でもよく使われる一般的なタスクのコーディング方法を見てみましょう。
HTTPリクエスト
HTTPリクエストを実行するため、2004年バージョンにurllib2が導入されました。HTTPSは使えませんが、それ以外は問題なく機能します。例えば、International Space Station Open Notify APIを使用し、ISSの現在位置データを取得するコードを作成しましょう。
新しいrequestsライブラリーなどを使用すると、さらに効率よく作成できます。
モジュールインストール
2004年の周期ゼミが標準ライブラリー以外のモジュールをインストールするとしたら、Distutilsを使う必要があります。
サードパーティモジュールには、お使いのシステムに対応するインストールソフトウェアが付属することもありますが、多くの場合は付属していません。インストーラーがない場合は、ソースからビルドする必要があります。Distutilsによりこれが標準化されました。ほとんどの場合、READMEに記された手順を読み、次のようなコマンドを実行すれば済みます。
Python Package Indexは2003年時点で存在していましたが、pipは導入されていませんでした。
ファイルI/O
ファイルの読み取り/書き込みは、開発者がどのプログラミング言語でも行う、最も一般的なタスクです。Pythonでは、多くの開発者がwithステートメントを使用して、ファイルの読み取り/書き込みコードを簡潔にしています。これにより処理を完結させ、事後にファイルの閉じ忘れを防ぐことができます。
このキーワードは、2005年バージョンまでは使用できず、当時の周期ゼミはこのキーワードに馴染みを持たずにいたでしょう。次のコード例のように、ファイルはまだ手動で閉じる必要がありました。
2021年バージョンのファイル読み取りコードは、もう少し整理されています。
2004年にはなく、現在存在するPythonの機能
2004年から多くの変化がありました。周期ゼミたちがPythonを使うとしたら、多くの情報を更新しなければなりません。前回の出現時期の後で追加された、いくつかの機能を振り返りましょう。
pip
先述のように、当時の周期ゼミはサードパーティモジュールのインストールを、Distutilsにより手作業で行う必要がありました。現在は、パッケージ管理ソフトウェアpipがあります。Python Package Indexにアクセスし、モジュールのインストールは大幅に簡単になりました。
自分でsetup.py
スクリプトを実行しなくても、例えば次のようにテキストメッセージの送信コードを作成できます。
数秒(またはモジュールのインストールに要する時間だけ)で、サードパーティツールが使用できるようになります。また、仮想環境を使用すれば、プロジェクトの違いにより、異なるバージョンの依存関係が互いに干渉しないようにすることもできます。可能性は無限に広がります。
Web開発フレームワーク
さまざまなフレームワークを利用して、Webアプリケーション開発をPythonで行えます。最も利用されているのは、DjangoとFlaskの2つです。セミたちが大発生したのは、Djangoが初めてリリースされた2005年のわずか1年前。Webアプリケーション開発のために搭載された多くの機能を知れば、セミたちも驚くはずです。
機能するWebアプリをわずかなコードで作成できるFlaskにも、わくわくするでしょう。例えば、pip install flask
を実行した後、ファイルapp.py
を作成し、次のコードを追加するだけです。
これで「Hello World」Webアプリの完成です!
asyncio
2004年に戻り、非同期のタスクを実行するには、スレッディングを使用する必要があります。現在、asyncioはPythonの標準ライブラリーに組み込まれ、あらゆるシナリオで非同期コードを作成できます。
こちらの詳しいチュートリアルでは、コードの非同期性が持つ主な特性から2点を取り上げています。
- 非同期ルーチンは、最終結果を待ちながら「一時停止」し、その間に他のルーチンを実行できる。
- 非同期コードは、上記の機構により、同時実行を促す。別の言い方をすると、非同期コードは並行して動作するイメージとなる。
このように非同期コードとは、結果を待つ間に一度処理を中断し、その間に他のコードを実行できるコードです。他のコードの実行を「ブロックする」ことはありません。
その他、aiohttpやaiofilesなど、より特化したサードパーティライブラリーも存在し、HTTPリクエストを実行したり、ファイルに非同期で書き込んだりするために使用します。
ではまた2038年に
思い返すと楽しい道のりでした。これをお読みのセミの皆さんに役立つ内容であればと願います。17年後に再び現れる周期ゼミですが、2038年にPythonの変遷を知れば技術の進化に驚くことでしょう。それまでPython言語とコミュニティが活躍を続けるかどうかは、私たち人間次第です。
- Email: sagnew@twilio.com
- Twitter: @Sagnewshreds
- Github: Sagnew
- Twitch (streaming live code): Sagnewshreds