Redmineとプラグインのライセンスに関してGeminiに聞いてみた(3)
Redmine Advent Calendar 2025
今回の記事は下記の「Redmine Advent Calendar 2025」の12/12の記事として作成しました。
12/11はSusumu Yamasakiさんの「Redmineとプラグインのライセンスに関してGeminiに聞いてみた(2)」という記事でした。
急に寒くなり今年も残り数日です。今年もRedmine Advent Calendarの時期になりました。Advent Calendarに参加してRedmine界隈を盛り上げていけたらと思っています。
Geminiを使ってRedmineのライセンの調査
RedmineはOSSでできており、その使用に関してはGPLv2ライセンスで提供されています。
RedmineとGPLv2ライセンスの関係をいくつかの観点からGeminiに質問をしてみました。
なお、この記事はGeminiの回答を元にしており、法律的な観点が含まれるため、その真実性に関しては著者はいかなる責任も負いません。法律の解釈の問題が発生するため、正確な情報が必要な方は弁護士など専門家の方にご確認ください。
前回に続けてGeminiを使ってRedmineのライセンの調査をしてみました。
インデントや変数名の複雑さに関して
たとえば改行をなくしたり、インデントをなくしたり、
変数名を複雑にしたりしても問題になりますか?
ご質問ありがとうございます。
改行をなくす(圧縮する)、インデントをなくす、そして変数名を複雑にする行為は、一般的に**難読化(Obfuscation)**の範囲に含まれますが、その許容度はGPLの要求する「対応するソースコード」の観点から判断されます。
1. 改行やインデントの削除(コードの圧縮/ミニファイ)
これは通常「コードの圧縮 (Minification)」と呼ばれ、ファイルサイズを削減し、ロード時間を短縮するために行われる手法です。
- GPL違反の可能性: 低い
- 理由: GPLが求める「ソースコード」とは、人が理解し、改変できる形式である必要があります。改行やインデントを削除しただけのコードは、元の構造を機械的に復元することが可能です(「Beautifier」と呼ばれるツールなど)。また、このコード自体が実行可能であり、必要であれば改変・デバッグも不可能ではありません。
- 注意点: 多くの開発者は、圧縮されたコードだけでなく、元の(非圧縮の)読みやすいソースコードも同時に提供することが、GPLの精神に則った対応だと考えています。もし、元の読みやすいソースコードが他に存在せず、圧縮されたコードのみを提供する場合、受け取り側にとって改変の自由を実質的に制限していると解釈されるリスクは残ります。
2. 変数名を複雑にする・意味のない名前に変更する
変数名や関数名などの識別子を、例えば i, a1, b2 のような意味のない名前に置き換えたり、意図的に複雑な名前にしたりすることは、GPLの原則に抵触する可能性がより高くなります。
- GPL違反の可能性: 中〜高い
-
理由: プログラムの動作を研究し、改変を行う際、適切な変数名や関数名はコードの理解に不可欠な要素です。名前が意図的に意味をなくすように変更されている場合、利用者がそのコードを実質的に研究・改変することが極めて困難になります。
- これは、前述した「利用者がプログラムの動作を研究し、自分の必要に応じて改変する自由」を実質的に妨げる行為と見なされる可能性があります。
まとめ
| 行為 | 一般的な呼称 | GPL違反リスク | 懸念点 |
|---|---|---|---|
| 改行・インデントの削除 | コードの圧縮 (Minification) | 低い | 元の読みやすい形式を他に提供しない場合、実質的な改変の自由を制限する恐れがある。 |
| 変数名・関数名の複雑化/無意味化 | 難読化 (Obfuscation) | 中〜高い | 利用者の研究・改変の自由を著しく妨げる行為として、GPLの要求する「対応するソースコード」ではないと判断される可能性が高い。 |
有料で販売される場合、購入者にGPLが保証する「自由」を確実に提供するためにも、難読化されていない、開発者が作業に使った状態の読みやすいソースコードを提供することが、最も安全で推奨される対応です。
ソースコードの提供依頼に関して
有料で販売する場合に、有料で購入をしていない方から
ソースコードの提供依頼を受けた場合は、それに応じる必要がありますか?
もしくは有料で購入をした方からのソースコードの提供依頼だけを受ければよいのですか?
これはGPLライセンスにおける「ソースコードの提供義務」の範囲に関する、非常に重要なご質問です。
GPLの義務を負う相手
GPLライセンスにおけるソースコードの提供義務は、あなたが**「オブジェクトコード(実行形式のプログラム)を頒布(配布)した相手」**に対して発生します。
あなたのプラグインの販売形態が以下のどちらであるかによって、義務を負う範囲が変わります。
1. プラグインをダウンロード可能なファイルとして直接販売・頒布している場合
この場合、**「有料で購入した方」**に対して義務が発生します。
- 第三者への義務: あなたは、有料で購入していない第三者(例えば、購入者から実行形式のプラグインファイルを受け取った友人など)に対して、直接的なソースコードの提供義務を負いません。
- 購入者の権利: ただし、有料で購入した方がGPLに基づいてそのプラグインを再配布した場合、その再配布を受けた第三者は、オリジナルの購入者(頒布者)に対してソースコードの提供を求める権利があります。
2. Redmineを利用したホスティングサービス(SaaS/ASP)として提供している場合
GPLv2のプログラム(Redmineのバージョンによる)をホスティングサービスとして提供するだけでは、一般的に**「頒布(配布)」**には当たらないと解釈されます。
- GPLv2の場合: ユーザーがサーバー上のプログラムを実行するだけで、プログラムのコピーをユーザーに渡していないため、ソースコードの提供義務は発生しません(有料の利用者に対しても、そうでない利用者に対しても)。
- AGPLの場合: RedmineがAGPL(Affero General Public License)を採用している場合は、ネットワーク経由での利用であってもソースコード提供の義務が発生しますが、RedmineはGPLを採用しているため、これは適用されません。
結論:有料で購入していない方への直接的な義務
あなたのビジネスモデルが「プラグインファイルをダウンロード販売する」ものである場合、
- あなたは、**直接頒布した相手(=有料で購入した方)**に対して、ソースコードの提供義務を負います。
- 有料で購入していない第三者からの直接的なソースコード提供依頼には、応じる義務はありません。
ただし、有料で購入した方がそのソースコードを受け取り、それをGPLに基づいて無料で再配布することは、GPLによって保証されている自由です。
重要な注意点: 上記は一般的なGPLの解釈に基づいています。具体的な販売形態やGPLv2/GPLv3の適用範囲について懸念がある場合は、必ず法律の専門家にご相談ください。
ソースコードの提供依頼に関して
1. プラグインをダウンロード可能なファイルとして直接販売・頒布している場合
この場合、「有料で購入した方」に対して義務が発生します。
とのことですが、有料販売でプラグインを提供する場合は、
難読化ツールを使用してプログラムソースを読めないようにして提供し、
購入者がプログラムソースの提供依頼をしてきた場合のみ
平文でのプログラムソースを提供するのは問題はありませんか?
その際、平文のプログラムソースの提供は無償で行う必要がありますか?
ご質問ありがとうございます。これは有料販売とGPLの義務をどう両立させるかという点で、非常に重要な論点です。
1. 難読化されたソースコードの提供について
難読化されたソースコードを販売し、依頼があった場合のみ平文を提供するという方法は、GPL違反となる可能性が極めて高いです。
前述の通り、GPLは配布されるソースコードが「対応するソースコード」、すなわち利用者が容易に研究、改変、再コンパイルできるプログラムの優先される形式であることを要求しています。
- 難読化コードは「対応するソースコード」ではない: 難読化されたコードは、実質的に利用者の「改変の自由」を奪うため、「対応するソースコード」とは認められません。
- 販売時からの提供が原則: GPLの義務は、プログラムを配布するその時に、適切なソースコードを一緒に提供するか、提供の申し出を付けることで発生します。難読化されたオブジェクトコードを配布した時点で、あなたは「対応するソースコード」を配布する義務を果たしていないと見なされる可能性が高いです。
したがって、有料販売であっても、最初から難読化されていない平文のソースコード、またはその入手方法を、購入者に提示する必要があります。
2. 平文のプログラムソースの提供は無償で行う必要があるか?
ソースコードの提供は、原則として無償である必要はありませんが、提供にかかる実費以上の対価を請求することはできません。
GPLは「自由なソフトウェア」を保証しますが、「無償のソフトウェア」を要求しているわけではありません。あなたはプログラムの配布に対して対価を請求できます。しかし、ソースコードの提供に関しては、以下のようになります。
| 請求できる費用 | 請求できない費用 |
|---|---|
| 提供の実費: メディア代(CD-ROMやUSBメモリ)、郵送費、コピー費用など、ソースコードを提供するために実際にかかる費用。 | プログラム自体の対価: 開発費用や利益など、プラグインの価値に対する料金。これらは、プラグインの販売価格に含めて請求することになります。 |
現代のダウンロード販売の場合:
- プラグインファイル(オブジェクトコード)と、対応するソースコードを、ウェブサイトから同時にダウンロードさせるのが一般的です。
- この場合、追加のメディアや郵送費はかからないため、ソースコードのダウンロードに対して追加料金を請求することは通常ありません(販売価格自体にすべての費用を含めます)。
推奨される対応(GPLを遵守しつつ販売を行う方法)
- 難読化をしない: プラグインの配布ファイル(Rubyのソースファイル)は、難読化されていない平文のコードとします。
- 配布時にソースコードを含める: ダウンロード販売時に、プラグインのファイル群(平文のソースコードそのもの)と一緒に、GPLライセンス文書を同梱します。
- 対価はプログラム本体に含める: プラグインの販売価格(例:1万円)は、プログラムの価値、サポート、開発費用などの対価として請求します。この価格には、ソースコード提供の実費も含まれていると見なされます。
- 購入者の権利を保証する: 購入者は、あなたが定めた価格でプラグインを入手した後、GPLに基づき、そのソースコードを自由に改変し、他者に無償または有償で再配布する権利を持つことを受け入れます。
感想
前回に引き続き、ライセンスに関して色々なケースをGeminiに質問してみました。
内容が100%正確ではないにしても、個別具体的な内容に丁寧に回答ができるAIの能力の高さには驚かされます。
個人的に気になっていろいろとGeminiで調べたので、自分だけの情報にしておくのはもったいないと思ったのと、Redmine Advent Calendar 2025の記事の投稿に貢献をしたくて記事を作成しました。
誰かの役に立てれば嬉しいです。
この記事の作成者の紹介
山崎進
- Redmine、Jquery、JavaScript,Rails、Ruby、SQL、VBA、RPAの開発を行なっています。
- 自動化、業務の効率化に高い関心があります。
- 下記の媒体で情報を発信しています。Redmineのプラグインの開発などに対応が可能ですので、お気軽にご連絡ください。
* Qiita:https://qiita.com/ankosoft
* Twitter:https://twitter.com/yamasaki24
* Redmine Advent Calendarで記事投稿
* redmine.tokyoで講演多数
* Redmine Japan Vol.1 前夜祭、Redmine Japan Vol.3で講演
* https://ankosoft.co.jp/blog/
* https://technology.ankosoft.co.jp/
関連記事(2024年のRedmine Advent Calendarの記事です。)
* Redmine wikiマクロを作成する方法2(完了チケットの割合をグラフで表示)
* Redmine wikiマクロを作成する方法3(ステータスごとのチケットの割合をグラフで表示)
* Redmine wikiマクロを作成する方法4(ステータスごとのチケットの割合を一つのグラフで表示)
* Redmine wikiマクロを作成する方法5(特定のユーザーのチケット状態の確認)
* Redmine wikiマクロを作成する方法6(プロジェクトに所属する全てのユーザーのチケット状態の確認)
関連記事(2023年のRedmine Advent Calendarの記事です。)
* JqueryでRedmineのメニューにアイコンを入れる方法
* JqueryでRedmineのメニューを閉じたり開いたりする方法
* JqueryでRedmineの「活動ページ」をもっと便利に(タイトルを開閉したり、曜日を入れたり)
* JqueryでRedmineの「活動ページ」をもっと便利に②(フィルタリング機能と移動機能)
* JqueryでRedmineの「wikiページ」をもっと便利に(フィルタリング機能と移動機能)
* JqueryでRedmineの「チケットページ」をもっと便利に(年ごと、月ごと、四半期ごとの集計機能の開発)
