【ITニュース解説】🚀 Creating Global ProcScripts in Uniface 10.4: A Simple Guide
2025年10月05日に「Dev.to」が公開したITニュース「🚀 Creating Global ProcScripts in Uniface 10.4: A Simple Guide」について初心者にもわかりやすく解説しています。
ITニュース概要
Uniface 10.4のGlobal ProcScriptは、アプリ内で共通利用するコードをライブラリにまとめ、再利用性を高める機能だ。同じ処理を書く手間を省き、コードの保守・管理を効率化する。作成はライブラリ作成・記述・コンパイルを経て、`call`コマンドで呼び出す。
ITニュース解説
Global ProcScriptsは、システム開発の効率と品質を高めるUnifaceの重要な機能の一つである。システムエンジニアを目指す上で、このような再利用可能なコードの概念を理解することは、将来のキャリアにおいて非常に役立つ。
Unifaceはビジネスアプリケーションを効率的に開発するための統合開発環境である。この環境の中で、Global ProcScriptsは共通の処理をまとめておく場所として機能する。アプリケーションの様々な画面や機能で、例えば消費税の計算やユーザーの入力値のチェックといった、まったく同じ処理が必要になる場面がある。もしそのたびに同じコードを何度も記述すれば、コードの量が増え、どこかに間違いがあった際にすべての箇所を修正しなければならず、開発とメンテナンスが非常に困難になる。
Global ProcScriptsは、このような問題を解決するために作られた。これはアプリケーション全体で共有される再利用可能なコードの塊であり、特定のランタイムライブラリという場所に保管される。一度Global ProcScriptとしてコードを書けば、アプリケーション内のどの画面やプログラムからでも、その処理を呼び出して利用できる。この仕組みのおかげで、コードの重複が大幅に減り、プログラム全体がすっきりと整理され、万が一処理内容を変更する必要が生じても、Global ProcScriptの定義を一つだけ修正すれば、それが呼び出されているすべての箇所に反映されるため、メンテナンスが格段に楽になる。これがGlobal ProcScriptsがもたらす最大のメリットである。
では、実際にGlobal ProcScriptを作成する手順を見ていこう。Uniface 10.4での作成は非常にシンプルである。まず、作業を行うためのプロジェクトを開く必要がある。UnifaceのU-Barから「Browse」を選択し、prjの項目から対象のプロジェクトを選び開く。もしプロジェクトがまだ存在しない場合は、先に新しいプロジェクトを作成する必要がある。
次に、Global ProcScriptを格納するライブラリを作成する。Unifaceのリソースブラウザにある「Templates」タブを開き、「Global ProcScript Library」というテンプレートを探し出す。このテンプレートを、現在開いているプロジェクトの構造エディタへとドラッグ&ドロップする。これにより、新しいライブラリがプロジェクトに追加されるので、「MyGlobalLibrary」といった分かりやすい名前を付け、そのライブラリが何をするものなのかを説明する記述も追加しておくと良い。
ライブラリが作成できたら、その中に具体的な処理(ProcScript)を追加する。作成したライブラリをダブルクリックして開き、Define Structure(構造定義)ワークシートを表示させる。そこには「UPALETTE_LIBPRC」というパレットが表示されているので、そこから「Empty ProcScript」テンプレートを見つけて、ライブラリオブジェクトへとドラッグ&ドロップする。追加されたProcScriptには、「Multiply」(掛け算)や「CalculateTax」(税金計算)といった、その処理内容がわかるような名前に変更する。
ProcScriptの名前を設定したら、いよいよコードを書く段階に移る。Write Script(スクリプト記述)ワークシートに切り替え、先ほど作成したGlobal ProcScriptオブジェクトを選択する。ここに、処理を実行するためのUnifaceのコードを記述していく。例えば、二つの数値を掛け合わせる簡単な処理であれば、次のように記述する。
entry Multiply
params
numeric par1 : IN
numeric par2 : IN
numeric result : OUT
endparams
result = par1 * par2
return(0)
end
entry Multiplyは、このProcScriptがMultiplyという名前で呼び出されることを示す。paramsブロックでは、このProcScriptがどのようなデータを受け取り(IN)、どのようなデータを返すか(OUT)を定義する。ここでは、par1とpar2という二つの数値を入力として受け取り、resultという数値を出力として返すことを指定している。result = par1 * par2の部分で、受け取った二つの数値の掛け算を行い、その結果をresult変数に代入する。return(0)は、処理が正常に終了したことを呼び出し元に伝えるための記述で、通常は0が正常終了を示す。最後にendでProcScriptの定義を終える。
コードを書き終えたら、次にコンパイルを行う。コンパイルボタンをクリックして、作成したライブラリと中に含まれるすべてのGlobal ProcScriptを機械が実行できる形式に変換する。この段階でエラーがないことを確認することが重要である。エラーがある場合は、そのエラーメッセージに従ってコードを修正する必要がある。
コンパイルが正常に完了すれば、そのGlobal ProcScriptはアプリケーション内のどこからでも呼び出すことが可能になる。呼び出しにはcallコマンドを使用する。基本的な構文はcall LibraryName::ProcScriptName(arguments)となる。LibraryNameはProcScriptが属するライブラリの名前、ProcScriptNameは呼び出したいProcScriptの名前、argumentsはProcScriptが期待する引数(渡すデータ)を記述する。
具体的な呼び出し例としては、以下のようなコードが考えられる。まずvariablesブロックで、num1、num2、answerという数値型の変数を宣言する。num1に5を、num2に10を代入した後、call MYPRCS::Multiply(num1, num2, answer)と記述する。ここでMYPRCSは先ほど作成したライブラリの名前、MultiplyはProcScriptの名前である。この呼び出しにより、MultiplyProcScriptが実行され、num1とnum2の値(5と10)が渡され、計算結果(50)がanswer変数に格納される。最後にmessage "Result: %%answer%%"で結果が画面に表示される。
もしcallコマンドでライブラリ名を明示的に指定しなかった場合、UnifaceはGlobal ProcScriptを特定の順序で探しに行く。まず、現在実行されているコンポーネントが属するライブラリ内を探し、次にアプリケーション全体をまとめるアプリケーションシェルライブラリ内を探し、最後にUnifaceのシステムが提供するSYSTEM_LIBRARY内を探す。ただし、意図しないProcScriptが呼び出されるのを避けるためにも、通常はライブラリ名を明示的に指定することが推奨される。
Global ProcScriptsを開発する際には、いくつかの一般的な問題に遭遇することがある。 一つ目は、「Function Not Found Error」(エラーコード -1109)である。これは、Unifaceが呼び出そうとしているGlobal ProcScriptを見つけられない場合に発生する。このエラーが出た場合は、ライブラリ名とProcScript名のスペルが正しいか、ProcScriptの変更後にライブラリ全体がコンパイルされているか、そしてライブラリが実行時にアクセス可能な正しい場所にデプロイされているかを確認する必要がある。
二つ目は、「Wrong Number of Arguments」(エラーコード -1122)である。これは、Global ProcScriptを呼び出す際に渡している引数の数と、ProcScriptの定義(paramsブロック)で期待している引数の数が一致しない場合に発生する。呼び出し側のコードとProcScriptの定義を注意深く比較し、引数の数が合うように修正する必要がある。
三つ目は、「Parameter Type Mismatch」(エラーコード -1113)である。これは、ProcScriptが期待しているデータ型とは異なる型の引数を渡した場合に発生する。Unifaceは一部のデータ型変換を自動的に試みるが、常に成功するわけではない。例えば、数値型の引数が期待されている場所に文字列を渡すとこのエラーが発生する可能性があるため、互換性のあるデータ型を渡すように注意が必要だ。
四つ目は、「Namespace Conflicts」である。これは、異なるライブラリに同じ名前のGlobal ProcScriptが存在する場合に起こりうる問題である。もしライブラリ名を明示せずに呼び出した場合、Unifaceが意図しない方のProcScriptを呼び出してしまう可能性がある。この混乱を避けるためには、常にLibraryName::というプレフィックスを付けて、どのライブラリのProcScriptを呼び出したいのかを明確に指定することが重要である。
これらの問題を未然に防ぎ、より良いGlobal ProcScriptsを作成するために、いくつかのベストプラクティスがある。
まず、ライブラリやProcScriptには、その機能がひと目でわかるような記述的な名前を付けるべきだ。これにより、後からコードを見たときに、何をするものなのかがすぐに理解できる。
次に、ProcScriptのparamsブロックで定義する各引数について、その役割や期待されるデータ型などをコード内にコメントとして明確に記述しておくことも重要である。
また、一つのGlobal ProcScriptは、一つの具体的なタスクに集中させるべきだ。例えば、税金計算と在庫管理といった、関連性の低い複数の処理を一つのProcScriptに詰め込むのではなく、それぞれを別のProcScriptとして分割する方が、理解しやすく、再利用性も高まる。
さらに、作成したGlobal ProcScriptは、実際のアプリケーションに組み込む前に徹底的にテストを行うべきである。様々な入力値を試して、期待通りの結果が得られるか、エラーが発生しないかなどを確認することで、本番環境での不具合を防ぐことができる。
最後に、Global ProcScriptを呼び出した後には、$statusというUnifaceのシステム変数をチェックして、処理が正常に終了したか、あるいは何らかのエラーが発生したかを確認するエラーハンドリングを導入することが推奨される。これにより、問題が発生した場合に早期にそれを検知し、適切に対処できるようになる。
Global ProcScriptsは、Uniface 10.4における非常に強力な機能の一つであり、これらを活用することで、より整理され、保守しやすいコードを作成することが可能となる。再利用可能なロジックを一元的に管理できるライブラリを活用することで、開発時間の短縮や、プログラムのバグを減らすことに大きく貢献する。システムエンジニアを目指す皆さんには、まずは簡単なヘルパー関数などからGlobal ProcScriptの作成を始めてみて、慣れてきたらより複雑な共有モジュールへと挑戦してみることをお勧めする。このようにして、効率的で堅牢なシステムを構築するスキルを身につけてほしい。