paozip for R

R ソースコードを暗号化して、大切なコードを守るツール

ユーザーズマニュアル


バージョン 2.0.0

2026年2月


有限会社 パオ・アット・オフィス

https://www.pao.ac/


目次

  1. はじめに
  2. 1.1 paozip for R とは
  3. 1.2 特長
  4. 1.3 仕組み(ラッパー方式)
  5. 1.4 PHP/Python版との違い

  6. 動作環境

  7. 2.1 対応 OS
  8. 2.2 対応 R バージョン
  9. 2.3 対応フレームワーク

  10. セットアップ

  11. 3.1 Docker で試す(おすすめ)
  12. 3.2 R パッケージとしてインストール
  13. 3.3 ソースからビルド
  14. 3.4 インストールの確認

  15. クイックスタート

  16. 4.1 暗号化してみよう
  17. 4.2 ラッパーを作ってみよう
  18. 4.3 実行してみよう
  19. 4.4 paozip run で直接実行

  20. CLI コマンドリファレンス

  21. 5.1 encrypt(暗号化)
  22. 5.2 decrypt(復号)
  23. 5.3 run(実行)
  24. 5.4 check(暗号化チェック)
  25. 5.5 version(バージョン表示)

  26. R API リファレンス

  27. 6.1 暗号化・復号
  28. 6.2 ファイル操作
  29. 6.3 チェック操作
  30. 6.4 インポートフック
  31. 6.5 製品情報

  32. source フックの使い方

  33. 7.1 基本的な使い方
  34. 7.2 動作の仕組み
  35. 7.3 注意事項

  36. 暗号化キーについて

  37. 8.1 キーの設定方法
  38. 8.2 キーファイルの作成
  39. 8.3 注意事項

  40. 各種環境での利用

  41. 9.1 Shiny アプリケーション
  42. 9.2 Plumber API
  43. 9.3 R パッケージ内での利用
  44. 9.4 Docker

  45. トラブルシューティング

  46. 使用許諾

  47. 代金支払い方法


1. はじめに

1.1 paozip for R とは

「R で書いた統計モデルやアルゴリズムを、暗号化して配布できたら...」

そんな願いを叶えるのが paozip for R です。

あなたが研究を重ねて開発した R のコード — 独自の統計モデル、機械学習パイプライン、データ分析ロジック — それらを暗号化して、安全に配布できます。

しかも、暗号化されたコードはそのまま動きます。source するだけで自動復号。利用者はソースコードの中身を見ることなく、分析を実行できるのです。

1.2 特長

1.3 仕組み(ラッパー方式)

paozip for R は ラッパー方式(方式A) を採用しています。

app.R(ラッパー — 暗号化しない)
  │
  ├── library(paozip)
  ├── install_importer()              ← source フックをインストール
  │
  └── .paozip_source("secret_model") ← secret_model.re を自動復号して読み込み
        │
        └── 暗号化ファイル (.re) が透過的に実行される

ポイント: - app.R(ラッパー)は暗号化しません。これが「入口」になります - secret_model.re(暗号化ファイル)は .paozip_source() するだけで自動復号 - 利用者からは、普通に R を実行しているのと変わりません

1.4 PHP/Python版との違い

項目 PHP版 Python版 R版
暗号化方式 同一(zencode) 同一(zencode) 同一(zencode)
実行方式 透過実行 ラッパー方式 ラッパー方式
実装 C 拡張(.so) C 拡張(.so) Pure R + C 拡張
run コマンド なし あり あり
ファイル拡張子 .php .pye .re

R版は、暗号化エンジン部分に C 拡張を使用しつつ、フック機能は Pure R で実装しています。


2. 動作環境

2.1 対応 OS

OS 備考
Windows 10/11 CRAN 版 R + Rtools
macOS 12+ CRAN 版 R または Homebrew
Ubuntu 20.04+ apt / CRAN リポジトリ
CentOS/RHEL 8+ EPEL / CRAN リポジトリ
その他 Linux R 4.0+ が動作すれば OK

2.2 対応 R バージョン

バージョン 対応状況
R 4.0 OK
R 4.1 OK
R 4.2 OK
R 4.3+ OK(推奨)

R 3.x 以前は非対応です。

2.3 対応フレームワーク

フレームワーク 対応状況
Shiny OK
Plumber OK
R Markdown OK
CLI スクリプト OK

3. セットアップ

3.1 Docker で試す(おすすめ)

まずは Docker で手軽に試してみましょう。面倒なインストールは一切不要です。

cd paozip-r-demo
docker-compose build
docker-compose run --rm paozip-demo

コンテナの中に入ったら:

# 暗号化前のソースコードを見てみる
cat lib/secret_model.R          # ← 秘密のモデルが丸見え

# 暗号化されたファイルを見てみる
cat lib/secret_model.re         # ← 読めない!バイナリデータ

# でも動く!
Rscript app.R                   # ← 暗号化されたまま実行

# paozip run でも動く
paozip run lib/secret_model.re  # ← 直接実行もOK

暗号化前は丸見えだったコードが、暗号化後はまったく読めない。でも動く。 — これが paozip の魅力です。

3.2 R パッケージとしてインストール

# R コンソールから
install.packages("/path/to/paozip-r", repos = NULL, type = "source")

または devtools を使って:

devtools::install("/path/to/paozip-r")

3.3 ソースからビルド

納品された paozip-r ディレクトリを使って:

R CMD INSTALL paozip-r/

Windows の場合は Rtools が必要です(C 拡張のコンパイルに使用)。

3.4 インストールの確認

# CLI ツールの確認
paozip version
# → paozip for R 2.0.0 ...

# R API の確認
Rscript -e "library(paozip); cat(get_version_string(), '\n')"

4. クイックスタート

3分で暗号化を体験しましょう。

4.1 暗号化してみよう

まず、暗号化キーを作成します:

echo "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" > .paozip_key

次に、秘密のコードを作ります:

# secret_model.R
secret_predict <- function(data) {
  # 企業秘密の予測モデル
  coefficients <- c(0.42, -1.337, 2.718)
  result <- data %*% coefficients
  return(result)
}

secret_api_key <- function() {
  return("sk-very-secret-key-12345")
}

暗号化!

paozip encrypt secret_model.R
# ✓ secret_model.R → secret_model.re

# 確認してみましょう
paozip check secret_model.re
# → secret_model.re: Encrypted (paozip format)

4.2 ラッパーを作ってみよう

# app.R(ラッパー — これは暗号化しない)
library(paozip)
install_importer()

# 暗号化されたモジュールを読み込み
.paozip_source("secret_model")

# 普通に使える!
data <- matrix(c(1, 2, 3), nrow = 1)
cat("Prediction:", secret_predict(data), "\n")
cat("API Key:", secret_api_key(), "\n")

4.3 実行してみよう

# 元の .R を削除(.re だけ残す)
rm secret_model.R

# 実行!
Rscript app.R
# → Prediction: 5.439
# → API Key: sk-very-secret-key-12345

暗号化されたファイルだけで、ちゃんと動きました。

4.4 paozip run で直接実行

ラッパーを書かずに、暗号化ファイルを直接実行することもできます:

paozip run secret_model.re

5. CLI コマンドリファレンス

5.1 encrypt(暗号化)

paozip encrypt <file.R> [-o output] [-k key]
オプション 説明
<file.R> 暗号化する R ファイル
-o output 出力ファイルパス(省略時: .re に変換)
-k key 暗号化キー(省略時: 環境変数または .paozip_key)

例:

paozip encrypt lib/secret_model.R
# → lib/secret_model.re

paozip encrypt lib/secret_model.R -o encrypted/model.re

5.2 decrypt(復号)

paozip decrypt <file.re> [-o output] [-k key]
オプション 説明
<file.re> 復号する暗号化ファイル
-o output 出力ファイルパス(省略時: .R に変換)
-k key 復号キー(省略時: 環境変数または .paozip_key)

例:

paozip decrypt lib/secret_model.re
# → lib/secret_model.R

復号には暗号化時と同じキーが必要です。

5.3 run(実行)

paozip run <file.re> [-k key]
オプション 説明
<file.re> 実行する暗号化ファイル
-k key 復号キー

例:

paozip run script.re

5.4 check(暗号化チェック)

paozip check <file>

例:

paozip check lib/model.re
# → lib/model.re: Encrypted (paozip format)

paozip check lib/model.R
# → lib/model.R: Not encrypted (plain text)

5.5 version(バージョン表示)

paozip version
# → paozip for R 2.0.0 [TRIAL]

6. R API リファレンス

library(paozip)

6.1 暗号化・復号

# データを暗号化(raw ベクトル)
encrypted <- encrypt(data, key = NULL)

# データを復号(raw ベクトル)
decrypted <- decrypt(data, key = NULL)

key を省略(NULL)すると、環境変数 PAOZIP_KEY または .paozip_key ファイルからキーを読み込みます。

6.2 ファイル操作

# ファイルを暗号化 → .re を生成
encrypt_file("script.R")
encrypt_file("script.R", "encrypted.re")
encrypt_file("script.R", key = "MY_KEY")

# ファイルを復号 → raw ベクトルを返す
data <- decrypt_file("script.re")
code <- rawToChar(data)

# ファイルを復号 → ファイルに書き出し
decrypt_file_to("script.re")
decrypt_file_to("script.re", "original.R")

6.3 チェック操作

# データが暗号化されているか
if (is_encrypted(data)) {
  message("暗号化されています")
}

# ファイルが暗号化されているか
if (is_encrypted_file("script.re")) {
  message("暗号化ファイルです")
}

6.4 インポートフック

# source フックをインストール
install_importer()

# 暗号化ファイルを読み込み
.paozip_source("secret_model")  # secret_model.re を復号して実行

6.5 製品情報

is_licensed()           # TRUE / FALSE
get_license_email()     # "user@example.com"
get_product_info()      # リスト
get_version_string()    # "paozip for R 2.0.0 [TRIAL]"

7. source フックの使い方

paozip for R の「キラー機能」です。暗号化ファイルを、R の source() と同じ感覚で読み込めます。

7.1 基本的な使い方

library(paozip)
install_importer()    # ← これが魔法の1行

# 暗号化されたモジュールを読み込み
.paozip_source("secret_model")  # secret_model.re を自動復号して実行

たったこれだけ。install_importer() を呼んだあとは、.paozip_source() で暗号化ファイルを読み込めます。

パスの指定:

# カレントディレクトリの secret_model.re
.paozip_source("secret_model")

# サブディレクトリの場合
.paozip_source("lib/secret_model")

# フルパスの場合
.paozip_source("/path/to/secret_model")

7.2 動作の仕組み

  1. .paozip_source("secret_model") が呼ばれる
  2. secret_model.re ファイルを検索
  3. ファイルを読み込み、復号
  4. 復号されたコードを eval() で実行
  5. 定義された関数や変数が呼び出し元の環境で利用可能に

7.3 注意事項


8. 暗号化キーについて

8.1 キーの設定方法

暗号化キーは以下の優先順序で検索されます:

  1. API 呼び出し時に直接指定encrypt(data, key = "my_key")
  2. 環境変数PAOZIP_KEY
  3. キーファイル.paozip_key(カレントディレクトリから親ディレクトリを順に検索)

8.2 キーファイルの作成

echo "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" > .paozip_key

環境変数で設定する場合:

# Linux / macOS
export PAOZIP_KEY="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

# Windows (PowerShell)
$env:PAOZIP_KEY = "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

# Windows (cmd)
set PAOZIP_KEY=a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6

R スクリプト内で設定する場合:

Sys.setenv(PAOZIP_KEY = "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6")

8.3 注意事項


9. 各種環境での利用

9.1 Shiny アプリケーション

Shiny アプリケーションで秘密のサーバーロジックを暗号化する場合:

# app.R(Shiny アプリ — 暗号化しない)
library(shiny)
library(paozip)
install_importer()

# 暗号化されたサーバーロジックを読み込み
.paozip_source("secret_server")

ui <- fluidPage(
  titlePanel("My App"),
  numericInput("input_x", "Value:", 10),
  textOutput("result")
)

server <- function(input, output) {
  output$result <- renderText({
    # secret_server.re で定義された関数を呼び出し
    secret_calculate(input$input_x)
  })
}

shinyApp(ui, server)
# 秘密のサーバーロジックを暗号化
paozip encrypt secret_server.R
rm secret_server.R

# Shiny は通常通り起動
Rscript app.R

9.2 Plumber API

# api.R(Plumber API — 暗号化しない)
library(plumber)
library(paozip)
install_importer()

# 暗号化されたモデルを読み込み
.paozip_source("secret_model")

#* @get /predict
function(x) {
  secret_predict(as.numeric(x))
}
paozip encrypt secret_model.R
rm secret_model.R
Rscript -e "plumber::plumb('api.R')$run(port=8000)"

9.3 R パッケージ内での利用

R パッケージの内部で暗号化コードを使う場合:

# R/zzz.R(パッケージのロード時に実行)
.onLoad <- function(libname, pkgname) {
  library(paozip)
  install_importer()
  .paozip_source(system.file("encrypted", "core_logic", package = pkgname))
}

暗号化ファイルは inst/encrypted/ ディレクトリに配置します。

9.4 Docker

FROM rocker/r-ver:4.3

WORKDIR /app

# paozip をインストール
COPY paozip-r/ /tmp/paozip-r/
RUN R CMD INSTALL /tmp/paozip-r/ && rm -rf /tmp/paozip-r/

# アプリをコピー
COPY . .

# 暗号化(ビルド時)
RUN paozip encrypt lib/secret_model.R && rm lib/secret_model.R

CMD ["Rscript", "app.R"]

ビルド時に暗号化し .R を削除すれば、配布イメージにソースは含まれません。


10. トラブルシューティング

症状 対処法
Encryption key not found .paozip_key ファイルを作成するか、PAOZIP_KEY 環境変数を設定
Data is not encrypted 暗号化されていないファイルを復号しようとしている。paozip check で確認
.paozip_source() が見つからない library(paozip)install_importer() を先に呼んでいるか確認
復号後のファイルが文字化けする エンコーディングを確認。Encoding(code) <- "UTF-8" を試す
暗号化時と異なるキーで実行した 暗号化時と同じキーを使用しているか確認
ビルドエラー(C 拡張) Rtools(Windows)または gcc / clang がインストールされているか確認
paozip コマンドが見つからない R CMD INSTALL が成功しているか確認。PATH を確認

11. 使用許諾

paozip for R の使用について、paozip for R の使用者(以下「利用者様」と称します)と有限会社パオ・アット・オフィス(以下「弊社」と称します)は、以下の各項目についての内容に同意するものとします。

1. 使用許諾書

この使用許諾書は、利用者様が paozip for R を使用する場合に同意しなければならない契約書です。

2. 使用許諾書の同意

利用者様が paozip for R を使用する時点で、本使用許諾書に同意されたものとします。同意されない場合は、paozip for R を使用する事はできません。

3. ライセンス(使用権)の購入

利用者様が paozip for R の製品版を使用して開発を行う場合には、1台の開発用コンピュータで paozip for R を使用するにあたり、1ライセンスを購入する必要があります。

お客様環境等、開発コンピュータでないマシンで paozip for R を使用する場合ライセンスは必要ありません。ランタイムライセンスフリーでございます。

4. 著作権

paozip for R の著作権は、いかなる場合においても弊社に帰属いたします。

5. 免責

paozip for R の使用によって、直接的、あるいは、間接的に生じた、いかなる損害に対しても、弊社は補償賠償の責任を負わないものとします。

6. 禁止事項

paozip for R 及びその複製物を第三者に譲渡・貸与する事は出来ません。paozip for R を開発ツールとして再販/再配布することを禁止します。なお、暗号化されたファイルを配布することは問題ございません。

7. 保証の範囲

弊社は paozip for R の仕様を予告無しに変更することがあります。その場合の利用者様に対する情報提供は、弊社 WEB サイトにて行う事とします。

8. 適用期間

本使用許諾条件は利用者様が paozip for R を使用した日より有効です。


12. 代金支払い方法

paozip for R の製品版をご利用頂ける場合は、ライセンスを購入して頂く必要があります。

体験版について: すべての機能を制限なくお試しいただけます。体験版では [TRIAL] メッセージが表示されます。

必要なライセンス数の数え方

paozip for R で開発を行うパソコンの台数

1ライセンス当たりの価格

11,000円(税込)

バグフィックス等のバージョンアップは原則として無償とさせて頂きます。

お支払方法

11,000円 × ライセンス数 を下記口座へ銀行振込、または、郵便振替による送金をして下さい。

銀行名 支店名(コード) 口座番号 名義
三菱UFJ銀行 新宿支店 (341) 普通 3831891 ユ)パオアットオフィス
PayPay銀行 すずめ支店 (002) 普通 6461359 ユ)パオアットオフィス
郵便口座番号 名義
00150-0-576845 有限会社 パオ・アット・オフィス

※ 振込手数料は利用者様負担でお願い致します。

お支払いの通知と製品の送付

  1. 振り込みが完了した時点で、必ず弊社 WEB サイトの入金連絡フォームから入金のご連絡をお願いいたします。
  2. 弊社では上記連絡を受けて入金確認を行い、paozip for R の製品版を利用者様へ電子メールにてお送りさせて頂きます。

見積書/納品書/請求書/領収証の発行

見積書/納品書/請求書/領収証の発行は可能でございます。製品サイトでの手続きにより発行いたします。


お問い合わせ

製品に関するお問い合わせは、下記までお願いいたします。

有限会社 パオ・アット・オフィス


paozip for R — あなたの R コードを、シンプルに、確実に、守ります。


© 2001-2026 有限会社 パオ・アット・オフィス / https://www.pao.ac/