mcpField
S
sas-packages

sas-packages

github.com/sasjs開発3815 回インストール2 日前に更新
リポジトリ

sas-packages について

SAS Packages Framework(SPF)の利用者向け静的リファレンスです。SAS セッションでのパッケージ設定、導入、ロード、アンロード、トラブルシューティングを扱い、共有サーバーの SASAUTOS に追加せずにマクロを管理したい SAS ユーザーを対象とします。

主な機能

  1. 01packages フォルダーの設定
  2. 02パッケージの導入とバージョン固定
  3. 03セッション単位のマクロのロードと解除
  4. 04よくある問題の調査
  5. 05SASAUTOS を変更せずにパッケージを利用

活用シーン

  1. 01SAS セッションで SPF を設定
  2. 02マクロパッケージの導入とロード
  3. 03パッケージ導入失敗の診断
  4. 04共有 SASAUTOS を変更せず単一ジョブでマクロを利用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sasjs/skills --skill sas-packages

インストール後、Claude Code で/sas-packagesを入力して読み込まれたか確認します。

詳細

SAS Packages(SPF)

SAS パッケージは、SAS プログラム(マクロ、関数、データステップ)の一群に、自動生成された説明、ロード、アンロード、ヘルプの各ファイルを加えてまとめた単一の ZIP ファイルです。Bartosz Jablonski による SAS Packages Framework(SPF)は、ZIP ファイルを格納したフォルダーからパッケージをインストールしてロードします。そのため、SASAUTOS やマクロカタログに手を加えることなく、パッケージを固定したり、バージョン管理したり、入れ替えたりできます。

このスキルでは、利用者としてフレームワークを使う方法を説明します。SASjs 固有のものではありません。SPF は独立したプロジェクトであり、扱うパッケージはどの作者が作成したものでも構いません。

使用する場面

  • SAS セッションにパッケージをインストールする場合(例:sasjscore(@sasjs/core の SASPAC パッケージ))
  • %installPackage/%helpPackage/%loadPackage の失敗をデバッグする場合
  • パッケージフォルダーを設定する場合、または packages fileref に指定するパスを確認する場合
  • 共有サーバーの SASAUTOS に追加せずに、単一のジョブでマクロをロードする場合

対象外:パッケージの作成や公開(%generatePackage)、または @sasjs/core 独自のマクロコーディング規約については、sasjs-core スキルを参照してください。

フレームワークを有効にする

フレームワークは単一のファイルです。セッション内で有効にします。

filename packages "%sysfunc(pathname(work))";
filename SPFinit url "https://bit.ly/SPFinit";
%include SPFinit;

短縮されていない同じファイルの URL は https://raw.githubusercontent.com/yabwon/SAS_PACKAGES/main/SPF/SPFinit.sas です。リダイレクトを避けたい場合はこちらが適しています。フレームワークを有効にするには、SAS セッションからインターネットにアクセスできる必要があります。ファイルをディスクに保存しない限り、セッションごとに一度実行します(下記の「永続化」を参照)。

packages fileref(必須)

  • fileref の名前は必ず packages にしてください。packages と package は SPF の予約語であり、別の名前は認識されません。
  • 指定するのはディレクトリであり、ZIP ファイルではありません。
  • ディレクトリは事前に存在している必要があります。 SPF はディレクトリを作成しません。%installPackage は ZIP ファイルをそのフォルダーに手動でダウンロードするのと同等と説明されており、フォルダー自体は作成されません。

必要な用途に応じてパスを選択してください。

用途使用するもの
一時的/移植可能。Windows、Viya、SASjs Server で動作filename packages "%sysfunc(pathname(work))";
セッション終了後も保持(インストールして再利用)Windows の C:/SAS_PACKAGES など、実在するディレクトリ、または Linux 環境内の書き込み可能なディレクトリ

SPF のドキュメントでは C:/SAS_PACKAGES が頻繁に使われていますが、これは Windows の例です。Linux(Viya、SASjs Server)では相対パスとして扱われるため、そのディレクトリが実在しない限りインストールは失敗します。「注意点」を参照してください。

インストール、ロード、アンロード

%installPackage(sasjscore)  %* download the zip into the packages folder;
%helpPackage(sasjscore)     %* print the package description and contents;
%loadPackage(sasjscore)     %* compile the macros into the session;
%unloadPackage(sasjscore)   %* remove them again;
  • %installPackage() はネットワーク経由で ZIP ファイルを取得します。デフォルトの取得元は SASPAC アーカイブ https://github.com/SASPAC/ です。sourcePath= または mirror= で変更できます。
  • パッケージ名はスペース区切りで指定し、.zip 拡張子は付けません。例:%installPackage(pkg1 pkg2)。括弧内にバージョンを指定して固定できます:%installPackage(baseplus(1.17) macroarray(1.0))。replace=0 を追加すると、すでにインストールされているパッケージの上書きを拒否します。
  • %installPackage(SPFinit) は、フレームワーク自体を packages フォルダーにインストールします。
  • %loadPackage() はセッション内でコンパイルします。%unloadPackage() はマクロカタログから該当項目を削除します。サーバーの SASAUTOS にマクロを常駐させずにジョブで使用する場合は、同一セッション内でロード、使用、アンロードできます。
  • SAS セッションで ZIP fileref がサポートされていない場合は、<name>.zip を <name>.disk に展開し、zip=disk を指定します:%loadPackage(pkgname,zip=disk,options=)。

永続化:一度インストールして、以後はオフラインで使用

まず、フレームワークを packages フォルダーに一度インストールします。

%installPackage(SPFinit)

その後は、ネットワークに接続する2行をローカルのインクルードに置き換えられ、実行時にネットワークアクセスは不要になります。

filename packages "/permanent/path/to/packages";
%include packages(SPFinit.sas);
%loadPackage(sasjscore)

これには、fileref が永続ディレクトリを指している必要があります。%sysfunc(pathname(work)) を使うと、セッション終了時にフレームワークも消えてしまいます。

落とし穴

  • rc=20006 は成功のように見えますが、失敗です。 %installPackage は Done with return code rc=20006 (zero = success) と出力しますが、括弧内はメッセージテンプレートにすぎません。20006 はインストールが失敗したことを意味します。実際のエラーは、その後に表示される ERROR: Physical file does not exist, <dir>/<name>.zip の行です。rc= の行だけを信用しないでください。
  • %installPackage を呼び出す前に、packages フォルダーが存在している必要があります。 これが前述の失敗の最も一般的な原因で、ドキュメントにある C:/SAS_PACKAGES の例が相対パスとして扱われてしまう Linux では特に問題になります。%put %sysfunc(fileexist(<dir>)); で確認し、0 が返された場合は先にフォルダーを作成してください。
  • zip ファイルがないと、連鎖的に失敗します。 インストールに失敗すると、%helpPackage と %loadPackage も File "<dir>/<name>.zip" does not exist! というエラーで失敗し、マクロ自体が存在しない状態になります。その後に呼び出すと、WARNING: Apparent invocation of macro X not resolved が表示されます。マクロを追いかけるのではなく、インストールを修正してください。
  • インストールには、ワークステーションではなく SAS セッションからのネットワーク接続が必要です。 インターネットに接続できない、アクセス制限のあるコンピューティング環境からは、SASPAC や GitHub に接続できません。
  • %loadPackage の有効範囲はセッション単位です。 あるセッションで読み込んだマクロは、別のセッションでは使えません。各セッションで再読み込みするか、永続的に解決するには SASAUTOS または CLI を使用してください。

検証

読み込み後は、インストールが成功したと思い込まず、マクロが実際に使える状態になっていることを確認してください。

%put NOTE: package version check;
%helpPackage(sasjscore)          %* prints "Help for package SASjsCore, version X.Y.Z, license MIT";
%put NOTE: getuser returns %mf_getuser();

正常に実行されると、INFO: Package sasjscore installed.、明示的なバージョンを含むヘルプブロック、および解決済みのマクロ呼び出しが表示されます。その後、%unloadPackage() の実行後に同じ呼び出しを行うと、Apparent invocation of macro MF_GETUSER not resolved が返されることを確認できます。

制限事項

このスキルは、SAS Packages Framework の静的なリファレンスです。SAS コードを実行したり、シェルコマンドを実行したり、ファイルシステムにアクセスしたり、ネットワークリクエストを送信したりすることはありません。コード例は説明用であり、ユーザーが SAS セッションに送信する必要があります。フレームワークは https://github.com/yabwon/SAS_PACKAGES で、アーカイブは https://github.com/SASPAC で管理されています。正式なマクロリファレンスと現在のフレームワークバージョンについては、こちらを参照してください。

コメント