PHPで解決する
私は IT 関連の問題を解決しようとするときに、あまり計画を立てることはしません。むしろ、いわゆる「3 歩進んで 1 歩下がる」的なアプローチをとっています。これからお話しする 3 つのケース・スタディでおわかりのように、IBM i の PHP ソリューションを見つける際に、この方法を実践してきました。多少いじくりまわしたり、創ったりしている部分はありますが、この例は PHP を IBM i 環境の多くの状況に適用できる方法を示しています。
問題に直面したとき、もちろん何を達成したいのか普通はわかっているのですが、ロードマップや十分な資料を常に手に入れることができるとは限りません。そのため、A 地点から B 地点に到達するために、まずプログラミング・コンポーネントの選択から始め、何が有効で、何が有効でないかを見つけながら、この開発サイクルで数歩進んで、数歩下がるといったことをしています。
これは、2005 年に IBM i で PHP の調査を開始したときのケースです。IBM Net.Data、Java、IBM WebSphere、Apache Tomcat など、さまざまな他の Web 開発環境と言語を扱っていました。そのとき、再度、Web 開発ツールの「聖杯」を見つけようとしていました。
そもそも、2005 年に手に入れることができた唯一の IBM i 用 PHP スタックは、 Unix オープンソース版でした。これは、Apache と PHP スタックが正しく動作するよう、それが常駐する場所を素早く知る必要があることを意味しました。これ自体、ベテランの RPG プログラマー向けの作業です。私は「3 歩進んで 1 歩下がる」式で、PHP スタックをインストールし、何かが動作しなかったらログを見て足りないものを確認しました。問題を一つずつ解決して、前に進みました。このトラウマになりそうな体験を何とか乗り越え、あっという間に最初の PHP アプリケーションを起動することができました。
2006 年までに、IBM と Zend Technologies は協力して、 IBM i 用の Zend Core と Zend Platform PHP スタックをリリースしました。Zend Core と Zend Platform は Zend Server という成熟した PHP スタックに進化しています。ほら、出来上がり。目的地に向かって進んでいます。Zend Server インストールが簡略化されて、IBM i ユーザーが他のライセンス・アプリケーションのようにインストールできるようになり、PHP パフォーマンスは著しく向上しました。Zend Server Community Edition は IBM i に同梱されており、IBM はそのパッケージに初年度の無料サポートを提供しています。
初期の PHP の経験から、PHP を RPG/CL から呼び出されたアプリケーションだけでなく、Web アプリケーションとして使用して問題の解決にあたる方法が具体化されました。PHP-CLI スクリプトを呼び出すホスト端末アプリケーションを使用するか、本格的な PHP Web アプリケーションを作成するか判断するため、こうした基準を採用しました。計算および処理をする既存のバックオフィス・アプリケーションがある場合は、再作成して、QP2SHELL コマンドからそのアプリケーションへ PHP-CLI を呼び出すより、そのアプリケーションを使用した方がよいでしょう。新品のアプリケーションの場合は、PHP アプリケーション作成する方が理にかなっているでしょう。PHP スクリプトを必要に応じて RPG/CLP への呼び出しと組み合わせたり、ネイティブ DB2 PHP スクリプトを作成したりできるためです。
さまざまな作業環境に、さらに効率性と柔軟性をもたらす PHP を利用した例を 3 つお話しします。
ケース 1: 日常の業務レポート
アプリケーション
顧客は、Microsoft SQL サーバーに保存された情報を必要とする日常の RPG レポートを実行します。顧客はそのサーバーにログインし、手動で情報を抽出して、IBM i ホスト端末アプリケーションで毎日その要約を入力します。
問題
顧客は、レポートを展開し、今後の分析のためデータを作業区ごとに分類しようと考えています。つまり、顧客は MS SQL サーバー・テーブルから、より詳細な情報を必要としているということです。抽出中のレコード数を考えると、それをさらに効率的に行うには MS SQL テーブルに直接アクセスします。
解決方法
確かに、ODBC 接続を起動してデータをテーブルから引き出し、IBM i の DB2 表に渡す、MS SQL サーバーで動作する WScript を設定できたはずです。ただし、次のアプローチの方が理にかなっていました。
- PASE QP2Shell コマンドから MS SQL サーバーに接続します。/usr/local/zendsvr/bin/ に格納されている PHP-CLI 呼び出しを開始し、MS SQL テーブルに接続して要求されたデータを抽出する PHP スクリプトを実行します (図 1: データを抽出する PHP プログラムにアクセスする CL)。
- 別の PHP スクリプト呼び出しを使用して、選択されたデータを IBM i からの追加 DB2 データとマージします。これで、レポートを完了するためのすべての情報が手に入りました。
- 最終的な PHP スクリプトで、レポート用のすべての情報の入ったPDF ファイルを生成します。簡単に使用でき、PHP にすぐに統合できるため、FPDF というオープンソース PHP クラスを使用しました。FPDF または TCPDF (別のオープンソース PDF クラス) の詳細については、それぞれの Web サイト (fpdf.org および tcpdf.org) をご覧ください。それぞれにメリットがあり、自分のニーズに最も合う方を選んでください。
- レポートはエンド・ユーザーが手に入れることができ、生成された PDF ファイルは /QNTC ディレクトリー経由でネットワーク・サーバーへ移動されました (図 2: PDF を転送する PHP プログラムにアクセスする CL)。IFS で /QNTC ディレクトリーを使用している場合、IBM i と Windows ファイル・サーバーのユーザー ID とパスワードが同じでなければなりません。レポート要求は、両方のシステムに共通のユーザーが提出しました。
/QNTC の設定方法と使用方法の詳細は SystemiNetwork Forum の IBM の Web サイトをご覧ください。
ケース 2: ラボの分析計にアクセスする
アプリケーション
鋳造所は毎日、その溶解物に多数のテストを行い、注がれた金属の品質保証を行っています。情報は質量分析計に入力され、分析とアーカイブを行います。いったん情報が入力されると、オペレーターが顧客の証明書 (CERT) を生成します。この文書はその仕様を確認するため、製品に同梱する必要があります。
問題
このプロセスは、ラボだけでなく CERT 文書を生成した他のスタッフ・メンバーにとって面倒で時間が掛かりました。データは分析計から Excel スプレッドシートへ手作業でダウンロードされ、再入力して顧客の CERT を生成していました。
解決方法
このプロセスを合理化するため、まず Windows 対応 Zend Server を設定しました。これを行った理由は、分析計のダウンロード・アプリケーションを提供した会社が通常のプロセスからデータを抽出するのに必要なツールを備えていない Lite 版の MS SQL をインストールしたためでした。次に、IBM i の対話式ジョブ・ストリームから要求を行い、製品を検索し、再度、製品パラメーターを指定してデータを取得するプロセスを開始する PHP スクリプトを呼び出しました。分析計で設定された MS SQL パイプ・トンネルを使用して Zend Server から ODBC 接続を行うと、PHP スクリプトを使用してテーブルに接続し、必要に応じてデータを取得できることがわかりました。データは、印刷され、製品に同梱して送付された CERT 文書とマージするために DB2 表に戻されました。
ケース 3: Web アプリケーション・マネージャー
アプリケーション
私は多数の PHP アプリケーションを開発しました。その中に、従業員によって内部的に呼び出されているアプリケーションと、サプライヤーにより要求されているアプリケーションがあります。
問題
ユーザー ID とパスワードに基づき、さまざまなアプリケーションへのアクセスを制御する必要があります。アクセスを必要としている顧客とベンダーは、いまだにレガシー・ソリューションで制御されている IBM i DB2 Customer Master/Vendor Master 表に対して認証されなければならない、という問題あります。一方、顧客やベンダーのように、やはり選択されたアプリケーションへアクセスする必要がある従業員がいます。
解決方法
この場合、徹底的に PHP アプリケーションを設計することにしました。この新しいアプリケーションでは、すべての Web アプリケーションにアクセスできるよう初期画面としてログイン画面 (図 3: PHP Web ログイン: アプリケーション・インターフェース) が提供されており、ユーザー・ログインに基づいて、ユーザーが実行できるアプリケーションのリストを表示します (図 4: PHP Web ログイン: ユーザーのアプリケーション・メニュー)。これは、IBM i DB2 User Profile 表を作成して、ユーザー・アプリケーションを相互参照し、アプリケーションが検索とユーザー ID の確認に使用する表を決定できるよう、従業員、顧客、およびベンダーを区別しなければならないことを意味していました。
また、Application Master DB2 表を作成して、呼び出しに必要なブラウザー URL だけでなく、すべての PHP アプリケーションへのアクセスを管理しました。アプリが一部のユーザーの外部 URL (ベンダー/顧客の Web サイトなど) を呼び出しており、セキュアなアクセスをするため、これらも管理する必要なインスタンスがありました。当初、ID を使用しましたが、以降は、特にアプリケーションのニーズが異なる同じ顧客/ベンダーからの複数のユーザーを管理する場合に、より柔軟性を持たせるためにユーザーの電子メール・アドレスを使用することにしました。元の設計以来、アプリケーションも PHP クラスと LDAP クラスを使用した Windows Active Directory サーバーでユーザーを確認するために、従業員を検索し始めました。これにより、PHP MIS 要求アプリケーションの従業員の部門と内線電話に関する情報を引き出すことができるようになりました。
図 5と、図 6(PHP Web ログイン: アプリケーション管理)は、アプリケーション管理画面のスクリーンショットです。
おわかりのように、既成概念にとらわれずに物事を考えてみると、ほとんどどのタイプの IBM i ホスト端末アプリケーションも PHP と統合したり、最初から PHP アプリケーションを開発したりできます。ここではお話ししませんでしたが、別の例では稼働中に MS Excel スプレッドシートを生成し、PHP を使用して DB2 表に問い合わせを行い、スプレッドシートを生成しました。スプレッドシートは、PHP を呼び出したり、Web ブラウザーから直接呼び出された PHP アプリケーションを使用したりして、夜間のジョブ・ストリーム、CL バッチ・ジョブ、RPG 等から生成できました。
次回までに、IBM i で「楽しく PHP して」ください。