sas-packages について
SAS Packages Framework(SPF)の利用者向け静的リファレンスです。SAS セッションでのパッケージ設定、導入、ロード、アンロード、トラブルシューティングを扱い、共有サーバーの SASAUTOS に追加せずにマクロを管理したい SAS ユーザーを対象とします。
主な機能
- 01packages フォルダーの設定
- 02パッケージの導入とバージョン固定
- 03セッション単位のマクロのロードと解除
- 04よくある問題の調査
- 05SASAUTOS を変更せずにパッケージを利用
活用シーン
- 01SAS セッションで SPF を設定
- 02マクロパッケージの導入とロード
- 03パッケージ導入失敗の診断
- 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の失敗をデバッグする場合- パッケージフォルダーを設定する場合、または
packagesfileref に指定するパスを確認する場合 - 共有サーバーの
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 で管理されています。正式なマクロリファレンスと現在のフレームワークバージョンについては、こちらを参照してください。