任天堂「今後C++は捨てJavaScriptで開発していく」 (887レス)
任天堂「今後C++は捨てJavaScriptで開発していく」 http://mevius.5ch.net/test/read.cgi/tech/1363752460/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
152: デフォルトの名無しさん [sage] 2013/03/22(金) 02:27:52.27 >>150 >>49のなんとなく動いちゃう問題が>>111で解決しない理由 http://mevius.5ch.net/test/read.cgi/tech/1363752460/152
153: デフォルトの名無しさん [sage] 2013/03/22(金) 02:36:41.68 >>152 seal()書き忘れるか、seal()が必要だって知らない人がメンテとかしたりしたらアウトだから。 書き忘れなきゃOKとか言う?それってtypoしなきゃOKと言うのと変わらないよ。 C++でnew禁止にできるみたいな、絶対に間違いが起こらない方法は無いと思うんだ。 あるなら教えてほしい。 あと、seal()しまくりなのは汚いし見づらいしエレガントじゃないよね。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/153
154: デフォルトの名無しさん [sage] 2013/03/22(金) 02:41:19.71 C++知らない人がメンテとかしたらアウトだか。 >>153への皮肉はこんなもんでいいだろ?w http://mevius.5ch.net/test/read.cgi/tech/1363752460/154
155: デフォルトの名無しさん [sage] 2013/03/22(金) 02:48:54.79 >>154 C++のnew禁止テクニックとseal()の違いがわからないなら、プログラミングセンスなさすぎだよ。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/155
156: デフォルトの名無しさん [sage] 2013/03/22(金) 02:54:05.41 new禁止テクニックの話は一言もしてないw http://mevius.5ch.net/test/read.cgi/tech/1363752460/156
157: デフォルトの名無しさん [sage] 2013/03/22(金) 02:57:17.19 new禁止テクニックのような根本的対策じゃなきゃ意味ないよって言ってるのが 理解できないのか、new禁止テクニックを知らないのか。どっち? http://mevius.5ch.net/test/read.cgi/tech/1363752460/157
158: デフォルトの名無しさん [sage] 2013/03/22(金) 03:00:41.45 >>153 Object.seal()を直接書いて回るとか何の冗談だよ いまどきJavascriptでそれなりのプロダクトを作るなら クラス継承の手順なんかも隠蔽したオブジェクト生成関数を用意してそれを使う センスとか以前の問題じゃね? http://mevius.5ch.net/test/read.cgi/tech/1363752460/158
159: デフォルトの名無しさん [sage] 2013/03/22(金) 03:03:03.19 書き忘れたら書き間違えで新たなプロパティ扱いになるって言っても C++はC++で書き忘れたら色んなものが解放されないという言語なのだけれど… http://mevius.5ch.net/test/read.cgi/tech/1363752460/159
160: デフォルトの名無しさん [sage] 2013/03/22(金) 03:06:23.82 >>158 残念ながらそれでも駄目なんだ。 なぜなら、JavaScriptでは実引数の型を強制できないから、hoge({maxLength:10})とかできちゃうし。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/160
161: デフォルトの名無しさん [sage] 2013/03/22(金) 03:08:39.66 >>159 念のため説明すると、new禁止にすると、hoge = new Hoge();でコンパイルエラーになるから これが根本対策になり得る。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/161
162: デフォルトの名無しさん [sage] 2013/03/22(金) 03:13:08.67 >>160 それはオブジェクトというより今時の大抵の言語にあるハッシュとしての使いかただね Javascriptは両方とも同じものだけど ハッシュのキーワードミスって別のプロパティ弄っちゃうとか Javascript固有の問題じゃないだろう オブジェクトの生成はプロジェクトで決めた生成方式で統一すればいい http://mevius.5ch.net/test/read.cgi/tech/1363752460/162
163: デフォルトの名無しさん [sage] 2013/03/22(金) 03:23:05.56 オブジェクトの生成ルール決めてるプロジェクトでhoge({maxLength:10})とかやって自爆するのは C言語で型とか適当でキャストしまくって自爆するのと同じようなものだろw http://mevius.5ch.net/test/read.cgi/tech/1363752460/163
164: デフォルトの名無しさん [sage] 2013/03/22(金) 03:39:01.27 >>162 ルールを決めても、それを言語仕様的に強制できなければ、誰かが間違える可能性が残る。 誰かというのは、将来のメンテナも含めてね。 それと、xの仕様を変えることによって問題を解決するのなら、maxLengthを プライベート変数にして、setter,getterにした方がいいと思うんだけど、どう? http://mevius.5ch.net/test/read.cgi/tech/1363752460/164
165: デフォルトの名無しさん [sage] 2013/03/22(金) 03:41:01.60 >>163 自爆するのが悪いというのは、typoするのが悪いというのと変わらないよ。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/165
166: デフォルトの名無しさん [sage] 2013/03/22(金) 03:44:19.64 >>164 >>49を見直してこいよ maxLengthをset/getにしてもmaxlengthを作れちゃうから問題だと言ってるのに http://mevius.5ch.net/test/read.cgi/tech/1363752460/166
167: デフォルトの名無しさん [sage] 2013/03/22(金) 03:47:42.26 >>165 どんな言語でも、言語仕様で強制される以外のルールも守らなければ自爆するって言ってるんだよ?w http://mevius.5ch.net/test/read.cgi/tech/1363752460/167
168: デフォルトの名無しさん [sage] 2013/03/22(金) 04:22:59.02 JavaScriptでnew禁止するのは簡単。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/168
169: デフォルトの名無しさん [sage] 2013/03/22(金) 05:15:32.20 >>161 ではC++で解放忘れをコンパイルエラーにする方法は? http://mevius.5ch.net/test/read.cgi/tech/1363752460/169
170: デフォルトの名無しさん [sage] 2013/03/22(金) 06:18:05.68 どんなに優れた言語でもウンコードは書ける http://mevius.5ch.net/test/read.cgi/tech/1363752460/170
171: デフォルトの名無しさん [sage] 2013/03/22(金) 06:44:15.35 TSRが書けなくなるの? http://mevius.5ch.net/test/read.cgi/tech/1363752460/171
172: デフォルトの名無しさん [sage] 2013/03/22(金) 06:48:12.33 >>166 setterにすれば、>>49はsetMaxLength()とsetMaxlength()のtypoの問題にかわる。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/172
173: デフォルトの名無しさん [sage] 2013/03/22(金) 06:50:37.63 typoうんぬんが開発の生産性と関係あると思ってるヤツは素人 http://mevius.5ch.net/test/read.cgi/tech/1363752460/173
174: デフォルトの名無しさん [sage] 2013/03/22(金) 06:50:47.43 >>167 そんなの当たり前だが、今回の問題と何の関係があるのかな? http://mevius.5ch.net/test/read.cgi/tech/1363752460/174
175: デフォルトの名無しさん [sage] 2013/03/22(金) 06:52:03.00 >>169 ない。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/175
176: デフォルトの名無しさん [sage] 2013/03/22(金) 06:52:37.46 >>172 setterにすると>>49のコードが具体的にどう変わるか書いてみてくれない? http://mevius.5ch.net/test/read.cgi/tech/1363752460/176
177: デフォルトの名無しさん [sage] 2013/03/22(金) 06:54:19.46 >>176 書いたじゃん。 理解できないのか? http://mevius.5ch.net/test/read.cgi/tech/1363752460/177
178: デフォルトの名無しさん [sage] 2013/03/22(金) 07:01:29.20 >>177 function hoge(x) { x.setMaxLength() = 100; } // 正 function hoge(x) { x.setMaxlength() = 100; } // 誤 ってこと? http://mevius.5ch.net/test/read.cgi/tech/1363752460/178
179: デフォルトの名無しさん [sage] 2013/03/22(金) 07:06:04.93 178 悪いが、JavaScriptを知らない奴にまで説明する優しさは持ってない。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/179
180: デフォルトの名無しさん [sage] 2013/03/22(金) 07:08:00.09 >>179 いやおれは普通にこういうことだとおもったんだが x = { val:0, get maxLength() {return this.val}, set maxLength(v) {this.val = v}} function hoge(x) { x.maxLength = 100; } // 正 function hoge(x) { x.maxlength = 100; } // 誤 x.maxlengthに間違ったら意味無いよね? http://mevius.5ch.net/test/read.cgi/tech/1363752460/180
181: デフォルトの名無しさん [sage] 2013/03/22(金) 07:13:44.71 ああ、xを実引数にしてhoge()を呼び出すと思ってくれ http://mevius.5ch.net/test/read.cgi/tech/1363752460/181
182: デフォルトの名無しさん [sage] 2013/03/22(金) 07:16:02.22 >>180 俺の話からそんなコードを想像したのなら、そりゃ話は噛み合わないな。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/182
183: デフォルトの名無しさん [sage] 2013/03/22(金) 07:18:24.28 念のため言っとくが(めんどくさいから、これが最後だよ)、その「正」は 正しくないよ。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/183
184: デフォルトの名無しさん [sage] 2013/03/22(金) 07:18:56.96 コード書けないアホが無理するから... http://mevius.5ch.net/test/read.cgi/tech/1363752460/184
185: デフォルトの名無しさん [sage] 2013/03/22(金) 07:19:44.91 >>179 >>178はこうか、>>180を意識してたんでちょっと間違った function hoge(x) { x.setMaxLength(100) } // 正 function hoge(x) { x.setMaxlength(100) } // 誤 http://mevius.5ch.net/test/read.cgi/tech/1363752460/185
186: デフォルトの名無しさん [sage] 2013/03/22(金) 07:25:16.82 >>180-181は実際に動作することを確認済み いまどきjavascriptのsetter/getterって言ったら>>180だろ http://mevius.5ch.net/test/read.cgi/tech/1363752460/186
187: デフォルトの名無しさん [sage] 2013/03/22(金) 07:29:28.53 実際にコード例を示さない奴が偉そうだなw http://mevius.5ch.net/test/read.cgi/tech/1363752460/187
188: デフォルトの名無しさん [sage] 2013/03/22(金) 07:39:45.43 >>186 俺のレスをちゃんと読んでるか? maxLengthをプライベート変数にし、と俺は言ったぞ? http://mevius.5ch.net/test/read.cgi/tech/1363752460/188
189: デフォルトの名無しさん [sage] 2013/03/22(金) 07:55:08.80 >>188 >>180はmaxLengthをプライベート変数(=val)にしてるだろ? 少し日本語不自由じゃないの?具体的なコード書けば勘違いされないのに http://mevius.5ch.net/test/read.cgi/tech/1363752460/189
190: 忍法帖【Lv=40,xxxPT】(3+3:5) [sage] 2013/03/22(金) 07:56:57.88 さすがに今時全部x.setMaxLength(100)みたいにしろとかありえないんでseal()が導入された http://mevius.5ch.net/test/read.cgi/tech/1363752460/190
191: デフォルトの名無しさん [sage] 2013/03/22(金) 08:04:07.38 >>189 x = {var maxLength;} >>190 俺の感覚だと、sealしたインスタンスを戻すFactoryメソッドを定義して、それを使うのを ルール化するというほうがもっとあり得ないんだけど、最近じゃseal使うのが流行ってたりするの? http://mevius.5ch.net/test/read.cgi/tech/1363752460/191
192: デフォルトの名無しさん [sage] 2013/03/22(金) 08:05:45.83 >>191 >x = {var maxLength;} 文法エラーです http://mevius.5ch.net/test/read.cgi/tech/1363752460/192
193: デフォルトの名無しさん [sage] 2013/03/22(金) 08:19:38.94 >>192 それは悪かった。今スマホなんで完全なコードを書くのが難しい。 var x = (function() {var maxLength;})();が完全なコードかな。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/193
194: デフォルトの名無しさん [sage] 2013/03/22(金) 08:29:00.54 あと、seal()方式には重大な欠点がもうひとつある。 それは、x内部のtypoを防げないってこと。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/194
195: 忍法帖【Lv=40,xxxPT】(2+3:5) [sage] 2013/03/22(金) 08:30:30.90 >>191 インスタンス生成はフレームワークが提供するのを使うことも多いかな seal自体は流行ってはいないんじゃないの?ES5サポートしてないブラウザもあるし でもここは任天堂がこれから提供する独自環境の話をするスレだから、 strict mode前提でsealなんかのES5の機能を積極的に使っていけるんじゃないかなと思ってる http://mevius.5ch.net/test/read.cgi/tech/1363752460/195
196: デフォルトの名無しさん [sage] 2013/03/22(金) 08:40:49.75 >>193 >var x = (function() {var maxLength;})(); 意味がわからない。このコードじゃxに入るのはundefined あんたがやりたいのはこんな感じのことじゃないのか? var x={maxLength:0, setMaxLength:function(v){this.maxLength=v}, getMaxLength:function(){return this.maxLength}}; http://mevius.5ch.net/test/read.cgi/tech/1363752460/196
197: デフォルトの名無しさん [sage] 2013/03/22(金) 08:41:57.22 >>195 なるほど、そういうことか。了解。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/197
198: デフォルトの名無しさん [sage] 2013/03/22(金) 08:42:48.67 >>196 悪いけど、昼休みまで待ってくれ。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/198
199: デフォルトの名無しさん [sage] 2013/03/22(金) 08:44:05.27 >>194 seal()方式だとx内部にどんなやばいtypoが発生するの? http://mevius.5ch.net/test/read.cgi/tech/1363752460/199
200: デフォルトの名無しさん [sage] 2013/03/22(金) 10:23:09.92 なんか基礎的な知識がなくて回り道しそうだから お前らに最低限の知識を与えておこう var hoge = (function() { var private_variable; function private_function() { } return { public_function: private_function, // プライベート関数をパブリック関数として公開 } }()); hoge.public_function(); http://mevius.5ch.net/test/read.cgi/tech/1363752460/200
201: デフォルトの名無しさん [] 2013/03/22(金) 11:03:48.66 今やJavaScriptはここまで来た http://gigazine.net/news/20130322-firefox-asmjs/ http://mevius.5ch.net/test/read.cgi/tech/1363752460/201
202: デフォルトの名無しさん [sage] 2013/03/22(金) 11:10:02.18 OdinMonkeyっておぢんモンキーでいいの? http://mevius.5ch.net/test/read.cgi/tech/1363752460/202
203: デフォルトの名無しさん [sage] 2013/03/22(金) 11:37:19.10 >>200 ありがと。 >>196 それだと、maxLengthを隠蔽できてない。 newを使う場合はこう。 var Foo = function() {var maxLength;}; Foo.prototype.setMaxLength = function(val) {maxLength = val;} Foo.prototype.getMaxLength = function() {return maxLength;}; var x = new Foo(); console.log(x.maxLength); // => undefined x.setMaxLength(100); console.log(x.getMaxLength()); // => 100 console.log(x.maxLength); // => undefined x.maxLength = 200; // => can't change Foo's property console.log(x.getMaxLength()); // => 100 try { console.log(x.getMaxlength()); } catch (e) { console.log(e.message); } http://mevius.5ch.net/test/read.cgi/tech/1363752460/203
204: デフォルトの名無しさん [sage] 2013/03/22(金) 11:38:26.18 newを使わない場合はこう。 var x = {}; (function(obj) { var maxLength; function getMaxLength() { return maxLength; } function setMaxLength(val) { maxLength = val; } obj.getMaxLength = getMaxLength; obj.setMaxLength = setMaxLength; })(x); console.log(x.maxLength); // => undefined x.setMaxLength(100); console.log(x.getMaxLength()); // => 100 console.log(x.maxLength); // => undefined x.maxLength = 200; // => can't change Foo's property console.log(x.getMaxLength()); // => 100 try { console.log(x.getMaxlength()); } catch (e) { console.log(e.message); } http://mevius.5ch.net/test/read.cgi/tech/1363752460/204
205: デフォルトの名無しさん [sage] 2013/03/22(金) 11:54:34.47 それでは、 obj.setMaxLength(1) を obj.MaxLength = 1 と 間違えてしまうことを防げない。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/205
206: デフォルトの名無しさん [sage] 2013/03/22(金) 11:55:25.08 >>203 グローバル変数に隠蔽とは斬新だなw http://mevius.5ch.net/test/read.cgi/tech/1363752460/206
207: デフォルトの名無しさん [sage] 2013/03/22(金) 11:59:36.73 JavaScriptにグローバル変数は存在しない。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/207
208: デフォルトの名無しさん [sage] 2013/03/22(金) 12:03:10.04 >>206 実際のプロダクトコードでは、複数階層の名前空間に入れるけどね。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/208
209: デフォルトの名無しさん [sage] 2013/03/22(金) 12:08:07.49 >>208 ためしに var y = new Foo(); y.setMaxLength(200); x.getMaxLength(); ってやってみたら? http://mevius.5ch.net/test/read.cgi/tech/1363752460/209
210: デフォルトの名無しさん [sage] 2013/03/22(金) 12:21:19.07 >>209 どうなった? http://mevius.5ch.net/test/read.cgi/tech/1363752460/210
211: デフォルトの名無しさん [sage] 2013/03/22(金) 12:40:55.14 >>210 あぁ、203に合わせると最後は console.log(x.getMaxLength()); か とりあえずやってみてよ? http://mevius.5ch.net/test/read.cgi/tech/1363752460/211
212: デフォルトの名無しさん [sage] 2013/03/22(金) 13:16:53.40 基本的にJavaScriptでは「プライベート変数」はあきらめたほうがいいよ。 newも使わない方がいい。 男なら、publicなプロパティだね。 で、結局typoの問題は解決できないけど、それがJavaScriptってもんだ。 嫌ならTypeScriptがいいんじゃね(使ったことないから知らんけど)。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/212
213: デフォルトの名無しさん [sage] 2013/03/22(金) 13:25:00.70 そもそもタイポと戦えないような奴はプログラマになっちゃいかん http://mevius.5ch.net/test/read.cgi/tech/1363752460/213
214: デフォルトの名無しさん [sage] 2013/03/22(金) 13:26:27.37 そう、それがたとえ他人の書いたタイポであってもね http://mevius.5ch.net/test/read.cgi/tech/1363752460/214
215: デフォルトの名無しさん [sage] 2013/03/22(金) 13:30:07.16 タイポは神様からの贈り物なんだよ http://mevius.5ch.net/test/read.cgi/tech/1363752460/215
216: デフォルトの名無しさん [sage] 2013/03/22(金) 13:46:05.31 Javaをやってると奴隷とかドカタとか煽れるけど、スペルミスなんて、JavaやC#なら入力した 瞬間にエディタが教えてくれるに、それを人間が目で探すとか、動的型の言語のプログラマは マシーンですか。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/216
217: デフォルトの名無しさん [sage] 2013/03/22(金) 13:59:19.86 JSに限った話じゃないけどテストを書けば問題ないってのは机上の空論だな >>203もテスト(らしきもの)を書いているけど、結局のところなんのチェックも出来てない訳だし (203はそろそろ自分の間違いに気がついただろうか?) http://mevius.5ch.net/test/read.cgi/tech/1363752460/217
218: デフォルトの名無しさん [sage] 2013/03/22(金) 14:25:59.22 >>216 チェックツールあるだろw http://mevius.5ch.net/test/read.cgi/tech/1363752460/218
219: デフォルトの名無しさん [sage] 2013/03/22(金) 15:53:13.12 JSか http://mevius.5ch.net/test/read.cgi/tech/1363752460/219
220: デフォルトの名無しさん [sage] 2013/03/22(金) 15:54:14.44 >>203 だからこれは何なんだよw >var Foo = function() {var maxLength;}; >Foo.prototype.setMaxLength = function(val) {maxLength = val;} >Foo.prototype.getMaxLength = function() {return maxLength;}; 意味がわからんぞw 偉そうなこというまえに基礎からやりなおしてこいよw http://mevius.5ch.net/test/read.cgi/tech/1363752460/220
221: デフォルトの名無しさん [sage] 2013/03/22(金) 15:57:38.83 >>216 打ってる最中に画面見てないのか? 大文字小文字も規約決めてるだろうし… http://mevius.5ch.net/test/read.cgi/tech/1363752460/221
222: デフォルトの名無しさん [sage] 2013/03/22(金) 16:02:52.03 l-1とか0-Oとか他人が打ち間違ったのを尻拭いする任務を与えよう http://mevius.5ch.net/test/read.cgi/tech/1363752460/222
223: デフォルトの名無しさん [sage] 2013/03/22(金) 16:05:52.53 真に恐ろしいのは目の前で裸で立ちすくむソイツではなく どこに潜んでいるかわからない見えないアイツ 2年前に学ばなかったのか http://mevius.5ch.net/test/read.cgi/tech/1363752460/223
224: デフォルトの名無しさん [sage] 2013/03/22(金) 16:09:28.79 >>204とか x.getMaxLength()をx.getMaxLengthってミスしてもとりあえず動いてしまうように見えるし最悪w http://mevius.5ch.net/test/read.cgi/tech/1363752460/224
225: デフォルトの名無しさん [sage] 2013/03/22(金) 16:24:36.78 JavaScriptが開発効率高いなんてド素人の妄想 http://mevius.5ch.net/test/read.cgi/tech/1363752460/225
226: デフォルトの名無しさん [sage] 2013/03/22(金) 16:27:52.82 >>221 やっぱりスペルミスは目を皿のようにして確認してるのか。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/226
227: デフォルトの名無しさん [sage] 2013/03/22(金) 16:29:34.79 安い底辺プログラマが使えるから開発コスト下げられるとか妄想してるんだろうけど http://mevius.5ch.net/test/read.cgi/tech/1363752460/227
228: デフォルトの名無しさん [sage] 2013/03/22(金) 16:30:04.30 上のほうが他人のタイポがどうこう言ってる人がいるけど、 自分ならスペルミスしないってのもそうとう凄いと思う。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/228
229: デフォルトの名無しさん [sage] 2013/03/22(金) 16:31:38.03 >>228 「上のほうが」じゃなくて「上のほうで」だな。 頭悪いから日本語でも誤字しまくりだわ。 http://mevius.5ch.net/test/read.cgi/tech/1363752460/229
230: デフォルトの名無しさん [sage] 2013/03/22(金) 16:46:48.90 実行時までエラー発覚しないような言語でバイナリ配信とかサポセン死亡か http://mevius.5ch.net/test/read.cgi/tech/1363752460/230
231: デフォルトの名無しさん [sage] 2013/03/22(金) 16:52:40.15 >>217 間違いに気づいたよ。指摘ありがと。 普段はnew使わないんだけど(JSONでサーバからデータを受け取ることがほとんど)、 なんとなくnewの例も書いてみたくなって背伸びしちゃった。 ほとんどの場合がViewかViewModelらしきものを使うから、>>204みたいなコーディングしてる。 あと、try-catchはテストじゃなくて、例外が発生することの確認。 結局、JavaScriptってtypoには無力だと思うんだが、反論ある人居る? http://mevius.5ch.net/test/read.cgi/tech/1363752460/231
232: デフォルトの名無しさん [sage] 2013/03/22(金) 16:57:57.14 >>226 眼を皿って…typoしたときって自分で違和感ない? 「ん?俺今typoしたかな」って…その時だけ見ればいいじゃん http://mevius.5ch.net/test/read.cgi/tech/1363752460/232
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 655 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.027s