本文へ移動
cccskills
無料GitHub で公開

ronbun-access

学術論文・有料記事・地域制限コンテンツへ、合法的かつ倫理的に到達するための手段集。

オープンアクセス検索(Unpaywall・CORE・Semantic Scholar・OpenAlex 等)、日本の学術資源(CiNii Research・J-STAGE・国立国会図書館デジタルコレクション・機関リポジトリ・大学図書館)、図書館経由のアクセス、ウェブアーカイブ、著者への直接依頼までを扱う。

「論文の全文が読みたい」「ペイウォールの記事を合法的に読む方法」「オープンアクセス版を探したい」「DOIから無料版を探す」などの依頼で使う。違法な回避手段は扱わない。

sgbms1/ja-news-skillsスター 3(GitHub 3 + cccskills 0)
連携ツールX (Twitter)

実行スコア 未検証

インストール方法を見る

含まれるファイル(1)

  • SKILL.md44.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

論文・有料コンテンツへのアクセス

報道・調査のために、アクセス制限のあるコンテンツへ合法的・倫理的に到達するための手順とツール集。 記者の目的(何の論文・記事を、どの締切までに、どこまで使うのか)を聞き取り、適切な手段を順に提案する。最終的な利用判断と引用・出典明記は記者が行う。

注意:オープンアクセスのツールや有料DBの提供条件、無料枠、APIの認証要件は頻繁に変わる。URL・料金・利用規約は利用直前に最新を確認すること。本スキルは一般的な手引きであり、法的助言ではない。著作権の扱いに迷う場合は各社の法務・校閲に相談する。

アクセス手段の優先順位(上から順に試す)

┌─────────────────────────────────────────────────────────────────┐
│              コンテンツ・アクセスの判断順位                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 完全に合法(まず最初に試す)                                  │
│     ├─ 図書館・機関の契約DB(国会図書館、大学図書館、商用DB)     │
│     ├─ オープンアクセス検索(Unpaywall, CORE, OpenAlex)          │
│     ├─ 日本の学術資源(CiNii Research, J-STAGE, NDLデジコレ)     │
│     ├─ 機関リポジトリ(各大学・研究機関の公開版)                 │
│     ├─ 著者への直接依頼                                           │
│     └─ 図書館間貸借・複写(ILL/文献複写)                        │
│                                                                  │
│  2. 合法(ブラウザ機能・アーカイブ)                              │
│     ├─ リーダーモード(Safari, Firefox, Edge, Chrome)            │
│     ├─ Wayback Machine(国立国会図書館・Internet Archive)        │
│     └─ Google Scholar の「すべてのバージョン」                    │
│                                                                  │
│  3. グレーゾーン(慎重に。規約・締切リスクを確認)                │
│     ├─ Archive.today による個別記事の取得                         │
│     ├─ JavaScript 無効化(機能が壊れる)                          │
│     └─ 地域制限回避のためのVPN                                    │
│                                                                  │
│  4. 推奨しない                                                    │
│     ├─ ログイン情報の共有                                         │
│     ├─ 機械的な一括ダウンロード(スクレイピング)                 │
│     └─ 回避して得た有料コンテンツの商用利用・再配布               │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

学術論文向けのオープンアクセス検索

Unpaywall(DOIから合法的な無料版を探す)

Unpaywall は、5,000万件以上のオープンアクセス記録から、合法的な無料コピーを探すサービス。ブラウザ拡張のほか、無料APIがある(識別のためメールアドレスが必要)。

# Unpaywall API(無料・識別のためメールアドレスが必要)
import requests

def find_open_access(doi: str, email: str) -> dict:
    """Unpaywall API で論文のオープンアクセス版を探す。

    引数:
        doi: DOI(例: "10.1038/nature12373")
        email: API 識別用の自分のメールアドレス

    戻り値:
        最良のオープンアクセスURLを含む辞書(あれば)
    """
    url = f"https://api.unpaywall.org/v2/{doi}?email={email}"

    response = requests.get(url, timeout=30)

    if response.status_code != 200:
        return {'error': f'Status {response.status_code}'}

    data = response.json()

    if data.get('is_oa'):
        best_location = data.get('best_oa_location', {})
        return {
            'is_open_access': True,
            'oa_url': best_location.get('url_for_pdf') or best_location.get('url'),
            'oa_status': data.get('oa_status'),  # gold, green, bronze, hybrid
            'host_type': best_location.get('host_type'),  # publisher, repository
            'version': best_location.get('version')  # publishedVersion, acceptedVersion
        }

    return {
        'is_open_access': False,
        'title': data.get('title'),
        'journal': data.get('journal_name')
    }

# 使い方
result = find_open_access("10.1038/nature12373", "researcher@example.com")
if result.get('is_open_access'):
    print(f"無料PDF: {result['oa_url']}")

CORE API(2.9億件以上のオープンアクセス成果)

# CORE API … https://core.ac.uk/ で無料のAPIキーを取得

import requests

class CORESearch:
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://api.core.ac.uk/v3"

    def search(self, query: str, limit: int = 10) -> list:
        """CORE データベースをオープンアクセス論文で検索する。"""

        headers = {'Authorization': f'Bearer {self.api_key}'}
        params = {
            'q': query,
            'limit': limit
        }

        response = requests.get(
            f"{self.base_url}/search/works",
            headers=headers,
            params=params,
            timeout=30
        )

        if response.status_code != 200:
            return []

        data = response.json()
        results = []

        for item in data.get('results', []):
            results.append({
                'title': item.get('title'),
                'authors': [a.get('name') for a in item.get('authors', [])],
                'year': item.get('yearPublished'),
                'doi': item.get('doi'),
                'download_url': item.get('downloadUrl'),
                'abstract': item.get('abstract', '')[:500]
            })

        return results

    def get_by_doi(self, doi: str) -> dict:
        """DOI から論文を取得する。"""
        headers = {'Authorization': f'Bearer {self.api_key}'}

        response = requests.get(
            f"{self.base_url}/works/{doi}",
            headers=headers,
            timeout=30
        )

        return response.json() if response.status_code == 200 else {}

Semantic Scholar API(2.2億件以上の論文)

# Semantic Scholar API … 無料。ただし ad-hoc な呼び出しを超える用途では
# https://www.semanticscholar.org/product/api でキーを取得すること。
# キー無しのアクセスは共有レート制限が厳しくなり、まとめ取得には不向き。

import requests

def search_semantic_scholar(query: str, limit: int = 10) -> list:
    """Semantic Scholar をオープンアクセスリンク付きで検索する。"""

    url = "https://api.semanticscholar.org/graph/v1/paper/search"
    params = {
        'query': query,
        'limit': limit,
        'fields': 'title,authors,year,abstract,openAccessPdf,citationCount'
    }

    response = requests.get(url, params=params, timeout=30)

    if response.status_code != 200:
        return []

    results = []
    for paper in response.json().get('data', []):
        oa_pdf = paper.get('openAccessPdf', {})
        results.append({
            'title': paper.get('title'),
            'authors': [a.get('name') for a in paper.get('authors', [])],
            'year': paper.get('year'),
            'citations': paper.get('citationCount', 0),
            'open_access_url': oa_pdf.get('url') if oa_pdf else None,
            'abstract': paper.get('abstract', '')[:500] if paper.get('abstract') else ''
        })

    return results

def get_paper_by_doi(doi: str) -> dict:
    """DOI から論文の詳細を取得する。"""
    url = f"https://api.semanticscholar.org/graph/v1/paper/DOI:{doi}"
    params = {
        'fields': 'title,authors,year,abstract,openAccessPdf,references,citations'
    }

    response = requests.get(url, params=params, timeout=30)
    return response.json() if response.status_code == 200 else {}

OpenAlex API(2.5億件以上の学術成果)

OpenAlex は、Microsoft Academic Graph(MAG)の廃止後に事実上の標準となったオープン学術データ基盤。多くのツール(Unpaywall の補助データ、Local Citation Network、OpenCitations など)が OpenAlex 経由で解決している。

認証メモ(2026年): OpenAlex は 2026年2月13日にAPIキー必須・クレジット制のレートモデルへ移行した。ウェブサイトの匿名閲覧は引き続き無料だが、API はキー+従量制限となる。最新の条件は https://docs.openalex.org/ で確認すること。キーは OpenAlex アカウントから無料で取得できる。

# OpenAlex API クライアント
# https://docs.openalex.org/
# 料金・キー発行: https://openalex.org/

import requests

def search_openalex(query: str, api_key: str, limit: int = 25,
                    email: str = None) -> list:
    """OpenAlex を成果(works)で検索する。

    引数:
        query: フリーテキストの検索文字列。
        api_key: OpenAlex APIキー(2026-02-13以降は必須)。
        limit: 1ページの最大件数(1〜200)。
        email: 「polite pool」用の連絡先メール。キーがあっても推奨。
               OpenAlex は送信者が識別できるリクエストを優先する。
    """
    headers = {
        'Authorization': f'Bearer {api_key}',
        'User-Agent': f'ronbun-access ({email})' if email else 'ronbun-access',
    }
    params = {'search': query, 'per-page': limit}

    response = requests.get(
        'https://api.openalex.org/works',
        params=params,
        headers=headers,
        timeout=30,
    )
    if response.status_code != 200:
        return []

    results = []
    for work in response.json().get('results', []):
        oa = work.get('open_access') or {}
        results.append({
            'id': work.get('id'),
            'doi': work.get('doi'),
            'title': work.get('title'),
            'year': work.get('publication_year'),
            'is_oa': oa.get('is_oa', False),
            'oa_status': oa.get('oa_status'),  # gold, green, hybrid, bronze, closed
            'oa_url': oa.get('oa_url'),
            'cited_by_count': work.get('cited_by_count', 0),
        })
    return results

その他、確認に値する国際的なオープンアクセス源

  • DOAJ(doaj.org/api/v3)…… オープンアクセス雑誌のディレクトリ。ある出版社が完全OAかを確認したいときに有用。
  • EuropePMC(europepmc.org/RestfulWebService)…… PubMed Central のミラーにプレプリント等を加えたもの。OA全文検索・ORCID連携の著者検索ができる。
  • PubMed Central(eutils.ncbi.nlm.nih.gov)…… 生命科学・医学のOAアーカイブ。日本の医学論文でも英語誌掲載分はここで見つかることがある。

日本の学術資源(まず日本語論文・国内資料はここから)

国内の論文・記事・公的資料は、海外のOAツールよりも日本の学術プラットフォームの方が見つかりやすい。以下は原則として無料で利用できる。

### 日本の主要な学術・資料プラットフォーム

- **CiNii Research**(cir.nii.ac.jp / 国立情報学研究所)
  日本語論文・研究データ・博士論文・図書/雑誌・KAKEN(科研費)を横断検索。
  本文へのリンク(J-STAGE・機関リポジトリ・DOI)を辿れる。国内文献の起点。

- **J-STAGE**(jstage.jst.go.jp / 科学技術振興機構)
  国内学協会誌のプラットフォーム。多くがオープンアクセスで全文PDFを無料公開。
  自然科学だけでなく人文・社会科学の学会誌も多い。

- **国立国会図書館デジタルコレクション**(dl.ndl.go.jp)
  図書・雑誌・古典籍・官報などをデジタル化。著作権処理済みのものはネット公開、
  それ以外も「個人向けデジタル化資料送信サービス」(登録利用者)や
  図書館送信で閲覧できる。明治期以降の新聞・雑誌・統計の宝庫。

- **NDL ONLINE / NDL サーチ**(ndlsearch.ndl.go.jp)
  全国の図書館・機関リポジトリ・デジタルアーカイブを横断検索する統合入口。

- **機関リポジトリ(IRDB)**(irdb.nii.ac.jp / 学術機関リポジトリデータベース)
  全国の大学・研究機関のリポジトリを横断検索。出版社版が有料でも、
  著者最終稿(グリーンOA)がリポジトリで無料公開されていることが多い。

- **JAIRO Cloud / WEKO**(各大学のリポジトリ基盤)
  個別大学のリポジトリで紀要・博士論文・研究報告を公開。

- **博士論文(CiNii Dissertations 経由)/各大学リポジトリ**
  2013年度以降の博士論文は原則インターネット公表。リポジトリで全文が読める。

- **科学技術情報(J-GLOBAL / JST)**、**KAKEN**(科研費データベース、kaken.nii.ac.jp)
  研究者・研究課題・成果報告の検索。取材対象の研究者の業績把握に有用。
### 分野別・テーマ別の国内資源

- 医学:医中誌Web(有料・医学中央雑誌)、PubMed(英語誌)、J-STAGE
- 法律・判例:裁判所「裁判例検索」、政府の法令検索 e-Gov 法令検索、
  D1-Law/LEX-DBや判例秘書(有料DB、図書館で利用可のことも)
- 統計:e-Stat(政府統計の総合窓口)、各府省・自治体の統計ページ
- 公的報告・白書:各府省サイト、内閣府・総務省統計局、地方の統計書
- 古い新聞記事:各紙の有料記事DB(日経テレコン、ヨミダス、聞蔵/朝日、
  毎索/毎日 等。多くは図書館や社内契約で利用)、NDLデジタルコレクション

検索の順序の目安:国内の日本語論文は CiNii Research → J-STAGE/機関リポジトリ(IRDB)→ NDLデジタルコレクション。海外論文・DOIが分かる論文は Unpaywall/OpenAlex → 機関リポジトリ → 著者連絡 の順が効率的。

⚠️ 日本発DOI(JaLC系)では国際OAツールが軒並み“死角”になる(実地検証済み・2026-07)。 日本の大学リポジトリ等が付与する JaLC系DOI(10.24561/… のような日本機関のプレフィックス)は、Unpaywall・OpenAlex・Semantic Scholar が索引していないことが多い。 実測では、松本正生「自治体行政と世論調査」(埼玉大, DOI 10.24561/00018103)で Unpaywall=404/OpenAlex=匿名は503でAPIキー要求/Semantic Scholar=404 と全滅した一方、 CiNii Research → 機関リポジトリ(SUCRA)で全文PDFに一直線で到達できた。 ⇒ 日本語論文・国内資料は、国際ツールを試す前にまず下記の CiNii/J-STAGE を叩くこと。国際ツールは英語誌・Crossref系DOIで威力を発揮する道具と割り切る。

実装:CiNii Research OpenSearch(無料・キー不要/国内論文の起点)

# CiNii Research OpenSearch … 認証・APIキー不要。JSONで書誌+DOI+本文リンクが返る。
# ドキュメント: https://support.nii.ac.jp/ja/cir/r_opensearch
import requests

def search_cinii(query: str, count: int = 10) -> list:
    """CiNii Research を検索し、DOI・リポジトリ等の本文リンクまで拾う。"""
    r = requests.get(
        "https://cir.nii.ac.jp/opensearch/all",
        params={"q": query, "count": count, "format": "json"},
        timeout=30,
    )
    if r.status_code != 200:
        return []
    out = []
    for it in r.json().get("items", []):
        link = it.get("link", {})
        out.append({
            "title": it.get("title"),
            "authors": it.get("dc:creator"),
            "publisher": it.get("dc:publisher"),   # 例: 埼玉大学社会調査研究センター
            "year": it.get("prism:publicationDate") or it.get("dc:date"),
            "cir_url": link.get("@id") if isinstance(link, dict) else it.get("@id"),
        })
    return out

def cinii_fulltext_links(cir_crid_url: str) -> dict:
    """CiNii の CRID レコード(…/crid/<ID>.json)から DOI・リポジトリURLを取り出す。
    多くの国内論文は機関リポジトリ(グリーンOA)に全文PDFがある。"""
    jid = cir_crid_url.rstrip("/").split("/")[-1]
    r = requests.get(f"https://cir.nii.ac.jp/crid/{jid}.json",
                     headers={"Accept": "application/json"}, timeout=30)
    ids = {"doi": None, "repository": None}
    if r.status_code == 200:
        import json as _j
        for k, v in _walk(r.json()):
            if isinstance(v, dict) and v.get("@type") == "DOI":
                ids["doi"] = v.get("@value")
            if isinstance(v, dict) and v.get("@type") == "URI" and "repo" in str(v.get("@value", "")):
                ids["repository"] = v.get("@value")
    return ids

def _walk(o):
    if isinstance(o, dict):
        for k, v in o.items():
            yield k, v
            yield from _walk(v)
    elif isinstance(o, list):
        for it in o:
            yield from _walk(it)

実装:J-STAGE WebAPI(無料・キー不要/国内学協会誌のOA全文)

# J-STAGE 論文検索API … 認証不要。service=3 が論文検索。Atom(XML)で返る。
# ドキュメント: https://www.jstage.jst.go.jp/static/pages/JstageServices/TAB4/-char/ja
import requests, xml.etree.ElementTree as ET

def search_jstage(text: str, count: int = 10) -> list:
    r = requests.get(
        "https://api.jstage.jst.go.jp/searchapi/do",
        params={"service": 3, "text": text, "start": 1, "count": count},
        timeout=30,
    )
    if r.status_code != 200:
        return []
    ns = {"a": "http://www.w3.org/2005/Atom"}
    root = ET.fromstring(r.content)
    out = []
    for e in root.findall(".//a:entry", ns):
        def pick(tag):
            el = e.find(f".//a:{tag}/a:ja", ns) or e.find(f".//a:{tag}/a:en", ns)
            return "".join(el.itertext()).strip() if el is not None else None
        out.append({"title": pick("article_title"), "link": pick("article_link")})
    return out
# 注: 検索0件やパラメータ不足時は <status>WARN_002</status> が返る(HTTPは200)。
#     totalResults を見て件数を確認する。日本語キーワードはそのまま渡してよい。

機関リポジトリの全文PDFは、CRIDから辿ったリポジトリのランディングページ(例 sucra.repo.nii.ac.jp/records/<id>)内の .pdf リンクにある。取得後は本文抽出(pypdf 等)で内容が狙いに合うか確認し、引用の範囲で使い、全文PDFは再配布しない。

意図的に推奨しないもの(違法・規約違反の可能性が高い)

本スキルは、Sci-Hub、Library Genesis(LibGen)、Anna's Archive、12ft.io / removepaywall.com のようなペイウォール回避サービスを推奨しない。研究コミュニティで広く使われているものもあるが、法的にグレー〜明確に違法の領域(管轄により異なる)にあり、DMCA削除要請・出版社による提訴・ドメイン差押えの対象になってきた。日本では著作権法上、こうしたサイトからの違法アップロード物のダウンロードが私的使用の例外から外れる場合がある点にも注意する。上記の正規のオープンアクセス経路を使い、それでも入手できなければ、後述の著者連絡・図書館複写(ILL)の経路を使う。これらは法的リスクなく非常に高い成功率がある。

ソフトペイウォール向けのリーダーモード

リーダーモードの活用

以下のブックマークレットは、ソフト(メータード)ペイウォールでのみ機能する。記事のHTML本文を読み込んだ上で購読プロンプトを視覚的に重ねている=本文が既にDOM内にあるが隠されているだけ、というサイト向け。本文がサーバー側でゲートされているハードペイウォール(多くの大手紙・有料メディア)には効かず、オーバーレイを外しても何も現れない。なお、本来は有料の本文を読むために常用すると配信元の利用規約に反しうる。正当にアクセス権があるコンテンツのリーダーモード補助としてのみ使う。

// ソフトペイウォールのオーバーレイを外し、リーダーモードを効かせるブックマークレット
// 本文を読み込んでからブロックする一部のソフトペイウォールで機能する

javascript:(function(){
    // 記事本文を抽出する
    var article = document.querySelector('article') ||
                  document.querySelector('[role="main"]') ||
                  document.querySelector('.article-body') ||
                  document.querySelector('.post-content');

    if (article) {
        // ペイウォールのオーバーレイを除去する
        document.querySelectorAll('[class*="paywall"], [class*="subscribe"], [id*="paywall"]')
            .forEach(el => el.remove());

        // 固定配置のオーバーレイを除去する
        document.querySelectorAll('*').forEach(el => {
            var style = getComputedStyle(el);
            if (style.position === 'fixed' && style.zIndex > 100) {
                el.remove();
            }
        });

        // スクロールを再有効化する
        document.body.style.overflow = 'auto';
        document.documentElement.style.overflow = 'auto';

        console.log('オーバーレイを除去しました。本文が表示される場合があります。');
    }
})();

ブラウザ別リーダーモード

ブラウザ起動方法効きやすさ
SafariURLバーのリーダーアイコンソフトペイウォールに強い
Firefoxリーダービューのアイコン(F9)強い
Edgeイマーシブリーダーのアイコン最も強い
Chromeサイドパネル → 読み取りモード(Chrome 114〜安定版)中程度

図書館・機関のデータベース経由のアクセス

日本では、国立国会図書館と大学図書館・公共図書館が有料コンテンツへの合法的な入口になる。記者が大学・研究機関に所属していなくても、公共図書館や国会図書館の利用者登録で多くの資源に届く。

### 日本の図書館・機関アクセスの主な手段

- **国立国会図書館(NDL)**
  - 来館利用:東京本館・関西館で契約DBや所蔵資料を閲覧・複写依頼。
  - 登録利用者制度:「個人向けデジタル化資料送信サービス」で、
    絶版等の資料をネット経由で閲覧できる(要登録)。
  - 遠隔複写:来館せず郵送で複写を申し込める(有料)。

- **大学図書館**
  - 所属者:J-STAGE有料分、各出版社の電子ジャーナル、商用DBに学内アクセス。
  - 学外者:多くの大学図書館は紹介状や直接来館で閲覧可(複写は可、
    電子ジャーナルの学外者利用は契約上不可のことが多い)。CiNii で所蔵を確認。

- **公共図書館**
  - 商用新聞記事DB(日経テレコン、ヨミダス、聞蔵II等)を館内端末で提供する館がある。
  - 国会図書館の「図書館向けデジタル化資料送信サービス」参加館では、
    NDLデジタル化資料の図書館送信分を閲覧・複写できる。
  - レファレンスサービスで、求める文献の所在調査を依頼できる。

- **商用DB(図書館・社内契約で利用されることが多い)**
  - 日経テレコン、ELNET、各社の記事DB、判例DB(D1-Law等)、医中誌Web 等。
  - 社内に契約があるかをまず確認。なければ図書館経由を検討。
# 多くの契約DBは認証が必要。ここではアクセスの「型」を示す。

class LibraryAccess:
    """図書館・契約データベースへのアクセスパターン。"""

    # 主な契約DBのエンドポイント(日本で使われる例)
    DATABASES = {
        'ndl_digital': {
            'base': 'https://dl.ndl.go.jp',
            'auth': 'registered_user',          # 登録利用者(送信サービス)
            'content': '図書・雑誌・新聞・官報のデジタル化資料'
        },
        'nikkei_telecom': {
            'base': 'https://t21.nikkei.co.jp',
            'auth': 'institutional',            # 図書館・社内契約
            'content': '日経各紙・企業情報・人事情報'
        },
        'cinii': {
            'base': 'https://cir.nii.ac.jp',
            'auth': 'open',                     # 検索は無料
            'content': '論文・研究データ・博士論文・図書/雑誌'
        },
        'jstage': {
            'base': 'https://www.jstage.jst.go.jp',
            'auth': 'open_or_institutional',    # 多くはOA、一部は契約
            'content': '国内学協会誌'
        },
    }

    @staticmethod
    def get_ndl_access_methods():
        """国立国会図書館デジタルコレクションの利用方法。"""
        return {
            'internet': 'インターネット公開分は誰でも閲覧可',
            'personal_send': '個人向けデジタル化資料送信サービス(要登録利用者)',
            'library_send': '図書館向け送信参加館の館内で閲覧・複写',
            'remote_copy': '遠隔複写(郵送、有料)',
            'note': '対象範囲は資料の著作権状況により異なる。最新の対象一覧を確認する'
        }

# 図書館間貸借・文献複写(ILL)のワークフロー
def request_via_ill(paper_info: dict, library_email: str) -> str:
    """文献複写(ILL)の依頼文を生成する。

    所属大学・公共図書館・NDLの相互貸借/複写で、ほぼあらゆる論文を入手できる。
    所要日数:おおむね数日〜2週間程度(実費は要負担)。
    """

    request = f"""
    文献複写・相互貸借 依頼

    論文タイトル: {paper_info.get('title')}
    著者: {paper_info.get('authors')}
    掲載誌: {paper_info.get('journal')}
    発行年: {paper_info.get('year')}
    DOI: {paper_info.get('doi')}
    巻/号: {paper_info.get('volume')}/{paper_info.get('issue')}
    ページ: {paper_info.get('pages')}

    依頼者連絡先: {library_email}
    """

    return request.strip()

地域制限コンテンツとVPN

VPNが適切な場面

## 記者・調査者にとって正当なVPNの用途

### 適切:
- 海外・地域限定のニュース源にアクセスする
- あるコンテンツが他国でどう表示されるかを確認する
- 検閲を回避する(文脈による)
- 取材源との通信を保護する
- ジオターゲティングされたコンテンツを検証する

### 不適切:
- 正当なアクセス制御を回避する
- 契約上閲覧が禁じられたコンテンツにアクセスする
- 自分のアカウントに課された停止・ブロックを回避する

VPNサービスの選び方

VPNの評価は陳腐化しやすい。プライバシー方針・運営体制・監査結果は毎年変わり、近年は大手の統合も進んだ(例:ExpressVPN は Kape Technologies 傘下、Surfshark は Nord と統合)。固定のランキング表を本書に持たせるより、利用直前に独立系のレビューを確認する。

  • PrivacyGuides(privacyguides.org/ja/vpn/)…… 評価基準を明示した、プライバシー重視のコミュニティ推奨。
  • Tor Browser(torproject.org)…… 匿名性最重視の選択肢。無料で、プロバイダを信頼する必要がない。低速だが、取材源の保護や本当に機微な調査にはこれが適切。

地域制限テスト(取材源保護ではない用途)であれば、月額数百〜千円台の主要VPNは速度面で大差ない。宣伝文句ではなく、運営の所在地(自分の脅威モデル)と最近の独立監査で選ぶ。

地域制限の状況を確認する

import requests

def check_geo_access(url: str, regions: list = None) -> dict:
    """URLが地域ごとにアクセス可能かを確認する。

    実際の地域別テストにはVPN/プロキシが必要。ここでは概念を示す。
    """

    regions = regions or ['US', 'UK', 'EU', 'JP', 'AU']

    results = {}

    # 直接アクセスのテスト
    try:
        response = requests.get(url, timeout=10)
        results['direct'] = {
            'accessible': response.status_code == 200,
            'status_code': response.status_code
        }
    except Exception as e:
        results['direct'] = {'accessible': False, 'error': str(e)}

    # 地域別テストにはVPN/プロキシ連携が必要
    # results[region] = test_through_proxy(url, region)

    return results

アーカイブ経由のアクセス

Archive.today で有料記事を探す

import requests
from urllib.parse import quote, unquote

def get_archived_article(url: str) -> str:
    """Archive.today から記事を取得する。

    Archive.today は JavaScript を描画して結果を保存するため、
    全文がキャプチャされることが多い。法的位置づけは管轄により異なる。
    ペイウォール回避のための機械的・常用的な利用は規約違反になりうるため、
    その場限りの調査アクセスに限って使う。

    運用メモ(2026年): 2025年10月に FBI が archive.today の登録業者に
    召喚状を出し、Wikipedia は 2026年2月に引用源としての受け入れを停止した。
    JS描画コンテンツの取得には依然有用だが、法的・引用用途では
    Wayback Machine を優先する。
    """
    from urllib.parse import urljoin

    # /newest/<url> は最新スナップショット(またはレート制限時はCAPTCHA)に302する。
    # Location ヘッダを明示的に検査するためリダイレクトを無効化する。
    # quote(unquote(url), ...) で既存の %xx を正規化し二重エンコードを防ぐ。
    search_url = f"https://archive.ph/newest/{quote(unquote(url), safe='')}"

    try:
        response = requests.get(
            search_url,
            timeout=30,
            allow_redirects=False,
            headers={'User-Agent': 'Mozilla/5.0 (research-archiver)'},
        )
        if response.status_code in (301, 302, 303, 307, 308):
            location = response.headers.get('Location')
            if location:
                resolved = urljoin(response.url, location)
                # アーカイブページに着地した場合のみ返す(CAPTCHAは除外)
                if 'archive.' in resolved and '/newest/' not in resolved:
                    return resolved
        return None
    except Exception:
        return None

Wayback Machine で過去版にアクセスする

def get_wayback_article(url: str) -> str:
    """Wayback Machine から記事を取得する。

    完全に合法 … Internet Archive は図書館として認知されている。
    ペイウォール導入前の古い版が残っていることがある。
    (日本語資料は国立国会図書館のウェブアーカイブ WARP も併用するとよい)
    """

    # 取得可能性を確認する
    api_url = "https://archive.org/wayback/available"

    try:
        response = requests.get(api_url, params={'url': url}, timeout=10)
        data = response.json()

        snapshot = data.get('archived_snapshots', {}).get('closest', {})

        if snapshot.get('available'):
            return snapshot['url']

        return None
    except Exception:
        return None

日本のウェブ:国立国会図書館の WARP(インターネット資料収集保存事業)(warp.da.ndl.go.jp)は、官公庁・自治体・大学等のサイトを定期収集している。消えた公的サイトの過去版を探すときに有用。

Google Scholar / CiNii での無料版探し

無料版を見つける戦略

def find_free_version(title: str) -> list:
    """論文の無料版を見つける検索戦略。

    Google Scholar はしばしば次へリンクする:
    - 著者個人サイトのコピー
    - 機関リポジトリ版
    - ResearchGate/Academia.edu のアップロード
    日本語論文は CiNii Research・J-STAGE・機関リポジトリも併せて当たる。
    """

    strategies = [
        {
            'method': 'scholar_all_versions',
            'description': '結果下の「すべての N 個のバージョン」をクリック',
            'success_rate': '中〜高'
        },
        {
            'method': 'scholar_pdf_link',
            'description': '結果の右側にある [PDF] リンクを探す',
            'success_rate': '中'
        },
        {
            'method': 'cinii_jstage',
            'description': 'CiNii Research / J-STAGE で和文タイトルを検索し本文リンクを辿る',
            'success_rate': '日本語論文では高'
        },
        {
            'method': 'repository',
            'description': '機関リポジトリ(IRDB)で著者最終稿を探す',
            'success_rate': '中〜高'
        },
        {
            'method': 'title_plus_pdf',
            'description': f'「{title}」 filetype:pdf で検索',
            'success_rate': '中'
        },
        {
            'method': 'author_site',
            'description': '著者の研究者ページ(researchmap 等)を探す',
            'success_rate': '中'
        },
        {
            'method': 'preprint_servers',
            'description': 'arXiv, SSRN, bioRxiv, Jxiv(JST和文プレプリント)を検索',
            'success_rate': '分野による'
        }
    ]

    return strategies

著者への直接依頼

論文を依頼するメールのひな形

def generate_paper_request_email(paper: dict, requester: dict) -> str:
    """著者に論文を依頼する丁寧なメールを生成する。

    研究者は自分の成果を共有してくれることが多く、成功率は高い。
    日本では取材目的であることを明記し、引用・出典明記を約束するとよい。
    """

    template = f"""
件名:論文ご恵与のお願い({paper['title'][:40]}…)

{paper['author_last_name']} 先生

突然のご連絡を失礼いたします。{requester['institution']} の
{requester['name']}と申します。{requester['research_area']}について
取材・調査をしております。

先生が{paper['journal']}({paper['year']})に発表された
「{paper['title']}」を拝見し、現在進めております
{requester['specific_project']}に深く関わる内容と存じます。

恐れ入りますが、所属を通じて本文にアクセスできず、拝読がかないません。
差し支えなければ、論文の写し(PDF等)をご共有いただけないでしょうか。

引用・参照の際は、出典を明記いたします。
お忙しいところ恐縮ですが、ご検討いただけますと幸いです。

{requester['name']}
{requester['title']}
{requester['institution']}
{requester['email']}
"""

    return template.strip()

コンテンツ種別ごとのアクセス戦略

ニュース記事

## ニュース記事のアクセス戦略

1. **社内・図書館の契約記事DB** … 日経テレコン、ヨミダス、聞蔵II、毎索、
   ELNET 等。まず社内契約を確認し、なければ図書館の館内端末を使う。
2. **リーダーモード** … ソフトペイウォールの一部で有効
3. **Wayback Machine / NDL WARP** … 古い記事・消えた公的サイト
4. **Archive.today** … 最近の記事(グレーゾーン、引用には使わない)
5. **検索エンジンのキャッシュ・関連配信** … 通信社配信記事は他媒体にも載る

## コツ:
- 通信社(共同・時事)の配信記事は、提携各紙・ポータルにも掲載される。元記事が
  有料でも同内容が無料で読める場合がある。
- 公的機関の発表(プレスリリース・記者発表資料)は、有料記事と同じ一次情報を
  含むことが多く、直接引用できる。各府省・自治体・企業のIR/広報ページを当たる。
- 公共図書館の利用者カードで記事DBやデジタル資料が使える場合がある。
- 無料枠(月数本)をクッキー削除でリセットする手は、配信元の規約に反しうるので常用しない。
- Archive.today のスナップショットはその場の調査用に留め、最終原稿の出典には
  元記事を使う(上記のFBI召喚状・Wikipedia方針変更の注意も参照)。

学術論文

## 学術論文のアクセス戦略(おすすめの順)

1. **CiNii Research** … 日本語論文はまずここで本文リンクを探す
2. **J-STAGE** … 国内学協会誌。多くがOAで全文無料
3. **Unpaywall** … DOIが分かる海外論文は最初に自動チェック
4. **OpenAlex** … 2.5億件超。OAリンク付き。MAG廃止後の事実上の標準
5. **Google Scholar** … 「すべてのバージョン」「[PDF]」を確認
6. **機関リポジトリ(IRDB)** … 著者最終稿(グリーンOA)を探す
7. **著者の研究者ページ** … researchmap、所属大学のページ
8. **プレプリント** … arXiv, SSRN, bioRxiv, medRxiv, Jxiv(JST和文)
9. **ResearchGate / Academia.edu** … 著者アップロード版。ただし出版社の削除要請で
   「全文をリクエスト」表示になっていることが増えている
10. **CORE.ac.uk** … 2.9億件超のOA論文
11. **PubMed Central / 医中誌Web** … 医学・生命科学
12. **著者へ直接依頼** … 成功率が高い
13. **図書館の文献複写(ILL)/NDL遠隔複写** … 実費でほぼ何でも入手可

図書・報告書

## 図書・報告書のアクセス戦略

1. **国立国会図書館デジタルコレクション** … 図書・雑誌・古典籍・官報。
   インターネット公開分は無料、それ以外も送信サービス・図書館送信で
2. **NDLサーチ / CiNii Books** … 全国の所蔵を確認し、近隣図書館・ILLへ
3. **各府省・自治体・団体の公式サイト** … 白書・報告書・調査資料は無料公開が多い
4. **Google ブックス** … プレビューや全文が見られることがある
5. **青空文庫** … 著作権の切れた文学作品(パブリックドメイン)
6. **HathiTrust** … 海外学術図書館コンソーシアム(英語資料)
7. **大学リポジトリ** … 紀要・博士論文・研究報告
8. **図書館の相互貸借(ILL)** … 現物の借受・章単位の複写

法的・倫理的な枠組み

以下は概説であり法的助言ではない。具体の可否は校閲・法務に確認する。

日本の著作権法での主な手がかり

## 報道・調査で関係しやすい規定(著作権法。条番号は要確認)

1. **引用(第32条)**
   - 公正な慣行に合致し、報道・批評・研究等の正当な範囲内であること
   - 主従関係(自分の記述が主、引用が従)が明確であること
   - 引用部分を明瞭に区別し、出典を明示すること
   - 「必要な範囲」を超える全文転載は引用にあたらない

2. **私的使用のための複製(第30条)**
   - 個人・家庭内など限られた範囲で自分が使うための複製
   - 業務上の調査資料としての複製がどこまで含まれるかは慎重に判断する
   - 違法アップロード物と知りながらのダウンロードは例外から外れる場合がある

3. **図書館等における複製(第31条)**
   - 図書館が利用者の調査研究のため、著作物の一部を一人につき一部提供できる等
   - NDLや大学・公共図書館の複写サービスはこの枠組みによる

4. **時事の事件の報道のための利用(第41条)等**
   - 事件を構成し、または事件の過程で見聞される著作物を、報道に必要な範囲で利用できる
   - 政治上の演説・裁判手続での陳述など、別途利用が認められる類型もある

## 報道の位置づけ:
報道目的は引用・時事報道の規定で一定の保護があるが、記事・論文の全文転載は
原則として正当化されない。事実そのもの(数値・出来事)には著作権が及ばないため、
自分の言葉で再構成して報じるのが基本。

注:日本の著作権法には米国のような包括的フェアユース規定はない。上記の個別の権利制限規定(引用・私的複製・図書館・時事報道等)に当てはまるかを個別に判断する。

調査者のためのベストプラクティス

## 倫理的なアクセスの指針

### すること:
- まず図書館・正規の資源を使う(エコシステムを支える)
- 回避策より先にオープンアクセス・ツールを試す
- 著者に直接依頼する(著者は引用されたい)
- どの経路で入手したかにかかわらず、出典を正しく明記する
- よく使う情報源は購読・契約の予算を確保する

### しないこと:
- ログイン情報を共有する
- データベースを機械的に一括ダウンロードする
- 回避して得たコンテンツを商用利用する
- 有料コンテンツを再配布する
- 回避手段だけに頼る

取材実務上の注意

  • 入手経路(誰に依頼したか、どの図書館を使ったか)を取材メモに残し、出典の追跡可能性を確保する。
  • 入手した論文・記事は、引用の範囲を守って報じる。全文転載・PDFの再配布はしない。
  • 締切から逆算する。ILL・NDL遠隔複写・著者依頼は数日〜2週間かかるため、早めに動く。
  • 取材源の保護が絡む調査では、検索・アクセスの痕跡(IP・アカウント)に配慮し、必要に応じて Tor 等を使う。

出典・ライセンス(帰属表示)

本スキルは research-toolkit / claude-skills-journalism(by Joe Amditis, MIT License, © 2025 Joe Amditis, https://github.com/jamditis/claude-skills-journalism )の research-toolkit/content-access を 原典の構成(アクセス優先順位・OAツール群・図書館/VPN/アーカイブ・コンテンツ種別戦略・法/倫理の枠組み)に沿って日本語化し、 米国固有のDB・フェアユース等を日本の学術資源(CiNii Research・J-STAGE・国立国会図書館・機関リポジトリ)および日本の著作権法に再構成したものです。 米国固有の参考リンク・制度は日本の相当物に置き換え、該当しない部分は割愛しています。 原典の倫理方針(違法な回避手段を扱わない)は保持しています。第三者の著作物本文は転載していません。原作者の公認・推奨を受けたものではありません。 MIT ライセンス全文は配布元リポジトリを参照。

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

ai-bun-shuusei

無料概要あり

AIが生成しがちな「いかにもAIっぽい」日本語の定型表現・水増し・空疎な形容を取り除き、読者の信頼を損なわない自然な文章に直す。記事・原稿・プレスリリース・告知・SNS投稿など、AIの支援を受けて書いた文章を公開前に点検するときに使う。「AI臭を消したい」「文章が機械っぽい」「人が書いたように直したい」などの依頼で使う。

sgbms1/ja-news-skills32026年7月14日 更新

data-api-catalog

無料概要あり

取材・調査・データ報道で使える無料データ源(API)のカタログ。政府統計(e-Stat)、地域経済(RESAS)、気象(気象庁)、法令(e-Gov)、企業開示(EDINET)、書誌・国会会議録(国立国会図書館)、地理空間(国土地理院)、汎用の国際API(GDELT・Open-Meteo・Wayback等)を用途別に整理し、登録要否・利用条件・選び方を示す。「無料のデータ源が欲しい」「このテーマのAPIは?」「公的データをプログラムで取りたい」といった依頼で使う。

sgbms1/ja-news-skills32026年7月14日 更新

data-hodo

無料概要あり

データ報道(データジャーナリズム)の手順を支援する。データセットの分析、グラフや地図の作成、雑然としたデータのクリーニング、統計の算出、データに基づく記事の構築に使う。「e-Statのデータを分析したい」「人口あたりで比較したい」「グラフが誤解を招かないか確認したい」「統計から記事を組み立てたい」などの依頼で使う。記者・編集者・調査担当向け。

sgbms1/ja-news-skills32026年7月14日 更新

digital-archive

無料概要あり

取材で集めた資料(開示文書・記事・SNS・反訳など)をデジタルアーカイブ化し、AIで要約・分類・エンティティ抽出・関係づけ(知識グラフ化)して横断検索できる調査基盤を作るための手引き。「取材資料を整理したい」「大量の開示文書をデータベース化したい」「人物・組織・出来事の関係を可視化したい」「調査報道のアーカイブを作りたい」などの依頼で使う。

sgbms1/ja-news-skills32026年7月14日 更新

fact-check

無料概要あり

発言・記事・SNS投稿などの主張を体系的にファクトチェックする。主張の抽出、検証可能な命題への分解、根拠の収集、当事者への確認、判定(レーティング)、記録、訂正対応までを支援する。掲載前の裏取り、ファクトチェック記事の作成、編集部の検証手順づくりに使う。「ファクトチェックして」「この発言は本当か」「裏取りの手順を」などの依頼で使う。

sgbms1/ja-news-skills32026年7月14日 更新

fact-checker-flo

無料概要あり

テキスト・記事・ウェブページの内容を、厳密な検証方法論にもとづいてファクトチェックする。検証可能な主張を抽出し、信頼できる一次情報・公的データ・検証機関と突き合わせ、各主張の真偽と確からしさ(確信度)、情報源の信頼度スコアを評価し、根拠つきの検証レポートにまとめる。「この主張を検証して」「記事をファクトチェックして」「情報源の信頼性を見て」「真偽を判定して」「誤情報か確かめて」などの依頼で使う。付属の references(信頼できる情報源/検証方法論)を参照する検証重視版。

sgbms1/ja-news-skills32026年7月14日 更新

sgbms1 のスキルをすべて見る

このスキルの問題を報告する