# Wikipedia iOS

## 概要

Wikipedia iOSは、Wikimedia Foundationが開発・維持する公式Wikipedia iOSアプリケーションです。世界中のWikipediaコンテンツをiOSデバイスで閲覧・検索・保存できるネイティブアプリで、オフライン閲覧、読書リスト、位置情報に基づく近くの記事発見など多彩な機能を提供しています。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| 記事閲覧 | Wikipediaの記事をネイティブUIで快適に閲覧 |
| 検索 | 記事のフルテキスト検索、サジェスト機能 |
| Explore Feed | パーソナライズされたコンテンツフィード（今日の記事、注目記事、今日の出来事など） |
| 読書リスト | 記事を保存してオフラインで閲覧可能 |
| Places（近くの記事） | 現在地や地図上の位置に基づく記事発見 |
| 通知センター | Wikipediaアカウントの通知を管理 |
| トークページ | 記事のディスカッションページの閲覧・投稿 |
| 編集機能 | Wikipediaの記事を直接編集 |
| ウィジェット | ホーム画面ウィジェット（今日の写真、注目記事、Top Read） |
| テーマ・外観 | ダークモード、セピア、文字サイズ調整など |
| 多言語対応 | 300以上の言語版Wikipediaをサポート |

## 技術スタック

### コア

- フレームワーク: UIKit / SwiftUI / WidgetKit
- 言語: Swift / Objective-C
- 最小iOS: iOS 16.0
- Xcode: 16.0以上
- データ永続化: Core Data

### 主要ライブラリ

- SDWebImage: 画像の非同期読み込みとキャッシング
- Mantle: JSONパースとモデルマッピング
- FLAnimatedImage: GIFアニメーション表示
- NYTPhotoViewer: フルスクリーン画像ビューア
- SwiftLint: Swiftコードのリンティング
- ClangFormat: Objective-Cコードのフォーマット
- Fastlane: CI/CDとApp Store配信自動化

### Swift Packages

- WMFData: データレイヤーのSwift Package
- WMFComponents: 再利用可能なUIコンポーネントのSwift Package

## ディレクトリ構成

```
wikipedia-ios-main/
├── Wikipedia/                    # メインアプリターゲット
│   ├── Code/                     # アプリケーションコード（ViewController、Model等）
│   ├── Images.xcassets/          # 画像アセット
│   ├── Localizations/            # 翻訳ファイル
│   └── Resources/                # その他リソース
├── WMF Framework/                # 共有フレームワーク（メインアプリ・Extension共通）
│   ├── Cache.xcdatamodeld/       # キャッシュ用Core Dataモデル
│   ├── Wikipedia.xcdatamodeld/   # メインCore Dataモデル
│   ├── Remote Notifications/     # リモート通知関連
│   └── Event Platform/           # イベントトラッキング
├── WMFComponents/                # UIコンポーネントSwift Package
├── WMFData/                      # データレイヤーSwift Package
├── Widgets/                      # ホーム画面ウィジェット
├── ContinueReadingWidget/        # 読書継続ウィジェット
├── NotificationServiceExtension/ # プッシュ通知処理Extension
├── Wikipedia Stickers/           # iMessageステッカーパック
├── WikipediaUnitTests/           # ユニットテスト
├── WikipediaUITests/             # UIテスト
├── scripts/                      # ビルド・セットアップスクリプト
├── fastlane/                     # Fastlane設定
├── docs/                         # ドキュメント
└── ci_scripts/                   # CI/CDスクリプト
```

## セットアップ

### 必要条件

- macOS
- Xcode 16.0以上
- Homebrew（自動インストール可）

### インストール手順

1. リポジトリをクローン
   ```bash
   git clone https://github.com/wikimedia/wikipedia-ios.git
   cd wikipedia-ios
   ```

2. セットアップスクリプトを実行
   ```bash
   ./scripts/setup
   ```

   このスクリプトは以下を自動的にセットアップします：
   - Homebrewのインストール（未インストールの場合）
   - SwiftLintのインストール
   - ClangFormatのインストール
   - Gitフック（pre-commit）の設定

3. Xcodeでプロジェクトを開く
   ```bash
   open Wikipedia.xcodeproj
   ```

4. **Wikipedia**スキームを選択してビルド・実行

## 開発

### Linting

- **Swift**: SwiftLintを使用。設定は`.swiftlint.yml`と`.swiftlint-autocorrect.yml`
- **Objective-C**: ClangFormatを使用。設定は`.clang-format`

### フォーマット

- インデント: Xcodeデフォルトの4スペース
- Objective-Cコードはpre-commitフックで自動フォーマット
- Swiftコードは一部SwiftLintで自動修正

### テスト実行

```bash
# Xcode経由でテスト実行
# Cmd+U または Product → Test

# テストを実行するには、デバイスの言語・地域設定を en-US にする必要があります
```

### スキーム

| スキーム | 用途 |
| --- | --- |
| Wikipedia | 本番環境向け |
| Staging | ステージング環境（開発中機能含む） |
| Experimental | プロトタイプ・実験的機能のデモ |
| Local Page Content Service | ローカルサーバー接続用（デバッグ用） |
| RTL | 右から左（RTL）言語テスト用 |
| Performance Testing | パフォーマンステスト用（Release構成） |

### ログレベル

| 絵文字 | レベル |
| --- | --- |
| [speaker] | Verbose |
| [speech_balloon] | Debug |
| [information_source] | Info |
| [warning] | Warning |
| [rotating_light] | Error |

※ 通常はWarningとErrorのみがコンソールに出力されます

### 関連ドキュメント

- [開発プロセス](../process.md)
- [ローカライゼーション](../localization.md)
- [言語設定](../languages.md)
- [CI/CD](../ci.md)
- [Web開発](../web_dev.md)
- [URLスキーム](../url_schemes.md)
