王座戦お疲れさまでした。4-1-1で9位でした。
優勝の高橋七段は名人戦に続けて二つ目のタイトルとなりましたね。いや~強すぎる…世界戦でも素晴らしい試合を見せてくれることでしょう。


準優勝の佐谷七段も世界選手権の切符を得たわけですが、偶然でしょうか、この二人はマイナビ出版からオセロ有段者向けに本を出版した(する)二人でもあります。

佐谷七段の現代オセロの最新理論、みなさん読まれましたか?僕も出版前から読ませていただいて、内容にも少し口出しさせていただいたのですが、佐谷七段の執念ともいうべき努力の甲斐あって、現代の高段者がオセロをどのように考えているかがコンパクトにまとまった一冊になっています。めちゃめちゃいい本なので、まだの人はぜひ読んでください。

高橋七段の『高橋晃大のオセロ必勝手筋100(仮?)』は10月発売のようです。
akkunn

実はこちらも草稿を読ませていただいて、いくつかコメントを加えさせていただいているのですが、かなりハイレベルな問題集になっています。100問という限られた数で如何に効率的に手筋を学べる問題集を作り上げるかは難題だと思いますが、こちらもまた高橋七段が相当な時間をかけて問題を選び、手筋を精選して書き上げたんだろうということが伝わってくる内容です。そのぶんだけ一問当たりが濃密になっており、盤に並べて腰を据えて臨むことが推奨されますが、名人/王座の見ている世界が具体例とともに提示されており、僕にとっても大変勉強になりました。



さて、そういうわけで近年は書籍の側でもオセロ界的にはかなりの進展があるのですが、実は王座戦より一週間ほど前、水面下で(?)オセロアプリ側で大きな進展がありました。
オセロアプリの開発者の方は何人かいらっしゃって、それぞれに個性のあるアプリを提供してくださっています。僕も用途に応じて使い分けているのですが、今回はiosアプリ「棋譜box」を紹介したいと思います。

棋譜boxは以前からあるiphone / ipad向けの棋譜管理アプリで、その利便性からユーザーも多いかと思いますが、7/9に大型アップデートがありました。これが個人的に大ニュースでした

kifuboxupd

魅力的な機能が複数実装されたわけですが、僕が注目したのは「棋譜一括インポート」機能です。というか、実はこれは僕が開発者の方に要望を出して実装していただいたので、僕が注目するのは当然なのですが…笑

これは何かというと、形式を守ったcsvファイル(エクセルみたいなやつです)を用意することで、手動で一試合ずつコピペなどをする必要がなくなり、大量の試合を一気に登録できるようになったわけです。


exupd
(字が小さくて読めな~~~い!!!!)


公式サイトに大きい字で説明がありますが、ともかく大量の棋譜を一括登録することができるというのはすごいことです(12万局以上は未知の領域らしいので注意)。どうすごいかというと


S__3285027


ネットオセロの棋譜(これはkurnikというサイトから8石差以内の対局を6万局ほど拾ってきました、名前がないのは後述)を大量に読み込ませることで


S__3285026


フォルダ内でどの進行がどのくらい打たれていて、勝率はどのくらいだとかいうことがわかったり


S__3285029

自分(や他の特定のプレイヤー)がどのくらいの終盤石損をしているかが計算出来たり(これはプレイヤー名の登録が必要です。さっきとは別のフォルダを見せています)



S__3285028

フォルダ内のプレイヤー全員の終盤石損が計算出来たりします。

他にも検索機能から特定のプレイヤーの試合だけ抜き出せたりと、まあ棋譜を大量に集めたときに想像できるだいたいのことができると思って良いかと思います。
データを眺めるのが好きな人にはたまらない機能ではないでしょうか。

実はPC版Wzebraではデータベース機能で似たようなことができるのですが、棋譜boxと比べて良いところも悪いところもあります。
棋譜box側の良いところは評価エンジンがedaxであることや終盤石損まで自動集計していること、タブレット端末で簡単に使える利便性などが挙げられます。一方棋譜box側でできないことはタブレット端末の限界による部分が大きいので、現状タブレットで扱えるデータベースで理論上の最高に近いものが提供されているくらいに思っちゃって良いでしょう。


じゃあ肝心のデータベースはどうやって作るの?
というのは当然の疑問です。これには少しだけ技術が必要になります。しばらくややこしい話になるので興味ない人は飛ばしてください。

~~~オタク話はじめ~~~


現在僕が作ってみたものに関しては
➀Wzebraのデータベースに用いられているWTHORというフォーマットを棋譜box用のcsvに変換
②オセロクエストの棋譜を収集してcsvを作成
の二種類です。以下で簡単に説明していきます。

ただし、②に関しては僕がスクレイピング初心者であるために、かなり注意を払っているつもりですがもしかしたら使用しているサイト側にご迷惑をおかけしているかもしれないため、すぐに真似できる形で公開するのは控えてあらすじだけにしておこうと思います。一方➀は仕組みだけわかれば簡単なのでこれもあらすじだけです。つまりあらすじだけ書きます。
やってみたくなってpythonが使える人は読めばわかると思います。僕がpythonでやっただけなので、他の言語が使える人は適宜翻訳してください。



➀Wzebraのデータベースに用いられているWTHORというフォーマットを棋譜box用のcsvに変換

WTHORについてはここによくまとまっています。
実はフランスのオセロ連盟(たぶん)がこの形式で大会の棋譜をまとめて公開してくれているので、それが簡単に手に入ります。

あとは.wtbなどのファイルを適当なpythonで開いて弄ってpandasあたりでcsvにまとめれば終わり。ね、簡単でしょう?
と思いきや選手名がうまくマッチしない(Wzebraで読み込んだ場合と合わない)謎の現象が起きているのでそこは未解決。たぶんなにかのケアレスミスだと思います。
注意点として針落ちの棋譜が以降60手目までH8で埋められているという謎仕様なので気をつけないと意味不明な棋譜になります(書いてから気づいたが、これは僕のプログラムのバグでした。失礼しました…)。棋譜は16進数で2桁ずつ読み込んでから10進数に直すことで盤と対応づくのにも注意(あほなので最初全部10進数に直してから2桁ずつ読んでいた…)

②オセロクエストの棋譜を収集してcsvを作成

基本的にリバーシ対戦履歴検索βさんで試合ページのリンクを出してもらって、それをオセロクエストの対局ページから棋譜を取得するさんに片っ端からわたす作業を自動化することになります。後半部分はM岡さんにwiresharkというのを使えと教えてもらったのですがまだよくわかっていない…

僕はpythonでseleniumを使いました。ブラウザはgoogle chrome canaryのheadlessモードとかいうやつを使ってます。これは昔この記事を参考にしたためですが、今見たらstableのchromeでもheadlessモードが使えるようになっていたみたいなのでそちらを使うべきでしょう。
あとは適当にスクレイピングすればよく、そのへんは個別にググったほうが早いのでそちらに任せます。
ことあるごとに数秒のsleepを入れているので大丈夫だと思うのですが、ちょっと怖いので近いうちに識者に聞こうと思います。


~~~オタク話終わり~~~

という感じでデータベースを作ってみました。
まだそれほどたくさん棋譜を集めたわけではなく、精々合わせて数万程度ですが、それなりの分量になったら公開も考えています。
特にオセクエのものは自分が含まれるのが気になる人もいると思いますし、これでオセクエで打つのを委縮させてしまうようなことは望んでいないので、公開するとしたら選手名は隠します。
それでも絶対データベースに加わるのはいやだという方がいたら、公開前には告知するのでその時に連絡ください。

上を理解できた人にはわかると思いますが、普通にアプリで対戦履歴から試合を見てそれを棋譜boxに登録する作業を自動化しただけで特別なことをしたわけではないので、特に許可は必要ないんじゃないかと安直に考えていますが、棋譜についてはオセロ以外でも色々と難しい問題のようなので、公開はもう少し慎重にやります。

あとは個人的興味で自分の終盤石損が気になる方がいたら、僕がチェックしているアカウントに含まれていたら答えられます。
だいたい200位までの中からなんとなく中の人に見当がついている人だけをピックアップしているので、隠しアカウントの人はリストにいなくても怒らないでください。

近いうちに親しい高段者の許可をとれたら終盤石数とレートの相関について記事を書こうと思います。
終盤は本当に大事だとわかっておもしろい。

おわり