2019-09-05

builderscon tokyo 2019 に参加

対戦ゲームに学ぶ、フレームワークの設計技法とAIのアルゴリズム入門

対戦ゲーム、主にボードゲームのルールやAIの実装に関する話。

ゲームのAIは専門外だが開発の過程でそれらを実装する機会は何度かあった。毎度Wikipediaやサンプルソースを読みながら苦労して実装しており、そこそこのものを作ってきた自負はあるが体型立った知識は自分には無い。

という中での @qsona さんの発表。一通りの技術やハマりどころを網羅的にご説明された上で、とにかく分かりやすい。説明しきれない箇所はnoteにまとめ済という親切ぶり。断片的だった知識が自分の中で統合されていくような、とてもありがたい内容だった。

とても興味深かったのは、ゲーム木の状態の変化に着目することでゲームの面白さを定量化できるのではないかという主張。

ゲームのルール考案では「一発逆転要素」「運ゲーNG」と言ったキーワードが飛び交う。当然の要求なんだけど要注意で、この手の話は皆が感覚で語るので収拾がつかない。そこを定量的に測ろうというのは自分にとって目から鱗。とある案件で四苦八苦していた2年前の自分に教えてあげたい。

いちばん心に残ったのは、発表者の @qsona さんの人柄だ。発表の途中、水分補給の小休止ついでにTwitter上の反応を軽く見る一幕があったのだが、「うわ!みんな面白いって言ってくれてる!嬉しい!!」と、壇上で無邪気にはしゃいでいた。このピュアな人柄に皆を楽しませたいという真摯な想いが加わり、この素晴らしい発表になったのだと思う。自分もこうありたい、と思った。

非同期処理の歴史から見たコンピューティングの進化

文字通りの内容なのだが、座学・実務、双方の面より価値があった。

どうして非同期処理が必要になり始めたのかから始まり、それにより発生した実装上の課題、克服のための言語の進化、限界、新たなパラダイム、そして最新動向…

「非同期処理」といういち側面よりコンピューターやプログラム言語の歴史をダイジェストで体感させてもらえる 内容だった。

歴史は重要だ。

例えば自分は JSer なので async/await には一家言ある。Promise のシンタックスシュガーであることを知らぬまま逐次処理の感覚でコードを書くとパフォーマンスに無駄を生じさせることがある、よくある指摘の1つで自分も同意見だが async/await が何故生まれ何を解決しようとしているのか理解した人は概ねこの間違いを侵さない。歴史は重要なのだ。

歴史を知り言語の思想を俯瞰するという側面で、とても実りの多い内容だった。

PWAゲームを開発しネイティブアプリ化までした中での課題と対策

ゲーム、アセット4G超、マスタデータ50M超、数字だけで大変さが垣間見えるがそれを PWA で実装したという話。

ゲーム開発は泥臭い。数フレームの描画や入力の遅延がUXに致命的な悪影響を与える世界では手段を選ぶ余地など無い。一方フロントエンドの開発は設計やテスタビリティを重視することが多いように思う。この矛盾する要求をどう解決しているのかを聞くために足を運んだ。

はずだったのだが、その期待は裏切られ続けた。なんてことはない、普通に泥臭い実装を愚直に積み重ねていた。特にフロントエンドというソース丸見えの世界でクラッカー(チーター)の攻撃からゲームを守る話は、終始頭の下がる思いだった。

「わざわざそこまでやるやつはいないだろう」と誰かが言うたびにわざわざそこまでやるやつが現れる

次に紹介するセッションで引用されたあるハッカーの言葉だが、これはその先だ。わざわざそこまでやるやつが現れる度に、それを塞いでいった、という話。いいゲーム、公平なゲームを提供しようという情熱の為せる技だ。

もしもハッカーの「サイバー攻撃日誌」が読めたら

一言でいうと、圧倒された。

企業向けセキュリティ診断サービスの紹介なのだが、よくある脆弱性診断ではなく、専門のチームが実際にクライアントのシステムに攻撃を仕掛けることで課題を洗い出していく。

攻撃の手段は問わない(※1)。フィッシングやマルウェアは言わずもがな、ソーシャルエンジニアリング、社員証や入館証の偽造、物理侵入、ありとあらゆる手段を用いてクライアントに擬似的な攻撃を仕掛け、その資産を奪取する。

どよめきと静寂が繰り返される会場の雰囲気を表現する文章力を持ち合わせていないのが悔しい限りなのだが、この表現が最も的を射ていると思う。

手法自体は少しでもセキュリティをかじった人であればよく知っているものばかりだ。しかし防御側でなく攻撃側(登壇者自信が自分をそう表現していた)の視点に切り替えただけで見える景色が全く変わる。以下が登壇者である Tsubomitch 氏の発言だ。うろ覚えなので細かい言い回しは異なるかもしれない。

「パスワード、ハッシュ化されてますけどクラックすれば良くて」
「フィッシングは数撃ちゃ当たります」
「知識認証?マイドキュメント辺りに答えが」

「MITMでも盗れるんですけど面倒なので…」
「対応や横展開が早いとやりにくい」
「二要素認証がとにかく嫌い」

なるほど。

自分はたまに防御側としてゲームのチーターとコンソール越しに「戦う」ことがある。いつまでたっても攻撃が止まずどうしようか考えあぐねた時は、相手の人物像を思い浮かべることにしている。頻度や手口、攻撃の停止や再開のタイミングを見れば相手の想像はつく。そこで相手が一番嫌がりそうなことをやってみる。執拗な攻撃がこれですんなり止んだ、ということが何度かあった。

攻撃者の思考パターンや試行錯誤の過程を記録した「サイバー攻撃日誌」のようなものを(もしも)読むことができたなら、どのようにシステムを守ればよいかに関する新たな洞察を得ることができるはずです。

https://builderscon.io/builderscon/tokyo/2019/session/7d4a4b60-298e-4266-b11d-60dfcebada54

自分なりの試行錯誤ではあったが、CfPにも書かれていたことをまさにやっていたようだ。今までは想像の中だけだったが、今回は実際の「攻撃側」の話を聞くことができ、大変エキサイティングな時間だった。名残惜しい点があるとしたら、「登壇者と聴衆」ではなく実際の「攻撃側と防御側」としてこのエキサイティングな時間を…、いや、いくらなんでもRed Teamは相手が悪すぎる。やめておこう。

※1 もちろんクライアントとの間で取り交わされた事前の取り決めの範囲内に限る。