nabeatsu.js
v3.2.0
Published
ナベアツ判定・変換ライブラリ
Readme
nabeatsu.js
数え続ける世界のナベアツbot (@3_aho_bot) に感化されたナベアツ判定・変換ライブラリです。
npm install で判定用・変換用の関数を利用可能になり、リポジトリをクローンすることでCLIを利用できます。
./src/nabeatsu.ts に判定関数 (isNabeatsu) と変換関数 (convertIdiot) があり、./src/main.ts はローカルで動かすためのデモです。
作者の実行環境: Windows 11 + Node.js v24.16.0 (nvm-windows)
デモ動画: https://twitter.com/rin_montblank/status/2076739400122466485
Install
npm install nabeatsu.jsCommonJS / ESM のどちらからも利用できます。
import { isNabeatsu, convertIdiot } from "nabeatsu.js";
const n = 3;
const result = isNabeatsu(n); // { divisible: true, includesCount: 1 }
if (result.divisible || result.includesCount > 0) {
console.log(await convertIdiot(n, result)); // "サァンwww!?"
}const { isNabeatsu, convertIdiot } = require("nabeatsu.js");API
isNabeatsu(n, options?)
数値がナベアツ的に「アホになる」対象かどうかを判定します。
| 引数 | 型 | 必須 | 説明 |
| --------- | ----------------- | ---- | --------------------------------------------------------------------- |
| n | number | ✅ | 判定対象の数値 |
| options | NabeatsuOptions | – | 判定基準(割り切れる/含む)。省略時は { divisible: 3, includes: 3 } |
NabeatsuOptions:
| プロパティ | 型 | デフォルト | 説明 |
| ----------- | -------- | ---------- | ---------------------------------------------------------------- |
| divisible | number | 3 | この数値で割り切れる場合にアホになる |
| includes | number | 3 | 数値の文字列表現にこの数値の文字列表現が含まれる場合にアホになる |
戻り値 Nabeatsu:
| プロパティ | 型 | 説明 |
| --------------- | --------- | --------------------------------------------------------------------------- |
| divisible | boolean | n % options.divisible === 0 |
| includesCount | number | n.toString() 中に options.includes.toString() が出現する回数(重複含む。0 なら含まない) |
isNabeatsu(3); // { divisible: true, includesCount: 1 }
isNabeatsu(13); // { divisible: false, includesCount: 1 }
isNabeatsu(33); // { divisible: true, includesCount: 2 }
isNabeatsu(9, { divisible: 5, includes: 9 }); // { divisible: false, includesCount: 1 }convertIdiot(n, s)
数値を「アホになったときの読み方」(カタカナ)に変換します。内部で kuroshiro と kuroshiro-analyzer-kuromoji を使って漢数字→カタカナ変換しているため、初回呼び出し時に辞書の読み込みが発生し多少時間がかかります(2回目以降は初期化済みのインスタンスを再利用します)。
| 引数 | 型 | 必須 | 説明 |
| ---- | ---------- | ---- | --------------------------- |
| n | number | ✅ | 変換対象の数値 |
| s | Nabeatsu | ✅ | isNabeatsu() の結果 |
戻り値: Promise<string> — 変換後の文字列(半角カナ)
s.divisible が false かつ s.includesCount が 0 の場合は変換を行わず n.toString() をそのまま返します。どちらか一方でも条件を満たす場合のみ、以下の変換ルールが適用されます:
- 数値を漢数字に変換し、カタカナ読みに変換
- 「ュウ」→「ュー」
- 「サンヒャク」→「サンビャク」、「ロクヒャク」→「ロッピャク」、「ハチヒャク」→「ハッピャク」
- 「サンセン」→「サンゼン」、「ハチセン」→「ハッセン」
- 「サン」→「サァン」(文字列中のすべての「サン」が対象)
- 末尾に
wwwを追加 s.divisibleがtrueかつs.includesCountが0より大きい場合、さらに!?をs.includesCount回繰り返して追加(例:33はincludesCount: 2なので!?!?)- 半角カナに変換して返す
await convertIdiot(3, isNabeatsu(3)); // "サァンwww!?"
await convertIdiot(13, isNabeatsu(13)); // "ジューサァンwww"
await convertIdiot(33, isNabeatsu(33)); // "サァンジューサァンwww!?!?"
await convertIdiot(4, isNabeatsu(4)); // "4" (divisibleがfalseかつincludesCountが0なので変換されない)Development
npm install
npm start # デモを実行 (src/main.ts)
npm run build # dist/ にライブラリをビルド (tsdown, cjs/esm)
npm run typecheck
npm run formatLicense
本プロジェクトは MIT License です。
