機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

iPhoneで将棋AI大会に出るときのヒヤリハット(電竜戦)

第4回世界将棋AI電竜戦本戦(2023年12月2日~3日)に将棋AI「ねね将棋」で出場しました。ほとんどの参加者はパソコンかクラウド計算機上で将棋AIを動作させる中、ねね将棋はiPhone上で動作させるというユニークなソフトです。

ソフトの概要や電竜戦参加の記録はこちらのページから。

select766.hatenablog.com

本記事では、iPhoneで将棋AIを動作させるという特殊な仕組みに起因して大会出場時に起こった・未然に防いだオペレーションミスについて紹介し、再発防止策を検討します。

プロビジョニングプロファイルの有効期限切れ

自作のiOSアプリをiPhoneで動作させる際には「プロビジョニングプロファイル」というものが必要で、有効期限があります。アプリに埋め込まれたプロビジョニングプロファイルの有効期限が切れると、「"ねね将棋"はもう利用できません」というような表示が出てアプリを起動できなくなります。無料でアプリ開発している場合は有効期限が7日しかないため、頻繁にMacでアプリをビルドしなおしてインストールする必要があります。私はこの有効期限について勘違いしており、インストールしなおすたびに有効期限が更新されるものと想定していました。例えば1月1日に初回ビルド(とインストール)、1月5日に2回目のビルドを行った場合、1月12日まで有効ではなく、1月8日まで有効です。有効期間内にビルドしなおしても有効期限が更新されません。私はこの挙動を認識しておらず、大会数日前にビルドしなおしていたにもかかわらず、大会の朝にアプリが起動できなくなり焦りました。

この挙動と対策については以下のサイトが参考になります。

無料の開発者アカウントで iPhone にインストールしたアプリの有効期限を更新する方法 - Neo's World

Apple Developer Program に登録せず、無料の Apple ID アカウントで iOS アプリを実機にインストールした場合、プロビジョニング・プロファイルの有効期限は7日間となる。 「Automatically manage signing」を利用するとプロビジョニング・プロファイルを自動的に作成し、期限が切れてからの再インストール時は自動的に有効期限を更新してはくれる。しかし、7日間経って期限が切れるまでは、プロビジョニング・プロファイルを更新してくれない。

通信仲介用のMacがスリープし、接続切れ

将棋の通信プロトコルの都合で、iPhoneと対局サーバの間にMacを仲介させていました。Macは電源アダプタに接続しているときはスリープしないようにしていたのですが、電源への接続を忘れており一定時間でスリープしてしまい、通信切断が発生しました。接続を忘れた理由は上記のプロビジョニングプロファイルの有効期限切れが発生し、急遽MaciPhoneを優先接続する際に電源ケーブル(USB-C)を流用したためです。テスト対局時に発生したので本番への影響はありませんでしたが、スリープに入るまでの時間によっては本番で失敗していたので危険でした。

対策は対局開始時に電源接続を確認することです。

iPhoneのスリープ

iPhoneは一定時間操作しないとスリープに入り、アプリの動作が停止してしまいます。スリープさせない設定も可能ですが、普段持ち歩いている端末なのでこの設定は不便です。大会前の検証中にスリープが発生したため、事前に対策していました。

対策:アプリ内でスリープを防止するAPIを呼び出す。SwiftUIで以下の処理により対応できる。

UIApplication.shared.isIdleTimerDisabled = true

iPhoneの電源接続忘れ

対局の合間に、将棋AIを止めてLINEなどを確認し、将棋AIを起動しなおした際に電源の接続を忘れ、対局が進みました。電池残量60%程度になったところで気づいて電源を接続し、実害はありませんでした。

対策は、対局前の操作手順を壁に貼るなどして、見落としをなくすことです。また、バッテリー状態を取得するAPIを用いて、画面上に警告を表示することも考えられます。

iPhoneへの電話着信

対局中は他のアプリの通知などが発生しないよう「おやすみモード」を有効にしていましたが、電話は着信する設定になっており、実際に電話が着信しました。その結果、アプリの動作が数十秒停止しました。電話を取らずに呼び出しが終わると動作が再開したため負けにはなりませんでしたが、残り時間がわずかな場合に起こっていれば負けていました。

対策は、「おやすみモード」の中の詳細な設定で電話の着信をしないように設定することや、機内モードを有効にする(WiFiはONにできる)ことです。

以上のようなオペレーションミスがありましたので、次回は対策して臨みたいと思います。