Go Lab の全体像:対局から上達までのワンストップ
Go Lab は単なる対局アプリではありません。「対局 → 終局 → 分析 → 検討 → 分岐 → 保存」という一連の流れが、アプリ1つで完結します。外部ツールへの書き出しや、別アプリへの持ち替えは一切不要。以下に、その全体像を示します。
① 対局
→
② 終局・死石判定
→
③ 分析
→
④ 検討・分岐
→
⑤ 保存・レポート
| フェーズ | できること | 関連章 |
| ① 対局 |
CPU/対人/オンライン。HumanSL の現代・古典棋風、Lv.1〜63、置石、白番開始に対応。 |
第1〜5章 |
| ② 終局 |
2連続パス・投了で終局。日本ルールでは死石判定フェーズを経て、AIが候補をハイライト。 |
第1章 |
| ③ 分析 |
形勢グラフ・候補手・地合い・思考時間の可視化。悪手分析(スコア低下/勝率低下)もワンタップ。 |
第6〜8章 |
| ④ 検討・分岐 |
盤面タップで分岐作成。PV ゴースト再生・一括適用・バリエーションツリーで全体俯瞰。 |
第7章 |
| ⑤ 保存・レポート |
棋譜を JSON でローカル保存。レポートは画像/PDF で共有。SGF 入出力対応。 |
第8章, 第9章 |
| + 学習 |
詰碁(ストリーク・複数正解)と、Live2D キャラクターによるレッスン(カリキュラム+操作型テスト)。 |
第10章, 第11章 |
このページの読み方: 各章の冒頭には「この章でできること」(製品紹介)を、その後に「技術仕様・内部仕様」を配置しています。Part I〜IV は製品の利用フロー順、最後の横断章はアプリ全体に共通する設計をまとめています。
第1章 対局モードとルール設定
F-101〜F-107
この章でできること: CPU・1台2人・オンラインの3モードで対局できます。日本・中国・韓国の3ルール、9路・13路・19路の全組み合わせに対応。置石や白番開始も可能で、終局後はAIが死石候補を自動ハイライトします。
1.1 対局モード
| モード | 概要 | ネットワーク |
| CPU対局 | KataGoエンジンと対局。難易度・モデル・手番を選択可能。 | 不要 |
| 1台2人対局 | 1台のデバイスを2人で交互に操作。 | 不要 |
| オンライン対局 | アプリ独自サーバーによるマッチング。レーティング変動あり(第4章)。 | 必要 |
1.2 ルールセットとコミ
| ルール | 地の計算 | コミ | 備考 |
| 日本ルール | 地 + アゲハマ | 6.5目 | 伝統的な日本方式。 |
| 中国ルール | エリア(石 + 地) | 7.5目 | 中国方式。コミが大きい。 |
| 韓国ルール | 地 + アゲハマ | 6.5目 | 日本ルールに類似。 |
1.3 盤サイズとルールの組み合わせ
| 盤サイズ | 日本ルール | 中国ルール | 韓国ルール |
| 9路盤 | ◯ | ◯ | ◯ |
| 13路盤 | ◯ | ◯ | ◯ |
| 19路盤 | ◯ | ◯ | ◯ |
全盤サイズ × 全ルールの組み合わせに対応しています。
1.4 置石(ハンディキャップ)と手番選択
- 置石(ハンディキャップ): SGF の AB/AW タグを解析し、「黒石 → 白石」の順に配置。置石ありの場合はSGF規約に従って手番を白に設定します。
- 手番選択: 対局設定画面で黒(先手)/白(後手)を選択可能。AI側は自動で反対の色になります。
- 1台2人対局: 手番選択は不要で、黒から交互に打ちます。
1.5 終局処理と死石判定
2連続パスまたは投了で終局します。日本・韓国ルール(地+アゲハマ方式)では、終局後に死石判定フェーズが入ります。
- AI候補の自動ハイライト: 終局直後、KataGoが「死んでいる石」の候補を自動で盤上にハイライトします。赤い半透明の円+赤い枠線で、視覚的に分かりやすく表示します。
- 感度スライダー: 画面下部のスライダーで、AIの判定感度(0.0〜0.9、デフォルト 0.3)を調整できます。「もっと候補を出したい」「絞りたい」を直感的に操作できます。
- 手動修正: ハイライトされた石をタップして、死活を手動で切り替えられます。AIの判定が実感と合わない時も安心です。
- 確定: 「Confirm」ボタンで死石を盤上から除去し、地の集計に進みます。除去された石はアゲハマとして両者に加算されます。
1.6 終局後アクション
- 結果モーダル: 勝敗、地の内訳(黒地・白地・アゲハマ・コミ・合計)、死石数が表示されます。
- 投了の扱い: 投了時は「黒/白の投了勝ち」を専用文言で表示。地の内訳は省略され、勝者と理由のみシンプルに提示されます。
- 新規対局への導線: 結果モーダルの「New Game」ボタンから、即座に次の対局へ進めます。
— 01 —
第2章 CPU対局の難易度制御(Lv.1〜63)
F-108
この章でできること: CPUの強さをLv.1からLv.63までの63段階から選べます。入門者からプロ級まで、自分のレベルに合った相手と対局できます。
2.1 難易度と内部パラメータの関係
難易度は単純なVisits数の増減ではなく、KataGoの推論結果に対して意図的なノイズ(ランダム性やミス)を加えることで実現されています。
- Visits: 読みの深さ。
- Random Rate: 最善手以外の手をランダムに選ぶ確率。
- Mistake Rate: 明らかな悪手を打つ確率。
- Is Weakening: 弱体化処理を行うかどうかのフラグ。
2.2 レベル帯ごとの傾向
| レベル帯 | 強さの目安 | 内部挙動 |
| Lv.1〜Lv.10 | 入門〜初級 | Random RateとMistake Rateが高く、意図的に悪手を打つ頻度が高い。 |
| Lv.11〜Lv.25 | 中級 | ミス率が減少。Visits数も徐々に増加。 |
| Lv.26〜Lv.40 | 上級 | ミスがほとんどなくなり、読みの深さが増す。 |
| Lv.41〜Lv.63 | 高段〜プロ級 | 弱体化処理なし。KataGoの純粋な推論結果に近い。 |
— 02 —
第3章 HumanSL(人間らしいAI)
F-109, F-110
この章でできること: 「最善手」ではなく「指定した級位・段位の人間が打ちそうな手」を選ぶAIです。現代棋風/古典棋風を選べ、対局用と分析用で別々の棋力を設定できます。
3.1 HumanSLの技術的特徴
- 単一モデルによる多段級対応: 棋力帯ごとに別モデルを用意するのではなく、1つのモデルに対して「段級位」や「時代」を条件として入力。任意の強さの着手確率分布を出力します。
- プロファイル:
rank_20kからrank_9dまでの現代プロファイルと、preaz_5kなどの古典プロファイルが存在します。
- 探索なしでの利用: 探索(Visits)なしでもそれなりの精度で人間らしい手を選べますが、トップ人間レベルに到達するには探索が必要です。
3.2 現代棋風と古典棋風の2系統
| 系統 | プリフィックス | 特徴 | 使いどころ |
| 現代棋風 |
rank_20k 〜 rank_9d |
現代の人間プレイヤーの棋譜で学習。AI時代の合理的な着手感覚を再現。 |
「今どきの人間らしい手」で練習したい時 |
| 古典棋風 |
preaz_20k 〜 preaz_9d |
AlphaGo以前の人間の棋譜で学習。布石の自由度が高く、旧来のスタイル。 |
「AI以前の人間らしい手」を体験したい時、古典棋書の感覚を味わいたい時 |
3.3 対局用モデルと分析用モデルの分離
Go Lab では「対局用」と「分析用」で、使用モデルと HumanSL プロファイルを別々に設定できます。
- 対局用モデル: CPU対局の相手として使うモデル。HumanSL を選択した場合は「対局用プロファイル」を別途指定。
- 分析用モデル: 検討モード・形勢判断・レポート生成で使うモデル。より精度の高いモデル(High / HumanSL)を選ぶのがおすすめ。
使い分けの例: 「対局相手は HumanSL の15級(人間らしい手)」「分析は High モデル(b18c384nbt)で正確に」——という組み合わせが可能です。HumanSL で対局し、その対局を高精度モデルで振り返る、という学習サイクルが実現します。
なお、HumanSL を対局用に選んだ場合、分析用には b6c96(Light)を選べません(精度差が大きすぎるため)。分析用は b18c384 または HumanSL から選択します。
注意点
HumanSLは「最善手」を指すわけではないため、形勢グラフが通常のKataGoよりも不安定になる傾向があります。精度の高い分析が必要な場合は、Highモデル(b18c384nbt)を使用してください。
— 03 —
第4章 オンライン対局
F-111
この章でできること: アプリ独自サーバー経由で、世界中のプレイヤーとリアルタイム対局できます。対局結果に応じてレーティングが変動し、ランキング上位を目指せます。
4.1 マッチングとレーティング
- クイックマッチ: 盤サイズ・レーティング帯を指定して、自動マッチング。
- レーティング: Glicko-2ベースのレーティングが変動。勝敗・相手の強さに応じて適切に更新されます。
- ニックネーム: 対局前に自由に設定可能。変更は即座にサーバーへ反映されます。
- リーダーボード: 上位ランカーを一覧表示。シーズン制で、シーズンごとにレーティングがリセットされます。
4.2 対局の流れ
- 対局設定で「Online」を選択し、クイックマッチを開始。
- マッチ成立で、3.5秒の開始演出(カウントダウン)。
- 対局中は、双方の指し手がリアルタイムに同期されます。
- 終局(2連続パス/投了)で、勝敗とレーティング変動が確定。
— 04 —
第5章 OGS連携
F-112, F-113, F-114
この章でできること: 世界最大級のオンライン囲碁サーバー「OGS」と連携。観戦(Watch)と対局(Play)の両方をサポートし、観戦した棋譜はSGFとして保存して分析できます。
5.1 OGS観戦(Watch)
- 匿名認証: アカウント未登録でも観戦・一覧取得が可能。ログイン不要の観戦体験を提供します。
- ライブ対局リスト: 対局中のゲームを最大100件取得し、30秒ごとに自動更新。手動更新ボタンも用意。
- ライブ対局数イベント: ライブ対局数の変化を購読し、増加時のみ一覧を再取得。減少時は30秒タイマーに任せ、さらに10秒のスロットルを敷いてサーバー負荷を抑制しています。
- サムネイル購読: 画面に表示中の対局IDだけを購読し、スクロールで消えたら購読解除。0.5秒のdebounceでまとめて反映し、スクロール時の過剰購読を防止します。
- gamedataウォッチドッグ: 観戦開始後、4秒ごとに「gamedataが届いているか」を確認。10秒以上届かなければ再購読を最大10回まで自動リトライ。
- 時計表示: 「手番側だけ、サーバーから受信した時刻からの経過時間を減算」する方式。RTTの半分(最大3秒)を補正値として使用。
- 観戦中のAI形勢評価: 終局後、評価セクションをタップすると各手をKataGoで評価し、スコア配列を蓄積してリアルタイムにグラフを更新します。
- 棋譜保存: 観戦した対局をSGFとして保存し、検討モードで分析可能。
5.2 OGS対局(Play)
- クイックマッチ: 条件を指定して自動マッチング。
- 公開チャレンジ作成: 自分の色(黒/白/自動)とコミ(自動/カスタム)を指定して募集を作成。
- 公開チャレンジ参加: 他ユーザーの募集をタップで参加。マッチ成立通知を待ってから対局画面へ。
- ボット対局: OGS上のボットと対局。ボット個別の対応条件を事前チェックします。
- レーティング: Glicko-2レーティングが変動。
- 時間設定プリセット: 盤サイズごとに最適なプリセットを動的切替。
- 9路: 30s+5s / 30s+5x10s / 2m+7s / 2m+5x30s / 3m+10s / 5m+5x30s / 3d+1d
- 13路: 30s+5s / 30s+5x10s / 3m+7s / 3m+5x30s / 5m+10s / 10m+5x30s / 3d+1d
- 19路: 30s+5s / 30s+5x10s / 5m+7s / 5m+5x30s / 10m+10s / 20m+5x30s / 3d+1d
- ボット互換性チェック: 対応盤サイズ・時間方式・速度・同時対局数を照合。同時対局数が0なら「現在この時間設定を受け付けていません」とエラーを返します。
- ランク差制限: ランク戦の場合、相手とのランク差が9以上なら受諾不可。実力差が大きすぎる対局を未然に防ぎます。
- 自分の募集の管理: 作成した公開チャレンジはロビーに「Open Challenge」として表示され、キャンセルボタンでいつでも取り下げ可能。マッチ成立時に自動クリアされます。
5.3 時間設定(Time Control)
| システム | 説明 |
| Fischer | 初期時間に加え、1手ごとに指定時間が加算される方式(例: 5分 + 7秒)。 |
| Byoyomi | 持ち時間を使い切った後、1手ごとに指定時間が与えられる方式(例: 5分 + 5x30秒)。 |
| Canadian | 指定された手数内に打ち切る方式(例: 5分 + 10手で5分)。 |
5.4 対局中の操作とクロック補正
- 違法手のブロック: 現局面のルールを再現した仮想盤面で着手の合法性をチェックし、失敗した場合はサーバーに送信しません。
- 多重送信防止: 「送信中の手」フラグを立て、次手の送信をブロック。送信後10秒経過してもフラグが残っていれば、自動的にゲーム接続を再同期します。
- タイムアウト自動送信: 自分の手番でメイン時間が-10秒以下、かつ秒読み残りも0以下なら、タイムアウトを1回だけ送信。
- 相手投了の検知: 相手の最終手が「投了」、または終局イベントで終局処理。結果モーダルを表示します。
- レーティング表示: Glicko-2レーティングを取得して、「5k (1500)」のように段級位と併記します。
5.5 観戦・対局棋譜の履歴保存
- 共通の履歴保存: 観戦棋譜も対局棋譜も、同じ形式でアプリのローカル履歴に保存。後から検討モードで読み返せます。
- タイトル接頭辞: 観戦棋譜には"[OGS] "を付与して通常棋譜と区別。
- メタデータ保持: 黒/白の対局者名・段級位・対局名・結果・コミ・ルールを保持。
- 「Save Only」ボタン: 対局画面の下部に常設。終局後は「Save Only」、保存済みは「Saved ✓」に変化。
— 05 —
第6章 リアルタイム分析
F-201〜F-204, F-220-1
この章でできること: 対局中・対局後を問わず、KataGoの分析結果をリアルタイムに確認できます。形勢グラフ、候補手の5段階色分け、地合い表示、思考時間のハイライトで、盤面の優劣を客観的に把握できます。
6.1 形勢グラフ
- 縦軸: 目差(リード)。上方向が自分有利になるよう自動反転。
- 横軸: 手数。
- 現在位置: 黄色のマーカーで表示。
- タップジャンプ: グラフをタップした位置を手数に正規化し、その局面へ瞬時にジャンプ(検討モード中のみ有効)。
- Y軸の動的スケーリング: 全手の最大スコア + 200目、かつ最低2000目を500刻みに切り上げてY軸上限を決定。軸ラベル刻みは5目 / 10目 / 20目を状況に応じて自動切替。
- X軸の動的刻み: 総手数を7分割する刻み(1, 2, 5, 10, 20, 25, 50, 100, 200, 500, 1000手)を自動選択。
- 本譜と分岐のY軸共有: 本譜タブと分岐タブで同じY軸スケールを共有するため、タブ切替で見た目の高さが変わりません。
- 分岐点の破線表示: 分岐点の手数に白の破線を縦に描画。
- パス時の前値保持: コミ計算等でスコアが瞬間的にゼロに落ちた場合、直前のスコアを保持してグラフの急落を防止。
6.2 候補手(5段階色分け)
盤面上に、AIが推奨する上位の候補手が表示されます。
- 表示件数: 3〜30件(デフォルト5件)。設定画面から変更可能。
- 色分け: 最善手からの勝率差と目数差の悪い方で判定します。序盤(目数支配)でも終盤(勝率支配)でも、同じ閾値で自然に色分けされます。
| Tier | 色 | 条件(1位との差) |
| 1 | 青 | 最善手 |
| 2 | 緑 | ≦ 2目 かつ ≦ 2% |
| 3 | 黄 | ≦ 5目 かつ ≦ 5%(文字は黒) |
| 4 | 橙 | ≦ 10目 かつ ≦ 10% |
| 5 | 赤 | それ以上 |
- 勝率表示の桁揃え: 整数部と小数部を分離し、
%記号を整数部の右下に固定、小数をその真上に積む独自レイアウト。99.2%と99%で数字の位置がブレず、円からはみ出しません。
- ズーム・パンへの完全追従: 盤の拡大率・パン量を反映して各候補手の最終位置を算出。
- 影の比例スケーリング: 影のオフセットも候補手の直径に比例して計算。
6.3 地合い表示(Ownership Overlay)
「地図のアイコン」をタップすると、AIが予測する地の所有状況が盤面上に表示されます。
| 設定値 | 挙動 |
| 色のみ | サイズ固定、濃さで表現。黒地は不透明度 0.05〜0.65 / 白地は 0.08〜0.85。 |
| サイズのみ | 濃さ固定、サイズで表現。非線形カーブ(指数 0.65)で「弱い方の差」を強調。 |
| 両方 | サイズ+濃さの両方で表現。 |
- 量子化: 確信度 0.3 未満の地は描画しません。ノイズを除去して「確信のある地」だけを表示。
- アウトライン: 黒地には白の細枠、白地には黒の細枠を描画。石の上や木目背景でも境界が視認可能。
- キャッシュ: 新規対局・盤サイズ変更時のみ前回の地図をクリア。候補手評価の合間に一時的に空になっても地図がチラつきません。
- 集計値: 確信度 0.6 を閾値として黒地・白地をカウントし、形勢グラフのヘッダ横に「●N ○M」として表示。
6.4 思考時間の可視化
- パーセンタイル・ハイライト: 棋譜リストでは全手の思考時間をソートし、上位5%を赤、上位15%を黄で着色。
- ライブ更新の粒度: HUDは毎秒20回、カードは0.4〜0.5秒間隔で更新。画面の再描画負荷と視認性のバランスを取っています。
- 手番中のみ加算: 現在の手番側の経過時間だけを加算。終局後は値が凍結されます。
- リプレイ時の再計算: 過去の手数へジャンプした時、HUDが「その時点の累積思考時間」に切り替わります。
— 06 —
第7章 検討モード
F-205〜F-208, F-220-2, F-220-3
この章でできること: 任意の局面から盤面をタップして自分なりの手を試せます。分岐(バリエーション)はタブで管理され、PVゴースト再生・バリエーションツリーで全体を俯瞰できます。形勢グラフ・棋譜リスト・ツリーのどこからでも、該当局面へ瞬時にジャンプできます。
7.1 分岐(バリエーション)の作成
- 本譜の再生: 棋譜リストの手をタップしてジャンプ。
- 分岐の作成: 盤面タップで新しい分岐を作成し、タブを追加。
- タブ切り替え: 画面上部のタブで本譜と分岐を切り替え。
- 分岐の削除: タブの「×」ボタンで削除。
分岐管理の内部仕様
- タブベースの分岐管理: 各分岐は「分岐ID・全手順・現在の局面・カーソル位置・分岐開始手数」をセッションとして保持。
- 本譜バックアップ: 初回分岐時に本譜の全手順・局面・カーソル位置を退避し、本譜タブに戻る時に正確に復元。
- 前方一致マージ: 分岐作成時、既存の分岐と前方一致する手順なら新規タブを作らず既存タブへ移動。「同じ手順を別タブに重複作成」する事故を防ぎます。
- 末尾追記 vs 途中分岐: カーソルが末尾にある時は追記、途中にある時は新規分岐。
- 途中分岐の undo: 分岐の末尾を削除し、分岐開始手数以下になったら分岐タブ自体を自動削除して本譜に復帰。
- 安全なノードジャンプ: 巻き戻しではなく、初期局面から対象手まで再適用する方式。複雑な分岐でも盤面状態が壊れません。
7.2 PV(推奨手順)の再生
- PVの長さ: 3手、5手、7手から選択可能。
- 再生: PVの手順を盤面上に半透明+黄色枠のゴースト石として順番に表示。
- Place: PVの手順を実際の盤面に適用(分岐として確定)。
PVプレビューの内部仕様
- ゴースト石の視覚仕様: 半径はセルサイズ×0.45、影付き、黄色2.5pt枠。白石は白い不透明円、黒石はやや透過した黒。手数番号を中央に黒字/白字で描画。
- PV操作バー(ドラッグ可能): 候補手の前後移動、PV長さの切替、
Placeボタンを1つの浮遊バーに統合。位置は次回起動時も記憶されます。
- 一括適用:
Place押下時、PVの各手を順次ルールエンジンで適用しながら新しい棋譜エントリを生成。末尾なら既存セッションへ追記、途中なら新規セッション作成。
- 適用後の逐次評価: 1手評価するごとにスコアを埋めてUIを更新し、形勢グラフの点が1つずつ埋まっていくUXを実現。途中で別タブに切り替わったら即座に評価を打ち切ります。
7.3 バリエーションツリー
作成した分岐の全体像をツリー形式で表示します。各ノードをタップするとその局面にジャンプします。右端の列には各手の「目差」と「合計」が表示され、形勢の変化を視覚的に把握できます。
- 3列構成の右パネル: 盤面ノードの右側に「Delta(その手での形勢変化)」「Total(その時点の形勢)」の2列を表示。
- ベジェ曲線の分岐線: 縦方向の中点で制御点を取る2次ベジェで親→子を結び、アクティブ分岐のみ線を太く(3.0pt vs 1.5pt)して強調。
- 左右交互配置: 分岐は左右交互に配置し、深い分岐でも横方向の衝突を回避。
- 分岐タブ選択時は末尾へ: 分岐タブをタップすると、その分岐の末端(最後の手)へスクロール。「この分岐がどこまで進んだか」が一目で分かります。
7.4 局面ナビゲーション(相互ジャンプ)
Go Lab では、複数の画面から同じ局面へアクセスできる導線を用意しています。
| 導線 | 起点 | 遷移先 |
| 形勢グラフのタップ | グラフ上の任意位置 | 該当手数へジャンプ |
| 棋譜リストのタップ | 棋譜の任意の手 | 該当局面へジャンプ |
| バリエーションツリーのノードタップ | ツリー上の任意ノード | 該当局面へジャンプ |
7.5 検討モード中の盤タップ制御
- 本譜再生中のタップは無効化+ヒント: 検討モードがOFFの時の盤タップは警告ハプティックを鳴らし、「検討ボタンを押すと盤面に石を置いて検討できます」のトーストを3.5秒表示。誤って本譜を壊すのを防ぎます。
- 検討モード中のタップ: 手が進めば「カチッ」という中程度のハプティック、進まなければ「ブブー」という警告で「その手は既存の手と一致しない/不正手」を伝えます。
— 07 —
第8章 レポート生成
F-209, F-210
この章でできること: 対局の悪手を「スコア低下」「勝率低下」の2種類のレポートで分析できます。AI推奨手との比較、価値差の表示、PDF/画像での保存・共有にも対応しています。
8.1 2種類のレポート
| レポート種別 | 対象手の抽出条件 | ソートキー |
| スコア低下 |
指定した手番側の手のみ/スコア低下 1.0目以上/AI最善手と一致しない/評価値あり |
スコア低下幅の降順 |
| 勝率低下 |
同上 + 勝率低下 2.0%以上 かつ スコア低下 1.0目以上 |
勝率低下幅の降順 |
8.2 悪手の5段階評価
| 評価 | スコア低下幅 | 意味 |
| Good | 1.0目未満 | ほぼ最善手に近い |
| Normal | 1.0〜2.5目 | 軽微な損 |
| Doubtful | 2.5〜5.0目 | やや疑問 |
| Bad | 5.0〜10.0目 | 悪手 |
| Blunder | 10.0目以上 | 大悪手 |
8.3 AI推奨手との比較
- Best: 打った手 = AI最善手(パーフェクト)
- Second: 評価差が2.5目未満(十分に良い手)
- Mismatch: AI推奨手から外れた手(改善余地あり)
レポートには「打った手」と「AI推奨手」の両方が盤図で並記され、「もしこの手を打っていたら」のPV(推奨手順)も確認できます。
8.4 価値差(Value Gap)
「打った手」と「AI推奨手」の形勢差を、同じ局面同士で比較した純粋な価値差として算出。打った手=推奨手の場合は定義上0.0目になります。
8.5 低信頼度フラグ
その手を解析した時の訪問回数が500未満の場合、「低信頼度」フラグが付きます。分析の精度が十分でない手を「悪手」と断定しないための配慮です。
8.6 非同期解析と進捗表示
- 対象手の候補を全件抽出
- 各候補手について「AI最善手」が未キャッシュならエンジンで再解析し、最善手・形勢値・推奨手順・訪問回数を棋譜に埋める
- 1手ごとに進捗コールバックを呼び、UIに「N / M」を表示
- 有効候補を指定件数に絞り、各手のハイライト情報を生成
- 勝率の変化量をシグモイドで計算して埋め込み
8.7 レポート出力
- 2種類のレポートテンプレート: スコア低下用/勝率低下用のHTMLテンプレートをWebViewに読み込み、JavaScriptでJSONを描画。
- PDF→画像化: WebViewでPDFを生成後、高解像度のPNGにラスタライズ。高さは最大4000pxにスケールしてメモリを節約。
- QRコード埋め込み: App Store URLをQRコード化し、レポート画像内に「アプリのストアページ」への導線を自動挿入。
- クリップボード/共有: クリップボードへのコピーと標準の共有シートの両対応。
- コピー完了トースト: 1.5秒間のトーストをアニメーション表示。成功ハプティックも同時に鳴らします。
— 08 —
第9章 棋譜管理・SGF入出力
F-211, F-212, F-220-2
この章でできること: 対局履歴はJSON形式で1件1ファイル保存。SGFのインポート/エクスポートに対応し、他アプリの棋譜も取り込んで分析できます。オートセーブにより、アプリが落ちても最後の手から再開できます。
9.1 SGF入出力
- インポート(ファイル選択): SGFファイルを選択して分析。
- インポート(テキスト貼り付け): SGF文字列を直接貼り付けて読み込み。他アプリからのコピペに対応。
- 文字コード自動判定: BOMを先に検出してUTF-8で読む → 失敗ならUTF-8 / Shift-JIS / UTF-16を順に試行。
- 置石(AB/AW)対応: SGFの置石タグ(
[dp][pd]...)を解析し、「黒→白の順に適用」「置石ありなら手番を白に」というSGF規約通りに処理。
- 合法手チェック: インポート時にルールエンジンで1手ずつ検証。失敗した手があってもログを残して続行し、1手の失敗で全体を失わない堅牢設計。
- インポート直後の一括解析: 各手をKataGoで評価し、進捗コールバックで「N / M」をUIに表示。既に評価済みの手はスキップして再開可能。
- エクスポート: 棋譜をSGF形式(GM[1]FF[4])で出力。他アプリに持ち出すことも可能。
9.2 対局履歴の管理
- JSONファイル履歴: アプリのドキュメントフォルダに1件1ファイルのJSONとして保存。2回目以降の読み込みはメモリ参照で高速化。
- 履歴一覧: 日付・対局者名・勝敗・盤サイズ・ルールを一覧表示。タップで分析モードへ。
- 履歴削除: 左スワイプで削除。
- タイトル接頭辞: 観戦棋譜には"[OGS] "を付与して通常棋譜と区別。
- メタデータ保持: 黒/白の対局者名・段級位・対局名・結果・コミ・ルールを保持。
9.3 オートセーブと再開
- オートセーブ: 対局中は毎手保存され、アプリ再起動時に再開確認が表示されます(有効期限: 無制限)。
- 再開ヒントの経過時間表記:
- 同日
< 1分:"直前"
- 同日
< 60分:"N分前"
- 同日
≥ 60分:"N時間前"
- 日跨ぎ:
"N日前"(カレンダーで日付差を優先)
- 旧データ警告: リリース日以前の保存日時の棋譜を読み込んだ時、「データが古い可能性があります」というトーストを表示。直近50件まで「トースト済みキー」を保存し、同じ棋譜で2回出さない設計。
- 旧データからの移行: 旧形式の履歴データをファイル形式に自動マイグレーション。成功したら旧キーを削除、失敗時は次回起動時に再試行。
9.4 棋譜からの局面ジャンプ
- 棋譜リストのタップ: 棋譜リストの任意の手をタップして、その局面へジャンプ(検討モード中)。
- 検討中のタブ切り替え: 本譜/分岐のタブを切り替えると、該当セッションのカーソル位置が復元されます。
— 09 —
第10章 詰碁(Tsumego)
F-301〜F-306
この章でできること: 実戦的な詰碁問題を多数収録。手数やステータスでフィルタでき、AIが応手を返します。複数正解の可視化、解答再生、ストリーク(連続学習)機能で、毎日の学習習慣をサポートします。
10.1 問題の構成
- コレクション: 現在有効なコレクションは「玄玄棋経(XXQJ)」ベース。SGFデータが整備済みのもののみ公開しており、他の古典棋書はデータ準備が整い次第の追加を予定。
- フィルタ: 手数(1-3手、4-6手、7-10手、11手以上)、ステータス(未クリア、クリア済み)で絞り込み。
- ソート: 問題番号順、手数順。
10.2 解答判定とAI応手
- 正解: 正しい手を打つと、0.5秒の間の後にAIが応手を返します。ユーザーの着手が画面に描画される時間を確保し、連打による不整合を防ぐための設計。
- 不正解: 間違った手を打つと「Failed」と表示され、その手は取り消されます。取り消しのきっかけは専用のフラグで管理。
- フリープレイ: 解答がない問題ではAIと自由に対局(最大15手)。「プレイアブル矩形の外側」の点はAIに打たせないよう制御。
10.3 複数正解の可視化
複数正解の表示: 正解が複数ある問題で正解の一つを打つと、他の正解候補が緑の破線円として盤上に表示されます。「もっと別の手もあったのか」と気づける学習効果の高い演出です。
10.4 解答再生モード
- 解答再生: 問題を一旦リセットし、解答手順を1手ずつ順番に盤面に並べます。1手進む/1手戻る/最初へ/最後への4つのナビゲーションを搭載。
- 自動再生: 1秒間隔で解答を自動再生。末尾到達で自動停止。
- 手数番号オーバーレイ: 石の上に「1, 2, 3…」を重ねて表示。黒石には白背景+黒数字、白石には黒背景+白数字。円のサイズは石の直径×0.65に抑え、石の縁が見えて黒白が判別できる設計。
- 盤座標の完全一致: 盤面描画と同じ座標計算を共有し、ズーム・パンしても手数番号が正しい交点に追従。
10.5 進捗管理とストリーク
- レベル別の完了データ: 初級/中級/上級など、レベル別に「クリア済み問題番号」を別々に保存。
- ストリーク(連続学習): 「最後に解いた日」と「連続日数」を保存。翌日に解けば+1、1日以上空くと1にリセット。同日内の複数問クリアではstreakは増えません。
- 今日のクリア数: 「問題ID → クリア日時」を全件保持し、今日の日付と一致するものだけをカウント。
- 進捗通知: クリア時に関連画面へ通知を送り、一覧画面を自動再描画。
10.6 正解演出
3段構成のアニメーション
- チェックマークの回転登場:
-180° → 0°と回転しながら、scale 0.2 → 1.0で弾むスプリングアニメーション。
- 星の放射: 14個の星が放射状に飛散。角度は2π/14ずつ+±0.15radのジッター、飛散距離は90〜160pt、サイズは12〜24pt。
- メッセージポップ: 「Solved!」メッセージとボタンをスプリングでポップ表示。ストリーク数は
🔥 N day streakとしてオレンジのカプセル内に表示。
※内部名「くるりん〜ぱっ!キラーん」。製品紹介としては「正解演出」として扱います。
— 10 —
第11章 レッスン
F-307〜F-310
この章でできること: Live2Dキャラクターがガイド役となって、囲碁の基礎から応用までを学べます。「読む → 試す → 解く」の3段階構成で、盤面操作型の教材とテストで能動的に学習できます。
11.1 レッスンカリキュラムの構造
- レベル: 初級/中級/上級/達人の4段階。データが整備済みのレベルのみ順次公開。
- レッスン(読む): 1レッスン = 複数のステップ。各ステップに「盤面」「マーク」「テロップ」が紐づき、Live2Dキャラクターが解説します。
- 操作型教材(試す): 盤面上のマークが0.6秒間隔で順次ハイライトされ、「ここに注目 → 次はここ」という順序を視覚的に追えます。タイピング演出中にタップすると全文表示に切り替わる「スキップ」も可能。
- テスト(解く): レッスンの最後に「操作型テスト」が出題されます。
- 全問タップ: 正解点をすべてタップする形式(残り個数表示付き)
- 1問タップ: 正解点を1つタップする形式
正解時は軽い振動+「正解!」表示、不正解時はエラー振動+「もう一度」表示。不正解の自動消去は行わず、ユーザーがタップで閉じるまで表示し続けます。
- 完了演出: 全問正解で完了オーバーレイが表示され、「Next Lesson」で次のレッスンへ。
カリキュラムのねらい: 「読んで理解する」だけでなく、盤面を実際にタップして答える操作型テストを挟むことで、受け身ではなく能動的な学習を促します。詰碁と同じ「複数正解の破線円」も共通機構として使い、正解が複数ある問題では他の正解候補も示されます。
11.2 Live2Dキャラクターの統合
- Live2D Cubism SDKとの連携: Live2DのMetal描画ViewをSwiftUIにブリッジする専用のラッパーを実装。シングルトンでViewControllerを保持し、複数生成によるチラつきを防止。
- リップシンク: 0.1秒間隔のタイマーでキャラクターの口パクパラメータを更新。セリフ表示中の最初の3秒間だけ動かし、その後は口を閉じます。
- 表示サイズの最適化: Live2Dビューの高さを画面の1.5倍にし、画面下まで伸ばすことで、テロップ背景がキャラクターの足を隠さないよう設計。
- 視線追従: Live2D側のタップ処理をそのまま活かし、SwiftUI側では背景の黒部分だけを拾う設計。
- 起動時ウォームアップ: アプリ起動から1.5秒後にモデル読み込みとMetal初期化を先に実行。レッスン画面を開いた瞬間にキャラクターが表示されない、という待ち時間を削減。
11.3 盤面連動解説とテロップ
- タイピング演出: 1文字40ミリ秒のタイピングでテロップを表示。タイピング中にテロップをタップすると即座に全文表示に切り替わる「スキップ」機能も搭載。
- マークの順次ハイライト: 0.6秒間隔で盤面上のマークを1つずつハイライト。レッスン中のみ有効で、テスト中/完了画面/タイピング中は無効化。
- ハイライト時の視覚効果: 該当マークは
1.3倍に拡大、非該当マークは不透明度 0.5で減光。0.4秒のイージングで滑らかに切り替わります。
- マークの色分け:
- 丸 = 青(注目点/正解)
- 三角 = 赤(相手の逃げ道/狙われる点)
- 四角 = 緑(自分の形/地)
- × = オレンジ(急所/打てない点)
- ラベル = 白
- 石の色との反転: マーク位置に石がある場合、石の色と逆の色でマークを描画(白石→黒マーク、黒石→白マーク)。
- 最終手の二重丸: 最終手に「黒い太枠(7pt)+白い円(5pt)」を重ねて表示。レッスン中に「今どこに打ったか」が一目で分かります。
11.4 レベル管理と多言語
- 4レベル: 初級 / 中級 / 上級 / 達人。公開中のレベルを制限する仕組みがあり、データ未整備のレベルはUIに出しません。
- レベル別の完了データ: レベルごとに別々の完了データキーで管理。
- 多言語テキスト: 日本語 / 英語 / 韓国語 / 繁体字中国語の4言語を保持し、デバイスの言語設定に応じて実行時選択。英語フォールバックあり。
- 問題番号の解釈: SGFコメントから"problem (\d+)(?:-(\d+))?"を正規表現で抽出し、「(章, 番号)」に分解。
— 11 —
第12章 システム概要と動作環境
F-401
この章でわかること: Go Lab がどのような技術構成で動いているか、どのデバイスで利用できるかの概要です。
12.1 動作環境
| 項目 | 要件・仕様 |
| 対応OS | iOS 15.0 以降 / iPadOS 15.0 以降 |
| 対応デバイス | iPhone, iPad(Apple Silicon搭載デバイス推奨) |
| ストレージ | Highモデル利用時: 約1GB以上の空き容量 |
| ネットワーク | オンライン対局・OGS観戦・モデルダウンロード時に必要 |
| オフライン動作 | CPU対局・詰碁・レッスンは完全オフラインで動作 |
12.2 アプリの構成
- KataGoエンジン: C++で実装されたKataGoをSwift/Objective-C++ブリッジ経由で呼び出し。CoreML(ANE)またはMetal(GPU)バックエンドで推論を実行。
- ゲームコントローラ: 対局の進行、Undo、オートセーブ、終局判定などを管理。
- UIレイヤー: SwiftUIで構築され、盤面描画にはMetalベースのCanvasを使用。
- 永続化レイヤー: 対局履歴や設定をJSON形式でローカルに保存。
— 12 —
第13章 AIエンジン「KataGo」の技術仕様
F-402, F-402-1, F-403, F-404
この章でわかること: Go Lab の中核をなす KataGo エンジンのモデル3種、バックエンド、推論パラメータの技術仕様です。
13.1 モデルの種類と技術的差異
| モデル名 | バックエンド | パラメータ数 | 特徴 |
| Light (b6c96) |
Metal (GPU) |
約103万 |
アプリに同梱。軽量・高速。g170世代。 |
| High (b18c384nbt) |
CoreML (ANE) |
約2,633万 |
追加DLが必要。高い推論精度。kata1世代。 |
| HumanSL |
CoreML (ANE) |
約2,633万 + 人間模倣層 |
Highモデルをベースに、人間の対局データで学習した追加ネットワーク。 |
※パラメータ数は公開されているKataGoのネットワークアーキテクチャに基づく。
13.2 モデルの選択と利用可否判定
- Light: アプリに同梱されているため、常に利用可能。
- High / HumanSL: 追加ダウンロードが必要。未ダウンロード時はアプリが自動的に Light にフォールバックします。
- 選択中のモデル: 設定画面から切り替え可能。変更時は共有エンジンが破棄され、次の推論から新モデルで動作します。
13.3 バックエンドの違い
- Metal (GPU): b6c96のような軽量モデルに適しており、消費電力を抑えつつ高速に動作。
- CoreML (ANE): Apple Neural Engineを使用。b18c384のような大規模モデルを効率的に実行でき、高い推論速度を実現。
シミュレータ環境では、自動的にMetal + b6c96が使用される仕様です。
13.4 エンジンの推論パラメータ
- 対局時のVisits: 難易度(Lv.1〜63)に応じて内部的に動的に設定されます。
- 分析時のVisits: 設定画面から「40〜1000」の範囲で調整可能です(デフォルト: 評価用100、候補手用280)。
— 13 —
第14章 設定とデータ永続化
F-405, F-406
この章でできること: アプリの設定項目(エンジン・表示)を一覧で確認できます。データの永続化方式とオートセーブの仕組みを解説します。
14.1 設定項目一覧
| タブ | 項目 | 仕様・範囲 |
| Engine | 使用モデル | Light / High / HumanSL |
| Engine | モデルのダウンロード/削除 | High/HumanSLの追加DL・削除 |
| Engine | 分析用Visits(評価) | 40〜1000(デフォルト: 100) |
| Engine | 分析用Visits(候補手) | 64〜1000(デフォルト: 280) |
| Engine | HumanSLプロファイル | rank_20k〜rank_9d / preaz_* |
| Display | レッスンタブの表示 | ON / OFF |
| Display | 盤面スタイル | Wood(木目)/ Plain(無地) |
| Display | 地の表示方法 | 色のみ / サイズのみ / 両方 |
| Display | 候補手の表示数 | 3〜30件 |
14.2 データ永続化
- 対局履歴: アプリのドキュメント領域にJSON形式で1件1ファイル保存。
- 設定: ユーザー設定領域に保存。
- オートセーブ: 対局中は毎手保存され、アプリ再起動時に再開確認が表示されます(有効期限: 無制限)。
14.3 オートセーブの堅牢性
- サニタイズ: 極端な有効期限設定(無限など)はJSONエンコード時に事故るため、「実質100年」の定数に置換して安全に保存。
- 壊れたファイルの退避: デコード失敗時は
.broken拡張子にリネームして退避。他の正常ファイルは読み込み続行。
- 旧データからの移行: 旧形式の履歴データをファイル形式に自動マイグレーション。
サポート: 解決しない問題がある場合は、サポート窓口([email protected])までご連絡ください。アプリのバージョン、デバイス名、問題の詳細を添えてください。
— 14 —
第15章 モデル管理とアプリ運用
F-407, F-408, F-409
この章でわかること: AIモデルの追加ダウンロード・削除の仕組み、レビュー依頼のルール、リリースノート・強制アップデートの動作です。
15.1 モデルダウンロードマネージャ
- 2段階ダウンロード: HumanSL選択時はベースモデル(b18c384)→ HumanSLモデルの順に2ファイルを自動ダウンロード。キューに積んで順次処理。
- .mlpackageから.mlmodelcへの自動コンパイル: ダウンロードした
.mlpackageをCore MLでコンパイルし、.mlmodelcとして配置。次回起動時はコンパイル済みモデルを直接ロードして起動を高速化。
- ダウンロード中の安全策: ダウンロード/削除中は一時的に軽量モデル(Metal b6c96)にフォールバック。重いファイル処理中でもアプリが固まりません。
- 削除時の依存関係: b18c384を削除するとHumanSLモデルも一緒に削除。HumanSLだけを削除する場合はベースモデルを残します。
- 容量内訳ログ: アプリ本体・アプリケーションデータ・キャッシュのサイズと上位5ファイルの内訳をログ出力。
15.2 レビュー依頼
- 3日ルール: 初回起動日時を保存し、初回起動から72時間未満ならレビュー依頼を抑止。使い始めたばかりのユーザーに依頼を出さない配慮。
- アプリ全体で1回のみ: 「既に依頼したか」をアプリ全体で管理。対局・詰碁・分析のどこから先に呼ばれても、最初の1回だけ通す方式。
- 機能別カウント: 「分岐作成」「SGFインポート分析」などの利用回数を累積し、閾値到達時にレビュー依頼を出します。
- 詰碁マイルストーン: 累計クリア数3 / 15 / 60 / 100 / 300問に到達した時点でもレビュー依頼。
15.3 リリースノートと強制アップデート
- リリースノート取得: App Storeの情報を取得し、
lastVersion != currentVersionの時だけ照会。さらに言語簡易判定(日本語:ひらがな/カタカナ/漢字、韓国語:ハングル、中国語:漢字)で「期待する言語でない」フォールバックをスキップ。英語フォールバックで日本語ユーザーに英語リリースノートが出る事故を防ぎます。
- 強制アップデート: サーバー上の最小バージョンと現在のバージョンを数値比較し、古ければApp Storeへの誘導アラートを表示。
— 15 —
第16章 通信とオンライン対局の堅牢性
F-410, F-411
この章でわかること: オンライン対局中にネットワークが不安定になっても、対局が破綻しないための仕組みです。
16.1 バックグラウンド離脱時のタイマー
- アプリがバックグラウンドに回った時、オンライン対局中なら20秒後に自動退室。アプリに戻ればタイマーはキャンセル。相手を長時間待たせない配慮です。
16.2 相手投了の検知と終局
- 相手の最終手が「投了」、または終局イベントで終局処理。結果モーダルをアニメーションで表示します。
16.3 手数同期のズレ防止
- サーバー上の手数とローカルの棋譜件数を照合し、「既に適用済みの手を二重適用」する事故を防ぎます。
16.4 ネットワーク回復時のリカバリ
- 保留中の手の照合: 「保留中の手」と「サーバー上の最終手」を比較し、未反映なら再送、既に反映済みなら保留をクリア。二重送信と取りこぼしの両方を防ぎます。
- 切断検知と再接続: ネットワーク変化を監視し、オフライン復帰またはインターフェース切替を検出したら1.5秒待ってリカバリを実行。急な再接続連打を回避する設計。
16.5 多重送信防止
- 「送信中の手」フラグを立て、次手の送信をブロック。送信後10秒経過してもフラグが残っていれば、自動的にゲーム接続を再同期。
— 16 —
第17章 UI/UXのこだわりと隠れた便利機能
F-501〜F-505
この章でわかること: 盤面操作の心地よさ、没入感を高める演出、Zen Mode、物理アニメーションなど、アプリ全体に共通する設計のこだわりです。
17.1 盤面操作の心地よさと誤操作防止
- CPUの手への自動追従(フォロー機能): 盤面を拡大している時、CPU(相手)が画面外や端に手を打つと、自動的に画面がパンしてその手が見えるように追従します。しかし「自分の手」では追従しないため、画面酔いや誤操作を防ぐ工夫。
- 自動ズームアウト&着手: 拡大状態で交点をタップすると、一瞬で等倍に戻ってから石が置かれます。拡大したまま石が置かれて全体が見えない、というストレスがありません。
- ダブルタップでの倍率切り替え: ダブルタップするだけで「等倍表示」と「短辺あたり12交点が見える拡大表示」を瞬時に切り替え。
- パン操作のクランプ: 拡大時に盤の外側(空白部分)が見えすぎないように、移動できる範囲に制限(クランプ)がかかっています。
- 多様な端末レイアウト: iPhoneの縦向き・横向き、iPad、フルスクリーン表示のすべてに対応。横画面では盤面の右側に情報パネルを配置するなど、最適なレイアウトに自動で切り替わります。
17.2 没入感を高める演出とフィードバック
- Zen Mode: 盤面以外のUI(棋譜、候補手、形勢グラフ、操作ボタンなど)を優しくフェードアウトさせ、盤面に全集中できるモードです。右上の「Zen」ボタンでいつでも切り替え可能。
- 石を置く時の物理アニメーション: 石が上から落ちてくるような「easeOutCubic」の動きと、それに連動して変化する影の描画(空中では薄く広がり、着地で濃く収束する)をリアルタイムで計算。
- 触覚フィードバック(Haptics): 石を置いた時の「カチッ」という衝撃(CoreHaptics)、打てない場所をタップした時の「タッタッタッタ」という警告振動など、触覚でも操作をサポート。
- 思考中/解析中のドットアニメーション: 盤上の上中央に「…」が流れるようなアニメーションを表示し、AIが考えていることや解析中であることを主張しすぎずに伝えます。
- 盤面スタイルの変更: 設定から「木目(Wood)」と「無地(Plain)」を切り替えられます。無地はフラットでモダンな見た目になり、分析や検討に集中したい時に適しています。
17.3 分析・検討機能の便利ポイント
- グラフのタップジャンプ: 検討モード中、形勢グラフの任意の位置をタップすると、その手数まで瞬時にジャンプできます。
- プレイヤー視点への自動反転: 自分が白番(後手)の場合、形勢グラフの上下やスコアのプラスマイナスを自動で反転。常に「自分が良いか悪いか」が直感的にわかります。
- 候補手の視認性へのこだわり: 候補手の丸の中には勝率(%)と目差が表示されますが、円のサイズが変わっても数字の位置がズレないように、独自のカスタム描画。
- PV(推奨手順)のゴースト表示: 検討モードでPVをONにすると、推奨される手順が盤上に半透明の仮想の石(ゴースト)として順番に表示されます。そのまま「Place」ボタンで実際の盤面に適用(分岐として確定)できます。
- バリエーションツリーの視覚化: 棋譜全体の分岐をツリー形式で表示。右側に各手の「目差」と「形勢」が並んで表示され、どこで形勢が悪くなったか一目でわかります。
- 賢い分岐のマージ: 検討モードで盤面をタップして新しい手を打つと自動でタブが作られますが、もし既存の分岐と同じ手順だった場合は、新しくタブを作らずに既存のタブにマージ(移動)されます。
17.4 学習・レッスン機能のこだわり
- Live2Dキャラクター: レッスン画面ではLive2Dのキャラクターがガイド役として登場します。セリフに合わせたリップシンク(口パク)やまばたきの機能も実装されています。
- 順次ハイライト: レッスンの解説では、盤面上のマーク(丸、三角、四角、バツ)が一定間隔(0.6秒)で順番にハイライトされ、解説の順序を視覚的に追うことができます。
- 複数正解の可視化(詰碁): 詰碁で複数の正解がある場合、正解の一つを打つと、他の正解の候補点が「緑の破線の円」で表示されます。
- 手数番号のオーバーレイ(詰碁): 解答再生モード時、石の上に「1, 2, 3...」と手数が表示されます。黒石には白い数字、白石には黒い数字が重ねられ、石の縁が見えるようにサイズが調整されています。
- 正解演出: 詰碁を解いた瞬間、チェックマーク・メッセージ・星のパーティクルによる独自のアニメーションで称えてくれます。
- ストリーク(連続学習)機能: 毎日詰碁を解くと、連続日数が記録され、クリア時に「🔥 N day streak」と表示されます。
17.5 オンライン・OGS連携の便利機能
- サムネイル付き観戦リスト: 観戦リスト(OGS Watch)で、実際の盤面のサムネイルが表示されます。手数や対局者のレートも一目でわかります。
- 観戦中のAI形勢評価: OGSの観戦画面でも、自分のKataGoエンジンを使って形勢グラフを表示できます。
- レート制限(レートリミッター): OGSのAPI制限(1時間あたりのリクエスト数)を超えないよう、アプリ内のレートリミッターで制御。
- 時間設定のプリセット: OGS対局の時間設定は、盤サイズ(9路、13路、19路)に合わせた推奨プリセットから直感的に選択できます。
17.6 Zen Mode の操作体系
- 残るもの: 盤面、Undo/Pass/Resign ボタン、Zen 解除ボタン(薄く残る)。
- 消えるもの: ヘッダー、思考時間、棋譜、形勢グラフ、候補手、地表示。
- フローティングメニュー: 右上に「≡」ボタンが浮遊し、タップで通常メニューを開けます(Zen中でも棋譜・設定にアクセス可能)。
- 順序付きフェード: ヘッダー → 思考時間 → 情報カードの順に、外側から0.08秒ずつ遅れて消えます。突然全部消えるのではなく、視線を盤面に自然に誘導する設計。
- AI着手間隔の延長: Zen 中はAIの着手前の最小間隔が1.0秒 → 2.0秒に延長され、盤面をじっくり見ながらAIの着手を待てます。
- 初回案内: 初回起動時に一度だけ、対局設定シートを閉じたタイミングで10秒間のトーストを表示。
17.7 その他の細かいUX・サポート機能
- オートセーブと親切な再開: アプリが落ちても、最後の手から再開できます。再開時には「N分前」「N時間前」「N日前」といった親切なメッセージが表示されます。
- 古いデータの警告トースト: リリース日より前の古い棋譜データを読み込んだ際、自動的にトースト通知を表示して「データが古い可能性がある」ことを知らせてくれます。
- レポートのQRコード: 生成された分析レポートには、アプリのApp Storeページへ誘導するQRコードが自動的に埋め込まれます。
- 多言語対応: 日本語、英語、中国語(簡体字・繁体字)、韓国語など、デバイスの言語設定に合わせてUIが切り替わります。
- 強制アップデート/リリースノート: 起動時にサーバーからバージョン情報を取得し、必要に応じてApp Storeへの誘導やリリースノートの表示を行います。
17.8 その他の隠れた配慮
- 正解演出の初回フレーム問題回避: アニメーション開始を1フレーム遅らせて発火。SwiftUIの初期化順序による「アニメーションが動かない」バグを防ぎます。
- 大規模棋譜のスクロール最適化: 遅延描画のリストと自動スクロールを使い、現在手数が変わるたびに該当行へ自動スクロール。
- リプレイ中の体感速度: 「途中から再生」する時、まず推論をキックして推論完了を待ってから再生開始。推論中に次の手へ進んでしまう「カクつき」を防止。
- Undo時の思考時間復元: 累積時間から該当手の所要時間を差し引き、下限は0でクランプ。Undoを繰り返しても累積時間が負にならず、Undo→Redoでも整合。
- 合法手ゼロ時のフォールバック: AIが不正手を返した場合、合法手を列挙してランダムに1つ選び、それでも無ければパス。AIのバグで対局が止まるのを防ぎます。
- 盤サイズ変更時のリセット順序: 「解析タスクをキャンセル → 分岐をクリア → 地の所有状況をクリア → 共有エンジンをリセット」の順で実行。
- 設定変更時のモデル破棄: 使用モデルが変わった時、共有エンジンを強制破棄。新設定で次のエンジンが生成され、古いモデルの混在を防ぎます。
- シミュレータでのモデル自動切替: シミュレータ環境では自動的に軽量モデル(Metal b6c96)を強制。
— 17 —
付録:機能マスター台帳
本ページに掲載した全機能の台帳です。将来の更新の原本として使用します。ステータス凡例: ✅機能 = ユーザーが直接使える機能 / 🔧内部 = 内部動作 / 📄説明 = ドキュメント上の説明項目 / 📂分類 = 親機能ID(子の束ね役)/ ❓未確認 = コード未確認。
Part I:対局・オンライン対局
| ID | 機能名 | 章 | ステータス | 親ID | 関連ID |
| F-101 | 対局モード(CPU/1台2人/オンライン) | 1 | ✅機能 | — | F-111, F-113 |
| F-102 | ルールセット | 1 | ✅機能 | — | F-107 |
| F-103 | 終局処理(2連続パス・投了) | 1 | ✅機能 | — | F-104 |
| F-104 | 死石判定 | 1 | ✅機能 | — | F-103 |
| F-105 | 置石(AB/AW) | 1 | ✅機能 | — | F-106 |
| F-106 | 手番選択(黒/白) | 1 | ✅機能 | — | F-105 |
| F-107 | 盤サイズ×ルールの組み合わせ | 1 | ✅機能 | — | F-102 |
| F-108 | 難易度Lv.1〜63 | 2 | ✅機能 | — | — |
| F-109 | HumanSL(現代/古典) | 3 | ✅機能 | — | F-110 |
| F-110 | 対局用/分析用モデルの分離 | 3 | ✅機能 | — | F-109 |
| F-111 | オンライン対局 | 4 | ✅機能 | — | F-101 |
| F-112 | OGS観戦 | 5 | ✅機能 | — | — |
| F-113 | OGS対局 | 5 | ✅機能 | — | F-101 |
| F-114 | OGS時間設定 | 5 | ✅機能 | — | F-113 |
Part II:AI分析・検討・棋譜
| ID | 機能名 | 章 | ステータス | 親ID | 関連ID |
| F-201 | 形勢グラフ | 6 | ✅機能 | — | F-220-1 |
| F-202 | 候補手(5段階色分け) | 6 | ✅機能 | — | — |
| F-203 | 地合い表示 | 6 | ✅機能 | — | — |
| F-204 | 思考時間の可視化 | 6 | ✅機能 | — | — |
| F-205 | 検討モード(分岐作成) | 7 | ✅機能 | — | F-206, F-207, F-208 |
| F-206 | PVゴースト再生・一括適用 | 7 | ✅機能 | — | F-205 |
| F-207 | バリエーションツリー | 7 | ✅機能 | — | F-220-3 |
| F-208 | 分岐の前方一致マージ | 7 | ✅機能 | — | F-205 |
| F-209 | レポート生成 | 8 | ✅機能 | — | F-210 |
| F-210 | 悪手の5段階評価・AI推奨手比較 | 8 | ✅機能 | — | F-209 |
| F-211 | 棋譜管理(JSON履歴) | 9 | ✅機能 | — | F-212 |
| F-212 | SGF入出力 | 9 | ✅機能 | — | F-211 |
| F-220 | 局面ナビゲーション(横断) | 6・7・9 | 📂分類 | — | — |
| F-220-1 | 形勢グラフのタップジャンプ | 6 | ✅機能 | F-220 | F-201 |
| F-220-2 | 棋譜リストのタップジャンプ | 7・9 | ✅機能 | F-220 | F-205, F-211 |
| F-220-3 | ツリーノードのジャンプ | 7 | ✅機能 | F-220 | F-207 |
| F-220-4 | 検討一覧から該当検討へ移動 | TBD | ❓未確認 | F-220 | — |
| F-220-5 | 検討ドリルから該当局面へ移動 | TBD | ❓未確認 | F-220 | — |
Part III:学習・レッスン・詰碁
| ID | 機能名 | 章 | ステータス | 親ID | 関連ID |
| F-301 | 詰碁問題構成 | 10 | ✅機能 | — | — |
| F-302 | 解答判定とAI応手 | 10 | ✅機能 | — | F-303, F-304 |
| F-303 | 複数正解の表示 | 10 | ✅機能 | — | F-302 |
| F-304 | 解答再生モード | 10 | ✅機能 | — | F-302 |
| F-305 | 進捗管理・ストリーク | 10 | ✅機能 | — | — |
| F-306 | 正解演出 | 10 | ✅機能 | — | F-302 |
| F-307 | レッスン(Live2D) | 11 | ✅機能 | — | F-308, F-309 |
| F-308 | 盤面連動解説 | 11 | ✅機能 | — | F-307 |
| F-309 | カリキュラム構造 | 11 | ✅機能 | — | F-307 |
| F-310 | レベル管理・多言語 | 11 | ✅機能 | — | F-307 |
Part IV:エンジン・システム・データ管理
| ID | 機能名 | 章 | ステータス | 親ID | 関連ID |
| F-401 | システム概要と動作環境 | 12 | 📄説明 | — | — |
| F-402 | KataGoモデルの種類 | 13 | 📄説明 | — | F-402-1 |
| F-402-1 | モデルの選択・利用可否判定 | 13 | ✅機能 | F-402 | F-110 |
| F-403 | バックエンド(Metal/CoreML) | 13 | 📄説明 | — | F-402 |
| F-404 | 推論パラメータ(Visits) | 13 | 📄説明 | — | F-108 |
| F-405 | 設定項目一覧 | 14 | ✅機能 | — | — |
| F-406 | オートセーブ・再開ヒント | 14 | ✅機能 | — | F-211 |
| F-407 | モデルダウンロードマネージャ | 15 | 🔧内部 | — | F-402-1 |
| F-408 | レビュー依頼 | 15 | 🔧内部 | — | — |
| F-409 | リリースノート・強制アップデート | 15 | 🔧内部 | — | — |
| F-410 | ネットワーク回復・多重送信防止 | 16 | 🔧内部 | — | F-111, F-113 |
| F-411 | バックグラウンド離脱タイマー | 16 | 🔧内部 | — | F-111 |
横断:UI/UX
| ID | 機能名 | 章 | ステータス | 親ID | 関連ID |
| F-501 | 盤面操作(追従・ズーム・パン) | 17 | ✅機能 | — | — |
| F-502 | 物理アニメーション | 17 | 🔧内部 | — | — |
| F-503 | Zen Mode | 17 | ✅機能 | — | — |
| F-504 | 触覚フィードバック | 17 | 🔧内部 | — | — |
| F-505 | その他の隠れた配慮 | 17 | 🔧内部 | — | — |
未確認事項: F-220-4(検討一覧から該当検討へ移動)と F-220-5(検討ドリルから該当局面へ移動)は、提供いただいたソースコード上で該当UIを確認できていないため、ステータスを「❓未確認」としています。実装有無の確認が取れ次第、ステータスと掲載章を更新します。
※ご注意: 本ページの内容は、アプリのSwiftソースコードをAIが解析・自動生成した技術ドキュメントです。実際のアプリの仕様や挙動と細部が異なる場合があります。あらかじめご了承ください。