AS/400展望台

IFSの基礎



マイケル・オティ著

統合ファイル・システム (IFS: Integrated File System) はiSeriesコンポーネントの基礎をなす一部分で、さまざまな重要な機能を提供しています。提供されている重要な機能には、マルチプラットフォームのファイル交換、iSeriesの資源の共有、ネットワークで接続されたiSeriesユーザーのための共通のファイル共有ポイントとしての機能などがあります。しかし、IFSの階層構造とiSeriesアプリケーションの大部分が使用しているQSYS.LIBファイル・システムとが極めて異なるため、あまり正しく理解されていないようです。本稿では、iSeriesのIFSを効果的に使用するために知っておくべき基本的な点について説明します。

IFSへのアクセス
IFSは、V3R1の頃からすべてのAS/400およびiSeriesシステムに統合されている機能です。オプションのコンポーネントではなく、使用されるかどうかにかかわらず、すべてのiSeries上に存在します。IFSにはネットワークで接続されたPCか5250端末セッションからアクセスすることができます。IFSを操作するための最良のツールはiSeries Navigatorです。iSeries NavigatorはiSeries Access for Windowsの一部としてインストールされ、IFS管理ツールの主要な部分として設計されていて、フォルダの作成、IFSセキュリティの設定、UDFSのマウント、ファイル・ジャーナリングの開始などが行えます。また、iSeries NavigatorをIFSアクセス・ツールとして使用してディレクトリのナビゲーション、ファイルの閲覧、ドラッグ・アンド・ドロップによるファイルのコピー操作などが行えます。iSeries Navigatorの例を図1に示します。

iSeries NavigatorからIFSにアクセスするには、まずiSeriesノードをiSeries Navigatorウィンドウの左側のペインで展開し、ファイル・システム・ノードと統合ファイル・システム・ノードを選択してIFS中のすべてのオブジェクトを一覧表示させます。標準のWindowsの操作と同様に、プラス記号 (+) をクリックして各ノードを展開したり、ノードをダブル・クリックしてそのノード中のすべてのオブジェクトを一覧表示させたりすることができます。

NetServerを使用している場合は、Windowsのエクスプローラから直接IFSにアクセスすることができます。iSeries NetServerの機能は基本的にネットワーク接続されたクライアントからはiSeriesがまるでWindowsベースのファイル・サーバーであるかのように見えるようにするというものです。iSeries NavigatorとNetServerの一番の違いは、NetServerはIFS中で作成されたファイル共有のみを表示するのに対し、iSeries Navigatorはオブジェクトへのアクセス権限があるIFSのすべてのオブジェクトを表示するという点です。NetServerはエンド・ユーザーには便利ですが、iSeries Navigatorは管理者や開発者にとって便利な機能です。IFSのファイル共有の作成や使用についての詳細については本稿で後述します。

5250端末セッションからIFSにアクセスするには、WRKLNK (Work with Object Links) コマンドを使用します。WRKLNKコマンドはIFSのルート・ディレクトリから始まるIFSの一覧を文字で表示します。オプション5を使ってディレクトリの下位層にドリルダウンしたりコマンド12を使用してバックアップを取ったりなどといったようにiSeries標準の方法でWRKLNKの表示を操作します。WRKLNKを使用してIFSオブジェクトのコピー、移動、名前の変更、削除、セキュリティ属性の設定などが行えます。しかしファイル共有の作成などといった高度な機能は使用できません。

IFSのネーミングとナビゲーション
IFSについて理解しておかなければいけない基本的な事項の一つにネーミング・システムがあります。特定のディレクトリ下のすべてのオブジェクトにはユニークな名前が付けられていなければなりません。IFSの名前の先頭の文字はアスタリスク (*) ではいけません。PCやUnixシステムと同様にIFSも階層的なファイル構造を使用しており、パス名はディレクトリの最上位のレベルから具体的なオブジェクトに到達するまでを指定します。ディレクトリ名はフォワード・スラッシュ (/) 記号で区切ります。バック・スラッシュは (\) 記号はWindowsの場合と同様でパス名の区切り記号としては使用しません。たとえば、IFSルートのmikeoディレクトリのcustmast.xlsファイルにアクセスするには、次の構文を使用します。

/mikeo/custmast.xls

パス名がフォワード・スラッシュ (/) で始まっているということは、そのパスがIFSの「ルート」ディレクトリ下にあることを示しています。このようなパス名を絶対パスとも呼びます。フォワード・スラッシュで始まっていないパス名は、カレント・ディレクトリを基準に指定されていることを示しています。このようなパスを通常相対パスと呼びます。

IFSとPCのファイル・システムの最も大きな相違点は、IFSがシンボリック・リンク(ソフト・リンクともいう)とハード・リンクの両方をサポートしているということです。ソフト・リンクを使用すると一つのオブジェクトに対して複数の名前を作成することができ、ディテクトリ階層の深い部分にあるオブジェクトに対して短い名前を付けるのに使用します。ハード・リンクは物理的なリンクを表します。

一見しただけではわかりにくい点の一つが、IFSスタイルのパス名の付け方を使用してIFSのルートや他の階層的なファイル・システム中のファイルに対してできるのと同じように、QSYS.LIBファイル・システム中のオブジェクトを識別することもできるという点です。IFSのパス名の付け方を使用してQSYS.LIBファイル・システム中のオブジェクトにアクセスするには、次の構文を使用します。

/QSYS.LIB/MyLibrary.LIB/MyFile.File
  /MyMember.MBR


ご覧の通り、この例では標準のIFSの階層ディレクトリ構造を使用してQSYS.LIBファイル・システム中の絶対パスを指し示しています。しかしこの場合、一つ注意しなければならない点は、object_name.object_typeという記法の使用です。ライブラリはobuject_typeに対して常に.libという拡張子を使用します。同様に、ファイルは.fileという拡張子、メンバー名はオブジェクトタイプの拡張子として.mbrを使用します。

IFSを使用したファイル共有
IFSの最も重要な使用方法が、ネットワーク上のユーザーに対してファイル共有を提供することであるのは間違いありません。ファイル共有を作成することはIFSをファイル・サーバーとして設定するための第一歩です。iSeries Navigatorでファイル共有を作成するには、ファイル共有を作成したいiSeriesのシステム・ノード下のアイテムを展開し、共有したいディレクトリを選択します。IFSディレクトリを使ったファイル共有を作成するにはそのディレクトリが既に存在するものでなければなりません。次に[ファイル]→[共有]→[新規の共有]メニューを選択して図2のようなダイアログを表示させます。

共有名とオプションの詳細を入力します。共有名の長さは12文字以内とし、共有するディレクトリの名前と同じである必要はありません。次に、読み取り専用、読み取り/書き込みのいずれかより許可するアクセス・タイプを選択します。ファイル共有を使用する他のユーザーに対するセキュリティをこれで設定します。IFSのセキュリティの詳細については本稿で後述します。次に、最大同時使用ユーザー数を指定します。デフォルトの値は制限なしです。パス名フィールドにはiSeries Navigatorウィンドウで選択したディレクトリ名が自動的に入ります。テキスト変換タブをクリックすると図3のダイアログが表示されます。

テキスト変換ダイアログでは、IFSシェア中にドキュメントを作成する際に使用するデフォルトのコード・ページを指定できます。テキスト変換オプションはIFS共有中で作成されたドキュメントを展開することで起動されます。EBCDIC/ASCII間のテキスト変換を自動的に起動するにはファイル拡張子フィールドにドキュメントの拡張子を手入力する必要があります。.doc、.txt、.xls、.xml、.htmの拡張子を持つファイルにテキスト変換が自動的に適用されるように指定した例を、図3に示します。単純変換または単純および複雑変換のいずれかを有効にすることができます。単純変換のオプションではiSeriesネイティブのEBCDICコード・ページの任意のテキストをASCIIに変換します。単純および複雑変換のオプションは、シングル・バイト文字のコード・ページをダブル・バイト文字のコード・ページに移動するなど、異なるコード幅を持つ文字セットを調整する必要がある場合に使用します。

ファイル共有を作成したあとは、Windowsクライアントでドライブの文字をそのファイル共有にマッピングさせるか、またはそのファイル共有のUNC名 (Universal Naming Convention) を使用することでそのファイル共有にアクセスすることができます。UNCフォーマットでは///という記法を使用します。IFSファイル・システムに対してドライブをマッピングさせることで、Windowsのファイル共有にドライブをマッピングできるのとまったく同じようにファイル共有の中身にアクセスできるようになります。

iSeries Navigatorを使用してドライブをマッピングするには、対象とするiSeriesのノードを選択し、ファイル・システムを展開してファイル共有をクリックします。iSeries Navigatorの右側のペインで、ドライブにマッピングさせたいファイル共有を右クリックし、ポップアップ・メニューから[ネットワーク・ドライブにマッピング]を選択して図4のダイアログを表示させます。

ドロップダウン・ボックスからマッピングさせたいドライブの文字を選択します。現在ログインしているユーザー名と異なるユーザー名で接続したい場合を除き、接続およびパスワードの入力欄は空欄のままでも構いません。ログオンするたびにそのドライブが自動的にマッピングさせたいのであれば、ログオン時に再接続ボックスを選択します。[OK]ボタンをクリックすると、マッピングされたドライブがWindowsのマイネットワークに表示され、割り当てたドライブ文字を使用してファイル共有にアクセスできますので、ファイル共有をネットワークに接続されたクライアントから利用できます。IFSでファイル共有を設定したら、次のステップはiSeriesのデータをネットワークに接続されたPCとIFS経由で共有させることです。

QSYS.LIBとIFSとの間のファイル転送
IFSのもう一つの重要な側面はiSeries資源の共有を促進する機能です。そして、共有される資源の中でも最も重要なものの一つがQSYS.LIBファイル・システムからのデータベース・ファイルであることは間違いありません。CLコマンドを実行してiSeriesライブラリのデータベース・ファイルをIFSに転送することができ、IFSに転送すればExcelやWord、その他の専用データ操作プログラムやレポート・プログラムなどのさまざまなPCアプリケーションへ容易にインポートすることができます。

QSYS.LIBファイル・システムのデータベース・ファイルからIFSへデータを転送するのに最も適したコマンドはCPY TOIMPF (Copy to Import File) コマンドです。CPY TOSTMF (Copy to Stream File) コマンドでもiSeriesのデータベース・ファイルをストリーム・ファイルにコピーでき、文字セットの変換もサポートしています。残念ながら、CPYTOSTMFコマンドはソースファイル・メンバーとプログラム記述データベース・ファイルに対してのみ有効で、外部で記述されたデータベース・ファイルに対しては有効ではありません。CPYTOIMPFコマンドは、さまざまなタイプのフィールド区切りファイルを自動的に作成できるため、プラットフォーム間でのデータの転送が簡単に行えます。デフォルトでは、CPY TOIMPFコマンドはCSV(コンマ区切り)ファイルを作成しますが、文字列やフィールドの区切り文字に別の文字を使用しても構いません。次の例は、コンマ区切りを使用してQIWS/QCUSTCDTファイルのデータをqcustcdt.csvにコピーする例です。

CPYTOIMPF
 FROMFILE(QIWS/QCUSTCDT)
 TOSTMF('/Shared Documents/qcustcdt.csv' ) +
 MBROPT( *REPLACE )
 RCDDLM( *CRLF ) DTAFMT( *DLM )


ここで、FROMFILEパラメータは、転送対象となるiSeriesライブラリとファイルを示します。TOSTMFパラメータはIFSフォルダの転送先位置を示します。IFSの名前付けに関する前述の説明を思い出していただけると、この例では絶対パスを使用していることがおわかりいただけるでしょう。MBROPTパラメータは、IFSに既に存在している任意の既存ファイルの内容を置換するようにコマンドに対して指示しています。なかでも最も重要なパラメータはRCDDLM (Record Delimiter) パラメータとDTAFMT (Data Format) パラメータです。RCDDLMパラメータの値を*CRLFとすると、各行の最後に復帰改行文字を付け、DTAFMTパラメータの値を*DLMにすると、このファイルが区切りつきファイルであることを示します。つまり、出力ファイルに書き出される各フィールドの間に文字が挿入されることになります。その値はFLDDMTパラメータの内容によって決まります。この例ではデフォルト値であるコンマを使用しています。

QSYS.LIBからIFSにデータベース・ファイルをコピーするだけでなく、IFSのフラット・ファイルをQSYS.LIB中のデータベース・ファイルにコピーしたい場合もあるでしょう。この場合に使用する最良のコマンドはCPYFRMIMPF (Copy From Import File) コマンドです。CPYFRMSTMF (Copy From Stream File) も同様の目的で使用するコマンドです。ただし、CPYFRMSTMFコマンドは、CPYTOSTMFコマンドと同様にソース・ファイルまたはプログラム記述ファイルに対してのみ有効で、iSeriesアプリケーションのほとんどで使用している外部記述データベース・ファイルに対しては有効ではありません。ファイルの外部定義を参照するというCPYFRMIMPFコマンドの機能により、IFSファイル中のフラット・ファイルのデータを正しく構文解析してQSYS.LIBのデータベース・ファイルに正しく変換できます。
次に示す例は、CPYFRMIMPFコマンドを使用して共有ドキュメントIFSディレクトリ下にあるqcustcdt.csvファイルを、MIKEOライブラリ中のQCUSTDT2という名前の外部記述ファイルにコピーする方法を説明したものです。これは前述の例で示したIFSにエキスポートされたファイルと同じものです。IFSファイル・システムのqcustcdt.csvファイルをMIKEOライブラリ中のQCUSTCDT2ファイルにコピーするためのコマンドは次の通りです。

CPYFRMIMPF
 FROMSTMF('/Shared documents/qcustcdt.csv') +
 TOFILE(mikeo/qcustcdt2)
 RCDDLM(*CRLF) DTAFMT(*DLM)


FROMSTMFパラメータは、ソース・ファイルがコピーされる元の場所を示します。この例の場合、指定する文字列ではIFSの名前付けフォーマットが使用されており、先頭のスラッシュ記号 (/) が絶対パスであることを示し、qcustcdt.csvファイルがIFSファイル・システムのルート・ディレクトリから始まる共有ドキュメント・フォルダ中にあることを示しています。TOFILEパラメータはコピーされたレコードを含むターゲットのファイルを示します。FROMファイルとTOファイルのいずれもCPYFRMIMPFコマンドの実行前に存在しているファイルでなければなりません。RCDDLMパラメータは、入力ファイルのレコードが復帰改行文字で区切られていることを示しています。復帰改行文字はテキスト・ファイルで標準的に使用されている行の終わりを示す記号です。DTAFMTパラメータの値が*DLMとなっているということは、入力ファイルが各フィールドのデータを区切る値が指定されている区切りテキスト・ファイルであることを示しています。

コンマ区切りファイルでは*DLMを使用するのが良いですが、さらにフィールド区切りがない固定長のフラット・ファイルに対して*FIXEDという値を用いることもできます。DTAFMTパラメータに*FIXEDという値を使用する場合は、FLDFNFILE (Field Definition File) パラメータにも値を指定しなければなりません。FLDFNFILEパラメータには、CPYFR MIMPFコマンドが入力ファイルを構文解析する際に使用することのできるフィールド記述情報を含んだファイル名を指定します。FLDFN FILEパラメータ中のデータのフォーマットはご想像の通り特定のフォーマットに従わないといけません。

CLコマンドを使用してIFSとQSYS.LIB間でデータを転送する方法の他にも、C、Java、RPG、Cobolで記述されたiSeriesプログラムを使用して、IFSでのファイルの作成、データの読み出しや書き込みが行えます。

IFSをセキュアにする
ご想像の通り、IFS中のオブジェクトをセキュアにすることは、QSYS.LIBファイル・システム中のオブジェクトをセキュアにするのとは異なります。IFSはUnix風のファイル・セキュリティ・スキーマを実装しており、ファイルへのアクセス権限は*R(読み出し)、*W(書き込み)、*X(実行)で指定することができます。読み出し権限はIFSファイルを読み出す際に必要になります。書き込み権限はIFSファイルへ書き込む際に必要になります。実行権限はディレクトリに対してのみ適用され、指定されたディレクトリを展開できることを示します。IFSのセキュリティを理解する上で重要な点は、親フォルダに対する権限セットがデフォルトではその親フォルダ下に作成されたファイルやサブ・フォルダに引き継がれるという点です。作業対象のiSeriesを選択し、ファイル・システム・ノードを展開して統合ファイル・サーバーをクリックすることで、IFSオブジェクトに対する権限をiSeries Navigatorで設定することができます。そしてセキュアにしたいディレクトリへと移動します。そのディレクトリを右クリックし、ポップアップ・メニューから[権限]を選択して図5に示すダイアログを表示させます。

[共有ドキュメント権限]ダイアログでは、ネイティブのOS/400のオブジェクト・レベルの権限に加え、IFSの読み出し、書き込み、実行権限を設定することができます。

iSeriesを最大限に活用する
IFSの使用方法を理解することは、iSeriesサーバーを最大限に活用するために最も重要な前提条件となります。本稿で説明したテクニックが、IFSの動作を深く理解する手助けとなり、IFSをより有効に活用できるよう有用な指針として役立つことを願っています。

マイケル・オティはベル・データ鰍フ業務提携先でiSeries NEWS誌の発行者、米Penton Media, Inc.のシニア・テクニカル・エディタです。



↑このページのトップへ
TOPPAGE

BELLDATA, Inc. Copyright reserved.