CODE Polyglot / 備忘録

備忘録 — 作業でつまずいたことと、その直し方

このサイトを作り、毎朝の検証を動かす中で、実際につまずいたことを短く残しています。 同じところで困った人が、検索で来てすぐ読めるように、起きたこと・再現の手順・直し方・確かめた環境を1件ずつ書いています。

8件(新しい順)

  1. 2026-11-04確かめた JavaScript で toPrecision(12) にしてから四捨五入すると、…4999 が …5 になって1つ上に丸まるtoFixed の切り下がり(1.0002499999999999 → 1.0002)を避けようと、12桁に丸めてから Math.round すると、今度は正確な値が …49999… の数を …5 にしてしまい、1つ上に丸まる。割り算だけで出る値は整数(BigInt)で正確に四捨五入し、累乗で出る値は toFixed で1回だけ丸める。
  2. 2026-11-04確かめた dotnet run でファイル1つの C# を動かすと、コンテナでは最初の1回だけ NuGet の警告が標準出力に混ざる新しいコンテナで `dotnet run hello.cs` を動かすと、最初の1回だけ「warning NU1903」の行が標準出力に混ざり、出力を比べるテストが落ちる。先に `dotnet build` を動かして復元を済ませておくと、`dotnet run` の標準出力はプログラムの出力だけになる。
  3. 2026-11-02確かめた Java の正規表現で ( )* の繰り返しが数千回になると、StackOverflowError で止まるJava の matches で「[a-z]+(-[a-z]+)*」のような ( ) の繰り返しに長い文字列を渡すと、繰り返しが3,000回ほどでスタックがあふれて止まる。区切りの文字で先に分けて、部分ごとに繰り返しのない正規表現で確かめると直る。
  4. 2026-10-31確かめた zsh では set -- $p が空白で分かれず、1つの引数のままになるbash は引用符の無い $p を空白で分けますが、zsh は分けません。zsh で分けたいときは ${=p} と書くか、その部分を bash -c で動かします。
  5. 2026-10-31確かめた コマンドの出力を | tail に流すと、失敗しても終了コードが 0 になるパイプの終了コードは、最後のコマンド(tail)のものです。前のコマンドが失敗しても 0 になるので、bash は set -o pipefail、zsh は ${pipestatus[1]} で前のコマンドの終了コードを見ます。
  6. 2026-10-31確かめた Mac の bash で "$TAG(" と書くと、全角の括弧の1バイト目が変数名に入るMac の bash は、UTF-8 の設定のとき、変数のすぐ後ろの全角文字の1バイト目を変数名の一部として読みます。set -u なら「unbound variable」で止まり、無ければ文字が化けたまま出力されるので、全角文字に接する変数は ${TAG} と波かっこで囲みます。
  7. 2026-10-31確かめた 大きなコンテナの Lambda で、冷えた状態の最初の1回だけ子プロセスが10秒を超えた10言語の実行環境を入れた大きなコンテナを Lambda で動かすと、しばらく使われていない状態からの最初の1回は、言語の実行環境の読み込みで子プロセスが遅くなります。子プロセスの待ち時間に余裕を持たせ、1つが時間切れでもほかの結果は返すようにしました。
  8. 2026-10-31確かめた ヘッドレスの Chrome は --window-size=390 でも幅 500px で描く(スマホの幅を確かめられない)ヘッドレスの Chrome は、--window-size に 500 未満の幅を渡しても、ページの幅を 500px にします。スマホの幅を撮るなら、幅 390px の iframe にページを入れて、その外側のページを撮ります。