NEWS
IBM i アプリの第二の柱 OSS IBM i アプリの第二の柱 OSS
2022.11.24

【OSS】第4回「IBM iのPythonを始めよう」

【OSS】第4回「IBM iのPythonを始めよう」
IBM iのPythonを始めよう

AIや機械学習分野での利用で近年脚光を浴びてきたPythonですが、GitHubの調査によると、その利用者数は2015年にPHPを抜いて第3位に、2019年にはJavaを抜いて第2位になり2021年時点でもその地位を維持しています。これは、単にAIや深層学習といったアプリの増加というよりも、PHPやJavaが得意としてきたWeb系の処理にもPythonが選ばれていることを暗示しています。その理由は、Pythonがシンプルで学習し易い言語であることに加え、豊富なライブラリーのお陰で様々な処理を容易に実現できるという特長にあるものと考えられます。IBM i上に蓄積されたビジネスデータをPythonで分析することはもちろん、Webアプリに繋げることも夢ではありません。今回はそのPython入門の第一歩としての記事をお届けします。(編集部)

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は、広く使用されている汎用の高水準プログラミング言語です。 その設計哲学はコードの可読性を重視しており、その構文のお陰でプログラマーはC++やJavaなどの言語よりも少ないコード行で概念を表現できます。 この言語は、小規模および大規模の両方で明確なプログラムを可能にするための構造を提供します(注1)。

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バイナリは実際にはその場所に存在せず、代わりに

/QOpenSys/QIBM/ProdData/OPS/Python3.4/bin/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)。


▲図1

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://www.i-cafe.info/column/product/20200214_oss_2

注4:ここでyour_ibmi_ipの部分には、図1の123.123.123.123のように、使用するIBM iのIPアドレスを指定します。

著者紹介

アーロン・バーテル氏はKrengel Technology社のIBM iイノベーション担当取締役です。

いいねと思ったらシェア
twitter
facebook
hatena
IBM i アプリの第二の柱 OSS 目次を見る

この連載は…

IBM i アプリの第二の柱 OSS
関連記事
【OSS】第8回「Nginxを使ってウェブコンテンツを素早く動かす」
【OSS】第8回「Nginxを使ってウェブコンテンツを素早く動かす」
【OSS】第11回「簡単なGrafanaダッシュボードのデプロイ方法」
【OSS】第11回「簡単なGrafanaダッシュボードのデプロイ方法」
【OSS】第1回「オープンソースが主流に」
【OSS】第1回「オープンソースが主流に」
あなたにオススメの連載
できるIBM i 温故知新編
7記事
できるIBM i 温故知新編
IBM i の”新”必須言語 〜FFRPG入門〜
14記事
IBM i の”新”必須言語 〜FFRPG入門〜
IBM i アプリの第二の柱 OSS
15記事
IBM i アプリの第二の柱 OSS
PAGE TOP