PyCon JP 2026(広島)の発表資料です。
Pythonで開発したアプリケーションを顧客環境に納品する際、コードが相手の手元に渡ります。そこにAIのコア部分など知財が含まれる場合、どう守るか。選択肢のひとつが、動作を変えずに人が理解するコストだけを上げる「難読化」です。
難読化ツール PyArmor を題材に、実際どこまで守れるのかを扱っています。まず PyArmor の基本的な使い方と、生成されるランタイムの役割を紹介します。次に CPython がコードを実行する仕組み(コードオブジェクト、module.__dict__、co_code)を追いながら、デフォルト設定の難読化ファイルを import しただけで、クラス名・関数名・グローバル変数・docstring・文字列定数がそのまま読み取れてしまう様子と、その理由を解説しています。
そのうえで解析難易度を上げる mix-str / RFT / BCC / --private・--restrict といったオプションを紹介し、Claude Code(Opus 5)に難読化ファイルとランタイムだけを渡して元コードをどこまで復元できるかを検証しました。デフォルト難読化ではほぼ復元される一方、オプションを組み合わせると復元できなくなること、ただしロジックが単純な場合は入出力の観察だけで再現されてしまうことを示しています。
最後に、アプリ全体・Webフレームワーク・API層とロジック層といったケースごとに、どのオプションをどう選ぶかの判断軸を共有しています。時間をかければある程度は理解されうる、と認識した上で設計することが出発点です。