リーダブルコーディング技術スレ

■ このスレッドは過去ログ倉庫に格納されています
2013/10/11(金) 01:06:21.56
リーダブルコードとは

・読みやすさ、理解しやすさを追及したコードのことです
・読みやすいということはメンテナンス性も高いということです。
・理解しやすいコードはコードレビューも楽になります。
・理解しやすいコードはバグも少なくなります。
・短いほうが優れていることが多いですが、必ずしも短いほうがいいとは限りません。

俺ルール
・書き方の勝負であり、言語の勝負をしないでください。
・標準、非標準に限らずライブラリを使いましょう。
・なければ自分で関数を作りましょう。関数はなるべく汎用的に。

こういうコードを読みやすくするにはどうすればいいでしょうか?
というようなことを語るスレ。需要ありますかね?
2014/11/24(月) 12:05:06.98ID:/Xnwup+Z
>>299
> 開発時のみで使うものだったら
> ifdefで残したりしねーよ?

え゛?
2014/11/24(月) 12:55:47.70ID:NWUcXEp0
ifdefでソースコードに書いて
それをずっと保守し続けてるってことは
残す理由があるからそうしてる。
ここまでOK?

その残されたコードがじゃまで
リーダブルにならくなって困っている。
ここまではOK?

ならばifdefなんか使わずに
もっとわかりやすいコードにしろって話。
2014/11/24(月) 15:12:20.28ID:DZ0ISr8h
お前はいい加減周りのことも考えて行動や発言できるようになれよ
コーディングはそれから
2014/11/24(月) 17:13:58.44ID:+VpmsKoD
>>302
で、具体的な提案もなく、文句言うだけ?
2014/11/24(月) 17:49:29.24ID:SQsB+YJ2
プリプロの改良だね‥
2014/11/24(月) 18:31:46.57ID:CiPNuJ6e
で、そこに#ifdefの方がわかりやすい派が現れるんですねわかります
2014/11/24(月) 18:39:55.49ID:cxOxEmtO
#ifdefをインデントするのってアリ?
2014/11/24(月) 19:32:19.00ID:xxtEEteG
中身はインデントするかも
2014/11/24(月) 19:42:14.05ID:UXHgSloT
ソースとプリプロセッサのインデントが混じって見辛くなるから、俺はしない
2014/11/24(月) 20:41:48.81ID:U0wuvsWn
半角スペースでインデントはよく見かける
2014/11/24(月) 22:10:52.63ID:DZ0ISr8h
プリプロセッサのみの部分(define値の切り替えとかerrorとか)だったらインデントしたほうが見やすいと思いインデントしてる
ソース内にかかる部分だと309と同じ意見でしてない

基本は#ifがネストしないようにしたいと思ってるけどね
2014/11/24(月) 22:23:12.31ID:TsbXFfYg
プリプロ行はスペースで、コード行はタブでインデントしてる。
見やすくはなるけど、読みやすさに繋がるかどうかはわからない。
2014/11/24(月) 22:28:30.02ID:EZS/NtvV
#if XXX
 aaa
 bbb
#endif

よりも

#if XXX
void func() {
 aaa
 bbb
}
#else
void func() {}
#endif

func()
ってやっちゃうなあ。これならfunc呼び出し部分についてのインデントに悩まなくてもすむじゃん?
しかも条件XXXで切り替わる部分が複数に成った場合でも、定義を一カ所にまとめておける。
2014/11/24(月) 22:34:36.62ID:o0oR/6A6
目から瓢箪が独楽です
2014/11/24(月) 22:38:27.07ID:TsbXFfYg
関数呼び出しじゃなくてマクロにした方が良くない?
リーダブルの観点ではないけれど、関数呼び出しのネストが深くなるのは良くないと思うんだ。
2014/11/24(月) 22:39:45.84ID:/Xnwup+Z
>>313
func の内容が数行ならいいけど、もっと増えると同じ内容を両方に書かないといけなくなる
func の型とか引数が変更された時に片方の変更を忘れる

とかあるので、俺はやらない
2014/11/25(火) 01:15:46.45ID:45kyml8T
>>316
> func の内容が数行ならいいけど、もっと増えると同じ内容を両方に書かないといけなくなる
> func の型とか引数が変更された時に片方の変更を忘れる

だからこそ>>313のように書くんでしょ?

これなら変更が一箇所にまとまる。

もしこれを、funcを使う場所ごとにに
ifで加工としたら、funcを100箇所使っていたら、
100箇所、同じ変更を繰り返さないといけないよね?
2014/11/25(火) 02:33:45.34ID:GW/pgxiU
目から箪笥です
2014/11/25(火) 03:16:47.66ID:45kyml8T
私も目から箪笥です
2014/11/25(火) 03:53:07.08ID:relupevl
同じじゃない部分だけ分ければいいだけじゃん
2014/11/25(火) 06:54:59.12ID:eaby6zdh
>>317
ああ、すまん、勘違いしてたわ
変更部分を別関数に切り出すと言うことか
>  aaa
>  bbb
が元々関数に切り出すような意味のある単位ならわかるけど、処理の途中の一部を切り出したような場合だと関数名も付け辛いし分かりにくくなる
あと、単に aaa, bbb って書いてるから違和感ないけど、実際には aaa, bbb で必要とする情報や、逆に変更した情報等のやり取りを引数でやる必要もあるので、結構面倒に思うんだけど
2014/11/25(火) 07:46:51.85ID:53f+YSIW
確かOpenSSLも各プラットフォーム毎に
#ifdefの嵐でで手が付けられなくなったらしいけど、
こういうのはTemplate Methodパターンみたいなものを使えばいいんだよ。

デバッグ用の関数、またはクラスと
リリース用の関数、またはクラスを作って
それを使うコードはどちらを使っているか意識する必要がないようにする

これぐらい基本だと思うんだが、OpenSSLを見る限り
世の中のレベルってこの程度のものなのかもしれんな。
2014/11/29(土) 12:47:04.96ID:u8/hKXWz
>>322
こう?関数fにdebug用とrelease用をラップさせんの?

f_debug() { }
f_release() { }
f() { f_debug(); }
2014/11/29(土) 14:50:29.22ID:quQRjBUx
デバッグ用出力の話なら
>>249 で十分テンプレートメソッドパターンと言えるでしょ
2014/11/30(日) 21:01:48.36ID:4o6Sx4rW
呼び出し元のスコープを維持したいからマクロを使うんであって、関数やクラスに分けられるものをマクロで書く奴はいないだろ
2014/11/30(日) 22:41:03.33ID:8xQ5/Fxy
『レガシーコード改善ガイド』を読むと、どこにテスト用のフックを
仕掛けるかみたいな話が出てくるからお勧めしとく。
2014/12/12(金) 00:27:58.93ID:bKiv2VYA
c言語でなるべくグローバル変数を使わない方がいいという事で
グローバル変数無しで書き直したら、関数の引数がやたら多くなってしまった。
(´・ω・`)
2014/12/12(金) 00:31:23.89ID:+hKqCGtl
こぞーよ、こーぞーたいつかいやがれ
2014/12/12(金) 00:40:38.34ID:ADDM5Suo
データ結合まで分離できたって事だろ
誇ってよし
2014/12/12(金) 07:43:19.28ID:Znidw3Lc
なるべくグローバル変数を使わない でいいんだが、
組み込み系だと、場合によって使っていいかと。

組み込みは仮想メモリが無く、搭載メモリ容量も決まっていて、
各機能それぞれ、どれだけの最大サイズでメモリを使うかなんて
設計段階で確定するものだから、
その最大サイズで最初からグローバルにメモリマップを切っておくべきかと。
動的確保とかだと開放漏れなんていう不具合がありがちだし。

普通にローカル変数ですむようなことまでグローバルにするのは厳禁だけど。
2014/12/12(金) 08:57:20.70ID:bKiv2VYA
勉強になるわあ(´・ω・`)
2014/12/12(金) 09:27:52.69ID:E/liDhvH
メモリなどの制約があるからやるのであって、
それをするのが常識な業界であっても
その目的は「リーダブル」ではないことに注意ね。
2014/12/12(金) 15:16:05.63ID:tymqzhoh
>>330
グローバル(スコープの話)と動的確保(メモリー領域の話)をごっちゃにするなよ...
2014/12/12(金) 18:32:11.35ID:qq9LAV1Z
言語の話としては、スコープ(可視範囲)とエクステント(生存期間・寿命)な。
スタックに確保するかヒープに確保するかは、それらの実装の話。
335330
垢版 |
2014/12/12(金) 22:14:49.55ID:Znidw3Lc
いやあ、結構可読性が変わってくるよ。
動的確保系の処理って、寿命管理にそれなりの設計というかコードを書く必要があるし、
未確保の場合の条件分け処理だとか。
グローバルにすればそういう系のコードが排除出来てすっきりするんで。

今、組み込みで動的確保バリバリのプロジェクトに関わってて。
本来大丈夫なはずの所まで、大量の未確保時の例外処理を入れまくって、
可読性?なにそれ?なソースを相手にしているところww
2014/12/12(金) 23:24:59.05ID:OvrU0/Qj
>>335
> グローバルにすればそういう系のコードが排除出来てすっきりするんで。

ごめん、マジで言ってることがわからん
2014/12/12(金) 23:30:21.77ID:JABIbbJk
>>336
C言語の問題になるが、例外というものがなく
エラーは戻り値で返ってくるので、
ちゃんとしたコードを書こうと思ったら原則的に
このように書かないといけない。

int ret;
ret = printf('Hello');
if (ret < 0) {
 return ret;
}

ret = printf('World');
if (ret < 0) {
 return ret;
}
2014/12/12(金) 23:32:27.88ID:SFp8/UEn
トンチンカンすぎんべ…
2014/12/12(金) 23:35:05.15ID:OvrU0/Qj
>>337
だからグローバル使えばどうすっきりするのかと
2014/12/12(金) 23:35:23.81ID:Znidw3Lc
ポインタのヌルチェックとかな
2014/12/12(金) 23:43:14.66ID:Znidw3Lc
オブジェクト指向系言語だったらヌルオブジェクト使ってヌルチェックを不要に出来るし、
どのタイミングで動的確保されるかとかはクラスで隠蔽出来るんだが
2014/12/12(金) 23:44:06.16ID:OvrU0/Qj
コードで示してくれない?
グローバルでもチェックが不要になる訳じゃないよね?
2014/12/12(金) 23:46:39.06ID:Znidw3Lc

ポインタをグローバルに持つとかじゃないよ?念のため。
普通に、ごく普通にプリミティブ型やら構造体変数をグローバルに持つだけなんだが。
2014/12/12(金) 23:53:59.93ID:Znidw3Lc
イメージ的には、様々な動的確保情報を全て確保した状態のヒープを、
最初から固定でグローバルに持っておく、という感じ。で伝わるかな。。
2014/12/12(金) 23:54:55.17ID:ADDM5Suo
(やべえ何度読み直しても分からねえ…何が分からないのかさえ分からねえ…)
2014/12/12(金) 23:56:53.96ID:9Ma9oPly
>>339
> だからグローバル使えばどうすっきりするのかと

グローバルを使えば、メモリ確保が失敗することはない。
つまり、すべてのメモリ確保エラーを
書かないで済む。
2014/12/12(金) 23:58:05.91ID:SUQ8ZHc4
>>343-344
ごめん、マジで伝わらん
2014/12/12(金) 23:59:06.81ID:bKiv2VYA
やり取りの内容がまだ理解できるレベルではないが
奥がふかいんですねえ
やっぱcだけじゃなくjavaあたりもやっといた方がいいのかな
2014/12/13(土) 00:01:01.37ID:54ajxy39
>>346
ヒープ ⇔ スタティック の話なの?
2014/12/13(土) 00:02:55.00ID:uQ37H43s
おそらく最初から動的と静的の話なんでしょうよ
2014/12/13(土) 00:05:24.55ID:54ajxy39
そうなんだろうな...
2014/12/13(土) 02:19:46.63ID:WvyZJyoU
そうだな
2014/12/13(土) 05:42:46.74ID:xVemfz4a
書いてみた
http://ideone.com/3l8aq6
2014/12/13(土) 10:22:39.34ID:xVemfz4a
と思ったら終わってたのね、話
2014/12/13(土) 10:25:53.22ID:/4slIr06
>>353
え??

そもそも ID:Znidw3Lc なん?
2014/12/13(土) 10:31:24.66ID:xVemfz4a
>>355
ちがうよ
ログ見ながら書いてみただけ
2014/12/13(土) 10:36:24.43ID:JDqKcE2X
十年ROMれ
2014/12/13(土) 10:40:39.82ID:xVemfz4a
あぅぅ
2014/12/13(土) 23:21:18.25ID:K/9GRqnp
10年後に2chがなくなってなきゃいいが…
2014/12/18(木) 20:59:16.69ID:IPlfnya6
c言語である程度プログラムが大きくなってくると関数の数も増えて来るし
どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど
こういうのってどういう管理が一般的なんだろか
2014/12/18(木) 22:04:19.41ID:PpZ3cpAI
>>360
> どの関数がどの関数を呼び出してるとか色々増えて来ると思うんだけど

増えていかないようにモジュール化する

> こういうのってどういう管理が一般的なんだろか

増えちゃったとか不幸にもぐちゃぐちゃのソースを解析するなら Doxygen とか、金があるなら Imagix とかで見るとか
2014/12/18(木) 23:37:34.74ID:mulBDlyx
関数がある程度増えたら、それを小さく分割するってことを
しないからどんどん増えるんだよね。

なんで過去のコードを修正しないのか?
簡単なうちにすぐ手を付けないから、あとから手遅れになるんだけど。
2014/12/18(木) 23:47:41.58ID:LWfoPtOf
あまり小さく分割すると見通しが悪くなる派
2014/12/19(金) 14:45:53.53ID:YQiCmoKD
>>363
それは分割の仕方が間違ってる派

正しいやり方は

長い関数があった時、その中で汎用的に使える所をシンプルな関数に
抜き出しながら全体を短くするというやり方。

間違ったやり方だと

長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
汎用的ではない関数(というよりもルーチン)を増やすやり方。

”見通しが悪くなる" という言葉がうまく表している。
間違ったやり方は、汎用的ではない関数ができるから"見ないといけない"
「処理があちこちにジャンプして見にくい」など言うのはまさにこれが原因

正しいやり方ならは、汎用的でシンプルだから(一度見るだけで)あとは見なくて良くなる。
見るべきコードが減って処理も分割されないので、あちこちにジャンプすることもなく、見通しが良くなる。
2014/12/19(金) 23:26:05.82ID:wb+cst2b
>>364
以上、本ばかり読んでてコード書いたことのない自称できるプログラマーの意見でした
2014/12/19(金) 23:29:01.15ID:YQiCmoKD
>>365
なんにも言い返していない所がウケるw
2014/12/19(金) 23:44:37.90ID:cAPBq6kb
なかなか難しいところだ脳。
やっぱコード書く前にしっかり設計やってからやるべきなのかね。
趣味だけども
2014/12/19(金) 23:57:59.54ID:wb+cst2b
>>366
正論だから反論はできないよ
無限の時間と労力かけてでもやれと言う主張だから、役に立たないけどな w
2014/12/20(土) 01:22:27.35ID:+b2U+9C3
このスレの忘年会みたいな軽いノリで、リーダブルじゃない現場コードの晒し合いとか愚痴晒し合いとかしませんか
言語問わずなんでもありで

丁度上司のunreadableコードと戦っててもうね
出所バレない感じに整形したりしてるんですがもうね
2014/12/20(土) 01:41:00.69ID:acQ5HpBR
再帰関数使いたいけど無名関数じゃ再帰できないようだからしぶしぶprivateメソッド化して細切れになる現象
2014/12/20(土) 05:18:20.39ID:dWuhsWfV
>>364
ワンストップ・サービス(窓口)のFacadeはどうなる?

fA(){
fB();fC();fD();
}

>>367
Eclipseのリファクタリングの説明を読むといい
2014/12/20(土) 09:26:41.56ID:z0Uvrlhl
>>370つ Yコンビネータ
って全然リーダブルじゃねーか
2014/12/20(土) 10:07:02.21ID:KOv8i75g
void isReadable()
2014/12/20(土) 10:10:00.30ID:KOv8i75g
new codeClone[num_of_func]
2014/12/20(土) 12:02:33.91ID:F1BtQojg
>>368
> 無限の時間と労力かけてでもやれと言う主張だから、役に立たないけどな w

なんで無限?w
あなたが仕事すると無限の時間がかかるって話?w
2014/12/20(土) 12:12:29.43ID:cUhMXe+F
>>375
> 無限の時間と労力かけてでも
> 無限の時間と労力かかるけど

区別できないアホは絡んで来るなよ
2014/12/20(土) 12:16:04.49ID:F1BtQojg
>>371
> ワンストップ・サービス(窓口)のFacadeはどうなる?

その例から何を言いたいのかよくわからないよ。

何か俺が言ったことを勘違いしていそうだから、
勘違いしていそうなところの補足をしておく。

> 間違ったやり方だと
>
> 長い関数があった時、その一部。例えば前半分と後ろ半分みたいに分けて
> 汎用的ではない関数(というよりもルーチン)を増やすやり方。

この前半分と後ろ半分にわける間違ったやり方というのは、
例えば一つの工程をA、Bの二つに分けた時、
Bの内容(引数・戻り値じゃなくて"内容")を見ないと
Aが最終的にどうなるかわからないようなもののこと。

Facadeみたいにそれぞれの独立した工程に処理を渡して
引数・戻り値といった最小限の情報だけでやり出来るものは関係ない。
2014/12/20(土) 12:18:32.86ID:F1BtQojg
>>376
区別できているかできていないかの前に
質問に答えてよ。

俺は「無限の時間と労力をかけてでもやれ」なんて一言も言っていない。
でもまあ、仕事(作業)するなら時間がかかるのはあたりまえだよ。

(その時間内で)適切なやり方をやれって言っているだけだが
どうして無限の時間をかけるって話になったのさ?
2014/12/20(土) 12:21:24.19ID:F1BtQojg
「適切なやり方をやれ」って言っただけなのに
それを「無限の時間と労力をかけてでもやれ」と勘違いしてしまうのは

「適切なやり方をやったら、俺は無限の時間がかかるんだ。適切なやり方=無限の時間なんだ」って
>>368が言っているようにみえるのは仕方ないでしょw
2014/12/20(土) 13:02:04.48ID:lS6KGt9L
>>377
ようは暗黙にBの事前条件がAの事後条件となるのがダメということかね。
>>364の「汎用的」がどういうものを指しているのかいまいち意味がつかめなかったが、
条件を明確にするなら汎用/専用関係なくていいんじゃね?
2014/12/20(土) 13:09:20.32ID:z0Uvrlhl
>>396
java で何でかんでも定数定義して(カウンタ変数とか!)
フォーマッタでぐちゃぐちゃになったソースは見たことある
2014/12/20(土) 13:22:29.06ID:cUhMXe+F
だから正論に反論なんてできないよ
「適切なやり方やればいい」
間違ったことは言ってないからな
でも、そんなことは小学生でも言えるわ w
2014/12/20(土) 14:21:29.36ID:qyYbVqEq
>>382の上司「無限の時間をかけてでも適切なことをやれ!でも給料はいつも通り!」
って言われてるからここで愚痴ってるんでしょ
2014/12/20(土) 22:26:54.94ID:F1BtQojg
>>382
だから変なのは「無限の時間」って話が出てきた所だけだよ。
正論言ってるんだから、俺が言った内容に反論できないのはわかってるよ。
俺が言った内容ではない話が、どこからできたんだ?って言ってるだけ。
2014/12/20(土) 22:56:28.88ID:cUhMXe+F
>>384
そんな時間じゃできません
と言われたらどう答えるんだ?
2014/12/20(土) 23:25:50.20ID:F1BtQojg
>>385
誰が誰の立場でできませんっていうんだよ?
わけわからんわ。

時間内に出来るかどうかはケースバイケースなんだし、
出来るところまでやればいいだけだろ。

それに技術力を上げれば時間内にできることも多くなるぞ。
何も努力しないでコピペばかりするから技術力も上がらなくなる。
2014/12/21(日) 00:56:33.95ID:XZ/0moqW
>>385
上司「何言ってるんだ土日があるだろ。ただしそれはお前の能力不足が原因だから残業代は出ないからな。」
2014/12/21(日) 11:05:47.64ID:ikKWfd9P
>>386
> 誰が誰の立場でできませんっていうんだよ?

はあ?
指示を受けた人がその指示を実行する責任を負う立場でだよ。
常識だと思うが。

まあ、常識ないから
> 出来るところまでやればいいだけだろ。
なんてことを平気で言えるんだろうな。

>>387
先月すでに土日も使うことにあなたの指示で計画変更されてますが、お忘れでしょうか? ...
2014/12/21(日) 13:01:56.36ID:XZ/0moqW
>>388
上司「俺は土日をつかえなんて指示はしていない。そんな計画を承認したはずもない。
ただお前が業務時間内に間に合わないなら土日や深夜や自宅時間も使わざる負えないだろうということだ。そんなこともわからんのか。」
2014/12/21(日) 14:38:18.36ID:dx70AcKS
>>388
> 指示を受けた人がその指示を実行する責任を負う立場でだよ。

つまり俺か? なら出来ますって言えばいいだけじゃないか。

「お前このバグ直せる?」って聞かれた時
出来ますって答えるだろ?
2014/12/21(日) 14:40:57.90ID:dx70AcKS
あ、もしかして俺なら(上級者なら)時間内にできる仕事を
どれだけ時間があっても出来ないって言いたい人なのかな?
俺にはいくら時間があっても仕事できないよって。
2014/12/21(日) 14:50:49.21ID:dx70AcKS
まあ、ここいらでリーダブルコーディングの話に戻すか。

仕事が遅い人って見ていると、自分で自分を苦しめてるんだよね。

自分でぐちゃぐちゃなコードを書いて、
正しく動かない、バグが直せないって言ってる。
自分が書いたコードと戦っているわけさw

リーダブル、つまり読みやすいコードを書けるように
自分を鍛えれば、自分が書いたコードと戦うことは少なくなっていく。

でも仕事が遅い人って、自分が書いたコードと戦うことに精一杯。
時間がないを言い訳にしてレベルを上げようとしないから、
戦う敵を量産するだけで、更に時間をなくしてる。

コードは読むものなのだが、どうもレベルが低い人にとっては
解析する物になっているようだ。解析した後その謎を片付けないでそのままにして
さらにコードを追加するから、書けば書くほど謎が深まっていく
だから仕事をするばするほどかかる時間が増えていく。

あ、だから無限の時間って話になるのかw
2014/12/21(日) 15:48:14.53ID:wuWkedhz
>>391-392
話の流れも読めてないバカ乙
2014/12/22(月) 21:28:40.57ID:ndw8Yqnw
流れが読めないのはリーダブルでないのの典型
2014/12/22(月) 22:36:05.51ID:bXw2G98F
と責任転嫁w
2014/12/27(土) 23:32:28.76ID:OlYxJx97
自作のソフト、ネタ尽きてきたからコードの簡略化してたら5時間くらいたってた
397デフォルトの名無しさん
垢版 |
2015/10/14(水) 23:40:08.29ID:DmhFYPJM
クリエイティブじゃないやつはリファクタリングして仕事した気になってる勘違いが多い
2015/10/15(木) 01:26:25.23ID:h4rpxLqO
ぎくっ
2015/10/15(木) 12:52:24.82ID:fomBTPP1
はい
400デフォルトの名無しさん
垢版 |
2016/05/01(日) 16:37:41.94ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
1^
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況