2015/8/11 アーロン・バーテル
IBM i上のPython入門記事をお届けします。
2015年のCOMMON年次総会で、IBMは、IBM iにプログラミング言語Pythonを移植してサポートすることを発表し、6月下旬にその約束を果たしました。 何人かの人が尋ねるかもしれない1つの質問は、「なぜ?」です。 私達には既にRPGの代わりにPHPが、 Rubyが、そしてNode.jsがあるのではありませんか? さて、この質問を180度ひっくり返して、RPGコーダーとしての私たちがCOBOLでコーディングしない理由、あるいはその逆にCOBOLコーダーがRPGでコーディングしない理由を尋ねることができます。 他の言語を差し置いて、1つの言語を選ぶ一般的な理由の1つは、言語とコミュニティの全体的な魅力ある個性です。 オープンソース言語に関しても同じことが言えます。 誰もが意見を持っています。 それぞれの言語には、核となる中心的対象と強みがあります。
たとえば、wikipedia.orgにはPythonについて次のように書かれています。
Pythonは、オブジェクト指向、命令型、関数型プログラミング、手続き型などを含む複数のプログラミングパラダイムをサポートしています。 動的型システムと自動メモリ管理、さらに大規模で包括的な標準ライブラリーを備えています。
この説明では、「Python」を「Ruby」にほぼ置き換えることができます。なぜなら、この2つの言語の定義は大変良く似ているからです。私としてはRubyをプログラマーの幸福度で上位にランクしているので、この事実は私を興奮させます! そして、誰もご機嫌斜めのプログラマーが好きではありません。
IBMのPython用developerWorksページには、入手可能な最新バージョンであるPython3.4を入手してインストールするための手順書があります(注2)。 オプション2として追加することで、5733OPSライセンスプログラム(注3)を促進していることに気付くでしょう。IBMがオープンソース機能を提供してきた速さに感銘を受けました。これはまだ始まったばかりだと思います。
Pythonがインストールされたら、Pythonランタイム、つまりpython3バイナリを見つけることで簡単なチェックを始めることができます。 whichコマンドはその目的に適しています:
$ which python3 /QOpenSys/usr/bin/python3
python3バイナリは実際にはその場所に存在せず、代わりに
にシンボリックにリンクされています。 ls -lコマンドを使用すると、シンボリックリンクを確認できます。
$ ls -l /QOpenSys/usr/bin/python3 lrwxrwxrwx 1 qsys 0 98 Jun 18 16:50 /QOpenSys/usr/bin/python3 -> /QOpenSys/QIBM/ProdData/OPS/Python3.4/bin/python3
または、2つのコマンドをパイプ(|)およびxargs機能と組み合わせることができます。
$ which python3 | xargs ls -l lrwxrwxrwx 1 qsys 0 98 Jun 18 16:50 /QOpenSys/usr/bin/python3 -> /QOpenSys/QIBM/ProdData/OPS/Python3.4/bin/python3
–versionオプションを指定すると、もっとPythonの詳細な情報を知ることができます。
$ python3 --version Python 3.4.2
次に、小さなPythonプログラムをまとめましょう。 ファイルhello.pyを作成し、そこに次のコードを格納します。
---hello.py--- print('hello')
シェルに戻り、次のようにhello.pyを呼び出します。
$ python3 hello.py hello
動きました!
Print文は、期待どおりに文字列’hello’をコンソールに送信しました。 Pythonコードをテストするもう1つの便利な方法は、付属のREPL(Read Eval Print Loop)ユーティリティ(別名、インタラクティブコンソール)を使用することです。 パラメータを指定せずにpython3と打鍵し、REPLユーティリティを開始します。 次に、Python文を入力し、次のように直ちに処理させます。
$ python3 Python 3.4.2 (default, Jun 12 2015, 19:07:14) [C] on aix6 Type "help", "copyright", "credits" or "license" for more information. >>> print('hello') hello >>> quit() $
>>>という文字列は、あなたがPythonの対話型コンソール内にいることを伝えています。 PASEシェルに戻るには、quit()と打鍵します。 見てのとおり、直ぐに出力が返されます。 これは、Pythonの学習だけでなく、コードのデバッグや単体テストにも大いに役立ちます。
Pipを使ってプログラムを作る
この記事を仕上げるために、小さなWebアプリケーションを作成しましょう。 このタスクは、IBMがPythonの導入過程に組み込んだBottle Webフレームワークの使用を含め、様々な方法で実行できます。私はpipコマンドがどのように機能するかを示したいので、代りのWebフレームワークを使用することにします。
Pipは「Pip Installs Python」の略で、他のオープンソースプロジェクトからIBM iに機能をとても容易に取得できるようにするパッケージ管理プログラムです。 文字通り「pip」という名前のコマンドがないことに注意してください。 代わりに、「pip3」はライセンスプログラム5733OPS内(注3)に存在するPythonのバージョンと相互に関連があります。 必要に応じて、pip3を指すpipシンボリックリンクを作成できます。 これにより、/QOpenSys/usr/binにシンボリックリンクが作成されます。/QOpenSys/usr/binというパスは、すでにPATH環境変数に含まれているので、コマンドラインから実行すると適切に解決されます。
$ ln -s /QOpenSys/QIBM/ProdData/OPS/Python3.4/bin/pip3 /QOpenSys/usr/bin/pip
新しく作成されたシンボリックリンクをテストしてpipを利用するには、次のように軽量のWebフレームワークAppierをインストールします。
$ pip install appier Downloading/unpacking appier Downloading appier-0.9.41.zip (134kB): 134kB downloaded Running setup.py (path:/tmp/pip_build_usrbskbi/appier/setup.py) egg_info for package appier Installing collected packages: appier Running setup.py install for appier Successfully installed appier Cleaning up...
pip install appierコマンドは、Pythonパッケージのオンラインリポジトリに送信され、「appier」という名前のパッケージが存在するかどうかを確認し、存在する場合は、デフォルトの場所にダウンロードしてインストールします。 次のpip showコマンドを使って、インストール場所を確認できます。
$ pip show appier --- Name: appier Version: 0.9.41 Location: /QOpenSys/QIBM/ProdData/OPS/Python3.4/lib/python3.4/site-packages Requires:
Appierがインストールされたので、readme.mdファイル内の指示を続行します。これにより、新しいファイルを作成して、このコンテンツをそのファイルに貼り付けるように指示されます。
---hello.py--- import appier class HelloApp(appier.App): @appier.route("/", "GET") def hello(self): return "Hello World" HelloApp().serve()
私の使用しているIBM iでは、Appierの起動時に指定された別のHOST値が必要になるという状況に遭遇しました。 そのオンラインの指示に従うことで、プロジェクトのルートディレクトリにあるappier.jsonファイルが必要であることを学びました。 いくつかの構成オプションを変更できます。 例として、次の3つを指定しました。
---appier.json--- { "LEVEL" : "DEBUG", "HOST" : "0.0.0.0", "PORT" : 8080 }
さて、次のコマンドを発行して、いよいよこの小さなWebアプリを起動します。 あなたはpython3コマンドの最後に「3」があることに気付くでしょう。 pipコマンドの場合のように「3」を入力しないようにするために、/QOpenSys/usr/bin/pythonというシンボリックリンクを作成することもできるでしょう。
$ python3 hello.py 2015-07-14 17:01:57,360 [INFO] Booting appier 0.9.41 (CPython 3.4.2.final aix6)... 2015-07-14 17:01:57,360 [INFO] Starting 'HelloApp' with 'legacy'…
ブラウザーでアドレスhttp://your_ibmi_ip:8080を指定すると、図1に示す内容が表示されます(注4)。
Appierが自分向きではないと判断した場合は、次のコマンドを使ってアンインストールします。 見てのとおり、これらのパッケージマネージャーを使用すると、コードを簡単に共有できます。
$ pip uninstall appier Uninstalling appier: /QOpenSys/QIBM/ProdData/OPS/Python3.4/lib/python3.4/site-packages/appier-0.9.41-py3.4.egg-info /QOpenSys/QIBM/ProdData/OPS/Python3.4/lib/python3.4/site-packages/appier/__init__ … omitting entries for sake of brevity /QOpenSys/QIBM/ProdData/OPS/Python3.4/lib/python3.4/site-packages/appier/validation.py Proceed (y/n)? y Successfully uninstalled appier
学習を続ける
IBM i上のPythonの紹介はこれで終わりです。 IBM iへのPythonポートはDB2 for iに簡単に接続する機能と、iToolkitを介してRPGを呼び出す機能を含んでいることを宣言することに注意してください。 これらについては、今後の記事で取り上げる予定です。
Python構文と言語構造の基礎を学ぶために多くのリソースが利用可能です。 私のお気に入りはcodeacademy.comです。これは無料で、完全にブラウザーから実行できるチュートリアルが含まれています。 IBM i Pythonという名前のLinkedInグループが議論に専念していることも心に留めておいてください。 また、Litmisチームは、IBM iの人々がPythonコードを共有できるオープンソースリポジトリを作成しました。
今後の発信情報にも注目してください。不明な点があれば、abartell@krengeltech.comまでメールでお問い合わせください。
注1:これは当記事の原文の訳であり、日本語版のウィキペディアの記述とは異なります。
注2:developerWorksは現在既に無くなっており、pythonを導入するにはIBM i V7.2以降で利用可能になったyumコマンドを使用するかACSのパッケージマネージャーを使用してください。Yumの導入および使い方については、次のiWorldの記事をご参照ください。
https://i-cafe.info/column/product/20200214_oss_2
注3:5733OPSは現在提供廃止となり、代替手段としてはyumを利用します。Yumの導入及び使い方については、次のiWorldの記事をご参照ください。
https://iworldweb.info/column/product/20200214_oss_2
注4:ここでyour_ibmi_ipの部分には、図1の123.123.123.123のように、使用するIBM iのIPアドレスを指定します。
アーロン・バーテル氏はKrengel Technology社のIBM iイノベーション担当取締役です。