2021年1月31日日曜日

将棋びぎなーずを作った

将棋びぎなーず というサイトを作りました。 名前で中身はだいたいわかると思いますが、将棋初心者のためのサイトです。



駒落ち教材の必要性

将棋を教えるのって、今でも教材が充実していない状況があります。 いきなり平手はあまりにも学習効率が悪いので駒落ちから入るのですが、 そこがいきなり大問題で、いい感じの駒落ち教材があまりないんですよね。 絶版の書籍をいくつか読み直してみたのですが、 幼稚園の子が読むにはさすがにツライものがある。

特に二枚落ちは変化が多すぎてこれは無理だなと思いました。 二枚落ちより前なら私もかなり定跡を覚えていたのですが、 二枚落ちは覚えているべき変化もあまりきちんと覚えていないことがわかって、割と衝撃でした。 というかとにかく変化が多いので、覚えるよりは 90点の手を積み重ねられる実力が必要になる。 今見るとあえて変化を増やしてる感を凄く感じるので、説明は 1/10 くらいのコンパクトなものでいいんじゃないかと思う。 駒落ちが得意ではなかった理由も、定跡をきちんと覚えてないからと、今ならわかります。 …しかしそもそも、子供はそこまで正確に覚えてないことのほうが多いんじゃないかな? とも思ったりしました。 そのへんをなんとかしたい。

綺麗な指し方を知る大切さ

私は二枚落ちはとても大切だと思ってますが、 それは基本的な攻めと受けの概念が身に付いてくる境界線が二枚落ち前後にあるからです。 境界線を超えてない子が平手を指してもほとんど伸びないですが、 境界線を超えてさえいれば、二枚落ちは必ずしも完璧なクリアを待たなくても良いのかなと思ってます。 境界線とはどのようなものかというと、(1) 定跡を不正確でも覚えることができ、(2) 基本的な攻めと受けができ、 (3) 7手くらい先を考えられる素養ができている、です。 そこまでくれば平手は学べるのかなと思っています。 平手をやった後に二枚落ちをやってもクリアできるレベルには来ているとも言えます。 だから二枚落ち以降は駒落ち特有の考え方を学ぶより、平手で伸びる子が増えてくる事も多いんじゃないのかなと思ったりします。

そのようなことを考えていくと、変化の多さを徹底的に覚えるより、基本的な攻めと受けの考えを作る教材がほしいなと思いました。 幼稚園の子でもなんとかわかるような簡潔な内容で、綺麗な指し方をすばやく積む教材がいいです。 ということで 棋譜再生ライブラリ から作り始め、(最初の部分だけ) 完成したのが 将棋びぎなーず です。 まだ完璧ではないですが…作りたかったことの 1/10 くらいはできたかなあ。

YouTube っぽくない教材

巷には YouTube っぽいものがどんどん増えていますが、私は時間効率的な理由で利用することはほとんどありません。 動画ってうまく使わないと凄く時間効率が悪いです。 もっと時間効率のいい学習サイトを前々から作ってみたかったので、そのような構成にしてみました。 動画解説は音声読み上げで何とかなるし、今後どんどん精度も挙がっていくはずです。

まあ実際にやってみると音声読み上げの精度はイマイチのため 2-3年後に期待という感じですが、 不満のある箇所は後からいくらでも修正ができるのが良い点です。 プログラミングに慣れていれば作るのも遥かに簡単です。


中身は結論ベースで書いてるので、結構使いやすくできたと思う。 ルビ振りが大変だった。

JavaScriptで動く将棋の棋譜再生ライブラリ kifu-viewer を作った

JavaScriptで動く将棋の棋譜表示ライブラリ kifu-viewer を作りました。 ひとまず使えるレベルまできたので公開してみます。



少し思うところがあり将棋のサイトでも作ってみようかと思ったのですが、 いかんせん JavaScript で使いやすい棋譜表示ライブラリがない。 Flash なら結構たくさんあったんですが、サポートが終了してしまったものはどうしようもないので作りました。 ゼロから作るよりは、良さそうなものを改良したいと思い、ライセンス的に利用しやすい kifPlayer を改良させてもらいました。 kifPlayer はレスポンシブ表示に強いのが特徴です。

将棋盤の表示って、画像を使うと微妙に軽量さが欠けてしまうので、使わないか選択できるライブラリにしたいと思っていました。 あと決まりきった UI が多いので、柔軟性のある軽量ライブラリが欲しかった。 具体的には kifPlayer を以下のように改良しました。
  • Vanilla JS
  • jQuery と Snap.svg を削除して 21KB で動作するように
  • レンダリングをかなり高速化
  • UI をカスタマイズしやすい実装に
  • 外部依存は Material Icons + Bootstrap だけ (依存ゼロ可能)
  • カスタム化機能 (UI, コメント, イベント)
  • 完全なクラス化をして名前空間を綺麗に
  • 複数棋譜の同時表示に対応
  • キーバインド対応
  • 駒落ち対応
  • 変化の分岐に対応
  • 様々な GUI の表示改善とバグ修正
  • 軽量高速なので局面図表示ライブラリとして利用可

改良しまくってるので kifPlayer と見栄えは似ていますが、原形をあまり留めてません。 同じ名称だと逆に紛らわしいと思われるため kifu-viewer という名前で配布することにしました。 超軽量ながら他のライブラリにはない機能がたくさん入ってます。 ちなみに IE11 は Microsoft でさえ 2021/08/17 でサポートが終了する現状なので、無視することにしました。 サポートしたい人は Babel でトランスコンパイルすれば良いだけだし、 無視すれば ES6 + esbuild で最高の開発体験が得られるので、そろそろ切っても良いよね。

実装のお話

この手のライブラリで一番実装を悩むのは棋譜のファイル形式ですが、最近よく使われているフリーソフトでは kif形式が基本に見えます。 その反面 ki2, csa, psn, psn2, sfen, jkf など形式が昔より増えてて、とてもサポートする気が起きません。 これだけ形式が増えると下手にサポートするより完璧な変換ライブラリを作ったほうが良いと思う。 しかしそれを組み込むとファイルサイズが無駄に大きくなってしまいます。 Web 上では minify して表示が基本なので、やる気がしない。 またファイルサイズという意味では、kif形式はファイルサイズが大きいのが欠点ですが、その原因の大半は消費時間の記述です。 消費時間を削れば、ファイルサイズはたいてい 1/2 以下になり、かなり最適化された形式になります。 正直、もともとの実装通り kif形式だけサポートすれば良いのではないかと思いました。

またコメントの処理ですが、セキュリティと記述能力のバランスを取るのは難しいです。 記述能力を重視した innerHTML をデフォルトに使っているので、外部サーバからデータを読み込むようなことはしないほうが良いです。 なおオプションでセキュアモードを ON にできるようになってます。 ON にすれば外部サーバから読み込んでも安心。


ちなみに kifu-viewer を使って作りたかったのは、将棋びぎなーず というサイトです。 名前でだいたいやりたいことわかると思いますが、詳しい説明はこちらkifu-viewer はこのサイトでバグや機能のチェックをしながら作ったので、結構使いやすくできたと思う。

フリゲとお金

ゲーム制作の難しさの話 (下) が色々バズってました。 どれもなかなかインパクトがある話、かつとても参考になったので少しまとめておきます。 逆に以下のような成功例も見かけました。 ゲーム制作というか○○制作って金銭的な問題を抱えることが多いかと思います。 だからこそ多少なりとも見返りを得るための仕組みは、最初から用意したほうが良いと思います。 例えば以下のようなことはパパっと浮かびました。
  1. サイトを作って広告を付ける
  2. Ci-en などで制作情報を公開してサポートを受ける
  3. 規約を付ける
  4. 投げ銭フォームを作る
  5. 著作権の支払い対象とする
  6. サイト上でプレイしてもらう (広告)
  7. ガチャなどの課金要素を付ける
  8. フリゲ+αで知名度を上げる
そして歴戦の強者たちのありがたいツイートを見ていると、 もっと色々なことを話していて参考になることが多かったのでまとめてみました。

歴戦の強者たちのありがたいツイート

DLSite のヒット作を見てるとまさに至言という印象…。



勉強になります。

2021年1月10日日曜日

英単語クイズを作った

英単語クイズ を作りました。 英検5級くらいまでの、画像を見て英単語を答える学習アプリです。音声のヒントとかもある。 英単語アプリは色々あるけど、基本的にはリンクして覚えることが大切です。 高校生くらいになると意味を思い出せれば良いだけのことが増えるけど、小中学生は文字としても書けないといけません。 しかし実際には目と手をおそろかにしたアプリが多いので、目耳口手、エピソードとリンクさせるように作りました。 英単語帳よりは面白くて良いと思う。

実際使い込んでみると、音声を付けたクイズは複数形の聞き取りに良いなと思いました。 アルファベットの認識はだいたい安定しているけど、書く位置などを注意して綺麗に書かないと時々バツにされるイメージ。 キャンバスが小さ過ぎると手のブレなどで精度に悪影響を受ける感じだったので、キャンバスを大きくしたら識別ミスは減りました。 あと学習方法を色々ハックしたところ、統計上の精度はたいして変わってないけど体感的な精度がかなり上がりました。 それでも文字の汚さでバツにされる確率はそれなりにあるので、さらに上位2件まで問題に合わせて○にするお気持ち入力システムにすることで、違和感はほとんどなくなりました。



暗記済みリストを作って出題を変えるか悩んだけど、小学生の子は反復練習がすごく重要なので、とりあえず付けない方針にしてみた。 教科書を見ていても反復的に覚えているし、単語数もそこまで多くないので、反復練習で大丈夫そう。 ただ中学生以降は暗記済みリストを消していかないと効率が悪いだろうなあ。

ちなみに中学生 (英検4級以上) も同じ仕組みは使えますが、いい感じの画像が出なくなってきます。 検討段階では微妙だったのですが、良さそうだったら英検4級まではサポートしてみるかも。 特に意味はないけど Gopher くんがマスコットになってます。


著作権について

Google カスタム検索を使うと作るのが簡単なアプリですが、サービスが OK かどうかは、 Google カスタム検索の利用規約と著作権法を慎重に読む必要があります。 どうやら大丈夫という認識が得られたので、一応メモを書いておきます。

まずは Google カスタム検索の利用規約です。

「サイト」とは、利用者が JavaScript または同様のプログラミング(以下「コード」)を挿入し、Google 検索ボックス(またはサイトのユーザー(以下「エンドユーザー」)が検索クエリ(以下「クエリ」)を入力するためのその他の手段)(以下「検索ボックス」)を表示する 1 つ以上のウェブサイトを指します。
上記の文章およびいくつかのサンプルを見ていると、 ロゴの挿入があれば必ずしも検索ボックスでクエリを発行する必要はなさそうです。 一応、ガイドライン はこちらにあります。 結構ゆるい記載なのですが、前見たときと少し違って、検索結果に表示されていれば大丈夫みたい。 何となくだけどロゴのキャッシュの問題とかもあるのかな。

利用者はエンドユーザーからクエリを受け取り、そのクエリを Google に転送するものとします。
ただしエンドユーザーからクエリを受け取って転送する必要がありますし、

i)自動化された手段、不正な手段、詐害的手段、または他の不法な手段(クリックスパム、ロボット、マクロ プログラム、インターネット エージェントを含むが、これらに限定されない)によって、直接または間接的に、クエリあるいは検索結果の表示回数またはクリックを創出する行為。
は禁止されています。つまり自動表示だったり、連続的な表示は駄目ということですね。

ここまでの記述は、おそらく日本の著作権法に遵守するための記述です。 著作権法ではエンドユーザの要求がなく一方的に検索結果を提供すると、「検索」の定義を満たさなくなってしまいます。 「検索」においては、エンドユーザの要求であったり意図が必ず必要です。 英単語クイズではエンドユーザが意図的に「これなあに?」を押さないと画像の検索はしないので、大丈夫のはず。 念のためクエリをボタン経由で発行する意図も伝えて変なことが起きないようにして、石橋を叩きました。


作ってから気付いたけど、Firefox は音声読み上げの API 自体は存在するものの、読み上げの音声が存在しないので、ようするに動かないみたい。 しかもイベント発火でそれを検知するからサポートしているかどうかの区別が微妙にしにくい。 何もエラーを出してないけどひとまずいいか…。Chrome/Edge/Safari では動くのを確認しました。

2021年1月5日火曜日

中学英語の実際のレベルを調べてみた

今の中学生 (〜2020まで) の英語は実際どれくらいのレベルかと思い調査してみました。

1400語を学ぶものの効率は良くない

まず今の中学生は 1200語ほどを習うという建前なのですが、実際にカウントしてみないとわからないので、各教科書に含まれる単語を調べてみました。 教科書の単語リストはほとんどがネット上に公開されているので、すぐわかります。 結果、日本で使われる教科書 (NEW HORIZON, TOTAL ENGLISH, etc.) はどれも 1400単語くらいとわかりました。 熟語などは除外して、単純に原形の単語でカウントしました。 教科書の 90% ほど理解していると想定すれば、確かに 1200語になります。

ただこの 1400語は教科書ごとにバラバラなので、どれくらい重複しているのか調べてみると、 なんと 600語くらいしか一致していませんでした。全然一致してないやんけ…。 重要語をいくつ学んだかという指標でこれまでの教育を振り返ると、 多くて 700語くらいしか学んでいないという事になります。 これが意味するところは、公立高校入試では習っていない単語が出る確率が高くなるので、 出題レベルを大きく落とす必要があることだと思います。 いきなり教育の闇を見てしまった気が…。

英語教育改革後も会話は大変そう

2020年からは英語4技能が意識された教育に変わりました。 英語を話す際の必須単語リストは海外でたくさん公開されていて、 非ネイティブでも最低限会話に必要とされる重要語数は 1500語 (VOA, etc.) です。 数%くらいは単語に議論の余地があるので 1400 としても、英語4技能を謳うのであれば意識しておきたい数字です。 私も当然ながら必須語を 600 くらいしか学んでない時代の人間なのですが、 この数字を見ていると英語できちんと会話できないのは当然だなあと思ったりしました。 ちなみに今の中学校の教科書をすべて足して uniq した単語数は 3400 なのですが、このうち VOA に含まれる語は 950 です。 この結果からわかることは、既存の中学英語では全然足りないって事です。

ついでなので今後小学生が習う単語数もカウントしてみました。 結果はだいたい 700語でしたが、VOA に含まれる語は 150 でした。 まあ最初のうちは覚えやすいことが重要なので、ズレがあって構わないと思います。 問題は中学のレベルが今後どこに落ち着くのかです。 今後の中学生は 1200語から 1600〜1800語が基準となるとのことですが、 真面目に会話できるレベルを検討すると、VOA に含まれる語をもっと学ばないといけない。 でも難しそうなので、VOA 基準で 800 いけば良いところかなと思います。

何となく気になって調査してみましたが、数字で見ると英語4技能ってやっぱ難しそうです。 英語教育改革後も VOA 基準に到達するのは大変。 まあゆるい英語を小学生から学ぶのは、良いことだと思ってます。

2021年1月1日金曜日

2020年発表作品で特に面白かったフリーゲーム

フリゲ2020 が発表されていました。 私は特に面白かった作品は毎年あえて少なく選んでるけど、 今年は5個に絞るのは無理かも…と思い10個にしました。 それでも選びきれていない気がする。 2020年は豊作過ぎたかもしれない。
  1. ロストヘヴン -Lost Heaven-
  2. DAY:0 (:FIFTY) (紹介記事)
  3. SHATIKU QUEST2 (紹介記事)
  4. 天翔のマーキナリエ (紹介記事)
  5. QualiaNext-道を照らして- (紹介記事)
  6. クラスメイズ (紹介記事)
  7. イリスのゲーム (紹介記事)
  8. Dark Malice (紹介記事)
  9. リリムルワールドへようこそ! (紹介記事)
  10. 番外: Fanastasis (紹介記事)






Fanastasis は去年1位で選んだので今年は番外に。 間違いなく 2019 & 2020 で一番ハマった作品です。 2020年は、同じくらい ロストヘヴン -Lost Heaven- が凄かったと思ってます。 王道ストーリーであれだけワクワク感のあった作品は今までなくて、歴代1位の完成度だと思います。 最終盤のストーリーは特に凄かった。 おっさんが活躍して終盤に白熱するRPGに外れはない…!

DAY:0 (:FIFTY) もタワーディフェンスの新しい道を切り開いた作品として、おすすめ。 残りの作品もレベルが非常に高く、年度が違えばどれも一位でおかしくないレベル。 総合的に見ると SHATKU QUEST 2 が頭一つ抜けてた気がします。 正直レベルが高く10個を選ぶのも難しくて、ハマった順で選びました。




今年は感想を書けていなかったのはロストヘブンだけでしたが、 もう少しウディコンの紹介をしたほうが良かったかも知れません。 あとから見返すと印象的な作品ばかりだったなあと思います。 ランキング上位の推定プレイ時間が長い作品はまだ未プレイ/未クリアのものもあるので、そのうちやってみたいです。