注意
これは私の環境下における私の備忘録です。お使いの環境によっては内容が異なる場合があります。私は何も責任を負いませんのでご了承のうえご覧ください。
内容
AS400のいいところはたくさんある。マシン故障はほとんどなく、RPGコードは長期間に渡ってメンテ無しで動き、超高速で動作するためユーザーにとっても使い勝手はいい。だから今でも替えられることなく残っているのだが、万人受けするものではない。
クライアントアクセスやACSで見る限り、古臭く緑色のカビが生えた狭苦しい80/132桁の画面、キーボードオンリーの初心者に厳しい操作、グラフはおろか画像すら表示できないキャラクターベースの表示など不便この上ない。中堅や実務作業をする社員にとっては使い勝手がいいけれど、若年層や上層部の人間には非常にウケが悪い。それはシステム管理者も解っている。
なのでいつもこう思っている。「いつか照会機能だけでもGUI化したい」と。
ウチもそう思っている企業のひとつ。とはいえそれを実現するツールはたくさんあるので、お金があってIT化に力を入れている企業はサクッとやるだろうが、ITに疎い昭和丸出しの企業は永遠にそのまま。
お金がない企業はAS400なんか入れるなよと言われそうだが、お金があってもITにお金をかけるかは別なのである。
そういう理由なのでお金をかけずに自作できないかやってみたというお話。
しかし、その道のりは果てしなく遠かった。
試行錯誤をして勉強した書籍は10冊は軽く超える。HTML/CSS/JavaScript/PHP/BootStrap/Laravel/CakePHP/SQL/Linuxなど。
最初にやったのはExcelVBAでODBCアクセス。これだけでもかなり役にたった。
次にXAMPP環境でPDOアクセス。最終的にはLAMP(Linux/Apache/MySQL/PHP)環境を自作して、さらにはLaravelやGitを使ってある程度システムを組むところまで成功した。
とりあえずこの記事はWindowsにXAMPP環境を構築してPDOでデータを取得するところまで。
続きのフレームワークやLinuxサーバ構築は別ページで書きます。
これは私の備忘録としてLinuxサーバをたてて、PHPやPHPフレームワークのLaravelやGitを使って使えるシステムにするところまで記事にするつもりなので、この真似をすれば実質GUI化は可能のはずです。
可能ですが、自分でその先を作っていくには勉強をしないととても無理です。
私が提供できるのは市販本に載っていない情報だけです。それだけご理解のうえお進みください。
環境
言語はPHPを使います。PHP選んだ理由は、ネットで色々調べたら情報がそこそこあったから。PHPはインタプリタのくせに高速に動くし、IBMのサイトによるとAS400とPHPは親和性が高いと書いてあったのも理由。他言語でもRuby/Python/Perl/Javaなどもできるみたいだけど文献がないので断念。いづれWebサーバを構築して、そこに全社員がアクセスするとAS400のテーブル(物理ファイル)が照会できるようにしたいけど、最初なのでXAMPP(PHP開発環境)でやってみた。
XAMPPのインストール
XAMPPとはPHPの開発環境です。HTMLやJavaScriptのファイルはコーディングしてブラウザにドラッグ&ドロップすれば動くけど、PHPはそれでは動かない。
PHPはサーバサイドスクリプト(サーバで動く言語)なので、ソースコードを書いたファイルはサーバに置かないといけない。
でもサーバなんて持ってない。そんなときに自分のPCのなかにそのサーバ環境を作ってくれるのがXAMPPというもの。
ダウンロードはXAMPPでググれば出てきます。WindowsならWindows版があるはず。
もちろん無料です。
インストール手順は特になし。インストーラーをダブルクリックして何もいじらず次へ次へで終了。
XAMPPの設定
あまり詳細に説明すると大変なので、要点だけ書きます。
1.XAMPPを起動し、Webサーバを起動します。
XAMPPを起動するとXAMPPのコントロールパネルが開きます。その中のApacheのところに「Start」というボタンがあるのでクリックするとWebサーバが起動します。
ApacheというのがWebサーバのソフトです。アパッチと呼びます。戦闘用ヘリコプターではありません。
2.PCのIPアドレスを調べる
PCのIPアドレスはコマンドプロンプトからipconfigで確認できます。ネットワークの設定から確認してもOKです。
今回XAMPPを使ってPC内にサーバ環境を構築しましたが、そのアクセス先はPCのIPアドレスになるので確認しておく必要があったというわけです。
3.ブラウザを使って自身のパソコンのIPアドレスにアクセスする。
IPアドレスがわかったらブラウザで、http://192.168.xxx.xxxという感じでアクセスします。するとWelcome to XAMPPというメッセージが表示されるはずです。
これで無事インストール完了とウェブサーバの起動が確認できました。
4.C:\xampp\htdocs(ドキュメントルート)のファイルを削除してカラッポにします。
先にドキュメントルートについて説明しておきます。
Webページを閲覧するとき、IEとかChromeなどのブラウザでアドレスを指定しますが、
私のこのページでいうと https://qryheavy.com/
2で調べた自身のアドレスでいうと http://192.168.xxx.xxxになりますが、このアドレスとイコールになるサーバ内の場所のことです。
それが表題に記述したC:\xampp\htdocsです。
このパスはPC内ですが立派なサーバ空間です。
閲覧者はhttp://192.168.xxx.xxx/にアクセスすると、サーバにあるC:\xampp\htdocsにあるファイルを閲覧者側は見に行くわけです。
すなわち、システムを組む人間はC:\xampp\htdocs内に見てほしいファイルを置けばいいということになります。
この場所には3で閲覧したときに表示されたファイル群が入っていますので、それは削除しておきましょうということです。
ちなみにドキュメントルートはインストール時に変更できるので、変更した場合はC:\xampp\htdocsでない場合もあります。
5.odbcを使えるようにする
XAMPPコントロールパネルのApacheの行にあるconfigというボタンをクリックして、さらにPHP(php.ini)をクリックします。
するとphpの設定ファイルがメモ帳で開きます。
大量の文字列ですが気後れすることはありません。
php.iniのextention=odbcとextention=pdo_odbcの先頭にある;を外します(コメントアウトの解除)
後は保存して閉じます。
6.Apacheを再起動します
XAMPPのコントロールパネルから、Apacheを一旦StopしてStartすれば再起動になります。これは5で触ったphp.iniの設定を定着させるために行います。
以上、文書ばかりの説明ですみません。これは私の備忘録ですし、この辺の情報は世の中にジャンジャンあるのでご了承ください。
必要であれば下部からコメント欄から聞いてください。気が向けば(自分のために)追加で作るかもしれません。
ODBCが入っているかの確認
AS400とデータのやりとりするので、ローカルのPCにODBCドライバーが入ってないといけません。
普通にクライアントアクセスが入っていれば問題ないはずです。
Winキーを押すと出てくる「ここに入力して検索」にodbcと入力してエンターキーを押します。
するとODBCデータソースアドミニストレータというのが出てきます。
クライアントアクセスがないとき(世間一般のPC)はこんな感じです。ドライバーにODBCの文字は見当たりません。
クライアントアクセスをインストールしたらこんな感じです。Client Access ODBC Driverと、iSeries Access ODBC Driverの2つが入りました。
さらにパッチを当てると、IBM i Access ODBC Driverも入りました。合計3つ。私には違いが解りません。
ここまではExcel編と同じですが、PHPの場合はシステムDSNに登録しないといけないみたい。こんな感じ。
登録の仕方は追加ボタンを押し、ドライバーを選択し、データソース名に適当な名前を入れる。
多分ドライバーは3つのうちどれでもいいけど、パッチを当てた時に入ったIBM i Access ODBC Driverが最新っぽくて良さそう。
データソースの名前は、PHPコードの中で指定するので注意。今回はibmiという名前にしました。
サンプルコード
後はテキストエディタでコードを書いて、ドキュメントルートに置くだけです。
糞コードですがご笑納ください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ODBCテスト</title> </head> <body> <!-- ▼ビジネスロジック --> <?php // データベース接続情報 $dsn = "odbc:ibmi"; $usr = "ログインアイディー"; $passwd = "パスワード"; // ▼データベース接続を試みる try { $pdo = new PDO($dsn,$usr,$passwd); } catch (PDOException $e){ die("接続エラー:{$e->getMessage()}"); } // ▲データベース接続を試みる // SQL文組み立て $SQL = "エスキューエルブン"; // テーブル取得 $st = $pdo->query($SQL); ?> <!-- ▲ビジネスロジック --> <!-- ▼HTML部 --> <h1>テーブル名</h1> <!-- ▼テーブル --> <table border="1"> <!-- ▼テーブルヘッダー --> <thead> <tr> <th>コード</th> <th>名前</th> </tr> </thead> <!-- ▲テーブルヘッダー --> <!-- ▼テーブルボディ --> <tbody> <!-- ▼レコードを読んで<tr>を書き出す --> <?php while($row = $st->fetch()){ ?> <tr> <!-- 1バイト文字はそのまま書き出し --> <td><?= $row["カラムメイ"]; ?></td> <!-- 2バイト文字はShift-JISからUTF-8へ変換 --> <td><?= trim(mb_convert_encoding($row["カラムメイ"],"UTF-8","SJIS-win")); ?></td> </tr> <?php } ?> <!-- ▲レコードを読んで<tr>を書き出す --> </tbody> <!-- ▲テーブルボディ --> </table> <!-- ▲テーブル --> </body> <!-- ▲HTML部 --> </html>
こんな感じです。htmlspecialcharsなどのセキュリティに必要なコードは長くなるので書いていません。
コードにあるカタカナで書いた、
- ログインアイディー
- パスワード
- エスキューエルブン
- カラムメイ
の4つはご使用の環境に応じて変更して下さい。
SQL文を知らない人はとりあえず、
$SQL = “SELECT * FROM ライブラリ名.物理ファイル名”
にでもしておいてください。
ライブラリ名と物理ファイル名は差しさわりのないものを入れて下さい。
AS400のコマンドではライブラリ名と物理ファイル名の間はスラッシュ(/)を使いますが、SQLの場合はピリオドですので、お間違えなく。
データベース接続情報の中で、ODBC設定で先ほど適当な名前をつけたibmiを指定しています。
とりあえずこんな感じです。
後は、このコードにindex.phpという名前をつけて、ドキュメントルートであるC:\xampp\htdocsに置きます。
画面に表示してみる
再び自身のIPアドレス(http://192.168.xxx.xxx等)にブラウザでアクセスしてデータベースのテーブルの情報が表示されればOK。
AS400のデータベースと連携できました。
ここまででもうまくいけば大したもんです。連携できればコッチのもんですから。
でもこれで完成だとしたら大間違い。ここから地獄のように深いウェブ地獄が待っています。
ここからの道のり
これまでが、いわゆるフラットなPHPコード。
PHPの参考書(独習PHP)はこんな感じで書いてあったので大きく間違ってはいないと信じたい。
さらにここから私が行ったのは、
- とりあえず上記ファイルを複製して、その他のいろんなマスタを照会するべくファイルをたくさん作った。
- その複数の機能(ファイル)をメニューから選べるようにするため、トップ画面を作り、メニューを作った。
- ヘッダとフッタとメニューは同じ内容なので、共通部品化して、各ページで読みだすようにした。
- さらにはログイン認証も自作した。必要に応じてクッキーとかセッションとかリクエストも勉強して組み込んだ。
- せっかくなので業績をグラフで表示できるようにして、エクセル出力もできるようにした。
以上。これが次の1歩。
これでも一応見れる画面にはなったけど所詮フラットなPHP。
某所で聞いたところ、フレームワークはおろかテンプレートエンジンも使っていないPHP開発なんてやめた方がいいとのご助言をいただく。
ご助言ついでに、教えてもらった下記のページを見て、フラットなコードをMVC化をしてみることにした。これでさらに1歩前進。
それでも、この調子で書いていってもダメみたい。
仮にもし外部の人にメンテしてもらうことになったら、笑われるというより怒られてしまうらしい。
素人が何の設計も考えずにWebアプリケーションを作ると、単に動くというだけで保守性も拡張性もなく、セキュリティも絶望的だから。
なので世間様に通用するようにしたいと思って、フレームワークに挑戦。
フレームワークとはアプリケーションの土台部分を提供してくれる。部品を提供してくれるライブラリとは少し違う。
やってみたのは一番シェアが多いといわれる「CakePHP」
だがデータベースがAS400という文献がほとんど見当たらない。それが一番の問題。
フレームワークのほとんどは、MySQLやPostgreSQLなどに対応していても、AS400(DB2)は対応していないというか、情報が無さすぎる現状。
色々調べていたら現在は「Laravel」というフレームワークが急上昇中らしい。
そこで調べてみたら以外にもAS400でもいけるみたい。そのサイトが下記。
GitHub – JacksonWebServices/laravel-iseries: laravel-iseries
これが糧となり現在「Laravel」でうまくいっています。
引き続き、XAMPP上にLaravelを構築してAS400にアクセスする方法と、
Linuxサーバ上にWebサーバ環境を構築してAS400にアクセスする方法を別記事に載せました。
結構細かく書いていますが、閲覧される場合は自己責任でお願いします。
以上。ご覧下さりありがとうございました。
コメント
はじめまして、てつやんと申します。
先月より転職し、社内にAS400があるのですが
これまでAS400は経験したことがないため、今後社内での開発としては
データはAS400のデータベースから取得し
PHPにて処理、画面表示させる事を目指すことになっているのですが
こちらの記事が現状の私の境遇に驚くほど合っており
大変参考にさせて頂いております。
まずはこちらの記事を見ながらWindowsマシンにXAMPPを導入し
odbc接続でAS400のデータベースにアクセスできるようになったところです。
また、私はPHPの習熟度も低く、今までフラットなPHPを書いてきましたが
今後、社内のPHP開発が増えていくと思われますので
少しでも自分にとって開発、修正しやすい状況をつくれるよう
やはりLaravelなどのフレームワークを使った方が良いという思いになり
まずはフレームワークとはなんぞや、という所から少しずつ勉強しようとしています。
今後も都度拝見させて頂きますので宜しくお願いいたします。
てつやん様
コメントありがとうございます。同じ境遇の方がいらっしゃたと聞いて、めちゃくちゃ心が躍っています。
サーバ構築編も作っていますのでご覧ください。あとはGit管理編を作れば完成ですが、見通しが立っていません。
お役に立てば幸いなのですが、ウェブの技術は勉強すればするほど泥沼のように深いのでこれからが大変です。
グリーン画面をウェブ化すればこういうことが出来ますよ!と上層部に働きかけるだけに留めて、
お金を引っ張り出す方向に舵を切ったほうが賢いかもしれません。