- ぬるぽ→ガッとは
- ぬるぽの始まり~ぬるぽとは~
- ぬるぽ→ガッの始まり
- なぜぬるぽ→ガッなのか~ネット上で見かける既存説~
- なぜぬるぽ→ガッなのか~自分の考え~
- まとめ
- 補足:NullPointerExceptionとは
- 参考リンク
このページを見ている人は大体知っていると思いますが、誰かが「ぬるぽ」と言ったときに、「ガッ」と返す掛け合いが古のネット時代から存在しています。 大体にして、「おはよう」と言われたから「おはよう」と返すぐらい、「ぬるぽ」にも「ガッ」にも意味は無いです。
この意味の無い「ぬるぽ」→「ガッ」の流れの元々の意味合いについて、ネット上のいろんなページで想定での説明が載っているのですが、「本当にそうかなぁ?」と良く思うので、自分なりの考えをここに載せます。
あくまで「自分の感性として個人的にはこう思う」というレベルの内容です。
まずは事実整理です。
と言っても古いネタであるし、なによりネット黎明期のネタと思われるので事実らしい事実は無く、口伝レベルの精度の情報が残っているばかりです。
「ぬるぽ→ガッ」の前にまず「ぬるぽ」自体の始まりですが、これはWikipediaによると、以下の説があるそうです。
・ネットのチャット上などで既に広まっていた呼称が2ch(現5ch)へ投稿された
・「NullPointerExceptionのことを「ぬるぽ」と呼ぼうぜ!」という2ch(現5ch)スレ
・オンラインゲーム上での流行が2chに伝播した
これらの元ネタが見つけられないので、真偽もいつの時代のモノかも分かりませんが、ここにおいて大切なのは「ぬるぽ」が「NullPointerException」を略したものであるということです。 ここを疑う人はきっといないでしょう。
ちなみに「NullPointerException」はプログラミングで出てくる用語で、エラーのタイプの一つなのですが、これが何なのかについては本題から大きく外れるので、ここでは書かず、一番下ぐらいに書いておきます。
次に本題である、「ぬるぽ→ガッ」の始まりですが、これは諸説無さそうで、以下が元ネタとのことです。
・「NullPointerExceptionをぬるぽと呼ぶスレ」という2ch(現5ch)スレ
こちらのスレッドの以下の書き込みが元ネタらしいです。
2002年6月20日というと、23年前であり、ご存じボクは子どもなわけですから、流石に元ネタは知りようも無いですね。 このスレッドの「2」の人物が諸悪の根源のようです。
なぜ「ぬるぽ」に対して「ガッ」と殴っているのか。本当のところはこの「2」の人物にしか分からないですが、以下の説があります。
by Wikipedia
色んな観点でだいぶ疑わしい。信憑性1%未満ですよこんなん。
ニコニコ大百科で「ただしこの説は、当初「ぬるぽ」と検索して「殴る」と表示された例は無く、今ではデマだと考えられている。」と書いてあり、そもそもgoo辞書に本当にそんな内容があったのかは疑わしいです(ニコニコ大百科側もどう調べたのか分からないけど……)。
例え事実goo辞書にそんな内容があったとて、この「2」の人が突然goo辞書から「ぬるぽ」という単語を引っ張り出してくる理由も思いつかない。
普通に考えてだいぶ無理がある。
by Wikipedia
ここでの「叩く」とは「直す」「対応する」という意味だと思います(プログラミングにおいては「叩く」とは別の行為を指すことが多いと思いますが)。
まぁ最初のgoo辞書説に比べたらまだ分かる……ですけど、叩かれてるのエラーじゃなくて「1」だしなぁ……。「エラーを直す」という気持ちでこのレスはしないんじゃないかな……。
ということでこれも納得できない。
by ニコニコ大百科
ニコニコ大百科説。根拠は「スレが立ってわずか2分でAAの書き込みがあるため」とのこと。
正直わかる。特に深い意味も無くノリでレスしただけというのは考えられそう。
それだけの勢いがある……このガッというレスには。
でも説として面白みが無いから却下で。
by Quiz Castle
「ぬるぽってなんだよ」「呼ばねぇよ」みたいなノリで突っ込んだとかそんな感じの説だと思います。
これも考えましたが、別にこのスレッドが「ぬるぽ」の初出というわけではないのが気になるところでしょうか。初出がいつなのかは分からないですが。
とはいえ初出でなくとも、この人にとっては初見だったり、新鮮な呼称である可能性は大いにあるわけですから、さほど違和感は無いですかね。
by コトバンク
意味が分からない。
根拠が無いから、第一の説と同じぐらい信憑性が無い。何よりも意味が分からない。本当に意味が分からない。
大元の出典は朝日新聞の「知恵蔵」らしいですが、コトバンクの文だと以下のようになっています。
>> 「脱力・がっかり」の意。「2ちゃんねる」などのプログラマー向け掲示板において、プログラミング言語Javaのエラー的例外処理の一つである「NullPointerException」を「ぬるぽ」と表現。その処置には労力を浪費させられ、疲弊するので、がっかりさせられる。そこで「ガッ」という気合を入れて対処することになる。この「ぬるぽ」に対して「ガッ」と励ます定番応答が自嘲気味に使われ、流行した。
前半部分は特に何も思わないですが、「その処置には労力を浪費させられ、」以降がもう。 一文一文に「ガッ」という単語が1回以上ずつ入っているところも含めて、まるでAIが書いたような文になってる。 コトバンクの記事自体は2009年と書いてある。知恵蔵はもっと前かな? このころからライティングできるAI自体は多分あったと思いますけど……
ただ2002年からは7年後とは言え、今から見ると結構古い情報ではあるのでそういう意味では無視もしにくい。でも意味が分からない。
何も根拠書かないのは良くないので、一応引用して変だと思うところを書いておきます。
ここからはボクなりの考えを述べていきます。
分かりやすく、それぞれを以下のように呼びます。
・「ぬるぽ」と言って鈍器で殴られた側 → 「A」
・「ガッ」と鈍器で殴った側 → 「B」
これはプログラマー板で、しかも「ぬるぽ」自体プログラミングで使う用語なわけですから、この「A」と「B」は恐らくプログラミングに関係するような事を行っている二人だと考えられます。
この時重要なのは、「1」レスをした人がどういうつもりだったかではなく、「2」レスをした人が二者をどのように解釈したか、です。
つまり「2」がこの「A」を誰だと思って、この返しをしたか、です。
Aは一体何者なのか
「A」の持つ特徴は以下です。
・プログラミングに関係する役割を持つ
・「ぬるぽ(NullPointerException)」という、比較的専門的な言葉を用いる
これを踏まえて、まず「A」として考えられそうなのは、以下あたりだと思います。
・プログラマー(プログラムを実際に組んだ人)
・動作確認をしたテスター
・動作確認をしたリーダー(マネージャー)
・動作確認をしたユーザー
「ユーザー」は基本的に専門的な知識は無いですが、開発段階で画面上に出てきたエラーをしっかり教えてくれるユーザーもおりますので、含めています。 これらの人たちの誰かが「A」である。つまり「ぬるぽ」と言ったわけです。
なぜ「ぬるぽ」と言ったのか
ではこの状況で「A」は「ぬるぽ」とはどういう意味で言ったのか? 次はここを考えます。 と言ってもこのタイミングで敢えて口に出す(レスする)ものとして、考えられるのは以下のみだと思います。
・ぬるぽ(NullPointerException)エラーが現に発生した(あるいは、ぬるぽメッセージが画面に表示された)ことを、「B」に報告した
Bは一体何者なのか
次に「B」が何者かを考えます。
「B」の持つ特徴は以下です。
・プログラミングに関係する役割を持つ
・「ぬるぽ(NullPointerException)」という、比較的専門的な言葉を理解できる
ただ、この2つ目の特徴はかならずしも、満たしている必要はないかと思います。 「A」はぬるぽエラーが発生したことを報告していると思われるわけですから、「ぬるぽ」が何なのかは分からなくても、エラー・バグの類であることまでは理解できてもおかしくないでしょう。
すなわち「B」は1つ目の特徴のみを満たせば十分です。
すると、「B」は「A」同様、以下に該当する者かと思われます。
・プログラマー(プログラムを実際に組んだ人)
・動作確認をしたテスター
・動作確認をしたリーダー(マネージャー)
・動作確認をしたユーザー
では、「A」と「B」の組み合わせを総当たりで考えていきましょう。 それぞれ4通りの人物があるわけですから、合計4x4=16通りの組み合わせがあります。
とは言え、両者が同じであることはあまり無さそうですから、4x3=12通りを確認すれば大丈夫そうです。 これらの組合せで「B」が「A」を殴りそうな可能性があれば、それが説になるかと思います。
A=プログラマー、B=テスター
この場合、考えられるシチュエーションは、既にテスターがテストを行っている段階であるにも関わらず、ぬるぽエラーが発生して、テストが出来ないことをテスターに報告する場合でしょう。
テスターからしたら仕事が進められないわけですから、怒っておかしくないと言えます。
A=プログラマー、B=リーダー
通常、ぬるぽエラーが開発段階で発生した場合、それはプログラマーが普通にそのまま直せばよく、誰かに報告することは無いです。 すなわち、このエラーが発生したことをリーダーに報告しているのは、開発工程を終えて、テスト以降の工程です。
テストの中にもさらに細かい工程はあるので、バグを発生させた(見逃した)からと言って直ちに問題になることは無いですが、例えばユーザがテストしているような段階で、ぬるぽエラーという初歩的なエラーが発生すれば怒ることもあるかと思います。
そのとき件のプログラマーがこんな顔をしていればなおのことです。
A=プログラマー、B=ユーザー
ベンダー(開発者)がユーザーにわざわざぬるぽレベルのエラーを報告するということは、何かユーザ側に影響する事項があり、細かい説明をする必要があるというような何らかの問題がある状況でしょう(ベンダー側が行ったテスト結果を報告することはあれど、どんなエラーが発生したかほど無意味に細かいことは言わないハズ)。
そんな問題がある状況で、ベンダーはユーザー(=お客さん)に向かって、こんな顔をしているわけである。
どう考えてもやばい。ボクだったら恐怖します。
A=テスター、B=プログラマー
テスターがぬるぽエラーを見つけて、それを担当プログラマーに報告しているようなシチュエーションです。
この状態で、プログラマーがテスターに殴り掛かるシチュエーションは考えられないです。 もしあったらとてつもなく荒くれものなプログラマーです。
A=テスター、B=リーダー
「A=テスター、B=プログラマー」の時と同じです。あり得ないでしょう。 もしあったらとんでもなく荒くれものなリーダーです。
A=テスター、B=ユーザー
テスターがユーザーに報告することは無いでしょう。 もしあるとしたら、すぐ↑のケースぐらいやばい人がリーダーだった場合です。
A=リーダー、B=プログラマー
リーダーやマネージャーがキチンとモノが出来ているか確認することは望ましい事です。 しかも以下のような優しい顔でエラーを教えてくれるのはどう考えてもかなりいい人です。
そんな人に対して、プログラマーが殴り掛かっていくようなシチュエーションです。
面白いですね。
A=リーダー、B=テスター
この場合は、「A=プログラマー、B=テスター」と同じでしょう。 テスターからすれば、エラーのせいでテストができないと考えられますので文句の一つぐらい言うかもしれません。
A=リーダー、B=ユーザー
この場合は、「A=プログラマー、B=ユーザー」と同じでしょう。 どう考えてもリーダーがやばい人です。
A=ユーザー、B=プログラマー
ユーザーがぬるぽエラーを見つけて、プログラマーに連絡するケースです。 ユーザーがこのレベルのエラーに当たるのはだいぶ珍しいケースですが、無くは無いでしょうか。
そんなときユーザーが怒ったり問い詰めたりするのではなく、こんなに朗らかに教えてくれるのは非常に嬉しい事です。
そんな人に対して、プログラマーが殴り掛かっていくようなシチュエーションです。
完全にサイコパスです。
A=ユーザー、B=テスター
ユーザーがテスターになぜかエラーを報告している状況。
何が何だか分からない。Lでもお手上げのシチュエーションです。 多分プロジェクト自体が破綻しているので、体制から見直した方が良いです。
A=ユーザー、B=リーダー
「A=ユーザー、B=プログラマー」と同じです。
メンバーではなく、リーダーレベルがイカれてるのでむしろより深刻なケースです。 リーダー変更とかそういうレベルではなく発注先会社を変えた方が良いと思います。
ここまでの流れを総括すると、自然以下の説が出てくると思います。
・エラーを出しておきながら、のほほんとした顔をしてたら殴りたくもなる
・「2」がやばいヤツ
意外と聞いたことの無い説だったと思います。
真面目に考察してる風のネタ記事です。真に受けないように。
一応最後に少しだけですが、NullPointerExceptionというものがどういうものか、簡単に解説を入れておきます。
ここでは「NullPointerException」について簡単に説明しつつも「あーなるほど?」と最低限納得できるよう、「一定以上深堀りしつつも、一部を簡略化する」という、間違い上等のスタンスで書いています。 あくまでNullPointerExceptionというものを、簡単に概念で理解するレベルのものです。
まず、プログラミングにおける変数というものを知っておく必要があります。
変数とはプログラミング内で扱うパラメータのことで、ゲームで言えば「HP」や「攻撃力」などです。 ゲームでダメージを喰らう、というのはプログラミング内部では、「HP」を減らすことで行っています。
これらのパラメータをプログラムで定義すると、例えば以下のようにコードを書いたりします。
int hp = 100; // 現在のHPを100とする。
int atk = 50; // 攻撃力を50とする。
必ずしも数値ではなく、文字列だったり、真偽値(TRUE / FALSE)だったりもするけど、何にせよ呼称は「変数」。
プログラムで定義した変数はメモリ(記憶領域)に読み込まれます。
メモリと変数の関係は、以下のように例えると分かりやすいかもしれません。
・メモリ=土地
・変数=建物
図:変数とメモリの関係を家にたとえた図

定義された値はこの一軒一軒の建物の中に入ります。
Nullとは「無」と言う意味。 「変数」という話で言えば、「変数」の中に何も値が入っていない状態。数値で言うと0ですらない。文字列で言うと「」空文字ですらない。ホントに何もない。
図:Null解説図

すなわち、家で言えば空き家の状態。建物自体はあるけど建物の中には誰も住んでいない。それがNullです。
数値や文字列のようなシンプルなデータであれば、↑のように一軒一軒の建物の中には、それそのものの値が入ります。
ただし、実際にはそんなシンプルなデータばかりではありません。
↑で例えたゲームのような、「HP」や「攻撃力」というデータは、扱いやすいように「キャラクター」という大きな括りでまとめて定義しておき、その「キャラクター」の中に「HP」や「攻撃力」を持たせる事が一般的です(少なくとも最近は)。
この「キャラクター」のような複雑な形のデータの場合、自分で作った変数の中ではなく、別のメモリ領域に作られます。そして自分で作った変数の中には、その「キャラクター」データのメモリ上の住所が格納されます。
図:複雑なデータの場合の取り扱い

この「メモリ上の住所」のことを「ポインタ(Pointer)」と言います。
ここまでで「Null」と「Pointer」について、お話ししました。
NullPointerとは、Pointer自体がNullということです。
すなわち「キャラクター」という変数を定義した際に、その変数内に本来あるはずのその「キャラクター」にアクセスするための、「ポインタ」が無くなってしまっているという状態です。
図:NullPointer解説図

Exceptionとは直訳で「例外」ですが、要するに「エラー」ということです。
なので「NullPointerException」とは、「NullPointer」のエラーということです。
このエラーがどういう時に起こるか。
単にポインタがNullになっているというだけでは起こりません。
図:単にNullにアクセスするだけなら問題なし

このエラーは、ポインタを辿ろうとした際に初めて起こります。
考えてみれば当然ですが、ポインタにあるメモリ領域にアクセスしようとした際に、ポインタがNullではどこにアクセスすれば良いか分からない、という事になるのは分かると思います。
図:Nullのポインタをたどる必要があるような場合はエラーとなる

今回はメモリ領域を「土地」に例えているので、それにならって郵便配達に例えると、 例えば「届け先の住所が無い郵便物がある」という状態ならまだ困りませんが、この「届け先の住所が無い郵便物を届けろ」となったら流石に上司か誰かに「ムリだよ」とアラートを出しますよね。
NullPointerExceptionとはそのアラート(エラー)をプログラムが出しているという事です。
余談ですが、「ぬるぽ」と同じ意味の言葉で「ぬるり」というモノがあります。
これは「NullPointerException」と同じ意味合いのエラーで、「NullReferenceError」というものがあり、そこから取ったものが「ぬるり」です。
前述の通り、「ポインタ」とは「メモリ上の住所」のことなのですが、「メモリ上の住所」を「参照」とも言ったりします。
・ポインタ=メモリ上の住所=参照
「参照」を英語で言うと「Reference」。だから、「NullPointerException」と「NullReferenceError」は同じものと分かると思います。
同じ意味合いのエラーでも言語によってエラーの出方が異なり、「NullPointerException」と「NullReferenceError」もそういう関係にあります。