「知的財産権」を取り巻く中核キーワード群です。 検索やインデックス作成で参照する際の手がかりにしてください。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になります。
これらのキーワードは「知的財産権の理解 → 適用 → 検証」のプロセスを構成します。 各章で詳しく解説します。
🍰 まずはやさしく
アイデアを守るためのルールです。
作った人の権利を保護するために使います。
スマホのアプリや音楽などが例です。
AIと権利の関係について読みます。
最も忙しい読者のために、 まず結論だけまとめます。 詳細は以下のセクションへ:
🍰 まずはやさしく
作品の持ち主を決めるルールです。
誰が権利を持つかをはっきりさせます。
AIで描いた絵の権利などが例です。
このページをどう読むかを確認します。
Stable Diffusion で絵を生成、 ChatGPT に小説を書かせる — その絵や小説の著作権は誰のもの? 学習に使われた既存作品の権利はどう守られる? 各国法制が 急ピッチで整備中。
このページの読み方:まず 30秒結論 と 直感 を読み、 必要に応じて 数式 や 計算例、 落とし穴 に進んでください。
🍰 まずはやさしく
アイデアの境界線のようなものです。
どこまでが自由かを知るために使います。
好きな絵師さんの真似などが例です。
図を使って権利の流れを読みます。
例で考えてみましょう:
知的財産権の核心を 3 つの図で押さえる。 ① 知的財産権の体系 (産業財産権 vs 著作権)、 ② 権利の効力範囲と存続期間、 ③ データ・AI 時代の権利フロー。
図のまとめ: 知的財産権は産業財産権 (出願) と著作権 (創作) の 2 系統に大別され、 存続期間は数年〜70 年と異なる。 AI 時代は元データ→学習→モデル→生成物の各段階で権利を切り分ける必要がある。
🍰 まずはやさしく
頭で考えた成果を守る権利です。
独占して使えるようにするために使います。
発明した道具やロゴのデザインが例です。
権利の種類と詳しい定義を読みます。
知的財産権は法律・制度上の概念であり、 単一の数式で定義できるものではありません。 まずは言葉による定義を押さえます。
知的財産権は大きく、 創作と同時に自動発生する 著作権 と、 出願・登録によって発生する 産業財産権(特許・実用新案・意匠・商標)に分かれ、 このほか営業秘密(不正競争防止法)なども含まれます。 定量的に扱えるのは権利そのものではなく、 「保護期間」「侵害判定のための類似度」「AI 学習データの再現率」といった周辺的な指標です。 次節では、 それらを式で確認します(いずれも権利の定義ではなく、 権利を運用・評価するための計算である点に注意してください)。
知的財産権はひとつの権利ではなく、目的の違う権利の束です。 保護される対象・期間・取得のしかたが全部違うので、混同すると判断を誤ります。
| 権利 | 守るもの | 取得 | 期間の目安 |
|---|---|---|---|
| 著作権 | 表現(文章・画像・コード) | 創作した時点で自動的に発生 | 著作者の死後 70 年 |
| 特許権 | 技術的なアイデア | 出願・審査を経て登録 | 出願から 20 年 |
| 商標権 | 商品・サービスの目印 | 出願・審査を経て登録 | 10 年(更新できる) |
| 意匠権 | 見た目のデザイン | 出願・審査を経て登録 | 出願から 25 年 |
| 営業秘密 | 秘密として管理された情報 | 登録不要(管理が要件) | 秘密である限り |
分析者に関係が深いのは著作権と営業秘密です。 著作権は手続きなしで自動的に発生するので、「登録されていないから自由」は成り立ちません。 一方、営業秘密は秘密として管理していることが要件なので、 社内で誰でも見られる状態に置いた時点で保護を失うことがあります。 分析基盤のアクセス権設計が、そのまま法的な保護の有無に効いてくるわけです。
なおアイデアや事実そのものには著作権が及びません。 「気温が高い県ほど消費支出が多い」という発見は誰のものでもなく、自由に述べてよい。 守られるのは、それをどう書いたか・どう図にしたかという表現の側です。 分析結果を引用するときは、数値や知見は自由に使えても、 文章や図をそのまま持ってくると複製になる、と切り分けて考えてください。
知的財産権を「数学的に」 捉えるのは奇妙に聞こえますが、 実は法定の 保護期間・侵害判定・類似度はすべて数式や計算で表現できます。 ここでは AI 文脈で頻出する 3 種類の式を、 一語ずつ解きほぐします。
本リポジトリで使う data/raw/SSDSE-B-2026.csv はCC BY 4.0(クリエイティブ・コモンズ 表示 4.0 国際)で配布されています。 つまり:
たとえば SSDSE-B-2026 から「都道府県別人口ランキング」を作って書籍化・有償講座化することは合法ですが、 出典明記を怠ると CC BY 違反になります。
| 業界 | 事例 | 知財ポイント | SSDSE-B-2026 との対比 |
|---|---|---|---|
| 生成 AI(OpenAI) | GPT-4 学習に Web スクレイピングデータ | NYT 訴訟(2023〜)で逐語再生が問題化 | SSDSE-B は CC BY なので学習・商用利用可 |
| 画像生成(Stability AI) | LAION-5B でモデル学習 | Getty Images 訴訟、 アーティスト集団訴訟 | SSDSE-B の表データには肖像権問題なし |
| 翻訳(DeepL) | EU 多言語コーパスで学習 | EU AI Act でデータ出所開示義務 | SSDSE-B はソースコード公開不要 |
| 音楽(Suno AI) | 楽曲生成モデル | RIAA から訴訟(2024)、 著作隣接権が論点 | 統計データには隣接権なし、 自由再利用可 |
| 政府(e-Stat) | 公的統計の API 公開 | 政府標準利用規約 2.0(CC BY 4.0 互換) | SSDSE-B-2026 もこの枠組みで配布 |
| 教材出版 | SSDSE-B を題材にした教科書執筆 | 表データそのものに著作権なし、 ただし編集著作物として保護される場合あり | このページの 47 都道府県分析も自由再利用可(出典記載) |
| ライセンス/権利 | 商用利用 | 改変 | 出典表示 | 派生物のライセンス継承 | SSDSE-B との関係 |
|---|---|---|---|---|---|
| CC0(パブリックドメイン宣言) | ◯ | ◯ | 不要 | 不要 | SSDSE-B より緩い |
| CC BY 4.0 | ◯ | ◯ | 必須 | 不要 | SSDSE-B-2026 はこれ |
| CC BY-SA | ◯ | ◯ | 必須 | 同じ SA で再配布 | Wikipedia 本文 |
| CC BY-NC | × | ◯ | 必須 | NC 継承 | 研究用データに多い |
| MIT License | ◯ | ◯ | 必須 | 不要 | scikit-learn など |
| GPL v3 | ◯ | ◯ | 必須 | GPL 継承(強い copyleft) | Linux カーネルなど |
| Apache 2.0 | ◯ | ◯ | 必須 | 不要 | TensorFlow など |
| 政府標準利用規約 2.0 | ◯ | ◯ | 必須 | 不要 | e-Stat 全般、 CC BY 互換 |
| 営業秘密 | ×(無断) | × | — | — | レシピ・顧客リスト等 |
| 特許 | ×(無断) | ×(無断) | — | — | 新規アルゴリズムの一部 |
1 2 3 4 5 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1) # 日本語の列名で読む(2 行目を見出しにする) d23 = df[df['年度'] == 2023] # 47 都道府県 × 12 年度のうち 2023 年度だけ使う print(f"# 分析結果(2023 年度・{len(d23)} 都道府県)\n\n出典:独立行政法人統計センター. SSDSE-B-2026 ({len(df)} 行 × {len(df.columns)} 列) CC BY 4.0\n") print(d23[['都道府県', '総人口']].head().to_markdown(index=False)) |
💬 564 行 × 112 列というのはファイル全体の大きさで、表に載せた 5 行は 2023 年度に絞った 47 都道府県の先頭(北海道 509.2 万人、宮城県 226.4 万人など)。出典表記には「どの年度・どの列を使ったか」も書いておくと、他の人が同じ数値を再現できる。CC BY 4.0 は表示さえ守れば改変・商用利用も可能だが、表示が欠けると利用条件を満たさない。
AI 関連の代表的判例・係争(2024 年時点):
| 国 | 争点 | 状況 |
|---|---|---|
| 米国 | NYT vs OpenAI(学習データ) | 係争中 |
| 米国 | Getty vs Stable Diffusion | 係争中 |
| 米国 | AI 生成画像の著作権 | 著作権局が原則否定 |
| 日本 | 情報解析目的の学習 | 30 条の 4 で広く許容 |
| EU | 学習データ開示義務 | AI Act で要求 |
合成データで複数特許の残存期間を計算する (特許権は出願から 20 年)。
| 特許 | 出願年 | 満了年 | 2026 残 |
|---|---|---|---|
| P1 | 2010 | 2030 | 4 |
| P2 | 2015 | 2035 | 9 |
| P3 | 2020 | 2040 | 14 |
| P4 | 2025 | 2045 | 19 |
1 2 3 4 5 6 7 | import numpy as np filed = np.array([2010, 2015, 2020, 2025]) expire = filed + 20 current = 2026 remain = expire - current print(f"残存年: {remain}") print(f"平均: {remain.mean()}") |
💬 手計算 (Step 2) 11.5 年と Python 出力が完全一致。
🔬 の式 $T_{\text{JP}} = \text{死亡年} + 70$ は「何年まで」を表しますが、実務では「何年何月何日まで守られ、いつから自由に使えるか」を日付で答える必要があります。日本の著作権法には、この計算を左右する決まりが 2 つあります。
| Step | 内容(2 人の著作者を比べる。どちらも架空の例) | 著作者 P(1967 年 12 月 20 日死亡) | 著作者 Q(1968 年 1 月 10 日死亡) |
|---|---|---|---|
| 1 | 起算日 = 死亡の翌年の 1 月 1 日 | 1968-01-01 | 1969-01-01 |
| 2 | 旧ルール(死後 50 年)での満了日 = 死亡年 + 50 年の 12 月 31 日 | 2017-12-31 | 2018-12-31 |
| 3 | 改正の施行日 2018-12-30 に、まだ保護されていたか | いいえ(約 1 年前に満了) | はい(旧ルールの満了日の前日) |
| 4 | 最終的な満了日 | 2017-12-31 のまま | 死亡年 + 70 年 = 2038-12-31 |
| 5 | 自由に使える最初の日 | 2018-01-01 | 2039-01-01 |
死亡日の差はわずか 21 日ですが、自由に使えるようになる日は 21 年違います。同じ考え方は映画にも現れます。映画の保護期間を公表後 50 年から 70 年に延ばした改正は 2004 年 1 月 1 日施行で、1953 年に公表された映画は旧ルールで 2003 年 12 月 31 日に満了していたため延長の対象外、と最高裁が判断しています(2007 年、いわゆる「シェーン事件」)。この計算を関数にして、いくつかの場合を一度に確かめます。
🎯 このコードでやること:死亡日(または公表日)と種類(個人・団体名義・映画)から、日本の著作権法の暦年主義と 2 つの延長改正(2004 年の映画、2018 年の個人・団体名義)の不遡及を反映した満了日と「自由に使える最初の日」を返す関数を書き、上の手計算の 2 人を含む 6 つの架空の例に当てる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from datetime import date def jp_copyright_end(base: date, kind: str) -> date: """日本の著作権の満了日(暦年主義・延長改正の不遡及を反映した簡易版)""" y = base.year # 翌年 1 月 1 日起算 → 満了は y + N 年の 12/31 if kind == "映画": old, new, reform = 50, 70, date(2004, 1, 1) else: # 個人(死後)・団体名義(公表後) old, new, reform = 50, 70, date(2018, 12, 30) old_end = date(y + old, 12, 31) return old_end if old_end < reform else date(y + new, 12, 31) # 施行日に切れていれば延長なし cases = [("個人 P", date(1967, 12, 20), "個人"), ("個人 Q", date(1968, 1, 10), "個人"), ("個人 R", date(1990, 6, 1), "個人"), ("団体 S", date(1970, 4, 1), "団体名義"), ("映画 T", date(1953, 9, 1), "映画"), ("映画 U", date(1954, 3, 1), "映画")] for name, base, kind in cases: end = jp_copyright_end(base, kind) print(f"{name}: 基準日 {base} 満了 {end} 自由に使える最初の日 {date(end.year + 1, 1, 1)}") |
💬 手計算の 2 人は、P が 2017-12-31 満了(2018-01-01 から自由)、Q が 2038-12-31 満了(2039-01-01 から自由)で一致します。1953 年公表の映画 T は 2003-12-31 で満了したまま、1 年遅い 1954 年公表の映画 U は延長されて 2024-12-31 まで守られました。団体名義 S(1970 年公表)は旧ルールなら 2020 年末に満了するはずでしたが、2018 年の施行日にまだ保護中だったので 2040-12-31 まで延びています。関数は日本法の基本だけを入れた簡易版で、外国の古い作品に加算される期間(戦時加算)や、著作者が複数いる場合(最後に亡くなった人を基準にする)は入っていません。実際に利用するかどうかの判断は、必ず原典や専門家で確かめます。
🔬 ② の n-gram 一致率(Jaccard 係数)は、文章がどれだけ同じ文字列を共有しているかを 0〜1 で表します。日本語は単語の区切りに空白が無いので、ここでは 3 文字ずつずらして切り出した「文字 3-gram」を使います。ある分析メモ(元の文)に対して、(a) そのままの複写、(b) 語尾や順序を少し変えた改変、(c) 同じ内容を自分の言葉で書き直した要約、(d) 同じ SSDSE の数値を別の人が独立に書いた文、の 4 つを作って一致率を測ります。すべて説明のために作った文です。
手計算の例: 「総人口は」と「総人口が」の 3-gram はそれぞれ {総人口, 人口は} と {総人口, 人口が} で、共通部分は {総人口} の 1 個、和集合は 3 個なので、一致率は 1/3 = 0.333 です。
🎯 このコードでやること:元の文と 4 つの比較文について文字 3-gram の集合を作り、Jaccard 一致率と、元の文の 3-gram のうち比較文に含まれる割合(包含率)を計算する。手計算の「総人口は/総人口が」も同じ関数で確かめる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | def ngrams(text, n=3): t = text.replace(" ", "").replace("\n", "") return {t[i:i + n] for i in range(len(t) - n + 1)} def jaccard(a, b, n=3): A, B = ngrams(a, n), ngrams(b, n) return len(A & B) / len(A | B) def containment(a, b, n=3): # a の n-gram のうち b にもあるものの割合 A, B = ngrams(a, n), ngrams(b, n) return len(A & B) / len(A) print("手計算の例:", round(jaccard("総人口は", "総人口が"), 3)) orig = ("2023年度の東京都の総人口は1408万6千人で、全国の11.3%を占める。" "人口の集中は出生率の低さと裏表の関係にあり、地方からの転入が支えている。") others = { "(a) 複写": orig, "(b) 小さな改変": ("2023年度、東京都の総人口は1408万6千人であり、全国の11.3%を占めている。" "人口の集中は出生率の低さと表裏の関係にあって、地方からの転入に支えられている。"), "(c) 書き直し": ("東京には国民のおよそ9人に1人が住む。一方で子どもの生まれる割合は低く、" "人の数を保っているのは他県から移ってくる人たちだ。"), "(d) 同じ事実を別の人が": ("SSDSE-B-2026によると、2023年度の東京都の総人口は1408万6千人で、" "全国の11.3%にあたる。"), } for name, text in others.items(): print(f"{name:<12} Jaccard {jaccard(orig, text):.3f} 包含率 {containment(orig, text):.3f}") |
💬 手計算の 0.333 と一致します。複写(a)は当然 1.000、語尾や接続を少し変えただけの改変(b)でも Jaccard 0.568、元の文の 3-gram の 75.0% が残ります。内容は同じでも自分の言葉で書き直した(c)は 0.008 まで下がり、n-gram の一致率では「似ていない」と判定されます。注目すべきは(d)で、独立に書いた 1 文なのに Jaccard 0.333・包含率 0.431 と、元の文の 4 割以上の 3-gram を共有します。「2023年度の東京都の総人口は1408万6千人」という事実と数値の書き方がほぼ一通りしかないためで、事実やデータには著作権が及ばないので、この一致は侵害を意味しません。一致率は「どこが同じか」を探す道具としては便利ですが、「保護される表現が同じか」の判定には、一致した部分が創作的な表現か、事実や定型句かを人が見る必要があります。
🔬 ③ のリーク率は「学習データの何割を再現できるか」でした。利用者の側から見ると、知りたいのは「このモデルを N 回使ったとき、学習データの文章を丸ごと再現した出力に 1 回でも出会う確率」です。1 回の生成で逐語再生が起こる確率を $p$、各回が独立だとすると、N 回で 1 回以上起こる確率は
$$P(\text{1 回以上}) = 1 - (1 - p)^N, \qquad \text{期待回数} = Np$$です。$p$ = 0.0001(1 万回に 1 回、説明のための仮定)とすると、Step 1: 1 回も起きない確率 $(1-0.0001)^{10000}$ = $e^{10000 \ln 0.9999}$ ≈ $e^{-1.00005}$ ≈ 0.3679、Step 2: 1 回以上起きる確率 = 1 − 0.3679 = 0.6321、Step 3: 期待回数 = 10000 × 0.0001 = 1 回、となります。1 万回に 1 回という小さな確率でも、1 万回使えば 63% の確率で少なくとも 1 回は起きます。
🎯 このコードでやること:逐語再生の確率 p(1 回あたり)を 0.00001・0.0001・0.001 の 3 通り(仮定)にして、利用回数 N = 100〜100 万回で「1 回以上起きる確率」と期待回数を計算し、上の手計算(p = 0.0001, N = 10,000)と比べる。「確率 50% を超える最小の N」も出す。
1 2 3 4 5 6 7 8 | import numpy as np Ns = [100, 1_000, 10_000, 100_000, 1_000_000] for p in [0.00001, 0.0001, 0.001]: row = " ".join(f"N={N:>9,}: {1 - (1 - p) ** N:.4f}" for N in Ns) n50 = int(np.ceil(np.log(0.5) / np.log(1 - p))) # 1-(1-p)^N >= 0.5 となる最小の N print(f"p={p}: {row}") print(f" 期待回数 N=10,000 で {10_000 * p:g} 回, 50% を超える最小の N = {n50:,}") |
💬 手計算の p = 0.0001・N = 10,000 は 0.6321 で一致します。p = 0.00001 でも 100 万回使えば 1 回以上起きる確率は 0.99995(表示は 1.0000、期待回数 10 回)で、50% を超えるのは 69,315 回目です。多くの人が毎日使うサービスでは、1 回あたりの確率がどれほど小さくても「どこかで誰かが逐語再生に出会う」ことはほぼ確実になります。これが、生成 AI の提供者に、学習データの重複除去や出力側のフィルタ(既知の著作物との一致を検出して止める)が求められる理由です。ただし実際の逐語再生は独立ではなく、特定のよく知られた文章や、同じ文章が学習データに何度も入っている場合に集中して起こります。
コード 3 はライセンスの組を表で引いていましたが、組み合わせが 3 つ以上になると表が爆発します。CC ライセンスは BY(表示)・SA(継承)・NC(非営利)・ND(改変禁止)の 4 つの要素の組み合わせなので、「要素ごとに、どれか 1 つの材料が要求すれば、組み合わせた成果物にも要求される」と考えると機械的に計算できます。ただし 2 つの例外があります。ND を含む材料は改変できないので、改変を伴う組み合わせ(表の結合・集計・図の作成)には使えません。SA は「同じライセンスで公開せよ」という条件なので、条件の違う SA の材料(たとえば BY-SA と BY-NC-SA)は同時には満たせません。
🎯 このコードでやること:CC ライセンス名を BY・SA・NC・ND の要素に分解し、複数の材料を組み合わせて改変した成果物が満たすべき要素と、満たせない組み合わせ(ND を含む・異なる SA が 2 つ以上)を判定する関数を書き、SSDSE-B-2026(このページの説明どおり CC BY 4.0 として扱う)を含む 5 つの組み合わせに当てる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | def elements(lic): lic = lic.upper().replace("CC ", "").split()[0] # "CC BY-SA 4.0" → "BY-SA" return set() if lic == "CC0" else set(lic.split("-")) def combine(materials): # 改変を伴って組み合わせた成果物の条件(簡易版) els = [elements(l) for l in materials.values()] if any("ND" in e for e in els): return "不可: ND(改変禁止)の材料を改変して組み合わせることはできない" sa = {frozenset(e) for e in els if "SA" in e} if len(sa) > 1: return "不可: 条件の違う SA(継承)が 2 つあり、両方の『同じライセンスで』を満たせない" need = set().union(*els) if not need: return "条件なし(すべて CC0)" return "成果物は " + "-".join(k for k in ["BY", "NC", "SA"] if k in need) + " の条件で公開" cases = [ {"SSDSE-B-2026": "CC BY 4.0", "自作コード": "CC0"}, {"SSDSE-B-2026": "CC BY 4.0", "地図データ": "CC BY-SA 4.0"}, {"SSDSE-B-2026": "CC BY 4.0", "写真": "CC BY-NC 4.0"}, {"地図データ": "CC BY-SA 4.0", "統計表": "CC BY-NC-SA 4.0"}, {"SSDSE-B-2026": "CC BY 4.0", "報告書の図": "CC BY-ND 4.0"}, ] for i, m in enumerate(cases, 1): print(f"{i}. {' + '.join(m.values()):<30} → {combine(m)}") |
💬 1 は BY だけが残り、SSDSE-B-2026 の出典を表示すれば自由に公開できます。2 は SA が加わるので、成果物も BY-SA で公開する必要があります(CC BY 4.0 の材料を BY-SA の成果物に入れることはできる)。3 は NC が加わり、成果物は非営利の範囲でしか使えなくなります。4 は SA が 2 種類(BY-SA と BY-NC-SA)あり、両方の「同じライセンスで公開せよ」を同時には満たせないので不可、5 は ND の図を改変する組み合わせなので不可です。この関数は要素の論理だけを実装した簡易版で、CC のバージョン違い(2.1 と 4.0 など)や、CC 以外のライセンス(ソフトウェアの GPL・MIT、政府標準利用規約など)との互換性は判定しません。判定結果は「確認すべき点の洗い出し」として使い、最終的には各ライセンスの原文と提供元の利用条件を確かめます。
上の手計算(特許の残存年数)は「満了 = 出願年 + 20」でした。しかし特許権は登録されて初めて発生するので、出願から登録までの審査期間は、20 年のうち独占できない期間として差し引かれます。医薬品などは、安全性の審査で販売できない期間を補うため、最大 5 年の延長が認められる制度があります。出願から登録までの年数が違う 4 件の架空の特許で、実際に独占できる期間を計算します。
| Step | 内容(特許 X: 2015 年出願・2019 年登録、架空) | 値 |
|---|---|---|
| 1 | 満了年 = 出願年 + 20 = 2015 + 20 | 2035 年 |
| 2 | 審査で使った年数 = 登録年 − 出願年 = 2019 − 2015 | 4 年 |
| 3 | 独占できる期間 = 満了年 − 登録年 = 2035 − 2019(= 20 − 4) | 16 年 |
| 4 | 20 年のうち独占できる割合 = 16 ÷ 20 | 0.80 |
🎯 このコードでやること:出願年・登録年・延長年数の違う 4 件の架空の特許について、満了年・独占できる期間・20 年に対する割合と、2026 年時点の残り年数を計算する(上の Step 1〜4 を 4 件に当てる)。
1 2 3 4 5 6 7 8 9 10 | import pandas as pd p = pd.DataFrame({"出願年": [2015, 2015, 2012, 2012], "登録年": [2019, 2017, 2020, 2020], "延長": [0, 0, 0, 5]}, index=["X", "Y", "Z", "W"]) p["満了年"] = p["出願年"] + 20 + p["延長"] # Step 1(延長があれば足す) p["審査年数"] = p["登録年"] - p["出願年"] # Step 2 p["独占期間"] = p["満了年"] - p["登録年"] # Step 3 p["独占割合"] = (p["独占期間"] / 20).round(2) # Step 4(20 年に対して) p["2026年の残り"] = (p["満了年"] - 2026).clip(lower=0) print(p.to_string()) |
💬 X は手計算どおり満了 2035 年・独占 16 年・割合 0.80 です。2 年で登録された Y は 18 年(0.90)、8 年かかった Z は 12 年(0.60)しか独占できず、同じ「20 年」でも実際に使える期間は 1.5 倍も違います。W は Z と同じ経過に 5 年の延長が加わり、独占期間は 17 年(0.85)まで戻ります。「特許が切れる年」を見積もるときは出願年だけでなく登録年と延長の有無を、「競合が何年独占できるか」を見積もるときは登録から満了までの年数を見る、と使い分けます。
計算 A の関数を、1 人ずつではなく「毎年同じ人数の著作者が亡くなる」という単純な流れに当てると、2018 年の延長改正がパブリックドメイン(保護期間が切れて誰でも使える状態)への流れにどう効いたかが見えます。死亡年 1950〜2000 年の個人の著作者が各年 1 人ずついると仮定し、それぞれの著作物が自由に使えるようになる年を数えます(戦時加算などの特例は考えない)。
🎯 このコードでやること:計算 A の jp_copyright_end を使い、死亡年 1950〜2000 年(各年 1 人、死亡日は 6 月 1 日とする)の個人の著作物が自由に使えるようになる年を求めて、2001〜2071 年のうち「新たに自由になる作品が 1 つも無い年」の範囲と数を数える。延長が無かった場合(死後 50 年のまま)とも比べる。
1 2 3 4 5 6 7 8 9 10 11 | from collections import Counter deaths = [date(y, 6, 1) for y in range(1950, 2001)] free_year = Counter(jp_copyright_end(d, "個人").year + 1 for d in deaths) # 改正後のルール free_old = Counter(d.year + 51 for d in deaths) # 死後 50 年のままなら empty = [y for y in range(2001, 2072) if free_year[y] == 0] empty_old = [y for y in range(2001, 2072) if free_old[y] == 0] print(f"改正後: 新たに自由になる作品が無い年 {len(empty)} 年({empty[0]}〜{empty[-1]})") print(f"死後 50 年のままなら: 無い年 {len(empty_old)} 年({empty_old[0]}〜{empty_old[-1]})") print("2018 年に自由になる死亡年:", [d.year for d in deaths if jp_copyright_end(d, "個人").year + 1 == 2018]) print("2039 年に自由になる死亡年:", [d.year for d in deaths if jp_copyright_end(d, "個人").year + 1 == 2039]) |
💬 改正後のルールでは、2019〜2038 年の 20 年間、この流れから新たに自由になる作品が 1 つもありません。2018 年に自由になったのは 1967 年に亡くなった著作者の作品で、その次は 1968 年に亡くなった著作者の作品が 2039 年に自由になるまで飛びます。延長が無ければ空白は 2052〜2071 年(死亡年 2001 年以降の著作者がこの仮定の流れにいないため)だけで、2019〜2038 年にも毎年作品が自由になっていたはずです。実際の出版・教育の現場では、「2019 年以降、日本では個人の著作物が新しくパブリックドメインに入らない期間が 20 年続く」という形で現れています。古い資料を教材やデータセットに使うときは、「作られた年」ではなく「著作者の死亡年」と改正の施行日を並べて判断します。
CC BY の「表示」は、何を書けば満たせるのでしょうか。クリエイティブ・コモンズは、作品の題名(Title)・作者(Author)・入手先(Source、URL など)・ライセンス(License)の 4 つを書くことを勧めており、頭文字をとって TASL と呼ばれます。改変した場合は「改変したこと」も書きます。分析レポートの図のキャプションに付けた出典表示を 4 要素+改変の有無で機械的に点検する関数を作り、よくある書き方 4 つに当てます。
🎯 このコードでやること:出典表示の文字列から、題名・作者・入手先・ライセンス・改変の明記の 5 項目が書かれているかを正規表現で調べ、欠けている項目を返す関数を作る。SSDSE-B-2026 から作った図のキャプションを想定した 4 つの表示例に当てる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import re CHECKS = { "題名 (T)": r"「[^」]+」|SSDSE-[A-Z]-\d{4}", "作者 (A)": r"統計センター|作成者|著者", "入手先 (S)": r"https?://", "ライセンス (L)": r"CC ?BY|CC0|政府標準利用規約", "改変の明記": r"もとに|改変|加工|算出", } def audit_credit(text): return [name for name, pat in CHECKS.items() if not re.search(pat, text)] credits = { "A": "出典:SSDSE-B-2026", "B": "出典:独立行政法人統計センター「SSDSE-B-2026」", "C": "出典:独立行政法人統計センター「SSDSE-B-2026」(https://www.nstac.go.jp/…) CC BY 4.0", "D": ("出典:独立行政法人統計センター「SSDSE-B-2026」(https://www.nstac.go.jp/…) CC BY 4.0 " "をもとに、2023 年度の 47 都道府県を抽出し高齢化率を算出して作成"), } for k, t in credits.items(): miss = audit_credit(t) print(f"{k}: {len(CHECKS) - len(miss)}/5 項目 欠け: {', '.join(miss) if miss else 'なし'}") |
💬 A は題名しか無く 1/5、B は題名と作者の 2/5、C は TASL の 4 要素がそろって 4/5 ですが「改変の明記」が欠けます。高齢化率のように元の表から計算した値を図にするのは改変(加工)にあたるので、D のように「何をもとに、どう加工したか」まで書いて 5/5 になります。この関数は文字列の有無を見るだけの簡易な点検で、入手先の URL が正しいか、ライセンスの版(4.0 など)が提供元の表示と合っているかまでは確かめません。レポートに図が多いときは、キャプションを一覧にしてこの関数を通し、欠けのある図だけを人が直す、という使い方が現実的です。
著作権法 32 条の「引用」として他人の文章を載せるには、判例上、引用部分が本文と明確に区別されていること、自分の文章が「主」で引用が「従」であること、出所を明示すること、などが求められます。「主従」には法律上の数値基準はありませんが、自分の原稿を点検する目安として、引用部分(「」や引用ブロックで囲んだ部分)が原稿全体の何割を占めるかを数えておくことはできます。3 つの原稿の例で、引用の割合と出所の有無を数えます。
🎯 このコードでやること:【引用】…【/引用】で囲んだ部分を引用とみなし、原稿全体の文字数に対する引用部分の文字数の割合と、引用ごとに直後に(出典:…)があるかを数える関数を作り、3 つの原稿例に当てる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import re def audit_quote(doc): quotes = re.findall(r"【引用】(.*?)【/引用】((出典:[^)]+))?", doc, flags=re.S) q_chars = sum(len(q) for q, _ in quotes) body = re.sub(r"【/?引用】|(出典:[^)]+)", "", doc) no_src = sum(1 for _, src in quotes if not src) return len(quotes), q_chars, len(body), q_chars / len(body), no_src docs = { "原稿 1": ("2023 年度の SSDSE-B-2026 で高齢化率を比べると、秋田県の 39.1% から東京都の 22.8% まで 16 ポイント以上の開きがある。" "この差がどこから来るのかを、先行研究の指摘と照らして考える。" "【引用】人口の地域差は移動によって生まれる【/引用】(出典:架空の報告書 A, 2020)" "という指摘は、この結果とも整合する。ただし 47 都道府県の断面だけでは因果までは言えないので、" "年度をまたいだ変化も合わせて確かめる必要がある。"), "原稿 2": ("次の 2 つの文章を紹介する。" "【引用】地方の人口減少は 1990 年代から続いており、その主な要因は若年層の流出である。" "とくに高校卒業時と大学卒業時の 2 回に分けて流出が起きる。【/引用】(出典:架空の論文 B, 2019)" "【引用】都市部でも出生率は低く、流入した若年層が子どもを持つ時期は遅れがちである。【/引用】" "以上である。"), "原稿 3": "【引用】人口の地域差は移動によって生まれる【/引用】(出典:架空の報告書 A, 2020)", } for k, d in docs.items(): n, q, total, share, no_src = audit_quote(d) print(f"{k}: 引用 {n} か所, 引用 {q} 字 / 本文 {total} 字 = {share:.1%}, 出典なし {no_src} か所") |
💬 原稿 1 は引用 17 字が本文 195 字の 8.7% で、自分の分析が中心にあり出典も付いています。原稿 2 は本文の 83.7% が引用で、自分の文は「次の 2 つの文章を紹介する」「以上である」だけです。これでは自分の文章が「主」とは言いにくく、しかも 2 か所目の引用には出典がありません。原稿 3 は引用だけの 100% で、引用の形をとった転載に近くなります。ただし、割合はあくまで点検の目安で、法律や判例に「何 % 以下なら引用」という線はありません。短い原稿でも、引用が自分の論旨を支えるために必要な範囲で、本文と明確に区別され、出所が示されていれば引用として認められる余地がありますし、割合が小さくても引用の必要性が無い部分の転載は問題になり得ます。数字は「人が読み直すべき原稿を拾う」ために使います。
計算 C の最後で触れたように、逐語再生は「同じ文章が学習データに何度も入っている」ときに起こりやすくなります。そこで大規模な学習の前には、完全に同じ文書だけでなく、一部だけ違う「ほぼ同じ文書」も見つけて減らす前処理(重複除去)が行われます。計算 B の文字 3-gram の Jaccard 一致率を使い、小さな文書集合の中から「一致率が 0.6 以上の組」をほぼ重複として拾い出します。文書はすべて説明のために作ったものです。
🎯 このコードでやること:8 件の短い文書(ニュース風の文、転載・言い換え・無関係な文を含む)について、全 28 組の文字 3-gram Jaccard 一致率を計算し、0.6 以上の組をほぼ重複として出す。重複を 1 件に代表させたときに文書が何件に減るかも数える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from itertools import combinations def ngrams(t, n=3): return {t[i:i + n] for i in range(len(t) - n + 1)} def jaccard(a, b): A, B = ngrams(a), ngrams(b) return len(A & B) / len(A | B) docs = { "d1": "市の図書館は来月から開館時間を午後八時まで延長すると発表した。", "d2": "市の図書館は来月から開館時間を午後八時まで延長すると発表した。", "d3": "市の図書館は来月から開館時間を午後八時まで延長すると発表しました。", "d4": "来月以降、市立図書館は夜八時まで開くことになる。", "d5": "県内の小学校で新しい給食の献立が導入され、地元の野菜が多く使われている。", "d6": "県内の小学校で新しい給食の献立が導入され、地元の野菜が多く使われている。保護者からも好評だという。", "d7": "週末は各地で気温が上がり、海水浴場には多くの人が訪れた。", "d8": "駅前の再開発計画について、住民向けの説明会が開かれた。", } pairs = [] for a, b in combinations(docs, 2): s = jaccard(docs[a], docs[b]) if s >= 0.6: pairs.append((a, b, round(s, 3))) print("ほぼ重複(Jaccard ≥ 0.6):", pairs) print("d1 と d4(言い換え):", round(jaccard(docs["d1"], docs["d4"]), 3)) group = {k: k for k in docs} # 重複の組を 1 つのグループにまとめる for a, b, _ in pairs: ga, gb = group[a], group[b] for k in group: if group[k] == gb: group[k] = ga print("文書数", len(docs), "→ 重複を除くと", len(set(group.values())), "件") |
💬 完全な転載 d1–d2(1.000)、語尾だけ違う d1–d3・d2–d3(0.875)、1 文を足した転載 d5–d6(0.723)の 4 組が拾われ、8 件は 5 件(d1〜d3 のグループ、d4、d5〜d6 のグループ、d7、d8)にまとまります。同じ話題を別の言葉で書いた d4 は d1 との一致率が 0.085 しかなく、重複とは判定されません。重複除去は「同じ表現が何度も学習される」ことを減らす処理で、「同じ事実や話題を学習させない」処理ではない、という違いがここに表れています。実際の大規模データでは全組の比較は数が多すぎるので、MinHash などで一致率を近似して候補の組だけを比べます。しきい値 0.6 は説明のための値で、低くすると言い換えに近いものまで拾い、高くすると転載に 1 文を足しただけのものを見逃します。
📐 の表のとおり、営業秘密(不正競争防止法)は登録ではなく、秘密として管理されていること(秘密管理性)・事業に有用であること・公然と知られていないこと、の 3 つがそろって保護されます。分析基盤では、「誰が見られる状態になっているか」がそのまま秘密管理性の証拠になります。架空の会社のデータセット 4 つについて、アクセス権の設定表から実際に見られる人数を数え、「社外秘」の表示があるのに全社員が見られる、といった食い違いを洗い出します。
🎯 このコードでやること:架空の会社(社員 300 人)のデータセット 4 つについて、アクセス権の設定(グループ単位)からそれぞれを見られる人数を数え、「社外秘」の表示・見られる人数・業務上必要な人数(申告)を並べて、表示と実態の食い違いを判定する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import pandas as pd groups = {"全社員": 300, "分析チーム": 12, "営業部": 60, "役員": 8} ds = pd.DataFrame([ ("顧客購買履歴", "社外秘", ["分析チーム", "営業部"], 20), ("価格決定モデル", "社外秘", ["全社員"], 15), ("SSDSE-B-2026 の加工表", "公開可", ["全社員"], 300), ("新製品の試験結果", "表示なし", ["分析チーム", "役員"], 20), ], columns=["データセット", "表示", "アクセス権", "必要な人数"]) ds["見られる人数"] = ds["アクセス権"].apply(lambda g: min(300, sum(groups[x] for x in g))) ds["過剰な人数"] = (ds["見られる人数"] - ds["必要な人数"]).clip(lower=0) def judge(r): if r["表示"] == "社外秘" and "全社員" in r["アクセス権"]: return "表示と実態が矛盾(全社員が見られる)" if r["表示"] == "表示なし" and r["見られる人数"] < 300: return "制限はあるが秘密の表示が無い" if r["過剰な人数"] > 0 and r["表示"] == "社外秘": return "必要以上に広い" return "問題なし" ds["判定"] = ds.apply(judge, axis=1) print(ds[["データセット", "表示", "見られる人数", "必要な人数", "過剰な人数", "判定"]].to_string(index=False)) |
💬 顧客購買履歴は業務上 20 人で足りるのに営業部全体へ権限を付けて 72 人が見られ、52 人分が過剰です。価格決定モデルは「社外秘」と表示しながら全社員 300 人が見られる設定で、285 人分が過剰なうえ、表示と実態が矛盾しています。このような状態では、漏えいが起きたときに「秘密として管理していた」と主張しにくくなります。新製品の試験結果は見られる人数を 20 人に絞れていますが、秘密であることの表示が無く、アクセスした人が「秘密だと分かっていた」ことを示しにくい状態です。SSDSE-B-2026 の加工表は公開可のデータなので全社員が見られても問題ありません。棚卸しで見るべきなのは人数そのものではなく、「表示」「実際に見られる範囲」「業務上の必要」の 3 つの食い違いです。
計算 A の関数を、教材やデータセットに使いたい資料の一覧にまとめて当てます。実務で困るのは計算そのものより、判定に必要な情報(著作者の死亡日など)が分からない資料の扱いです。分からないものを「たぶん古いから大丈夫」と推測で埋めず、「要調査」として別に数えるのが安全な作り方です。7 つの架空の資料で試します。なお、1970 年以前に公表・死亡した作品には旧著作権法からの経過措置(旧法のほうが長ければ旧法の期間を使う)があり、とくに映画・写真・団体名義の作品では結果が変わることがあります。ここでは新法の期間だけで判定できる例を選んでいます。
🎯 このコードでやること:架空の資料 7 件(種類・死亡日または公表日・著作者名義の区別)について、2026 年 4 月 1 日の時点で保護期間が満了しているかを判定する。基準日が分からない資料は「要調査」とし、判定の内訳を数える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import pandas as pd today = date(2026, 4, 1) items = [("随筆集 1", "個人", date(1960, 3, 1)), ("論文 2", "個人", date(1975, 8, 15)), ("社史 3", "団体名義", date(1975, 10, 1)), ("記録映画 4", "映画", date(1975, 5, 1)), ("講演録 5", "個人", date(1966, 11, 20)), ("古い地図 6", "個人", None), ("広報誌 7", "団体名義", date(1990, 4, 1))] rows = [] for name, kind, base in items: if base is None: rows.append((name, kind, "-", "要調査(基準日が不明)")) continue end = jp_copyright_end(base, kind) rows.append((name, kind, end, "満了(自由に利用可)" if end < today else "保護期間中(許諾が必要)")) t = pd.DataFrame(rows, columns=["資料", "種類", "満了日", "判定"]) print(t.to_string(index=False)) print(t["判定"].value_counts().to_string()) |
💬 7 件のうち満了して自由に使えるのは 1960 年・1966 年に亡くなった著作者の 2 件だけで、4 件は保護期間中、1 件は基準日が分からず「要調査」です。1975 年公表の社史(団体名義)と記録映画は、旧ルールなら 2025 年末に満了していたはずですが、延長でどちらも 2045 年末まで守られます。「50 年以上前の資料だから自由」という感覚は、2018 年以降は通用しないことが一覧で分かります。要調査の 1 件は、著作者の死亡年を調べるか、許諾を取るか、使わないかを決めるまで、教材から外しておきます。判定表には「いつの時点で判定したか」(ここでは 2026 年 4 月 1 日)を必ず残し、年が変わったら判定し直します。
| 計算 | 数字で分かったこと(架空・仮定の例) | 実務での判断 |
|---|---|---|
| A 保護期間 | 死亡日が 21 日違うだけで自由になる日が 21 年違う(1967 年末と 1968 年初め) | 死亡年と改正の施行日を並べて判断する |
| B n-gram 一致率 | 同じ事実を独立に書いた文でも包含率 0.431 | 一致率は候補探し。創作的な表現の一致かを人が見る |
| C 逐語再生の確率 | 1 回 0.0001 でも 1 万回で 0.632 | 小さな確率も利用回数で掛け算。出力側のフィルタを置く |
| D ライセンスの組み合わせ | SA が 2 種類・ND を含むと組み合わせ不可 | 要素に分解して点検し、原文で最終確認 |
| E 特許の独占期間 | 登録まで 8 年なら独占は 12 年 | 出願年ではなく登録年から数える |
| F 延長の空白 | 2019〜2038 年に新たに自由になる個人の作品が無い | 古い資料は死亡年で判断する |
| G 出典表示 | TASL がそろっても加工の明記が欠けがち | 「何をもとにどう加工したか」まで書く |
| H 引用の割合 | 引用 83.7%・出典なし 1 か所の原稿 | 割合は点検の目安。法定の線は無い |
| I 重複除去 | 8 件 → 5 件、言い換えは 0.085 で残る | 転載・近い複製を学習前に減らす |
| J アクセス権 | 社外秘なのに 300 人が閲覧可 | 表示・閲覧範囲・必要性の食い違いを棚卸しする |
| K 資料の一覧判定 | 7 件中、満了 2・保護中 4・要調査 1(1975 年公表の団体名義も 2045 年まで保護) | 分からない項目は推測で埋めず「要調査」。判定した日付を残す |
計算で決められること・決められないこと: 計算 A〜K で機械的に答えが出るのは、日付の計算(A・E・F・K)、確率の見積もり(C)、要素の組み合わせ(D)、文字列の有無や割合(B・G・H・I・J)です。一方、「その表現に創作性があるか」「引用の必要性があるか」「享受を目的とした利用か」「秘密として管理していたと言えるか」は、事情を総合して人(最終的には裁判所)が判断する規範的な問題で、どの計算もその代わりにはなりません。計算は、判断すべき論点を漏れなく洗い出し、判断に必要な事実(死亡年・登録年・閲覧できる人数など)を正確にそろえるための道具として使います。
最小再現コード。 SSDSE-B のような実データを前提に、 4〜8 行で動く例です:
1 2 3 4 5 6 7 8 9 | # 例: 公的データのライセンス確認スクリプト import pandas as pd LICENSES = { 'SSDSE-B': 'CC BY 4.0', 'e-Stat': '政府標準利用規約 2.0', } def can_use_commercially(name): return LICENSES.get(name, 'unknown') in {'CC BY 4.0', 'CC0', 'MIT'} print(can_use_commercially('SSDSE-B')) |
💬 True が返ったのは、辞書で SSDSE-B が 'CC BY 4.0' と登録され、許可リストに含まれているから。e-Stat の「政府標準利用規約 2.0」は実際には出典表示のうえ商用利用できるが、この関数では許可リストに無いので False になり、辞書に無い名前も 'unknown' で False になる。判定を自動化するなら、規約名の表記ゆれとリスト漏れが最大の落とし穴になる。
補足:ライブラリのバージョンや前処理状態によって出力は変わります。 自分の環境で動かすときは pip list でバージョンを確認し、 入力 CSV のパス・列名を実態に合わせてください。
🎯 このコードでやること:data/raw/SSDSE-B-2026.csv を読み込み、 ライセンス情報をメタデータとして保持しつつ、 47 都道府県 × 12 年分のデータを取得する。
📥 入力データ(CSV 抜粋):
1 2 3 4 5 6 7 8 9 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1) df.attrs['license'] = 'CC BY 4.0' df.attrs['source'] = '独立行政法人統計センター. SSDSE-B-2026' print(f"行数: {len(df):,} / 列数: {len(df.columns)}") print(f"年度: {sorted(df['年度'].unique())[0]}-{sorted(df['年度'].unique())[-1]}") print(f"出典: {df.attrs['source']} ({df.attrs['license']})") |
📤 実行結果:
💬 結果の読み方:564 行は 47 都道府県 × 12 年 = 564 で一致。 メタデータに license を記録すると、 後段の集計でも出典を継承できる。 CC BY 4.0 のため出典明記をすれば商用・改変・再配布いずれも合法。
🎯 このコードでやること:47 都道府県の 2023 年人口 TOP 5 を抽出し、 Markdown 形式で「出典明記済みレポート」を生成する。 CC BY 4.0 違反を防ぐ実務テンプレート。
📥 入力データ:上記 df(564 行)の 2023 年抜粋。
1 2 3 4 5 6 7 | top5 = df[df['年度']==2023].nlargest(5, '総人口')[['都道府県','総人口']] report = "# 2023 年都道府県人口 TOP 5\n\n" report += top5.to_markdown(index=False) + "\n\n" report += "出典:独立行政法人統計センター. SSDSE-B-2026 (CC BY 4.0).\n" report += "URL: https://www.nstac.go.jp/use/literacy/ssdse/\n" print(report) |
📤 実行結果(実測):
💬 結果の読み方:東京都が突出(14,086,000 人)、 2 位の神奈川県(9,229,000 人)とは約 486 万人差。 to_markdown で表にしたので、 そのまま Markdown の論文・レポートに貼れる。 表+出典で論文・レポート 1 ブロックが完成。 CC BY 4.0 は「表示」だけが義務なので、 この 2 行で完全に遵守できる。
🎯 このコードでやること:SSDSE-B-2026 と他のデータ・コードを組み合わせる際、 ライセンスが両立するかチェック。
📥 入力データ:ライセンス辞書(CC BY 4.0, MIT, GPL, CC BY-NC)。
1 2 3 4 5 6 7 8 9 | compat = { ('CC BY 4.0', 'MIT'): True, ('CC BY 4.0', 'Apache-2.0'): True, ('CC BY 4.0', 'CC BY-SA'): True, ('CC BY 4.0', 'CC BY-NC'): '商用×', ('CC BY 4.0', 'GPL-3.0'): '派生物 GPL 化', } for (a,b), ok in compat.items(): print(f"{a:12s} × {b:12s} → {ok}") |
📤 実行結果:
💬 結果の読み方:SSDSE-B-2026(CC BY 4.0)は MIT / Apache とは自由に組み合わせ可。 NC 系を混ぜると商用 NG、 GPL を混ぜると派生物全体が GPL 化する。 実務では requirements.txt と LICENSE をペアでチェックすると安全。
| 国・地域 | 著作権保護期間 | 特許審査期間 | AI 学習合法性 | 商標登録費用 |
|---|---|---|---|---|
| 日本 | 死後 70 年 | 約 14 ヶ月 | 著作権法 30 条の 4 で広く許容 | 約 12,000 円〜 |
| 米国 | 死後 70 年 | 約 22 ヶ月 | フェアユース、 NYT 訴訟係争中 | 250 ドル〜(USPTO) |
| EU | 死後 70 年 | EPO 約 36 ヶ月 | AI Act でデータ開示義務 | €850〜(EUIPO) |
| 中国 | 死後 50 年 | 約 22 ヶ月 | 2023 年画像 AI 著作権認容判決 | RMB 1,000〜 |
| 韓国 | 死後 70 年 | 約 12 ヶ月 | 明確な規定なし、 個別判断 | ₩62,000〜 |
| インド | 死後 60 年 | 約 50 ヶ月 | 研究目的のみ免除 | ₹4,500〜 |
| WIPO 加盟国全般 | パリ条約 + ベルヌ条約準拠 | — | — | — |
独立行政法人統計センター. (2024). 教育用標準データセット SSDSE-B-2026 [Data set]. クリエイティブ・コモンズ 表示 4.0 国際 (CC BY 4.0). https://www.nstac.go.jp/use/literacy/ssdse/
@misc{ssdse_b_2026,
author = {独立行政法人統計センター},
title = {SSDSE-B-2026: 教育用標準データセット},
year = {2024},
url = {https://www.nstac.go.jp/use/literacy/ssdse/},
note = {CC BY 4.0}
}
[SSDSE-B-2026](https://www.nstac.go.jp/use/literacy/ssdse/) © 独立行政法人統計センター, [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)
## データの出典 本リポジトリは「SSDSE-B-2026」(独立行政法人統計センター, CC BY 4.0)を含んでいます。 URL: https://www.nstac.go.jp/use/literacy/ssdse/ ライセンスファイル: data/raw/SSDSE-B-2026.LICENSE.txt
SSDSE-B-2026 のような公開データに対し、 企業内のデータ(顧客リスト、 取引データ、 製造レシピ)は営業秘密として保護される。 不正競争防止法 2 条 6 項で要件:(1) 秘密管理性(アクセス制限)、 (2) 有用性(事業価値)、 (3) 非公知性(公知でない)。 ハッキング・退職者持ち出しに対し差止め・損害賠償・刑事罰。
各データ要素を権利の観点で分類:
| データ要素 | 権利の種類 | SSDSE-B-2026 該当列 |
|---|---|---|
| 個人を特定できる情報 | 個人情報(PII) | 含まれない(都道府県レベル集計) |
| 事実・数値 | 著作権なし(不保護) | 総人口、 出生数、 気温など全列 |
| 編集著作物(データセット全体) | 著作権あり、 CC BY 4.0 | SSDSE-B-2026 全体 |
| 解説テキスト・図表 | 著作権あり、 CC BY 4.0 | 付属の解説資料 |
| 派生統計(自分で計算) | 計算者の著作権 + 元データのライセンス継承 | あなたの分析結果 |
2023 年 12 月、 ニューヨーク・タイムズが OpenAI と Microsoft を提訴。 争点:
この訴訟の判決は AI 産業全体の方向性を左右する見込み。 2025 年現在も係争中。 SSDSE-B-2026 のような CC BY 4.0 データは「最初から学習許諾済み」のため、 こうしたリスクから自由。
「著作物は、 次に掲げる場合その他の当該著作物に表現された思想又は感情を自ら享受し又は他人に享受させることを目的としない場合には、 …利用することができる」。 これにより:
文化庁が公表した「AI と著作権に関する考え方について」では、 (1) 学習段階、 (2) 生成段階、 (3) 既存作品との類似性、 の 3 段階で論点を整理。 「学習は広く許容、 生成段階で侵害判定」が基本姿勢。
2024 年成立の EU AI Act は段階適用。 主な義務:
| 適用時期 | 義務 | SSDSE-B-2026 への影響 |
|---|---|---|
| 2025 年 2 月 | 禁止 AI(社会スコア、 サブリミナル)の禁止 | SSDSE-B 用途は無関係 |
| 2025 年 8 月 | GPAI(汎用 AI モデル)の透明性義務 | 学習データ要約に SSDSE-B も含まれる可能性 |
| 2026 年 8 月 | 高リスク AI の規制(医療、 採用、 教育) | SSDSE-B を採用 AI で使う場合に影響 |
| 2027 年 8 月 | 全規定の完全適用 | — |
SSDSE-B-2026 は CC BY 4.0 で出所明確、 EU AI Act の透明性要件を最も容易に満たす種類のデータ。
WIPO(2024)統計:
pd.read_csv で読み込み、 出典コメントを付与to_csv で出力、 同梱 LICENSE.txt を作成知的財産権 を実務で扱うとき、 多くの分析者が同じところでつまずきます。 代表的な失敗パターンを先回りで押さえておくと、 後工程のトラブルを大幅に減らせます。
※ 上記は文献調査・現場経験で報告される頻度の高い注意点。 ドメインや手法のバージョンによって追加の落とし穴がある場合があります。
知的財産権のうち、データ分析の現場に直接効いてくるのは 著作権法 30 条の 4(著作物に表現された思想又は感情の享受を目的としない利用)です。 2018 年改正で入った条文で、情報解析のためであれば、原則として著作物を許諾なく利用してよい と定めています。機械学習の学習データやテキストマイニングが、ここに乗ります。
| やること | 30 条の 4 に乗るか | 理由 |
|---|---|---|
| Web 記事を集めて語の出現頻度を数える | 乗りやすい | 表現を享受せず、統計量だけを取り出している |
| 画像を集めて分類モデルを学習する | 乗りやすい | 学習は「享受」を目的とした利用ではない |
| 集めた記事を全文そのまま社内 Wiki に載せる | 乗らない | 人が読むための提供=享受目的 |
| 学習した生成モデルで、元作品によく似た出力を売る | 乗らない | 出力側は別途、複製権・翻案権の問題になる |
| 有料データベースを規約に反して収集する | 乗らない | 著作権とは別に契約違反になる |
誤解しやすいのは最後の 2 行です。30 条の 4 は「入口」の話しかしていません。 学習に使ってよいことと、出てきたものを配ってよいことは別問題です。 また、著作権が及ばなくても利用規約という契約は生きています。 「著作権法上は適法だが、規約違反なので損害賠償」という事態は普通に起こります。 スクレイピングを始める前に、robots.txt と利用規約を読むのはこのためです。
本教材が使っている SSDSE(教育用標準データセット)は、 独立行政法人統計センターが教育目的での利用を前提に公開しているデータです。 公的統計の数値そのものには著作権が生じないと解されますが、 データセットとしての編集著作物性や、提供元が示す利用条件は別途確認するのが安全です。 「公的統計だから何でも自由」と決めつけず、 出典を明記し、提供元の条件に沿って使う — これが実務での最低限の作法になります。
関連概念を視覚的に整理した概念マップ。
上図中心の「知的財産権 (IP rights)」から、 著作権 ・ 特許権 ・ パブリックドメイン ・ 生成 AI に関する政府ガイドライン ・ 落とし穴 (Web 公開イコール自由誤解等) の軸が放射する。 データサイエンスの実務では、 学習データの著作権 / モデルの特許性 / 出力物の権利帰属が日常的な論点。
知的財産権はデータサイエンスの「データ収集」「モデル開発」「成果物配布」のすべての段階で関わる横断的な制約。 倫理・規制と密接に連携する。
生成 AI の登場で従来の枠組みが揺らいでいる: 学習データの著作物利用 (日本は著作権法 30 条の 4 で原則 OK)、 出力物の著作権 (人間の創作性なしでは認められない)、 商標的類似性など。 最新の政府ガイドライン (文化庁・経産省) と判例を継続的に確認する必要がある。
データ・モデル・成果物の IP 取り扱いを、 用途別に 3 段階で判定する。
「Web に公開されているから自由に使える」は誤解。 利用には許諾またはフェアユース該当性が必要で、 学習目的の利用も日本以外では制限される場合がある。
最後に、実務でいちばん多い相談を 1 つ。 「社外のデータで作ったモデルは誰のものか」という問いには、 法律だけでは答えが出ません。学習データの利用条件、開発委託契約の成果物条項、 クラウド事業者の利用規約 — この 3 つが重なって決まります。 権利の所在は、分析を始める前に契約で決めておくのが唯一の確実な方法です。 始めてから揉めると、モデルを捨てるしかなくなることもあります。
知的財産権 は「倫理」分野の中で発展してきた概念・手法です。 学術的には継続的な研究で精緻化され、 実務的にはツール・ライブラリの普及で誰でも使えるようになってきました。 用語の使い方・意味は時代と分野で少しずつ変わるため、 文脈に応じた解釈が大切です。 入門書だけでなく、 標準的な教科書(例:データサイエンス・統計学の定本)や信頼できるオンライン教材も併用すると、 ぶれない理解に近づけます。