LoginSignup
0
0

More than 1 year has passed since last update.

呪われたconfig.json

Last updated at Posted at 2021-09-07

呪いの概要

とあるクイズアプリを作成中、discord OAuth2を使おうとし、config.jsonからclientIDを取得したところ、下三桁が870から800に置き換わっていた。

config.json
{
  "clientId": xxxxxxxxxx870
}
const { clientId } = require('../config.json')
console.log(clientId)
// xxxxxxxxxx800

原因解明のために

console.log()

まず、何が起こってるのか正直わからなかったため、とりあえずconsole.log(clientID)で表示してみたが、やはり下三桁が800になっていた。

ファイルの新規作成

これはやばいと思い、とりあえずファイルを削除。
もちろん、変数を取得できないため、ビルドエラーを吐いた。
全く同じ内容を記述し、実行したところ、ビルドエラーは出なかったが、やはり、下三桁が870から800に置き換わっていた。

キー名を変更

次に、キー名を変えたらどうなるのかと思い、ふざけてabcdefgに変更してみた。
特にエラーを吐くことなくビルドできたが、出てきた数値の下三桁は800になっていた。

config.json
{
- "clientId": xxxxxxxxxx870
+ "abcdefg": xxxxxxxxxx870
}
- const { clientId } = require('../config.json')
- console.log(clientId)
+ const { abcdefg } = require('../config.json')
+ console.log(abcdefg)

数値を変更

過去に、ユーザー管理用discord botを作ったときに、ユーザー名の文字列が原因で文字コードエラーが起こり、保存されていた文字列が全く違うものになっていた事件を思い出し、キーだけでなくバリューも変更してみた。
なんと、、、
ここで設定した値も下三桁が書き換えられていた。ここでの数値の下三桁は343だった。しかし、console.log()して出てきた数値の下三桁は、400という数値だった。
最初と同じように、下三桁以外は指定したものと全く同じなのに、下三桁が違う。

config.json
{
- "abcdefg": xxxxxxxxxx870
+ "abcdefg": xxxxxxxxxx343
}

ファイル名の変更

キーとバリューを変更してもうまくいかなかったため、ファイル名を変更してみた。
config.json -> data.json

data.json
{
  "abcdefg": xxxxxxxxxx343
}

まぁ、結果は、、、
下三桁が400になっていた。

intで入れる必要なくない?

よくよく考えたら、discord OAuth2で使うので、ここで取得した値はurlに埋め込まれる。
int型である必要なくない?
String型にしました。

config.json
{
- "abcdefg": xxxxxxxxxx343
+ "abcdefg": "xxxxxxxxxx343"
}

なんということでしょう!
さっきまで下三桁が400になっていた値の下三桁が343になってる!

まとめ

config.jsonのバリューに int を使うのはやめとこう!


@masato_makino さんからのコメントによると、
16桁 の数値を超えた場合、誤差が発生するそうです。

ここで使おうとしていたのは、18桁
数字がおかしくなるのは、必然だったみたいです。


結論

16桁を超える数字を使うときは、intではなく、String型で保存するほうが良い。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0