バージョン 2.0.0
2026年2月
有限会社 パオ・アット・オフィス
https://www.pao.ac/
1.4 PHP/Python版との違い
2.3 対応フレームワーク
3.4 インストールの確認
4.4 paozip run で直接実行
5.5 version(バージョン表示)
6.5 製品情報
7.3 注意事項
8.3 注意事項
9.4 Docker
「R で書いた統計モデルやアルゴリズムを、暗号化して配布できたら...」
そんな願いを叶えるのが paozip for R です。
あなたが研究を重ねて開発した R のコード — 独自の統計モデル、機械学習パイプライン、データ分析ロジック — それらを暗号化して、安全に配布できます。
しかも、暗号化されたコードはそのまま動きます。source するだけで自動復号。利用者はソースコードの中身を見ることなく、分析を実行できるのです。
.re ファイルを透過的に読み込めるR CMD INSTALL でOKpaozip 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 を実行しているのと変わりません
| 項目 | PHP版 | Python版 | R版 |
|---|---|---|---|
| 暗号化方式 | 同一(zencode) | 同一(zencode) | 同一(zencode) |
| 実行方式 | 透過実行 | ラッパー方式 | ラッパー方式 |
| 実装 | C 拡張(.so) | C 拡張(.so) | Pure R + C 拡張 |
run コマンド |
なし | あり | あり |
| ファイル拡張子 | .php | .pye | .re |
R版は、暗号化エンジン部分に C 拡張を使用しつつ、フック機能は Pure R で実装しています。
| 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 |
| バージョン | 対応状況 |
|---|---|
| R 4.0 | OK |
| R 4.1 | OK |
| R 4.2 | OK |
| R 4.3+ | OK(推奨) |
R 3.x 以前は非対応です。
| フレームワーク | 対応状況 |
|---|---|
| Shiny | OK |
| Plumber | OK |
| R Markdown | OK |
| CLI スクリプト | OK |
まずは 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 の魅力です。
# R コンソールから
install.packages("/path/to/paozip-r", repos = NULL, type = "source")
または devtools を使って:
devtools::install("/path/to/paozip-r")
納品された paozip-r ディレクトリを使って:
R CMD INSTALL paozip-r/
Windows の場合は Rtools が必要です(C 拡張のコンパイルに使用)。
# CLI ツールの確認
paozip version
# → paozip for R 2.0.0 ...
# R API の確認
Rscript -e "library(paozip); cat(get_version_string(), '\n')"
3分で暗号化を体験しましょう。
まず、暗号化キーを作成します:
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)
# 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")
# 元の .R を削除(.re だけ残す)
rm secret_model.R
# 実行!
Rscript app.R
# → Prediction: 5.439
# → API Key: sk-very-secret-key-12345
暗号化されたファイルだけで、ちゃんと動きました。
ラッパーを書かずに、暗号化ファイルを直接実行することもできます:
paozip run secret_model.re
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
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
復号には暗号化時と同じキーが必要です。
paozip run <file.re> [-k key]
| オプション | 説明 |
|---|---|
<file.re> |
実行する暗号化ファイル |
-k key |
復号キー |
例:
paozip run script.re
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)
paozip version
# → paozip for R 2.0.0 [TRIAL]
library(paozip)
# データを暗号化(raw ベクトル)
encrypted <- encrypt(data, key = NULL)
# データを復号(raw ベクトル)
decrypted <- decrypt(data, key = NULL)
key を省略(NULL)すると、環境変数 PAOZIP_KEY または .paozip_key ファイルからキーを読み込みます。
# ファイルを暗号化 → .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")
# データが暗号化されているか
if (is_encrypted(data)) {
message("暗号化されています")
}
# ファイルが暗号化されているか
if (is_encrypted_file("script.re")) {
message("暗号化ファイルです")
}
# source フックをインストール
install_importer()
# 暗号化ファイルを読み込み
.paozip_source("secret_model") # secret_model.re を復号して実行
is_licensed() # TRUE / FALSE
get_license_email() # "user@example.com"
get_product_info() # リスト
get_version_string() # "paozip for R 2.0.0 [TRIAL]"
paozip for R の「キラー機能」です。暗号化ファイルを、R の source() と同じ感覚で読み込めます。
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")
.paozip_source("secret_model") が呼ばれるsecret_model.re ファイルを検索eval() で実行install_importer() は必ず スクリプトの先頭付近 で呼び出してください.paozip_source() で読み込んだ関数は、グローバル環境に定義されます.R と .re の両方が存在する場合、.re を優先しますsource() を使ってください暗号化キーは以下の優先順序で検索されます:
encrypt(data, key = "my_key")PAOZIP_KEY.paozip_key(カレントディレクトリから親ディレクトリを順に検索)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")
.paozip_key ファイルは 絶対に Git にコミットしないでください.gitignore に .paozip_key を追加してください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
# 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)"
R パッケージの内部で暗号化コードを使う場合:
# R/zzz.R(パッケージのロード時に実行)
.onLoad <- function(libname, pkgname) {
library(paozip)
install_importer()
.paozip_source(system.file("encrypted", "core_logic", package = pkgname))
}
暗号化ファイルは inst/encrypted/ ディレクトリに配置します。
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を削除すれば、配布イメージにソースは含まれません。
| 症状 | 対処法 |
|---|---|
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 を確認 |
paozip for R の使用について、paozip for R の使用者(以下「利用者様」と称します)と有限会社パオ・アット・オフィス(以下「弊社」と称します)は、以下の各項目についての内容に同意するものとします。
この使用許諾書は、利用者様が paozip for R を使用する場合に同意しなければならない契約書です。
利用者様が paozip for R を使用する時点で、本使用許諾書に同意されたものとします。同意されない場合は、paozip for R を使用する事はできません。
利用者様が paozip for R の製品版を使用して開発を行う場合には、1台の開発用コンピュータで paozip for R を使用するにあたり、1ライセンスを購入する必要があります。
お客様環境等、開発コンピュータでないマシンで paozip for R を使用する場合ライセンスは必要ありません。ランタイムライセンスフリーでございます。
paozip for R の著作権は、いかなる場合においても弊社に帰属いたします。
paozip for R の使用によって、直接的、あるいは、間接的に生じた、いかなる損害に対しても、弊社は補償賠償の責任を負わないものとします。
paozip for R 及びその複製物を第三者に譲渡・貸与する事は出来ません。paozip for R を開発ツールとして再販/再配布することを禁止します。なお、暗号化されたファイルを配布することは問題ございません。
弊社は paozip for R の仕様を予告無しに変更することがあります。その場合の利用者様に対する情報提供は、弊社 WEB サイトにて行う事とします。
本使用許諾条件は利用者様が paozip for R を使用した日より有効です。
paozip for R の製品版をご利用頂ける場合は、ライセンスを購入して頂く必要があります。
体験版について: すべての機能を制限なくお試しいただけます。体験版では [TRIAL] メッセージが表示されます。
paozip for R で開発を行うパソコンの台数
11,000円(税込)
バグフィックス等のバージョンアップは原則として無償とさせて頂きます。
11,000円 × ライセンス数 を下記口座へ銀行振込、または、郵便振替による送金をして下さい。
| 銀行名 | 支店名(コード) | 口座番号 | 名義 |
|---|---|---|---|
| 三菱UFJ銀行 | 新宿支店 (341) | 普通 3831891 | ユ)パオアットオフィス |
| PayPay銀行 | すずめ支店 (002) | 普通 6461359 | ユ)パオアットオフィス |
| 郵便口座番号 | 名義 |
|---|---|
| 00150-0-576845 | 有限会社 パオ・アット・オフィス |
※ 振込手数料は利用者様負担でお願い致します。
見積書/納品書/請求書/領収証の発行は可能でございます。製品サイトでの手続きにより発行いたします。
製品に関するお問い合わせは、下記までお願いいたします。
有限会社 パオ・アット・オフィス
paozip for R — あなたの R コードを、シンプルに、確実に、守ります。
© 2001-2026 有限会社 パオ・アット・オフィス / https://www.pao.ac/