プログラミング言語 Rust 3 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/05/21(日) 14:04:29.55ID:9L9dm7b/
Mozillaがリリースした、プログラミング言語「Rust」について語るスレです。

http://www.rust-lang.org/
https://github.com/rust-lang/rust

Servo
https://servo.org/
https://github.com/servo/servo

◆前スレ
プログラミング言語 Rust 2
http://echo.2ch.net/test/read.cgi/tech/1478023960
2017/08/07(月) 18:08:53.23ID:Y4YBisBB
>>483
解析学と線形代数の定番を教えてください、できればギャップの極度に少ないものを
翻訳じゃなくて、「解析概論」(高木)よりは親切なやつを
是非!
2017/08/07(月) 18:36:14.26ID:8DeyRC3s
杉浦本と斉藤本じゃあかんの(多変数の議論に飛躍が入るのはしょうがない)
2017/08/07(月) 18:36:16.49ID:n9zFQLuH
>>484
うちの親父の形見が解析概論なんだが
2017/08/07(月) 18:39:57.17ID:ElcK6Dg+
スレチ
2017/08/07(月) 19:45:52.18ID:8DeyRC3s
ごめん
2017/08/07(月) 20:05:48.41ID:8DHQ/UcZ
でもここ20年でネット利用者の情報リテラシーと日本の国際的な技術的地位はかなり落ちたよな
2017/08/07(月) 21:05:17.72ID:q/Po/zS7
近年は、技術書の日本語翻訳版が出るころには、次のメジャーバージョンがリリースされて買う気を失う傾向
2017/08/07(月) 21:56:28.43ID:JP8gCgB5
ITは元々レベル低かったんじゃない?ハードは強かったけどソフトはそんなに
2017/08/07(月) 23:32:35.06ID:tGwRq2k1
おまえらexa紹介されてる
ttps://www.cyberciti.biz/open-source/command-line-hacks/exa-a-modern-replacement-for-ls-written-in-rust-for-linuxunix/
2017/08/07(月) 23:34:52.24ID:R3k5HOGA
lsコマンドに替わるコマンド「exa」とは
http://news.mynavi.jp/news/2017/08/07/203/

exaはRustで開発されたls系コマンド。
サイズが小さく高速に動作し移植性も高いという特徴がある。
2017/08/07(月) 23:58:47.36ID:LiwmU2BL
Rust関係なくてスマネ

>>491
全てとは言わないけど分野によっては世界トップクラスだったよ
1.コンピュータアーキテクチャ&オペレーティングシステム
 Windowsが走るコンピュータアーキテクチャを開発、販売していた数少ない国の一つ
 そのためにWindowsのカスタマイズも行っていた
2.日本語ワードプロセッサ
3.日本語入力変換システム
 この二つは語るまでもないよね。ユーザーは積極的に捨てたけど
4.低レベルの実装、解析
 かつては日本製のBIOSパッチとか野良BIOSとかがあった。このへんの技術は1とも絡むね
2017/08/08(火) 00:52:12.66ID:b/ztEhQD
どうでもいいけどexaって打ちづらいから普通にlsでええわってなる
2017/08/08(火) 01:39:41.54ID:Apkyawzp
>>495
エイリアスつかえば
2017/08/08(火) 22:30:57.70ID:0Gdz9Dwg
>>482
それ以前から理工学書を読んでいる人間ならば多くが同様の感想を持っているわけだが
読んでない人間は知らんがね
他人の投稿が気に入らず読みたくないならば、お前がこのスレを読まずに消えれば済むこと
2017/08/08(火) 22:33:19.04ID:tK7llXaf
幅広い理工学書の全てを知り尽くした>>497
2017/08/08(火) 22:39:16.48ID:B6tVSdcm
アカデミックこじらせおじさんかイキリ大学生か
2017/08/08(火) 22:54:17.33ID:XDy6h+kL
A. 20年前と今の理工学書を比べられる、2chのドマイナーな言語スレにいる
  ->アカデミック関係者の可能性
B. 自分の意見の論拠が薄い、的確なソースを出せない印象論
  ->実体験であるなら妥当
C. スレ違いの話を得々と語る、煽りに慣れていない
  ->コミュニケーションに難あり

>>497が本当に一流大学の教官である可能性は微粒子レベルで存在する
が、話の中身は与太話だし、何を言ったかだけを判断するなら塵芥と同じ扱いでよろし
2017/08/09(水) 09:35:51.16ID:mzNn5sYF
>>497
結局「根拠は無い」というレスして恥ずかしくないの?
2017/08/09(水) 20:42:37.62ID:jJFzyGYq
Firefox高速化
http://www.itmedia.co.jp/news/articles/1708/09/news079.html
2017/08/09(水) 20:56:02.48ID:yH2dFN1n
>>493
FDの作者って亡くなったんだっけ
2017/08/09(水) 22:29:08.98ID:BGGA/pTO
1つのパッケージをインストールするだけでも時間が何十分とかかる
萎える〜
2017/08/09(水) 23:44:38.45ID:oO58YE7v
Rust 1.19におけるタグ無しのunionなどの追加
https://www.infoq.com/jp/news/2017/08/rust-119-released
2017/08/09(水) 23:50:55.47ID:AaV7WIeC
>>504 環境変数としてCARGO_TARGET_DIRを適当なところに置くと、以前にビルドしたcrateを利用してくれるよ
まあバージョンが違ったりしたらやり直しだから気休めにしかならんかもしれんが
2017/08/10(木) 09:16:01.74ID:hSTXQfAm
ライフタイムがよく分からんから、ライフタイム定義なしで動くプログラムは作れるようになったんだけど、
ここから必要に応じて参照使いまくりでライフタイムしまくりが出来るようになるにはどうしたらいいでしょうか?
2017/08/10(木) 11:35:07.02ID:+tFBM5sG
>>507 個人的な経験談だけど、ライフタイムが複雑で分かりにくいときはデザインから見直した方が良い場合が多い
単にコピーされるのを嫌って参照にすると駄目で、元の値の完全な従属物のときだけ参照を使うと大抵はうまくいく
メンバ変数間の参照はキツいので手を出さない、グラフとか所有権が複雑なのも自分じゃ作らずにライブラリにしておく、とか
2017/08/10(木) 13:04:49.06ID:qDPlaybB
rustで検索してもほとんどゲームの話題しか検索に引っかからなくて草
rustの日本コミュニティーないの?
2017/08/10(木) 13:14:22.08ID:v3fv+3Jb
ここじゃよ
2017/08/10(木) 13:29:36.14ID:jhaqJJbw
>>508
え、同じstruct内でメンバ変数間の参照は出来ないでしょ?
512デフォルトの名無しさん
垢版 |
2017/08/10(木) 14:00:03.18ID:g9gtECZC
>>509
slackがある

登録済の人 -> https://rust-jp.slack.com
未登録の人 -> https://rust-jp.herokuapp.com/ 👀
Rock54: Caution(BBR-MD5:b95868ef2c0ed5e765a4d10ada4cf289)
2017/08/10(木) 18:33:30.12ID:DpOw+Ywo
おれもslack見つけるのすごく時間かかった
2017/08/10(木) 19:56:47.71ID:oX316LZB
>>511
unsafeなコードでゴニョゴニョしないと無理だね
RocketのFairingsなんかがゴニョゴニョしているものの例
https://github.com/SergioBenitez/Rocket/blob/9c9740f/lib/src/fairing/fairings.rs#L23-L38
2017/08/10(木) 20:06:16.94ID:5YNarUir
Arcでもダメなんだっけ?使う機会がないからTutorialで読んだきり見たことないけど
2017/08/10(木) 22:57:52.57ID:Ib9pl7ao
>>507
lifetimeはextentとregionをごちゃまぜにした語だから
lifetimeに言及してる部分は実際にはextentの話かregionの話に分かれる。
だからextentとregionを理解すればいいよ。
特にscopeとextentの区別がついてないやつが非常に多いからそこ気をつける。
2017/08/10(木) 23:40:15.73ID:+tFBM5sG
何かextentとregionを説明したものってある?
2017/08/11(金) 00:54:12.71ID:XZrwY8EL
>>517
extentはscopeとよく一緒に説明されるからそこら辺で検索。
言語によってはextentの事をlifetimeと呼ぶから
そういう言語のlifetimeを詳しく解説してる本とか当たってもいい。

ただし、rustのextentとregionを混同したlifetimeの事と
extentをlifetimeと呼ぶ文化におけるlifetimeの区別は
事前にちゃんと付けておいたほうがいいね。

rustのlifetimeは無駄にややこしくしてるから頑張って。

regionの説明はほとんど見かけないから近道は論文読む。
実装ならRTSJとCycloneくらいしかない。
region理解するならzone/arena(両方同じもの)とリージョン多相とリージョン推論も理解した方がいい。
あとrust固有の話だとrustのリージョン多相は部分多相も備えてる。
2017/08/11(金) 01:38:14.07ID:KiXisjXW
無駄に話を複雑にした挙句論文を読めときたか、少し前にいたイキリ大学生かよ

普通に公式のThe Rust Programming Languageを読んで現行Stringを使ってるなら&strにして組み直して見たら?
structのメンバに参照があると否応でも意識/理解せざるを得ないと思うぞ
2017/08/11(金) 05:26:24.27ID:oTwda99v
>>519
いざ言われてみるとstructで参照を持つのってどんなときか思いつかんのだけど
2017/08/11(金) 07:59:32.16ID:KiXisjXW
じゃあまずlifetimeについて考える前に、参照のメリット/デメリットについて考えような
公式サイトのドキュメント読んでこい
2017/08/11(金) 09:42:12.68ID:oTwda99v
c++だと参照保持すると生存期間管理ないからあぶないからやらない
スマートポインタ使う

そのへんの感覺の違いがまだなれない
2017/08/11(金) 13:31:10.83ID:wKLRpp+C
impl Traitがstableに入ったらどうなるか分からないけど、MapとかFilterとかがstructに参照+独自データって形になってるよ
あとはCharIndicesとか。実際のソースはちょいと違うけど元のデータへの参照+と現在位置っていう形になってる
2017/08/11(金) 23:09:32.05ID:wLCu2iAZ
昨日Slackに参加した人たちはお前らって認識で合ってる?
2017/08/11(金) 23:41:41.62ID:lyr4XUnD
ようはfat pointerでしょ
2017/08/12(土) 12:16:25.41ID:IzeoJwWv
コンパイル済みのバイナリパッケージを公開してほしいけどそういうのは実現可能ではない?
2017/08/12(土) 18:35:23.01ID:dKEWL6WP
例えばripgrepのコンパイル済みのバイナリパッケージ
ttps://github.com/BurntSushi/ripgrep/releases/tag/0.5.2

リリースビルドしたバイナリをzipなりでパッケージングすれば良いんでね
2017/08/12(土) 21:37:32.89ID:YDSzcZF8
Pathがすげー使いづらいんだけどなんでなの
2017/08/12(土) 22:36:26.03ID:4PGg+vlK
>>528
具体的にどのあたりが使いづらいと思っているの?
2017/08/12(土) 22:57:47.92ID:Lzx+EbMy
>>527
cargoにそんな感じのサブコマンドあった気がする
2017/08/13(日) 04:17:55.12ID:oa7ekDLN
PathはPath::new(&str)が参照を返すから使いづらい(参照を使いこなせない)
PathBuf使えば楽になったよ!
2017/08/13(日) 08:43:10.09ID:f+gGM+v+
>>529
返り値で返せないとか
PathBufすると変換いるしめんどい
引数の文字列のライフタイムで怒られる

とか
2017/08/13(日) 13:14:25.96ID:3acTHEGf
>>532
>返り値で返せないとか
>引数の文字列のライフタイムで怒られる
fn file_stem<'a, P: AsRef<Path>+?Sized>(path: &'a P) -> Option<&'a OsStr> {
let path = path.as_ref();
path.file_stem()
}
これじゃダメ?

>PathBufすると変換いるしめんどい
to_ownedやintoするのもめんどくさけりゃ、もう死んでしまえ
2017/08/13(日) 13:51:20.44ID:TkYKFb/H
こんな使いづらさでしょ
fn path<'a>(name: &str, ext: &str) -> &'a Path {
Path::new(&format!("{}.{}", name, ext))
// error[E0597]: borrowed value does not live long enough
}

まぁこれも死んでしまえ事例ではあるが
別所にOsStrの所有権(ライフタイム)がある場合に参照だけで済ますためのPathなので
動的に生成したOsStrでPath(参照)だけを返せると思うなよバーカというね
2017/08/13(日) 13:56:05.57ID:LyaOwRfj
>>533
いきなりドラえもんになるのやめろ
2017/08/13(日) 16:54:45.71ID:4uuls5D8
impl Traitっていつstableはいるんだっけ?
2017/08/13(日) 22:34:46.55ID:3acTHEGf
>>536
特に時期は決まってないはず
少なくとも次のstableではない
2017/08/13(日) 22:46:00.09ID:r6u293xs
owned valueとborrowed valueの区別がついてないだけじゃん
2017/08/13(日) 23:14:52.73ID:3acTHEGf
まあ、Sizedと!Sized (DST)の区別がつきづらいってのもあるとは思う
strとString然り、[T]とVec<T>然り、OsStrとOsString、トレイトオブジェクト、そしてPathとPathBuf……
2017/08/14(月) 01:43:35.30ID:tyQzDLaM
アマグラマの書き散らした名前空間みたいできついな
2017/08/14(月) 07:06:13.75ID:HJwH3qkh
>>538-539
それらが区別はついても
その上でライフタイムを理解してないと使いづらいという話じゃないの

>>534なんかはPathがborrowed valueで!Sizedなのは分かった
それはそれとしてPathのまま返すにはどうしたらいいの?って
ライフタイムをきちんと理解してない初学者は躓くわけじゃん
2017/08/14(月) 09:35:01.13ID:59zJ3Di9
>>541
>Pathのまま返すにはどうしたらいいの?
ライフタイムとか関係なく、!Sizedな型はそのまま返すなんてことはできない
コンパイルタイムにサイズが分からないからランタイムでサイズ情報を持つfat pointer経由でしか扱えない
https://doc.rust-lang.org/book/first-edition/unsized-types.html
所有権を持った値として返したいのならそのownedなバージョン(今回はPathBuf)かボックス化された状態(PathBuf::into_boxed_pathで得たBox<Path>)を使うしかない

ああ、>>532の「返り値で返せないとか」の意味がようやく分かった。確かにその通りだ。別の型で返す必要がある
2017/08/14(月) 09:54:46.27ID:HJwH3qkh
ええぇ、今までPathが返り値で返せないの意味を分かってなかったのかw
!Sizedな型は+Sizedとかで型サイズを固定させて返すとか頑張るんでしょ、Pathは出来なかった気がするけど

PathBufはDeref type Pathがあるからまぁなんとか
str, String等の命名規則がStr, StrBufじゃないのは気に入らん、みたいなのは分からいでもない
なんか歴史的背景があるんだろうけど、考えるのが面倒でそのまま受け入れてる
2017/08/14(月) 09:56:58.67ID:3NSMgreF
習いたての頃に[u8]を引数に取ろうとして躓きまくったのを思い出す
そういやこれって何でわざわざコンパイラー組み込みでファットポインターを定義してるんだ?
struct Path<'a> { start: *mut (), end: *mut (), marker: PhantomData<&'a PathBuf> }じゃダメなのか?
2017/08/14(月) 10:30:03.78ID:59zJ3Di9
>>544
それだとimpl AsRef<Path> for PathBufとかが出来ない
2017/08/14(月) 10:53:05.45ID:fyv2iRf4
PathがSizedじゃないってのが初学者的にめんくらったわ
strと同じだと思えば理解できた
2017/08/14(月) 10:54:47.32ID:fyv2iRf4
>>537
nightlyって1.21って出るけどそこに入るわけじゃないのね
2017/08/14(月) 15:20:15.52ID:xd4YqYEd
>>542
いかにもRust FAQに載ってそうな話題だと思ったが、ちらっと見た感じ、載ってないな
和訳も1割ぐらいしか進んでないし
2017/08/15(火) 01:22:49.60ID:Kx+225Ge
>>541
>>542の言うとおりそこはライフタイム関係ないから
デフォルトがムーブセマンティックスで、
借用はsubstructural type systemに守られてるってこと覚えたらライフタイム知らなくても分かる。

>>547
特に決まってないよ。
nightlyの途中でマージされたのがいきなり次のstableに入ることもあるし。
2017/08/15(火) 05:20:52.55ID:qX6sO+hu
&Pathを関数戻り値で返せないのにライフタイム関係ないって子たちはエラー内容見えないのか
// error[E0597]: borrowed value does not live long enough

サマリーだけでlifetime関係ないって思い込んでるならE0597の詳細見て理解しような
https://doc.rust-lang.org/error-index.html
2017/08/15(火) 05:38:14.01ID:tN8D0FqC
ちょっと聞きたいんだけどrustのマクロって裏でどういうコードが生成れてるか分かる機能ってあります?

Cのプリプロセッサなら生成コードが出力できるけど、、、
2017/08/15(火) 09:18:04.23ID:cM0t4sQL
Webにいるプログラマって、マサカリとかに代表されるように人格が狂ってる人多いよね。正しければ正義的な。
2ちゃんはさらにひどいけど、そうじゃなくても。
実社会でプログラマの地位が認められてないからかなぁ。
2017/08/15(火) 09:27:06.48ID:O7/Y4aw2
>>550
&PathじゃなくてPathを返すって話だよ
Path: !Sizedだから参照を経由しない形では返せない(fn() -> Pathと書けない)というお話ね
>error[E0277]: the trait bound `[u8]: std::marker::Sized` is not satisfied in `std::path::Path`

こういう流れを見ると本当にDSTは理解されづらいんだなあと思う

>>551
Nightlyで、rustc -Z unstable-options --pretty=expanded foo.rs
これのラッパとしてcargo-expandというものもある
https://github.com/dtolnay/cargo-expand
2017/08/15(火) 09:32:50.69ID:qX6sO+hu
Path:newが&Pathを返すというstdライブラリ仕様を言及してたのかよwww
そりゃ失礼、そんな所よりそれをどうやって使うかを話してるつもりだったわ
2017/08/15(火) 17:22:31.52ID:bUHuOZJE
newがPathを返すと思ってたわ

あはは
2017/08/15(火) 17:26:22.04ID:L9Yq17PV
あはは
2017/08/15(火) 18:11:07.59ID:qRVErxIb
あはははは
2017/08/15(火) 18:12:13.59ID:wgr8KXHg
もしかして他にもnewで&返すのあるの?
2017/08/15(火) 18:29:55.70ID:MDS+g102
ワロス
2017/08/15(火) 18:34:48.29ID:O7/Y4aw2
>>558
標準ライブラリのパブリックな型ではOsStrくらいじゃないかな
from系の関数も含むのなら、std::slice::from_raw_partsとかstd::str::from_utf8とかもある

標準ライブラリ外のクレートでもstrに対するラッパとかでそういうのがあった気がする
2017/08/16(水) 01:13:42.55ID:lhJRoj0R
>>554
オレも値受け取った後の話だと思ってたわ
2017/08/16(水) 01:18:30.66ID:lhJRoj0R
ごめん言い忘れたぜ。
>> 558
fn new<S: AsRef<T> + ?Sized>(s: &S) -> &Self
に一般化出来るの全部。transmuteしてるだけだもん。
2017/08/16(水) 01:35:45.19ID:Vj5dC5z1
>>562
これ系の実装がやたら低レベルなのってどうにかならんもんなのかねえ……
2017/08/16(水) 03:04:04.19ID:Tcbyhi06
とは言え、Pathみたいにnewtypeパターンでnewtypeの元の型の参照からnewtypeの型の参照を得るケースなんてそう多くないからな(というかDSTくらいでしかやらない)
transmuteもやむなしだろう
2017/08/16(水) 04:03:28.36ID:1RQ5dDrL
newなんて普通過ぎる名前が悪い
sliceよろしくfromにしておけばよかったんだ
2017/08/16(水) 07:12:51.51ID:Ip1XZB1d
>>551
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/macros.html#マクロをデバッグする

> マクロの展開結果を見るには、 rustc --pretty expanded を実行して下さい。
2017/08/16(水) 10:55:53.36ID:Agtz0DvI
IntelliJ Rust Pluginのエディタが型表示をヒントとして表示するようになってクッソウゼェw
一瞬便利かなと思ったけどやり過ぎだと思ってオフにしたった
futuresでチェーンしてると型名が長すぎて実態のコードが画面外に追いやられてたわ

変数名にフォーカスしたら型名表示くらいのFRやPRは出てないものかしら
2017/08/16(水) 11:05:25.77ID:s5nUB7nh
>>567
その機能を持ってきたJavaだと型名が短いからいいんだけどね
2017/08/16(水) 11:50:59.59ID:11a+64I1
みんな何でRust書いてるの?IntelliJ派?
2017/08/16(水) 17:55:39.36ID:5vWhS1NV
emacs
2017/08/16(水) 17:56:12.79ID:Vj5dC5z1
Vim一択
2017/08/16(水) 17:58:42.50ID:5vWhS1NV
Path(PathBuff)に拡張子を追加するにはどしたらいいすか

f.txtをf.txt.zipにするてきな。
2017/08/16(水) 18:27:36.87ID:ObQbU6V8
ggrksなので雑に答えてみる
let path = Path::new("f.txt");
let new_name = format!("{}.{}", path.to_str().unwrap(), "zip");
let new_path = Path::new(&new_name);
print!("{:?}", new_path);

これ以上雑な実装はねーだろ(チラッチラッ
2017/08/16(水) 18:47:37.19ID:U6ziTncO
やっぱそーなっちゃうんですねー。
ありがとうございました。
さすがにこれ以上エレガントなのはないですね
2017/08/16(水) 18:48:57.93ID:Vj5dC5z1
元から&mut Stringや&mut OsStringを持っていてそれを&Pathに変換するような場面なら、素直にStringやOsStringの時点でpushとかで加工した方が手軽だと思う
OwnedなPathBufしか持っていないのなら一旦OsStringに変換してから拡張子を足してPathBufに戻す
&Pathや&strしか持っていないのなら、そもそもその状態では書き換えようがないからto_ownedする
&mut PathBufしか持っていないのなら、多分設計が良くない。&mut OsStringを受け取れるようにできないか検討しよう
2017/08/16(水) 19:03:14.68ID:PvRs7uXf
エディタわりとバラバラなのな
俺はVimだけど何となく気になった
2017/08/16(水) 19:22:40.51ID:ObQbU6V8
来るかなぁと思ってたが、案の定エレガントじゃない回答(>>575)がきたぞw

卓上で語るのが好きでコードに落とせない子なんだろうなぁ
>>575はそのバリエーションで実装に落としてあげるとエレガントな回答になるからちょっとやってみ?
2017/08/16(水) 19:42:34.81ID:Vj5dC5z1
>>577
1番目
fn f(path: &mut OsString) -> &Path {
path.push(".zip");
Path::new(path)
}
let mut path = "f.txt".into();
assert_eq!(Some("f.txt.zip"), f(&mut path).to_str());

2番目(assertionは省略)
fn g(path: PathBuf) -> PathBuf {
let mut path: OsString = path.into();
path.push(".zip");
path.into()
}

3番目
fn h(path: &Path) -> PathBuf {
let mut path: OsString = path.into();
path.push(".zip");
path.into()
}

ついでに4番目(実際に使うべきでないが)
fn i(path: &mut PathBuf) {
unsafe {
(*(path as *mut _ as *mut OsString)).push(".zip")
};
}
2017/08/16(水) 19:56:17.83ID:YfsrWVwz
めちゃくちゃエレガントになったな(白目)
2017/08/16(水) 20:11:43.78ID:ObQbU6V8
1〜3がすごく無駄なバリエーションでワロタ
まとめてこれでいいじゃん, 分けて挙げた意味あるのかいな
let path = f(PathBuf::from("f.txt"));
let path = f(Path::new("f.txt"));
let path = f(OsString::from("f.txt"));
fn f<P: AsRef<Path>>(path: P) -> PathBuf {
let mut path: OsString = path.as_ref().into();
path.push(".zip");
path.into()
}
2017/08/16(水) 20:16:19.25ID:eiUsQzcr
cloneする奴としない奴を同列に語るのはどうなんだって感じだがな
2017/08/16(水) 20:18:00.24ID:ObQbU6V8
4を頑張れば>>573を超える雑な実装にできる可能性がありそうだけど無理かなぁ
まぁ無理か・・・
2017/08/16(水) 20:27:22.87ID:eiUsQzcr
つまり、雑さ選手権であると言う事を見落とした事が>>575の敗因か()
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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