このドキュメントは、Python Fletで開発するマルチプラットフォームアプリケーション用のプライバシーポリシーと利用規約のテンプレートを提供します。各ストアへの登録時や法的要件を満たすために必要な内容を含んでいます。実際の使用時には、アプリの具体的な内容に合わせてカスタマイズしてください。
# プライバシーポリシー
**最終更新日:** [日付を入力]
## はじめに
[アプリ名](以下、「本アプリ」といいます)は、[会社/開発者名](以下、「当社」といいます)によって提供されるサービスです。このプライバシーポリシーは、本アプリの利用を通じて収集される情報とその取り扱いについて説明します。
本アプリをご利用いただくことで、このプライバシーポリシーに記載された内容に同意したものとみなされます。本ポリシーの内容に同意されない場合は、本アプリの使用を中止してください。
## 収集する情報
当社は、以下のタイプの情報を収集することがあります:
### 自動的に収集される情報
- **デバイス情報**: デバイスの種類、オペレーティングシステム、ブラウザ情報など
- **利用情報**: アプリの使用頻度、使用機能、クラッシュレポートなど
- **ログデータ**: IPアドレス、アクセス日時、アプリ内での行動など
### ユーザーが提供する情報
- **アカウント情報**: 登録時に提供いただく名前、メールアドレス、パスワードなど
- **プロフィール情報**: ユーザープロフィールの一部として提供される情報
- **コンテンツ**: アプリ内で作成、アップロード、または共有するコンテンツ
- **通信**: サポートチームとのやり取りなど
### 位置情報
[位置情報を使用する場合]
本アプリは、[具体的な機能]を提供するために、お客様の位置情報を収集することがあります。位置情報の収集は、デバイスの設定からいつでも無効にすることができます。
[位置情報を使用しない場合]
本アプリは、お客様の位置情報を収集しません。
## 情報の利用方法
収集した情報は、以下の目的で利用されます:
- 本アプリのサービス提供および維持
- ユーザー認証およびアカウント管理
- カスタマーサポートの提供
- 本アプリの改善および新機能の開発
- 利用状況の分析とパフォーマンスの最適化
- セキュリティの確保および不正利用の防止
- 法的義務の遵守
## 情報の共有
当社は、以下の場合を除き、お客様の個人情報を第三者と共有することはありません:
- お客様の同意がある場合
- サービス提供に必要なパートナー企業との共有(これらの企業は当社のプライバシーポリシーと同等のデータ保護義務を負います)
- 法的要件に基づく場合(裁判所命令、法的手続き、政府機関からの要請など)
- 当社の権利、財産、安全、または当社のユーザーまたは公衆の権利、財産、安全を保護するために必要だと判断した場合
- 企業合併、買収、資産売却が発生した場合(その場合、プライバシーポリシーの変更についてお知らせします)
## データセキュリティ
当社は、お客様の情報を保護するために適切な技術的・組織的措置を講じています。ただし、インターネットやデータストレージのシステムは100%安全ではないため、絶対的なセキュリティを保証することはできません。
## データ保持
当社は、本プライバシーポリシーに記載された目的を達成するために必要な期間、またはお客様のアカウントが有効である期間、お客様の情報を保持します。法的義務を遵守するために必要な場合は、特定の情報をより長期間保持することがあります。
## お子様のプライバシー
本アプリは13歳未満のお子様を対象としていません。13歳未満のお子様から意図的に個人情報を収集することはありません。13歳未満のお子様に関する情報を収集していることが判明した場合、速やかにその情報を削除するための措置を講じます。
## お客様の権利
お客様は、ご自身の個人情報に関して以下の権利を有します:
- アクセス権:当社が保持するお客様の個人情報へのアクセスを要求する権利
- 訂正権:不正確または不完全な情報の訂正を要求する権利
- 削除権:特定の状況下で個人情報の削除を要求する権利
- 処理制限権:特定の状況下で個人情報の処理を制限するよう要求する権利
- データポータビリティの権利:構造化され、一般的に使用され、機械可読な形式でお客様の個人情報を受け取る権利
- 異議申立権:特定の状況下でお客様の個人情報の処理に異議を唱える権利
これらの権利を行使するには、下記の「お問い合わせ」セクションに記載されている連絡先までご連絡ください。
## Cookie(クッキー)とトラッキング技術
[Webアプリの場合]
本アプリは、ユーザーエクスペリエンスの向上、サービスの最適化、および分析目的のためにCookieおよび類似の追跡技術を使用することがあります。これらの技術は、ブラウザの設定から管理または無効化することができます。
## サードパーティサービス
本アプリは、機能提供のために以下のサードパーティサービスを利用しています:
- [サービス名1]: [簡単な説明と目的]
- [サービス名2]: [簡単な説明と目的]
これらのサービスには独自のプライバシーポリシーがあり、本ポリシーとは別に適用されます。各サービスのプライバシーポリシーを確認することをお勧めします。
## 国際データ転送
[国際データ転送がある場合]
当社は世界中でサービスを提供するため、お客様の情報が当初収集された国以外の国に転送、保存、処理されることがあります。データが転送される国の法律が、お客様の国の法律と同等のレベルのデータ保護を提供しない場合でも、当社は適切な保護措置を講じます。
## プライバシーポリシーの変更
当社は、このプライバシーポリシーを随時更新することがあります。変更があった場合、更新されたポリシーを本アプリ内で公表し、重要な変更がある場合は電子メールまたはアプリ内通知でお知らせします。変更後も本アプリを継続して使用することで、更新されたプライバシーポリシーに同意したものとみなされます。
## お問い合わせ
本プライバシーポリシーに関するご質問やご懸念、お客様の権利行使に関するリクエストは、以下の連絡先までお寄せください:
- Eメール: [メールアドレスを入力]
- 郵便: [住所を入力]
- 電話: [電話番号を入力]
[データ保護責任者を置いている場合]
データ保護責任者: [名前を入力]
連絡先: [連絡先を入力]
[特定の法域に基づく追加情報がある場合は、ここに追加]# 利用規約
**最終更新日:** [日付を入力]
## はじめに
これらの利用規約(以下、「本規約」といいます)は、[アプリ名](以下、「本アプリ」といいます)の利用に関する条件を定めるものです。本アプリは、[会社/開発者名](以下、「当社」といいます)によって提供されます。
本アプリをダウンロード、インストール、または使用することにより、お客様は本規約に拘束されることに同意したものとみなされます。本規約に同意されない場合は、本アプリをダウンロード、インストール、または使用しないでください。
## アカウント登録
[アカウント登録が必要な場合]
本アプリの一部の機能を利用するには、アカウントの作成が必要です。アカウント登録の際には、正確、完全、かつ最新の情報を提供する必要があります。
お客様は、ご自身のアカウント情報の機密性を維持し、アカウントでのすべての活動に責任を負うものとします。不正アクセスまたは使用に気づいた場合は、直ちに当社に通知してください。
[アカウント登録が不要な場合]
本アプリの利用にアカウント登録は必要ありません。
## 利用ライセンス
当社は、お客様に対し、本規約に従って本アプリをダウンロード、インストール、使用するための限定的、非独占的、譲渡不可能、取消可能なライセンスを付与します。このライセンスは、個人的、非商業的な目的に限定されています。
お客様は以下の行為を行うことはできません:
- 本アプリの全部または一部を複製、変更、配布、販売、貸与、リース、または二次ライセンスすること
- 本アプリのソースコードを抽出、リバースエンジニアリング、逆コンパイル、または逆アセンブルすること
- 本アプリから著作権表示やその他の所有権表示を削除すること
- 当社の事前の書面による同意なしに、本アプリを商業目的で使用すること
## 禁止事項
本アプリの使用に際し、お客様は以下の行為を行わないことに同意します:
- 違法な目的で本アプリを使用すること
- 第三者の権利を侵害すること
- ウイルス、トロイの木馬、ワーム、その他の悪意のあるコードを送信すること
- 本アプリの通常の運用を妨害または中断させること
- 本アプリへの不正アクセスを試みること
- 他のユーザーまたは第三者を嫌がらせ、虐待、脅迫、名誉毀損すること
- 不適切、攻撃的、または違法なコンテンツを送信または共有すること
- 本アプリのセキュリティ機能を回避または無効化すること
- 当社の明示的な許可なく本アプリにリンクすること
## ユーザーコンテンツ
[ユーザーがコンテンツを作成/アップロードできる場合]
本アプリを通じてお客様が作成、アップロード、または共有するコンテンツ(以下、「ユーザーコンテンツ」といいます)の所有権はお客様に帰属します。ただし、お客様は当社に対し、ユーザーコンテンツを使用、複製、配布、派生物の作成、表示、実行するための全世界的、非独占的、無償、サブライセンス可能、譲渡可能なライセンスを付与します。
お客様は、ご自身のユーザーコンテンツに関して以下の点を表明および保証します:
- お客様がユーザーコンテンツの所有者であるか、または使用、共有する権利を有していること
- ユーザーコンテンツが第三者の権利を侵害していないこと
- ユーザーコンテンツが適用されるすべての法律を遵守していること
当社は、本規約に違反するユーザーコンテンツを削除する権利を留保します。
## 知的財産権
本アプリおよびその内容、機能、デザインは、当社および/またはそのライセンサーの所有物であり、著作権、商標権、特許権、営業秘密、およびその他の知的財産権または所有権によって保護されています。
## 第三者のリンクとサービス
本アプリには、第三者のウェブサイト、サービス、またはコンテンツへのリンクが含まれることがあります。これらのリンクは情報提供のみを目的としており、当社がそれらの内容を管理または保証するものではありません。当社は、これらの第三者のウェブサイト、サービス、またはコンテンツの利用によって生じるいかなる損害についても責任を負いません。
## 免責事項と保証の否認
本アプリは「現状有姿」および「提供可能な状態」で提供され、明示的または黙示的を問わず、いかなる種類の保証も伴いません。当社は、本アプリが中断されず、タイムリーで、安全で、エラーがなく、またはお客様の要件を満たすことを保証しません。
法律で許容される最大限の範囲において、当社は、商品性、特定目的への適合性、権利侵害がないことについての保証を含むがこれに限定されない、すべての明示的または黙示的な保証を否認します。
## 責任の制限
法律で許容される最大限の範囲において、当社、その役員、取締役、従業員、代理人は、契約、不法行為(過失を含む)、またはその他の法理論に基づくかを問わず、本アプリの使用または使用不能から生じる直接的、間接的、偶発的、特別、結果的、または懲罰的損害について責任を負いません。これには、利益の損失、データの損失、営業権の損失、サービスの中断、コンピュータの損傷、またはシステム障害が含まれますが、これらに限定されません。
## 補償
お客様は、(a) 本アプリの使用、(b) 本規約の違反、(c) お客様のユーザーコンテンツ、または (d) 第三者の権利の侵害に起因または関連して生じるすべての請求、損害、損失、責任、費用、および支出(合理的な弁護士費用を含む)から、当社およびその役員、取締役、従業員、代理人を防御し、補償し、免責することに同意します。
## 準拠法と紛争解決
本規約は[国/地域]の法律に準拠し、それに従って解釈されます。本規約または本アプリに関連するすべての紛争は、[国/地域]の裁判所を専属的管轄裁判所とします。
## 規約の変更
当社は、本規約を随時変更する権利を留保します。変更があった場合、更新された規約を本アプリ内で公表し、重要な変更がある場合は電子メールまたはアプリ内通知でお知らせします。変更後も本アプリを継続して使用することで、更新された規約に同意したものとみなされます。
## 一般条項
### 完全合意
本規約は、本アプリの使用に関するお客様と当社の間の完全な合意を構成します。
### 権利放棄
当社が本規約のいずれかの条項を行使しなかった場合でも、その権利を放棄したとはみなされません。
### 可分性
本規約のいずれかの規定が法的強制力を持たないと判断された場合、残りの規定は引き続き有効です。
### 譲渡
お客様は、当社の事前の書面による同意なしに、本規約に基づく権利または義務を譲渡することはできません。当社は、本規約に基づく権利および義務を自由に譲渡することができます。
### 存続
その性質上、本規約の終了後も存続すべき条項は、そのような終了後も存続します。
## お問い合わせ
本規約に関するご質問やご懸念は、以下の連絡先までお寄せください:
- Eメール: [メールアドレスを入力]
- 郵便: [住所を入力]
- 電話: [電話番号を入力]ポリシーと規約テンプレートを実際のアプリに適用する際の注意点:
-
収集する情報の具体化:
- アプリが実際に収集する情報のみを記載する
- 使用している分析ツールやSDKが収集する情報を明記する
- 位置情報など、センシティブなデータの収集目的を具体的に説明する
-
サードパーティサービスの詳細化:
- 使用している外部サービス(Firebase, Google Analytics, Crashlyticsなど)を列挙
- 各サービスが収集するデータの種類と用途を記載
- 該当する場合、サードパーティのプライバシーポリシーへのリンクを提供
-
地域固有の法的要件への対応:
- EU: GDPR(一般データ保護規則)の要件に合わせた内容の追加
- 米国: CCPA(カリフォルニア州消費者プライバシー法)対応の内容
- その他の国・地域固有の法的要件の反映
-
プラットフォーム固有の記述:
- iOS/Android/Webそれぞれのプラットフォームでの固有のデータ収集・処理を記載
- 各ストアのガイドラインに準拠した内容であることを確認
-
アプリ機能に合わせた内容調整:
- 提供する機能やサービスに基づいた利用条件の設定
- サブスクリプション、課金、返金ポリシーなどの追加(該当する場合)
- ユーザーコンテンツに関する具体的な権利と制限の明記
-
サービスレベルの明確化:
- アプリの可用性やパフォーマンスに関する約束(SLA)
- メンテナンスや更新に関するポリシー
- サポート内容とサポート提供方法
-
終了条件の詳細化:
- アカウント停止・終了の条件
- サービス終了時のデータ処理ポリシー
- 払い戻しの条件(該当する場合)
-
法的枠組みの適合:
- 適用法律の確認と準拠法の適切な設定
- 紛争解決メカニズムの具体化
- 国際的なユーザーに対する法的配慮
アプリ内でのプライバシーポリシーと利用規約の表示・同意取得方法:
# /app/presentation/pages/policy_page.py
import flet as ft
import markdown
from app.core.config import settings
class PolicyPage(ft.UserControl):
def __init__(self, page: ft.Page, policy_type="privacy"):
super().__init__()
self.page = page
self.policy_type = policy_type # "privacy" または "terms"
def build(self):
# ポリシーファイルを読み込む
file_path = f"assets/policies/{self.policy_type}_policy.md"
try:
with open(file_path, "r", encoding="utf-8") as f:
policy_md = f.read()
except Exception as e:
policy_md = f"ポリシーの読み込みに失敗しました: {str(e)}"
# マークダウンをHTMLに変換
policy_html = markdown.markdown(policy_md)
# スクロール可能なコンテナでポリシーを表示
policy_container = ft.Container(
content=ft.Column([
ft.Text(
value=policy_html,
selectable=True,
),
]),
padding=20,
border_radius=10,
bgcolor=ft.colors.SURFACE,
expand=True,
scroll=ft.ScrollMode.AUTO
)
# 戻るボタン
back_button = ft.ElevatedButton(
text="戻る",
on_click=lambda e: self.page.go("/")
)
title = "プライバシーポリシー" if self.policy_type == "privacy" else "利用規約"
return ft.Column([
ft.AppBar(title=ft.Text(title), center_title=True),
policy_container,
ft.Container(
content=back_button,
alignment=ft.alignment.center,
padding=20
)
])
# /app/presentation/dialogs/policy_consent_dialog.py
import flet as ft
class PolicyConsentDialog(ft.UserControl):
def __init__(self, page: ft.Page, on_accept=None, on_decline=None):
super().__init__()
self.page = page
self.on_accept = on_accept or (lambda: None)
self.on_decline = on_decline or (lambda: None)
def build(self):
# 同意チェックボックス
self.privacy_checkbox = ft.Checkbox(
label="プライバシーポリシーに同意します",
value=False,
on_change=self._update_button_state
)
self.terms_checkbox = ft.Checkbox(
label="利用規約に同意します",
value=False,
on_change=self._update_button_state
)
# ポリシーリンク
privacy_link = ft.TextButton(
text="プライバシーポリシーを読む",
on_click=lambda e: self.page.go("/privacy-policy")
)
terms_link = ft.TextButton(
text="利用規約を読む",
on_click=lambda e: self.page.go("/terms-of-service")
)
# 同意ボタン
self.accept_button = ft.ElevatedButton(
text="同意して続ける",
on_click=lambda e: self._on_accept_click(),
disabled=True
)
# 拒否ボタン
decline_button = ft.TextButton(
text="同意しない",
on_click=lambda e: self._on_decline_click()
)
return ft.Card(
content=ft.Container(
content=ft.Column([
ft.Text("利用規約とプライバシーポリシー", size=20, weight=ft.FontWeight.BOLD),
ft.Text(
"当アプリを利用するには、以下の規約とポリシーに同意する必要があります。",
size=14
),
ft.Container(height=20),
ft.Row([self.privacy_checkbox, privacy_link]),
ft.Row([self.terms_checkbox, terms_link]),
ft.Container(height=20),
ft.Row([
decline_button,
self.accept_button
], alignment=ft.MainAxisAlignment.END)
]),
padding=20,
width=400
)
)
def _update_button_state(self, e):
"""チェックボックスの状態に基づいて同意ボタンの有効/無効を切り替え"""
self.accept_button.disabled = not (self.privacy_checkbox.value and self.terms_checkbox.value)
self.update()
def _on_accept_click(self):
"""同意ボタンクリック時の処理"""
# 同意情報を保存
from app.core.storage.storage_service import storage_service
storage_service.set("policy_accepted", "true")
# コールバックを呼び出し
self.on_accept()
def _on_decline_click(self):
"""拒否ボタンクリック時の処理"""
# コールバックを呼び出し
self.on_decline()# /app/core/app_initialization.py
import flet as ft
from app.core.storage.storage_service import storage_service
from app.presentation.dialogs.policy_consent_dialog import PolicyConsentDialog
async def check_policy_consent(page: ft.Page) -> bool:
"""ポリシー同意状況をチェックし、必要に応じて同意ダイアログを表示"""
# 既に同意済みかチェック
has_accepted = await storage_service.get("policy_accepted") == "true"
if has_accepted:
return True
# 同意完了フラグ
consent_complete = False
# 同意時のコールバック
def on_accept():
nonlocal consent_complete
consent_complete = True
# メインページに遷移
page.go("/")
page.update()
# 拒否時のコールバック
def on_decline():
nonlocal consent_complete
consent_complete = False
# アプリ終了メッセージを表示
page.dialog = ft.AlertDialog(
title=ft.Text("利用規約への同意が必要です"),
content=ft.Text("本アプリを利用するには、利用規約とプライバシーポリシーへの同意が必要です。同意いただけない場合、アプリを終了してください。"),
actions=[
ft.TextButton("アプリを終了", on_click=lambda e: page.window_close())
]
)
page.dialog.open = True
page.update()
# 同意ダイアログを表示
consent_dialog = PolicyConsentDialog(page, on_accept, on_decline)
page.add(consent_dialog)
# 同意結果を返す
return consent_completeプライバシーポリシーと利用規約の多言語対応:
/assets
/policies
/en
privacy_policy.md
terms_of_service.md
/ja
privacy_policy.md
terms_of_service.md
/fr
privacy_policy.md
terms_of_service.md
# その他の言語...
# /app/presentation/pages/policy_page.py の修正版
import flet as ft
import markdown
import os
from app.core.config import settings
from app.i18n.translation_context import translation_context
class PolicyPage(ft.UserControl):
def __init__(self, page: ft.Page, policy_type="privacy"):
super().__init__()
self.page = page
self.policy_type = policy_type # "privacy" または "terms"
def build(self):
# 現在の言語を取得
current_locale = translation_context.get_current_locale()
# ポリシーファイルパスを構築
file_name = "privacy_policy.md" if self.policy_type == "privacy" else "terms_of_service.md"
file_path = os.path.join("assets", "policies", current_locale, file_name)
# フォールバック用のパス(指定言語のファイルがない場合)
fallback_path = os.path.join("assets", "policies", "en", file_name)
# ポリシーファイルを読み込む
try:
with open(file_path, "r", encoding="utf-8") as f:
policy_md = f.read()
except FileNotFoundError:
# 指定言語のファイルがなければ英語版を使用
try:
with open(fallback_path, "r", encoding="utf-8") as f:
policy_md = f.read()
except FileNotFoundError:
policy_md = "Policy file not found."
except Exception as e:
policy_md = f"Error loading policy: {str(e)}"
# マークダウンをHTMLに変換
policy_html = markdown.markdown(policy_md)
# 言語切り替えドロップダウン
language_dropdown = ft.Dropdown(
options=[
ft.dropdown.Option("en", "English"),
ft.dropdown.Option("ja", "日本語"),
ft.dropdown.Option("fr", "Français"),
# その他の言語...
],
value=current_locale,
on_change=self._on_language_change
)
# タイトルの翻訳
title_key = "privacy.title" if self.policy_type == "privacy" else "terms.title"
title = translation_context.translate(title_key)
# 戻るボタンの翻訳
back_button_text = translation_context.translate("common.back")
# スクロール可能なコンテナでポリシーを表示
policy_container = ft.Container(
content=ft.Column([
ft.Text(
value=policy_html,
selectable=True,
),
]),
padding=20,
border_radius=10,
bgcolor=ft.colors.SURFACE,
expand=True,
scroll=ft.ScrollMode.AUTO
)
# 戻るボタン
back_button = ft.ElevatedButton(
text=back_button_text,
on_click=lambda e: self.page.go("/")
)
return ft.Column([
ft.AppBar(
title=ft.Text(title),
center_title=True,
actions=[language_dropdown]
),
policy_container,
ft.Container(
content=back_button,
alignment=ft.alignment.center,
padding=20
)
])
def _on_language_change(self, e):
"""言語変更時の処理"""
# 言語を変更
translation_context.set_locale(e.control.value)
# 同じページを再読み込み
self.page.go(self.page.route)アプリ公開前のポリシー・規約関連のチェックリスト:
- プライバシーポリシーが存在し、アプリ内から簡単にアクセスできる
- 利用規約が存在し、アプリ内から簡単にアクセスできる
- 初回起動時に同意を取得する仕組みがある
- 言語設定に応じた多言語対応の実装
- Google Play Console上でプライバシーポリシーのURLを設定
- 個人情報・機密情報を収集する場合、その詳細をPlay Consoleのデータ安全性セクションに記載
- 位置情報など特定の権限を使用する場合、その理由を明記
- 子供向けアプリの場合、特別な要件に対応(ファミリーポリシー準拠)
- COPPA(児童オンラインプライバシー保護法)への対応(該当する場合)
- App Store Connect上でプライバシーポリシーのURLを設定
- App Storeプライバシーラベルの正確な記入
- アプリが収集するデータの種類と使用目的の明示
- 「トラッキングに関するお願い」(ATT)への対応(該当する場合)
- 子供向けアプリの場合、特別な要件に対応
-
GDPR(EU一般データ保護規則)への対応
- 明示的な同意メカニズム
- データ主体の権利の説明
- データ保持期間の明示
- データ保護責任者の情報(必要な場合)
-
CCPA(カリフォルニア州消費者プライバシー法)への対応
- "Do Not Sell My Personal Information"オプション(該当する場合)
- 消費者の権利の説明
- 収集される情報のカテゴリとビジネス目的の説明
-
LGPD(ブラジル一般データ保護法)への対応
-
PIPL(中国個人情報保護法)への対応
-
APP(オーストラリアプライバシー原則)への対応
- 健康関連アプリ(HIPAA、ヘルスケア関連法規制)
- 金融関連アプリ(GLBA、金融サービス関連法規制)
- 教育関連アプリ(FERPA、教育関連法規制)
- 弁護士によるポリシーと規約のレビュー
- 定期的な更新スケジュールの設定
- 変更履歴の管理
- ユーザーへの変更通知メカニズム
以上のチェックリストを活用して、アプリのプライバシーポリシーと利用規約を適切に準備し、法的要件に準拠したアプリ公開を実現しましょう。各ストアのガイドラインや法的要件は定期的に更新されるため、最新の情報を確認することが重要です。