Webアプリ作った話

Webアプリを作って公開するまで。アプリ自体は過去記事参照

構想

イデア自体は随分昔からあった。そもそもNegitaku.orgがあったし、新しいことじゃない。数年前から作る機会があれば作りたいなとは思ってたし、サービス名(Looking for GG)もその時すでに考えていた。具体的な要件だったり、技術選定はいざ作ろうとなってから考えた。

技術選定

思い返してみると最初にそんなに考えてなかった。

  • 開発用OS:MacOS

    Windowsは頭に入ってなかった。ゲーム用OSだと思っている節があるし、ゲームの環境を汚したくないので。最近は仮想環境の面もあるし、元のOSはそこまで気にしなくてもよくなってるとは思う。開発するものによってはWindowsが選ばれることも多いし。Win+VirtualBox(Ubuntu)はなんかよく落ちるからなしにした。そのまんまUbuntuでもよかったけど「Mac使ってる俺カッケー」が体験したかったのでMacにした。でもこのMacbook pro、2011年モデルで対応はHigh Sierraまで。死んでいる。

  • 言語(フレームワーク):Python/Django

    普通にPython/DjangoRuby/Railsだと思ってた。で、触ったことがあるPythonにした。PythonWebフレームワークは他にもあるけど、Djangoなのは記事が一番多そうなので。Vue.jsとかReactとかフロントサイドらしき技術は何も考えてなかった。どこまで出来るのかとかも知らない。もともとUIとかデザイン的なところはあんまり考えるつもりがなかった。Django、開発は3.0でやってたけど、サポートの期間短いらしいので本番は2.2にしてる。

  • サーバー:さくらのVPS(Ubuntu)

    最初はHerokuかVPSかで考えてた。せっかくだからVPSにしてWebサーバーとかその辺りも勉強できるようにしようと思った。さくらのVPSは使ったことがあったからConohaにしようと思ってたら、既にさくらのVPSが契約中だった。解約したもんだと思ってた。 OSは皆CentOSを使っているのでUbuntuにしました。

  • Webサーバー:Nginx

    Apacheとどっちでもいいなら、これから先よく使われるだろうと思う方にした。

  • WSGI:Gunicorn

    最初はuWSGIにしようと思ってたけど参考書(あとで書く)がGunicornだったので。

  • DB:PostgreSQL

    MySQLPostgreSQLでなんとなくPosgre。理由はない。

要件

対人で楽をしたかった。責任を負いたくなかった。

  • シンプルに

    小難しいこととか、機能いろいろつけたりとかで面倒になって投げ出さないようにしたかった。あとは、デザイン面で頑張るつもりがなかったので、機能もシンプルに行くのが良いと思った。

  • 個人情報をもらわない

    本当はユーザー登録すらさせたくなかったけど、投稿したものの管理とかを考えるとユーザー機能を実装した方がスッキリ済むと思った。実はユーザー機能なしで実装してて詰まってしまって、それでユーザー機能を実装した。ただ、もらう情報はメールアドレスぐらいにとどめた。

  • デザインは考えない

    考えないは嘘だけど、なにも考えずBootstrapベースのBootstrapっぽさも消すこともしなかった。オタクゲーマーが使うサイトだし色は黒ベースにしようかな〜(キリト並感)、とか考えてヘッダーを黒(Bootstrapテンプレート)にしたらもうベースはこれでいいや感が出た。テンプレート名、Darkやぞ。イカしてる。

  • 機能

    投稿/編集/削除、リスト形式で投稿を一覧化/ゲームタイトルごとに絞れる

  • 投稿できること

    名前、ゲームタイトル、内容文、Twitterリンク、HPリンク

中身については作りながら考えてるものが多い、チームの募集は、最近はいろいろ部門を抱えてるゲーミングチームが多いので、個人が複数チーム募集できるようにした。スカウト登録は1件のみ。

開発

基本ネットの情報鵜呑みベースだけど、何か基準になるものがあると良いと思って本を購入した。現場で使える Django の教科書《基礎編》。実際の開発に役立つようなTips的な情報が載ってて良かった。ネットを検索すれば実装方法とかはいくらでも出てくるけど、Tips的な情報は探せばあるんだろうけど、簡単に見つからなかったりする。それがまとまってるのが楽だった。デプロイの時もこれの実践編を買ったけど超助かった。

そもそも特別な機能を盛り込んでないからほとんどDjangoに用意された機能で実現できるし、調べれば大抵のことは出てくるので、そこまで苦労した感がない。ただ、Djangoそもそもの動きをあまり理解せずに実装していったので、ちょっと道がそれるだけでわからなくなる。まあそれも調べれば大抵出てくるんだけど。あまりこだわりすぎなければ大抵は簡単に実装できそうだと思う。

若干こだわった部分とかもあって、ユーザーページのURLを同じにしたいとか。苦労した覚えもあるんだけど、コードをみると大したことじゃなさそうな感を今感じている。ユーザー機能(メールアドレス認証とかログインの機能とか)は調べて出てきた情報でいけたし、どこで躓いたっけな。。。苦労した感がないって書いたけど苦労はしてて、でも大抵は調べることに苦労してただけ。知恵を振り絞って解決した覚えがあまりないので、そういう点で苦労した感はない。

  • デザイン

    Bootstarpに丸投げ。とりあえず自分で見た感じで違和感ないようにしてたぐらい。もともとの構想からデザイン面は苦労せず作ろうと思ってたのでこれでヨシ! サイト内で使ってるアイコンはいらすとやから。ツイッターとかfaviconのアイコンは自作です。サイト内はまあええかーと思ってるけど、SNS系のアイコンとかは何とかしたいなーと思ってる。ロゴの発注ってそれなりにお値段がすることを初めて知った。安くて2万ぐらいからだけど、5万ぐらいは出したいなーと思ってる。お値段がかかることなので考え中。 あとは最近はWeb=スマートフォンなぐらいだと思ってるから、一応スマホでちゃんと見れるかぐらいはチェックしながら作ったつもり。

  • テスト

    やろう、やるぞ。とは思ってたけど結局あまりやってない。というかうまくやれていない。フォームの部分だったり、リストの部分だったり、ページネーションの部分だったりは動作確認をそれなりにしたけど、ユニットテストを含め再帰性のあるテストコードを書いていない。カバレッジすら取ってない。そのうちやるかーと思ってるけど、さっさとやらないとずっとやらないことになると思う。機能実装したらその都度テストを書くぐらいのアレじゃないと、どんどんめんどくさポイントが貯まって手がつけられなくなると実感した。

本番環境

実はVPSに環境を整える前に自前でUbuntu Server機をこしらえて、テストがてらデプロイ環境を構築しようと思ってやってたけど、なんか上手くできなくてやめた。その時はuWSGIを使ってた。Ubuntuのブートから既に苦労してたので、そう思うと自家製サーバー運用は大変そうだ。

上の経験があって、デプロイ環境構築に苦労しろうだなーと思ったので、現場で使える Django の教科書《実践編》を購入した。VPSの環境構築に関してはこの本でほぼ網羅できた。

本番環境はそれなりに課題が残ってる。ログ管理とかもそうだし、GunicornとNginxも無知なので勉強しときたいと思う。あとはデプロイ方法について。今はgithubを介してデプロイしてるんだけど、これでいいのか感が否めないので調べたい。

サービス開始から

サービス開始の告知ツイートをする時は結構ドキドキした。ドキドキしながら画面の前に座ってるのが嫌だったから、ツイートだけして風呂に行った。風呂でもドキドキしてた。リラックスできない風呂はよくないと思った。内心バズるかなーと思ってたけど、全然そんなこともなく収束した。そんなに流行らなくても良いと思ってたけど、まったく使われないのもアレだよなーと思った。

チームも個人も少ないが登録してもらって、せっかく登録してくれたからもうちょっと宣伝していこうかと思った。そもそも見られることがなかったら、登録してくれたのにあまり意味がないことになってしまう。

Negitaku.orgの管理者に頼んで記事を掲載してもらった。超ありがたい。ほかに頼むところが思いつかないのでここからどうするかって感じ。地道に宣伝していくしかないのかな。

感想

構想からリリースまで終始楽しかった。ひと段落終えて、今はなにもする気がなくなっている。この現象って何か名前ついてない? 触れたことのない技術に触れたし、いろいろ勉強もできてよかった。あとはとりあえずリリースできて良かった。 とりあえずやってみるのは大事だと思う。考えすぎると何もできない。

Django、完璧に理解したぞ!

よく参考にしてたサイト

Looking for GG - ゲーミングリクルートサイト

Webサービスを公開したのでそれについて書く。今回は技術的な話ではなくて、そもそもの話。

What

Looking for GG

https://lookingforgg.jp/

一言でどういうサービスと言えばいいのか決めていないというか分からない(追記:ゲーミングリクルートサイトでどうすかね)。ゲーミングチームのメンバーを募集したり、逆にチームを探してますアピールをしたりすることができます。名前とゲームと募集内容ぐらいしか書く所がないシンプルなサービスです。

ゲームはリストから選ぶことができて、今の所の対象はPCのチームゲームで、ある程度の競技シーンが存在するようなゲームです。※俺判断

Why

なんでそんなもの作ったか。

今のPCゲーマーの人々は、Negitaku.orgは知ってますか?

Negitaku.org は「esports」(eスポーツ)、「FPS」(First Pesron Shooter)、「MOBA(Multiplayer online battle arena)」、「ゲーミングデバイス」関する話題を中心に、それらに関連するゲーム等の国内外の情報を紹介する個人運営のニュースサイトです。2002年8月24日サイト設立。

今はニュースサイトとして運営しているNegitakuは、以前はユーザー登録機能があって、チームのページを作成できたり、メンバー募集を行ったりすることができる仕組みがありました。SAやAVAなどの無料ゲームには公式サイトにメンバー募集ページが備わっていたり、ゲーム内でメンバー募集をするような文化がありましたが、その他PCゲーム(CS, CoD, etc...)にはそういう環境がなく、メンバー募集などにはNegitakuがよく使われていたと思います。僕が初めてチームに加入した時(2010年頃)もNegitakuを使ったのを覚えています。

時代は進みました。Negitakuからユーザー機能が失われて以降、今のPCゲーマー達はいろいろな方法でメンバー募集だったりをしていると思います。CS:GOはリーグ運営を行っている「宴」のソーシャルページにメンバー募集機能があります。PUBGにはスクリム運営のDiscordにメンバー募集を行えるチャンネルがあります。

ただ、そういった環境がないゲームも含めて、よく使われているのはTwitterだと思っています。実際に僕もPUBGのチームを探したり、メンバーを募集したりするときにTwitterも使いました。都合よくタイムラインに募集ツイートがまわってこれば良いのですが、そう上手くはいきません。なので普通に検索して探すんですけど、いろんな問題点があります。

  • 検索ワードによって、見つけられるツイートが変わる
  • モバイルやコンシューマの情報が混ざる
  • 不要な情報がたくさんあるので探すのが大変

CS:GOのように競技シーンのコミュニティページにメンバー募集などの機能があるのが一番良いですが、そういうものがないゲームもたくさんあります。PUBGのスクリムDiscordも招待されないと入れない半クローズドなものです。

チームゲームを競技シーンでプレイしているチームやプレイヤーが、メンバーを探す/チームを探すことが簡単にできる仕組みがあれば良いと思ってこのサービスを作りました。

あとは勉強ついでに。

こだわりポイント

  • 必要以上に情報をもらわない
  • シンプル
  • esportsという言葉をサイトに入れない

聞かれそうなこと

モバイルやコンシューマへの対応

面倒だったっていうのが正直な所です。すみません怠惰です。モバイルとコンシューマの規模の大きさは理解しているつもりです。ただ、モバイルとコンシューマの競技シーンを実際あまり知らないっていうのもあります。声が多ければ対応したいと思います。(するとは言ってない) ただ、PCユーザーでなくても普通に募集はできちゃうので、あまりにも増えてきたら対応せざるを得ないっていうのが事実です。

〇〇(ゲームタイトル)がないけど?

教えてください。

サービス名(Looking for GG)について

海外とかだとチーム探しとかにLFT(Looking For Team)という言葉がよく使われます。そこから取りました。あとは、メンバー/チームを見つけて、仲間とGood Gameをしましょうって意味を込めてGGを。

最後に

チームゲームは良いことも悪いことも含めて様々なことを教えてくれます。仲間と共に同じ目標を目指して試行錯誤を繰り返すこと、時にはぶつかりあったりしていろいろな人間関係を学ぶことは、人生にとって良い経験になると思うし、日々のモチベーションにもなります。ひとりでは勝てない敵でも、仲間と一緒なら勝てるはずです。最高の仲間と最高に楽しいゲームをすることへの手助けになれれば幸いです。glhf

PUBG,

約2年間のPUBGを振り返る。

始まり

最初に見た大会は覚えている。IEM XII Katowice PUBG Invitational。何がきっかけで見たかは覚えてないけど、偶々見たような感じだったと思う。PUBGはちょろっと遊んだことがあるぐらい。ドン勝の体験も良いものだったし、面白いゲームだなーとは思ってたけど、ほとんどプレイはしてなかった。大会形式のものを見るのは初めてだったし、最初はなんとなく見てたと思う。ただ、それまでPUBGに抱いていた印象は異なるものに変化していた。

「これめっちゃ面白いんじゃね?」

それまでPUBGはTPPモードのゲームだと思ってた。動かず覗かなくても視界が取れるゲーム。ただ、その大会はFPPモードで行われていて、動いて覗きにいかないと視界が取れないゲーム。リスクをマネジメントしながら情報を取って、相手の動きを予測して動いていく。めっちゃ難しそうでめっちゃ楽しそうなゲームがそこにはあった。

Team Soil

フレンドに声をかけてチームを作った。メンバーを募集して4人集めることができた。その時の日本の競技シーン(PJS)はTPPが主流で、スクリム(練習試合)もTPPがメインで行われていたけど、幸いにもFPPのみのスクリムを行ってくれるコミュニティがあって、そこで練習をさせてもらっていた。その時はPJSに憧れはあったものの、特に目指している場所ではなかった。TPPはやりたくなかったからね。チーム活動も何か目標がないとモチベーションを保つのが難しい。その時は仕事もしてたし、メンバーも社会人が多かったから、活動はだんだんとまちまちになっていった。そんなわけでスクリムにはあまり出れなかったけど、PUBGの練習は常に行っていたと思う。働いていてゲームする時間が少なかったし、使える時間だけPUBGに注ぎ込まないとトップに追いつけないと思っていた。

2019年に入ってからPJSもFPPに切り替わり、ようやく具体的な目標を据えることができた。チームは解散した。自分で作ったチームだったし、メンバーも皆いい奴らだったけど、PJSを目標にしているわけではなかったし、次のステップに進むにはそれが必要だった。申し訳なくも思っていたけど、次のことに目が向いていたせいか、あまり気にはしていなかったと思う。そして俺は仕事をやめた。

Icicle Romy

自信に満ち溢れていた。雰囲気さえ良ければどんなチームでもよかった。下手くそ(直球)なチームでもついてきてくれさえすれば、俺がPJSに連れていくつもりだった。Icicle Romyに加入した。

井の中の蛙大海を知らず

味方もまともに動かせない。かと言って自分が最強な訳でもない。自分の中にあったロジックを最後まで信じきれない。やればやるほど自分の弱さを知る。

でもそんなのは普通で、それら全てを受け入れて努力できる人間が強い人間なんだ。俺はできなかった。練習時間は段々と減っていった。空の青さを知ることができなかった。

最近はそんな自分を受け入れてしまっている。最後になるだろうPaRに出れないことに悔しいと思わない。出ている他のチームを羨ましいとも思わない。そんな自分にちょっとだけ悔しさを感じる。

勝ちたかったと言うならどうして手を尽くさなかったのか。何も言い返すことができない。

それでもやっぱりこのチームでPJSに行きたかったな。それだけは言える。

無職という選択

無職になってまでゲームをして、結局何の成果も得られていない。

俺はプロになりたいわけじゃなかった。自分の打ち込んだもので1番になりたかった。人生に「勝利」の二文字を与えたかった。その手段にゲームを選んだだけ。

仕事が原因で勝負の機会を逃すのが嫌だった。仲間は許してくれても自分が許せないだろうと思っていた。だから仕事は辞めた。

無職なんてできるのは今しかないとも思っていた。結婚して子供もできたらこんなことはできない。

何を言っても1行目が正しい。そうは思う。

それでもこの無職の経験は、自分自身を知るうえでは必要なことだったかもしれない。随分な回り道をして、結局元の道に戻ってきただけなんだけど、この回り道で見てきたものも全部自分なんだ。

人は過ちを繰り返す

※フィクションです。

PUBGに夢中になってすっかり忘れていたけど、似たような経験はしてた気がする。あのSAO時代だ。当時俺はキリトや血盟騎士団などの攻略組からひとつ後ろ、要は攻略組が命を張って開いてきた道で甘い蜜を吸うだけのプレイヤーだった。ゲームに自信はあるけど、命を張るようなそこまでの覚悟のない奴らの場所に居た。

そんな俺も一時期攻略組と行動をともにしたことがある。何も知らず自分達が強いと錯覚していた。すぐにここは俺の居場所じゃないとわかった。そもそもの覚悟が違うのだからそれはそうだ。

トップを走るというのはそういうことだ。足を止めたらその時点で終わり。あの時の俺は何も学べていなかった。

終わりと始まり

俺のPUBGはこれで終わり。でも俺はまだ続く。だからピリオドは止めてコンマにしておくよ。

チームメイトとチームには本当に感謝しています。あざまる水産

SSL/TLS証明書をcertbotで発行に失敗

Let's EncryptのSSL/TLS証明書をcertbotで発行しようとしたら、なぜか「Congratulations!」にならなくて詰まった時の話。

環境

あとはDjangoでNginxなんだけど、原因になっているっぽいのが上の3つだと思う。VPSとメールを同じドメインで使っていて、そのときのネームサーバー(DNSサーバー)のレコード設定が原因だったと思う。設定はさくらのVPSとメールボックスを同ドメイン利用するネームサーバ設定を参考に行った。※設定を間違えているわけではないと思う。

問題から解決まで

いろんなサイトとか参考にしながらcertbotSSL/TLS証明証を発行しようとする。成功したときは「Congratulations!」って出るんだけど、出たのは以下

IMPORTANT NOTES: - The following errors were reported by the server:

​ Domain: XXX
​ Type: connection
​ Detail: Fetching

http://XXX/.well-known/acme-challenge/XXX: Connection refused

To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided. - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.

ちゃんとドメインでWebページへアクセス出来ていたので、最初はネームサーバーの設定を疑っていなかった。調べまわっていろいろ試してみるもののどれもダメで(/.well-known/acme-challenge/を手作りしたり)、どうしたもんかとログを眺めているとちょっと引っかかるポイントがあった。

      "validationRecord": [
        {
          "url": "XXX",
          "hostname": "XXX",
          "port": "80",
          "addressesResolved": [
            "AA.AAA.AAA.AAA",   ←メールサーバーのアドレス
            "BBB.BB.BB.B"       ←VPSのアドレス
          ],
          "addressUsed": "AA.AAA.AAA.AAA"   ←メールサーバーのアドレス
        }
      ]

なんかメールサーバーのアドレスが使われているっぽい。で、どういう選び方をしているかは解らないけど、ネームサーバーのAレコードの順番を入れ替えたらうまくいきました。

変更前
タイプ データ
・・・ ・・・
A メールサーバーのアドレス
A VPSのアドレス
変更後
タイプ データ
・・・ ・・・
A VPSのアドレス
A メールサーバーのアドレス

まとめ

  • ログ見なければ解決できなかったと思う。ログを見よう!
  • でも、Webアプリ開発を通して初めて己の力で問題解決できた気がしてちょっと嬉しかった。「Congratulations!」を見た時は高いガッツポーズが出た。
  • /.well-known/acme-challenge/「アクメチャレンジ」って何回も読んだ。

無職、無謀にもe-sportsを語る

2020年、個人的なe-sports感を書いていく。

はじめに

esports, e-sports, E-sports, e-Sports... 他にもいろいろあるけど、e-sportsが一番スッキリしてるしタイピングしやすいから好き。別にどれでもいいけど。

まず初めに書いておくが、ここで書かれるe-sportsには何の含みもない。特に意味のない名詞って感じ。

俺はプレイヤーしかしたことがなくて、運営や経営には関わったことがない。それでもわりと古(いにしえ)の時代からe-sportsを見てきた気がする。見当違いかもしれない、でもいいんだ、俺のe-sportsはここにあるよ。

e-sportsの叫び方

初めて触れたe-sportsはStarCraft2だったと思う。普通のマッチング対戦でもglhfとggがチャット欄に流れる事にとても好印象を受けた。その言葉を知ったのも初めてで、そんな文化には初めて触れたし、めっちゃかっこいいと思った。2010年、日本のゲーマーでもおそらく一部しかe-sportsという言葉を知らない時代だったと思う。e-sportsという言葉は、「ゲームは悪いもの」という社会的視線を感じ取っていたゲーム好きの少年にとって、承認欲求を満たしてくれる魔法の言葉だった。e-sportsさえあれば、自分は社会的に認められると思わせてくれた。声には出さないが、心の中では既に叫んでいた「e-sports!」と。

心の中にe-sportsを飼い始めた俺だったが、俺のe-sportsは成長しなかった。「e-sportsって何?」と聞かれても上手く説明できない。それでもe-sportsという魔法の言葉はゲームすることを正当化するのに十分だった。俺は浅かったんだ。俺が飼っていたのはe-sportsという皮を被ったただのゲームだった。皮が剥がれた途端にそれは悪者となってしまう。騙し騙しで飼い続けたe-sportsに別れを告げ、俺は就職した。

2020年、25歳、無職。俺は再びe-sportsを飼い始めていた。e-sportsを上手く育てられなかった頃に比べて、社会はe-sportsを認知し始めている。社会がe-sportsを認知し始めて、様々なe-sportsが見つかり始めた。人には人のe-sportsがあり、それらが複雑に組み合わさり新たなe-sportsが生まれている。e-sportsは多様性を持っている。だから上手く説明できないし、自分の持っているe-sportsが正しいものなのか不安になるんだ。でもそれでいいんだ。だって楽しいから。

e-sportsに熱を注ぐために俺は無職になった。俺のe-sportsは承認欲求を満たしてくれない。そもそもe-sportsは承認欲求を満たしてくれるものではなかったんだ。e-sports自己実現欲求を満たしてくれる。俺のe-sportsはちゃんと成長していたんだ。e-sportsという言葉に逃げるのはもう終わりにしよう。e-sportsは魔法の言葉でも何でもなく、e-sportsは現実の言葉だ。かつてはゲームがしたいから心の中で「e-sports!」と叫んでいた。でも今ではちゃんと声に出して言えるよ。

e-sports!」

自己実現e-sports

社会人e-sportsはそれなりだ。だってほとんどの場合で自立してるし、それはおそらく自己実現e-sportsだ。俺は今無職e-sportsだけど、社会人時代に貯めたお金を崩しながら生活している。稼ぎはないけど、たぶん自立してる。学生e-sportsはどうだ?彼らはほとんどの場合で自立していない。でもe-sportsって旬な時期がちょうど学生時代だ。人には人のe-sports。だから学生e-sportsもちゃんとe-sportsだ。そんな学生が陥りやすいのが承認欲求e-sportsであり、俺も過去その状態に陥っていた。承認欲求e-sportsはオススメしない。e-sports自己実現e-sportsであるべきなんだ。誰かのためのe-sportsはするべきじゃない。社会のために承認欲求e-sportsをするべきじゃない。自分のためのe-sports自己実現e-sportsをするべきなんだ。なりたい自分を思い浮かべる。まずはそこから始めてみよう。

e-sportsの抱える問題

e-sportsが抱える問題は昨今様々ある。しかし問題は問題ではないのである。人々は問題を問題視しすぎている。問題は問題ではなく「解決すべきこと」に過ぎない。

まとめ

お金のため、社会に認められるため、誰かのためのe-sportsはもう止めよう。なりたい自分のため、見たい景色のため、作り上げたい空間のため、そういうもののためにe-sportsは存在する。でも、そういう世界にはe-sportsという言葉は存在しない。あるのは感動や興奮や熱狂、言葉にならない声のみだ。今こそ「e-sports!」と叫ぶべきだ、そんな言葉はいつか忘れてしまうのだから。

タイトルの元ネタはこちらです。鳥類学者 無謀にも恐竜を語る