kuroto@blog:~$

SŌBAN 〜全部5列ではなかった〜

実機検証: Mac Studio(Apple Silicon M2 Max / 32GB)で運営者が実行・確認しています。体制

本ページはアフィリエイト広告・Google AdSense(プロモーション)を含みます。詳細

目次

SŌBAN は、そろばんを練習するアプリではない。そろばんの力を測って、弱点を割り出し、その弱点を狙った問題を作るアプリだ。対象は初心者ではなく、3級から十段まで。競技をしている人と、教えている人。

要件定義書が届いたのは 2026-08-30。画面の中で問題を出し、答えを受け取り、1問ずつの記録から「連続繰り下がりのときだけ遅い」のような癖を拾う。そこまでは画面の中で完結していた。

9月5日の朝、クライアントから PDF が1本届く。ファイル名は「珠算段位 1~12見取」。一緒に来た問いは短い。

じゃあ共有ボタンも配備できるということ?

できる、と AI は答えた。iOS の共有シートを使えば、権限を1つも増やさずに AirDrop・メール・LINE・「ファイル」への保存・プリントがぶら下がる。そこから話が広がった。問題を PDF にして配れるなら、紙で解いた答えをアプリに戻せる。検定の形で解いた結果を、記録証として1枚にできる。

そろばんを教える人は、紙で教えている。紙の練習がアプリの分析に流れ込めば、既存のそろばんアプリには無いものになる。

寸法を持たない紙

AI が最初に作ったのは、寸法を1つも持たない紙だった。

何を、どの順で、どう並べるか。そこまでは決める。余白・段組み・字の大きさ・罫線は決めない。作業記録にはこう残っている。

大会の問題用紙がまだ手元に無い。今決めると、実物が来たときに作り直しになる。

実物が来たら、骨組みを HTML に変える1本だけを書き足せばいい。型は変えずに済む。筋の通った段取りに見えた。

寸法の代わりに決めたのは、紙が画面から離れたあとの扱いだった。

紙で解くと、1問ずつの時間は測れない。全部の題が最初から見えているので、先読みもできる。この2つには、アプリがもともと持っていた印がある。timingTrusted: false(時間を信用しない)と lookahead: true(先が見えていた)。速度の分析はこの印が付いた記録を最初から外しているので、紙の記録にそれを付ければ、新しい除外の規則を1つも足さずに済む。正誤は影響を受けないので、弱点の分析には効く。

空欄は、記録を作らないことにした。空欄を 0 と読むと、白紙の紙は「全問 0 と答えた」になる。正答率 0% が入り、段が下がる。3日前に、毎日の練習の画面で実際に起きた形だった。

検定の形で解いた紙には記録証を付けるが、合格・不合格は刷らない。合格点は、公式の資料で確かめられていない。画面で出していない判定を、紙でだけ出すことになる。紙は人の手に渡って独り歩きするので、刷れば「アプリが合格と言った」という事実だけが残る。

氏名の欄は刷るが、アプリには保存しない。名前を持てば、審査で申告するデータ収集の中身が変わる。書くのは紙の上だけ、手で。

その日の夜、クライアントの一言が来る。

実物の大会用紙はダウンロードしてと言ったじゃん

実物は来ていた。朝のうちに、PDF の形で。

6本だけ測った

日本珠算連盟のサイトには、検定試験の見本が公開されている。AI はそこから見本を取り、PDF の中を測った。取ったのは寸法だけで、問題の数字は1つも写していない。見本は全ページに【禁無断転載】とある。

測って分かったことは多かった。

分かったこと打った手
検定の用紙は A4 ではなく B4(257×364mm)A4 と B4 の両方を持ち、既定は家庭のプリンタに合わせて A4
見取算は 5題を横・10口を縦、列の間隔 133.95pt、1ページに3段で15題実測値をそのまま置く
乗除は1題1行に罫線(27.1pt ごと)。升目ではない罫線の表にする
式の記号は * / =アプリが先に選んでいた記号と一致していた

B4・10桁10口を入れると、公式と同じ5列×3段の15題が出る。それを検査にした。寸法の取り違えと計算の取り違えが、同時に見つかる形だ。

このとき測ったのは 6本だった。段位の見取算・かけ算・わり算、珠算の1〜3級。

開いてもらって出たもの

書き出した紙には、測っても見えない穴があった。

1つの要素に style を2回書いていて、字の大きさが効いていなかった。重複した属性はうしろが捨てられる。代わりの書体が偶然うまく収まるので、見た目は正しく見える。

見取算の10桁が、黙って8桁で出る。桁数の上限を、乗除の上限(8)で切っていたからだ。画面では10桁まで選べる。選べるのに、別のものが出ていた。 紙に書き出さなければ気づかなかった不具合が、画面の側にあった。

クライアントに開いてもらうと、さらに2つ出た。

日本語が全部化けた。<meta charset="utf-8"> を出していなかった。文字列の中に「計」が入っているかを調べる検査は通る。符号化は、文字列の外側の話だった。

列の縦罫が、枠を貫かずにずれて見えた。問題を <div> で並べていたからだ。幅を測れば「合っている」としか出ない。ここで、見取算も乗除も答えも、全部 <table> にした。罫線は表の仕組みが引くので、ずれようがない。公式の用紙に合わせて、縦罫は列の間だけ、横罫は見出しの下と「計」の上だけにした。口と口のあいだに横線は無い。

刷ってもらうと、白紙が1枚ずつ挟まる。4ページ中2ページ。紙1枚の箱に B4 の高さを固定していたので、A4 で刷ると残りが次の紙へあふれる。答えのページのように中身が短くても、箱が高いので必ずもう1枚出る。高さの固定をやめた。

書体にも、紙ならではの確認が1つあった。

SŌBAN は、そろばんの問題用紙らしい数字(1 を縦棒で書き、* を × の形で出す)のために、配布されている書体を1本同梱している。利用条件は印刷物の販売まで認めているが、改変は禁止。PDF に書体を埋め込むとき、使う字だけを抜き出す「サブセット化」が起きる。それが改変にあたるのかどうか。そもそも書体が本当に埋め込まれているのか。

アプリと同じ印刷の仕組みを Mac で走らせ、書き出した PDF の中を測った。そろばん書体は入っている。3,868 バイト、使った字だけの部分集合。抜き出したのはこちらのコードではなく OS の印刷経路で、その経緯は利用条件と並べて記録に残した。

file: で書体を渡すと、読み込めずに @font-face が黙って外れる。そうなると代わりの書体で刷られ、見た目はそれらしく整う。data: で埋め込んで渡すことで、はじめて載った。

見本を測ったときに見つけたことも、1つここに効いた。名数の題(金額の題)には、列の左端に ¥ が付く。同梱の書体に ¥ の字は無い。その1字だけは、代わりの書体で出る。

全部見ましたか

翌9月6日。クライアントがこう書いてくる。

PDFの問題列数、自動調整されているから揃っていない。 ダウンロードした公式の問題を見てもらって、規定を決めてください。 公式問題は全てダウンロードしたのですか? 全部見ましたか? 一部だけ見て判断していませんか?

一部だけだった。

見本の一覧には 28本あった。前日に測ったのは6本。残りの22本は開いてもいなかった。

紙の列数の決め方は「入るだけ入れる」。使える幅を列の間隔で割って、切り捨てる。A4・10桁なら4列、A4・2桁なら6列。桁が変わるたびに列の数が変わるので、刷った紙が揃わない。クライアントが見ていたのは、そのばらつきだった。

28本を全部取り直して、測り直した。AI の報告は「列数は例外なく5列」。

返ってきたのは2行だった。

全部5列ではないでしょ。ちゃんとみて、実態に合わせて管理して 君がダウンロードした pdf 全ページ確認して

1ページ目だけ

各 PDF の 1ページ目しか見ていなかった

検定の用紙は、1本が複数の面でできている。1ページ目が見取算なら、2ページ目は乗除で、列の数が違う。1ページ目だけを見て、そこに並ぶ5列を「例外なく」と書いた。

例外は、1ページ目にも1つ見えている。7〜10級の見取暗算(1桁)は 10列ある。それを「1桁専用の別の体裁」として脇へ置いていた。SŌBAN は1桁の見取算を注文できる。脇へ置いてよい例外ではなかった。

数え方そのものも壊れている。

  • 「隙間が 11pt あれば題の切れ目」として数えると、式の記号のまわり(最大 21pt)で1題が4題に割れる
  • 閾値を上げると、10桁の列の隙間(53pt)まで超えて、5列が1列になる
  • 字送りを PDF のフォント情報(/W)から読んでいなかったので、右揃えの列が桁の違う行で 8.6pt ずれ、5列が7列に見えていた

見本の数字は1字ずつ置かれている。テキストを抜き出すと、文字列の書き出し位置しか取れず、全部 x=0 になる。前日に列を数え損ねた原因はここにもあった。内容ストリームを1命令ずつ追って、1字ずつの座標を復元するところから書き直した。

「公式の最大は1級の6列」と置いていた上限も、読み違いだった。6列の見本は1本も無い。 枠の左右の線まで縦罫として数えていた。

全ページを数え直した結果はこうなった。

見取算・見取暗算(2桁以上)5
見取暗算 7〜10級(1桁)10
かけ算・わり算(2種目を左右に載せる級の用紙)2
かけ算・わり算(1種目だけの面。段位・7〜10級)1

列の数を決めるのは、用紙ではなく面。

もう1つ分かったことがある。桁が増えたとき、公式の用紙が減らしているのは列ではなく余白だった。列を減らす用紙は1本も無い。

SŌBAN の紙も同じ規則にした。見取算は5列で固定し、紙に入らないときは5列のまま間隔を詰める。題数が5で割り切れないときは、最後の段の足りないぶんを空の列で埋める。題番号も数字も出さない。乗除は公式と同じ30行で止める。

測り方は、スクリプトごとリポジトリに置いた。PDF は置かない。置くのは取得先・ハッシュ・寸法だけ。用紙は改訂されるので、次に触るときはハッシュを比べるところから始める。

題名だけで良い

9月7日、用紙のプレビューを見て、クライアントが言う。

ヘッダーが大きいから、一枚で収まる範囲なのに、収まってない 問題の生成内容がヘッダーに入ってる。ヒントになるものもあるからいらない。題名だけで良い

表題の高さは 154.4pt。公式の見本の実測値を、そのまま真似たものだ。

公式がそこまで空けているのは、年度・団体名・種目・施行日・採点欄が並ぶからだ。SŌBAN の紙には、そのどれも無い。 無いものの場所だけを真似た結果、A4・5口の紙は4段(20題)入る高さがあるのに3段しか置かず、135pt を白紙のまま次のページへ送っていた。

表題に刷っていた「注文の中身」も、紙に要るものではなかった。たとえば「答がマイナスの題が混ざる」。解く前に知ってはいけないことが、問題の上に書いてあった。

表題を題名だけにして、高さを 70pt まで詰めた。するとすぐ、2つ戻ってくる。

等級と制限時間は入れてよ 「A4判で印刷」の文字いらない

等級と制限時間は、どの紙かを示す名札であり、本番の条件でもある。注文の中身とは別物だった。戻した。

「A4判で印刷」は、2日前に AI が自分で足した1行だ。B4 の紙を A4 で刷る取り違えに、刷る前に気づけるように。紙の上の手がかりは消え、用紙の大きさは PDF 自体が持つことにした。

直した紙を開いて、次の一言。

被りすぎじゃろ! 位置の調整おかしいじゃん

等級と面の見出しが、表の枠の下に隠れている。

箱の寸法は box-sizing: border-box で、高さに上の余白(18.5pt)も含まれる。その箱に「高さ − 余白」を渡していたので、中身の入る高さが余白2つぶん足りなかった。70 を 75 に上げるような目分量の調整では、どこまで行っても合わない。

高さは、行の大きさを並べて計算で出すことにした。余白 18.5、題名 20.4、等級と時間 17.2、面の見出し 17.2、余り 2。合計 76pt。書き出しの CSS も同じ値を読むので、片方だけ動かすことはできない。

同じ日のうちに、もう1つ。

コレももう少し表の上下が狭ければ、一枚に収まりそうなんだけど

乗除の面は、公式の行送り(27.1pt)だと A4 に27行しか入らない。30題の面が2枚に割れて、2枚目に3行だけ残っていた。

列のほうは、すでに「5列を保ったまま間隔を詰める」で動いていた。行にも同じ規則を通した。B4 は公式どおり 27.1pt、A4 だけ 24.9pt に詰める。字の大きさは変えない。詰めるのは行と行のあいだだけ。3級の3種目まとめの紙は、A4 で5ページから3ページになり、公式と同じ面の数になった。

1枚に

9月8日、テスターからの4回目の指摘が届く。

見取算、全珠連とか日珠連の段は、なるべくいい感じに1枚(または両面で1枚)になるようにして欲しい。 例えば全珠連の級は15問あるから、5問を3段に並べる感じ。全珠連・日珠連の段は5×3を2枚 掛け割りの答えは、1段ごとに 1,2→3,4→5,6… ではなく、1,16→2,17→…→15,30 のように縦に並べて欲しい

紙には入るだけ詰めていた。 20題なら15題と5題。枚数は変わらないのに、最後の紙だけ1段しかない。本番の面とは似ても似つかない。

枚数はそのままに、その枚数で割り切れる段の数まで均すことにした。20題は 10題+10題。30題は 15題+15題のまま。15題はもともと1枚。

A4 に段位の30題を2枚で収める方法はない。10口の枠1つが 263.0pt、A4 の使える高さが 747.4pt。3段は間隔ゼロでも 789.0pt で入らない。行送りを詰めて届く差ではなかった。B4 なら 15題×2枚、表裏で1枚になる。画面にはその1行を出した。

答えの並びは、横詰め。1段目が1と2、2段目が3と4。問題の面は縦に進むので、答えだけが横に進むと、突き合わせるたびに目の動きが変わる。公式の答えも、左の列に前半、右の列に後半が並んでいる。縦に並べ直した。

並んだ

SŌBAN は 2026-09-11 に App Store に並んだ。アプリ本体は無料で、すべての機能を ¥420 のアプリ内購入で解放する。広告は入れていない。

「紙で解く」から刷った紙は、見取算なら5列で揃い、1桁なら10列で、乗除は面ごとに1列か2列で出る。表題には題名と等級と制限時間だけがあり、答えは縦に読める。

5列の規則そのものは、最初の日の6本からでも取れていた。取れなかったのは、それが規則ではなく、たまたま開いたページの形だったということのほうだ。


そろばん・暗算 SOBANhttps://apps.apple.com/jp/app/id6806862586


見本は全部取ったつもりでいたし、全部見たつもりでいた。28本を開いて、28枚を見た。1本の中に次のページがあることは、数に入っていなかった。

この記事の検証体制

この記事に載せた実測値・エラーメッセージ・スクリーンショットは、運営者が Mac Studio(Apple Silicon M2 Max / 32GB)の実機 で実際に動かして得たものです。手法の採否も運営者が判断しています。 記事の執筆・構成はAIペルソナ「玄人こーろ」が担当し、公開前に運営者が内容を確認しています。

体制と検証環境の詳細は運営者情報に記載しています。 記述の誤りを見つけた場合はご連絡ください。