■概略
オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
概念の違う世界を理解するため、IBMiの歴史、特徴と典型的な違いをまとめました
■IBMiの歴史
※インターネットが爆発的に普及を開始するのが1995年です
※IBMiはインターネット以前の1988年に発売開始しました
同年RDBの雄Oracleはv6になり業務用として必須の行レベルロック機能が実装されました
※IBMiはSystem360などのホストコンピュータに対してオフコン(オフィスコンピュータ)と
呼ばれ、主に企業の会計システムに利用されています
※ハードウェア・OS(OS/400)・データベース(Db2)・開発言語(RPG他)まで垂直統合に
なっています
WindowsはOS・言語だけで、ハードウェアやDBはサードパーティです
Macはハードウェア・OS・言語の垂直統合と言われます
MacでDBはあまり使いませんが、サードパーティです
※発売当初はAS/400と呼ばれ、途中iSeiesと名前が変わりました
そのためAS/400、iSeries、IBMiと呼び方が異なることがあります
■IBMiの特徴とWindows/Mac/Linuxとの典型的な違い
◯1986年から仮想化を提供し言語にEOLがない
※出荷当初からTIMI(Technology Independent Machine Interface)で仮想化し
ハードウェアに依存しません
※同一筐体に複数区画(:~=VM 開発区画と本番区画など)が作成できます
※IBMiの歴史を見てもCPUが48bitから64bitに変わってもOS・アプリケーションは
そのまま稼働可能です
実際には5~7年毎にハードウェアを更新し、OSのバージョンを最新に更新しています
ここまではVMwareも同様のことができます
※新OSになっても既存のアプリケーションの稼働をIBMが保証しています!
弊社では30年前に作成したアプリケーションがそのまま動いています
言語やミドルウェアにEOLがないのでオープンソース系のように5~10年毎に
アプリケーションの更新が不要です
◯単一レベル記憶
※メモリとハードディスクの区別がありません
オープンソースではコードでどれぐらいのメモリを消費するかを意識する必要があるが
IBMiでは考える必要がありません
筆者の感じるところ、すごく高性能のスワップ機能です
※DBのチューニング、index設定がほぼ不要(IBMiではindexはOSが自動的に作成しています)
オープンソースのRDBMSでは正しくindexを作成しないと激遅くなります
◯インターフェースは全てCUI
※Windows/Mac、Web以後のGUI全盛時代以前なので開発もアプリも、
80x25のCUIベースで動きます
※CUIベースを表示する画面を5250エミューレータ(WindowsではASC(Access Client Solution))
と言います
※アルファベットは大文字のみです(漢字コードはEBCDIC)
※半角カナを表示すると他の文字が文字化けします(切り替え表示可能)
※FFRPGから5250のCUIでは開発できずVSCodeを使います
※FFRPG+VSCode開発を5250なしで行う開発手順を後述します
※5250画面の例
◯ファイルシステム
※ファイルシステムはIBMiネイティブ(ここでのみの呼び名)とIFSがあります
※IBMiネイティブには他のOSと違い階層ディレクトリがなく、
IFSはUNIXファイルシステムと大体同じです
※IBMiネイティブには5250とftpで、IFSにはVSCodeとsshとscpでアクセスします
※IBMiの漢字コードはEBCDICで、IFSの漢字コードはUTF-8です
※IFSはストリームファイルとも呼ばれます(IBMiの世界は呼び方が複数あることが多いです)
◯ライブラリ
※ライブラリは他のOSのディレクトリですがライブラリの中にライブラリは作成できません
※ログインユーザのカレントライブラリに指定すると優先的にアクセスされます
※ライブラリのアクセス順はライブラリリストを設定することで決められます
パスに相当します
◯ファイル
※ライブラリの中にはファイルしかありません
※ファイルは種類によりデータベース・ソースプログラム・プログラム用があります
(他にもあり)
[データベース]
PF(Phisical File) : 実際にデータが入るファイル。テーブルに相当します
LF(Logical File) : 物理ファイルの抽出・ソート条件を指定します。ビューに相当します
[ソースプログラム]
個別のソースファイルはメンバーと呼び、複数のメンバーがソースプログラムに
入っています
1段だけです階層になっており、ソースファイルはディレクトリのように見えます
・RGP3の入るRPGSRC
・CL(シェルスクリプトやバッチファイルのようなもの)の入るCLSRC
・テーブル定義の入るDDSSRC
・RPG3用のRPGSRC
などがあります
[プログラム]
コンパイルの結果作成されるバイナリプログラム
RPG3コンパイルはソースメンバーにIBMiネイティブしか指定できません
RPGLEとFFRPGコンパイルはソースメンバーにIFS(ストリームファイル)も指定できます
※IBMiネイティブメンバーとIFSの相互コピーができます
ただし漢字コードが変換されます
そのためRGP3をIFSにコピー+編集+IBMiネイティブにコピーしコンパイルは
できません。漢字を含まないCLなら可能です