Hatena::ブログ(Diary)

凡人プログラマ RSSフィード Twitter

2012-05-29

Web系プログラマに贈るCoronaSDKの始め方

仕事でCoronaSDKを使ってゲームを作り始めたので、これから始める同僚の為にまとめ。

概要

米anscamobile社の開発しているiPhone/Android両対応のスマートフォンゲーム用SDK

以下特徴など

  • 軽量スクリプト言語luaでコード書ける
  • OpenGLで動いてるから動作軽い、Effectとか作ってみた感じではブラウザ上のJSよりは遥かに高速。得手不得手はあるとは思うけど。
  • 2D専用で3Dはできない…その替わり手軽
  • 無料でもSDKのバージョンがちょっと古いぐらいで開発には支障が無い。但し、ビルドするときにtrialである旨が表示されるのでリリース時には購入必須。
  • anscaモバイル社のサーバでしか実機で動作するビルドができないという驚異的なシステム。今まで落ちていた事は無いけどこれは怖い。サービス終了したときに資産が無になるのは覚悟せざるを得ない。

anscaモバイル公式

なんでlua?

WEB系やってるとTokyo Cabinet: a modern implementation of DBMで組み込みに使ってる…ぐらいしか聞いた事無かったですし、みんなそんなもんかなーとは思います。

ですが、ゲーム/組み込みだとよく使われてるようです。動作が早い事が重要なところではJSとかよりも色んな意味で軽いのが高評価となるようです。


luaどうなの?

ほぼJavaScriptなのですっきりしてて良いです。

良い(と思う)点

  • 憎い「;」がいらない
  • 改行とスペースが文法的に等価なので一行に詰め込むも良し、分割するも良し。
  • クロージャもあるよ。
  • metatable(めんどいので上部dankogaiさん解説を参照の事)もあるのでできる事は多い。
  • クロージャ、metatable使えばObjectぽい事もできる。

悪い(と思う)点

  • ライブラリ探しづらい(Project Catalogもあるけど、検索しづらい…)JSONとか基本的なやつは見つかるけど。
  • ソース整理しづらい。requireするluaファイルはプロジェクトトップに全て存在する必要がある(ここはluaじゃなくてCoronaの制限、ローカルのシミュレータなら設定いじれば動くけど、実機で動かないので意味無し)
  • 他色々あるけど、枝葉末節。

蛇足

  • 配列が1から始まる!えー

情報源

書籍
  • CoronaSDK ハンドブック

7万もするけどこの本が無いと始まらないよ!…という事は無いので御安心をw

どこで見たレビューかうろ覚え(見つからず)ですが、基本的には公式ドキュメントの邦訳との事。

まあ英語だけど公式読んだ方が良いです。7万だし。

  • 基礎から学ぶ CoronaSDK
基礎から学ぶ CoronaSDK

基礎から学ぶ CoronaSDK

こちらオススメ

概要から、luaの基本、kwik、Spriteloq等の使える3rd Partyツールの紹介もされてる。

  • 達人出版会 はじめる! Corona SDK

はじめる! Corona SDK - 達人出版会

こちらはよりプログラム初心者にオススメ。windows環境への導入から初まってるので。

基礎から学ぶ…と同じような構成で全般的に薄いのでざっくり把握したいならこっちの方がラクに読めるはず。

あ、そもそも800円と圧倒的に安いし達人出版会なのでpdfでダウンロードできるし、利便性は凄い。

web
  • 公式ドキュメント

anscamobile公式ドキュメント Overview

ここが基本、まずはビデオあたりから。開発初めるAPIリファレンス見まくる事に。

あと、CoronaSDK自体に入ってるSampleは全てmain.luaをシミュレータに渡せばすぐ動く状態で大量に入ってるのでこちらを見るのがわかりやすい。

  • 日本Coronaの会

https://j-corona-group.jimdo.com/

残念ながら現在活発に活動してる様子は見られず…

ただ、google groupsにて質疑応答されていたりはするので、死んではいない様子。地方では勉強会やったりもしてるようで…

関東でやって欲しい!

  • ブログ

たくさん見てはいるが特に参考になったところだけ紹介。

Growth Curve: Director Class 入門 [Corona SDK]

Director Classという画面遷移ライブラリの入門資料あり。これが概要わかりました。ありがとうございます。

Nothing found for Smap

たぶん一番世話になってるブログ。最近はUnityも追ってるようですが、CoronaSDK関連の更新も活発です。毎度ありがとうございます。

3rd Partyツール/ライブラリ

使ってるものの概要

  • Kwik

Kwiksher: Mobile Application Development Plugins for Photoshop

photoshopプラグイン。photoshopからレイヤーグループ毎に画像を書きだし、CoronaSDK用の座標指定したluaファイルを出力してくれる。

基本はPhotoshopだけ使って写真アルバムみたいなの作れるよ!なツールなので音楽とか簡単なアニメとか色々できます。

ただ、ウチではレイアウトにしか使ってないので邪魔な事(勝手にフリップしたら画面遷移するようになるとか、画像名に勝手にページ名prefixつけるとか…)を色々するのが難点。

ちなみに前述したDirectorClassを使用している前提のコードを吐く。

また、レイヤ名に日本語が使われていると問答無用で固まったり、設定いじってると出力されないようになったり…とかなりじゃじゃ馬なので注意。

disってばかりのように見えますが、Photoshopから直接動くものが出るのは素晴しいです。

  • Spriteloq

Animo - Flash SWF Exporter for Platino

Flashプラグイン…といってもAdobe Flash…作る方のソフトのプラグインです。

Flashアニメーション全体を一枚のSpriteSheet(パラパラ漫画みたいなもの)にしてくれて、アニメーションを簡単に組み込めます。

SpriteSheetのサイズ制限はあるけど、同じ画像をまとめてくれるので案外小さくなる。


  • Particle Candy

:: X-PRESSIVE.COM :: - PARTICLE CANDY FOR CORONA? & GIDEROS? iOS / ANDROID SDK

これは凄い!エフェクトを作るのに便利なライブラリ。ちょっとしたコードによる設定

  • 画面全体に霧がかったようなエフェクト
  • 炎が燃えて揺れているようなエフェクト
  • 銃を乱射して薬莢が飛び散る表現…

などなどが簡単に実現できます。

コードサンプルとか色々足りないような気もしますが熟練WEBプログラマ向けなんでこれで大丈夫!

2011-11-30

社内scala勉強会#3まとめ

今の会社内でScala勉強会が開催されてるのでまとめ。

twitterから公開されているScala Schoolを使っています。

http://twitter.github.com/scala_school/

今回はCollectionsの前半。

http://twitter.github.com/scala_school/collections.html

以下のコードの引用はほとんどScala Schoolのものです。

バックナンバー

#1 @satococoaさん

http://www.223soft.net/56

#2 @netwillnetさん

http://d.hatena.ne.jp/willnet/

Lists

ふつーに配列

val numbers = List(1, 2, 3, 4)
numbers: List[Int] = List(1, 2, 3, 4)

Sets

重複しない配列。JavaのListとSetの関係と同様

scala> Set(1, 1, 2)
res0: scala.collection.immutable.Set[Int] = Set(1, 2)

Tuple

これはあんまり見ない概念でした。

何が配列と違うんや!と思ったし、実際機能上はほぼ変わらない。

色々いじって調べた結果、配列は「複数の同じ種類のモノを格納」に対し、タプルは「複数の値で表現される一つのデータを格納」するっぽい。

それクラスでできんじゃね?とも思いますが、Javaでデータだけ入れるちょっとしたクラスを作るシチュエーションを想定してるようです。

他で調べた結果、タプルの2値限定はPair、3値限定はTripleという別名があるらしい。

scala> val hostPort = ("localhost", 80)
hostPort: (String, Int) = (localhost, 80)

まあわかってからこの例を見れば一目瞭然。

scala> hostPort._1
res0: String = localhost
scala> hostPort._2
res1: Int = 80

アクセスするには「_n」というアクセサを使用。

hostPort match {
  case ("localhost", port) => ...
  case (host, port) => ...
}

パターンマッチにも使える。便利そう。

scala> 1 -> 2
res0: (Int, Int) = (1,2)

こういう書き方もある。要素一個のMapっぽい。

Maps

JavaのMap、Rubyではhash。

Map(1 -> 2)
Map("foo" -> "bar")

=>はFunctionに取られてるのでC言語でおなじみアロー演算子を使うらしい。

Map(1 -> Map("foo" -> "bar"))
Map("timesTwo" -> timesTwo(_))

マップの中にマップもアリ。

後者はどうやっても動かなかったので

Map("timesTwo" -> timesTwo _ )

の誤記じゃないか?という結論でした。

Functionの部分適用も入るよーということ。まあ要は何でも入ると。

ちなみに

val m = Map("key" -> "value" )
m.get("key")

した結果はvalueではありません。後述のOptionです。

m.get("key").get

で"value"が取得できます。

Option

で、Option。Optionはこんなtraitのようなモノ…らしい。

trait Option[T] { def isDefined: Boolean def get: T def getOrElse(t: T): T }

scala> val numbers = Map(1 -> "one", 2 -> "two")
numbers: scala.collection.immutable.Map[Int,String] = Map((1,one), (2,two))
scala> numbers.get(2)
res0: Option[java.lang.String] = Some(two)

値があるときはSome

scala> numbers.get(3)
res1: Option[java.lang.String] = None

値が無いときはNone

が返る。

Some[T]とNoneはOptionのサブクラス。

val result = if (res1.isDefined()) { res1.get * 2 } else { 0 }

こんなときや

scala> numbers.get(3).getOrElse("default")
res6: java.lang.String = default

こんなときもぬるぽを心配せずに書けるよ!

まとめ

私はJavaが一番長いので、ああ、Javaでめんどくせーところを簡単にできるようにしてあるな、ってのが今回の印象でした。

CほどじゃないにしてもJavaのぬるぽチェックはめんどくさいし、2値のセットを入れるためにcommonsライブラリのPairクラス使ったりしてたので。

とはいえ、Optionあたりはぬるぽチェックのためだけじゃなくて、後半のmapとかfilterとかの関数型っぽい機能を簡潔に書くための機能でもあるんだと思います。

Scala School、1ページ目からカリー化とか部分適用とかかなり難解でしたが、今回は実用的でわかりやすかったと思う。

2011-11-06

TDDBCに参加しました


TDDをペアプロで経験できるTDD boot campに参加してきました。

http://devtesting.jp/tddbc/?TDDBC%E6%A8%AA%E6%B5%9C

存在は知ってはいたものの、参加する機会はありませんでしたが、参加しているyokohama.rbでスタッフ募集があったため思い切って参加することにしました。

その後で聞きましたが一般参加枠は募集後数時間締め切り、今回は抽選になるという人気イベントだったそうで…スタッフで参加できたのは幸運でした。

今会社で使ってるJavaにしようかと思いましが、一応スタッフなので奇数のRubyに参加しました。

詳細レポートは様々な方が書いているので簡単に感想と気づきを。

特にshinyaさんのレポート充実し過ぎワロタw

http://d.hatena.ne.jp/absj31/20111105/1320547155

なおTDDについては入門記事等で概要は把握して、UnitTestは場合によって書いてる程度で、TDDレベル的にはまさに新兵です。

感想

  • ペアプロ楽しい!

@kotakanbeさんとペアプロしました。Javaメイン、Vimmer英語キーボード、Rubyの使用はツール作るレベル、Rspecほぼ未経験…とびっくりする程私と同じ状況ながらコードを書くとやっぱり全然違う発想をしてたり…色々発見がありました。おかげさまでどうにか用意さらた課題6問クリアできました。@kotakanbeさんありがとうございました!

  • 多言語での参加、レビューが面白い

JavaScriptC++、果てはGroovyのテストまで。異文化のテストコードがとても興味深かった。

特にGroobyはRubyと比べてもとてもすっきりしたテストコードで驚きました。spockというテストライブラリを使ってるそうです。

http://code.google.com/p/spock/

気づき

  • テストは日本語を使うのをためらわなくて良い

Java,PHPのように許されるなら関数名に日本語をける事もアリ。

  • 一旦失敗させる意味

Red→Green→Refactorのサイクルで一旦Redにする意味がずっと腑に落ちなかったが、「テストのテストをしている」という事で納得。

  • 学習テスト

今回の課題にあった四捨五入とか、ちょっと調べればわかるけど、覚えていないものをテスト化しておく。

テストする事によって覚えやすくなるし、使い方の理解も深まる。

  • テストデータ選定

実データ、もしくは近いデータを使うのは重要…だけど、境界値等レアケースのテストは抜けている事が多いので注意。

  • テストクラス内に入れ子を使って管理すると良い。

Rspecでできるのは知ってたけど、java JUnitでも static classを使う事によってクラス内に入れ子を作れる。

  • パラレルチェンジ

テストの変更が必要な大きいリファクタするとき、テストと実装同時に変えると変化が大きすぎて危険。

じゃあどうするか?

古い実装、テストを残しつつ新しいテスト、実装を書き、両方通るようになって初めて古いテストを消す。

…うーん、理論は納得しつつ、両方通るようにするときに余計なコストかかるときどーすんだろ?とか、若干疑問は残った。

しかし、理念としては「変更を小さくする」事で安全に開発する事だと思うのでそこらへんは臨機黄変で良いのかなという理解にしておく。


  • パラメタライズドテスト

テストの実行を共通化して、データのインプット、アウトプットの組を複数作って冗長なテスト記述を避ける手法。

JUnitでもできる。

@shuji_w6eさんのサンプル

https://twitter.com/#!/shuji_w6e/status/132731935083593730

注意点としてはどこでエラーが起こったかわかりづらいところ。データ内にテスト名を含める等工夫が必要。

  • テストしやすくする為に実装を工夫する。

テスト結果がわかりづらい時に、実装に本来必要無い名称データを入れる事によってログを見やすくした。

恐らくこの事によってログも綺麗になって運用時にも役立つと思う。

  • ぺけま

せとあずさ♂(@setoazusa)さんが「るびま」にあやかって作ったウェブ雑誌。xUnitについての情報が載るようで期待したいです。

http://devtesting.jp/pekema/

まとめ

多言語開発者が集まるので懇親会も非常に多用なメンバーで日頃の勉強会と違った楽しみもありました。

楽しいという点、勉強になる点両方の観点で両方予想以上に良いイベントでした。

機会があればもう一回出たい! そのときにはTAで参加できるようになっておきたいものです。

実際の業務で使いこなせるよう頑張ります。

2011-07-26

福岡出身者が北部九州の観光地をまとめてみた。

f:id:u1tnk:20090924113751j:image

※技術ブログですが今回技術的な話は一切ありませんのでご注意ください。

友人が福岡、大分、熊本にレンタカー旅行するらしいので彼の旅行ルート近辺の個人的に好きな観光モノをまとめてみた。

福岡

中州屋台

観光用と化してるところは高いけど、まあ面白いから良いかも。

昔行ってたところは無いし、大体地元民に連れられて行くから具体的にココってところは残念ながら無い。

よくあるオススメ屋台メニューは焼きラーメン。

個人的には屋台で食べる必要は無いけど、那珂川沿いの屋台街の見物はするべし。

居酒屋

福岡独特の居酒屋メニューがあるから普通の居酒屋も面白い(チェーン・除く)。

ゴマサバ、豚足、酢モツとか…魚の種類が関東と結構違うしフツーの居酒屋でも鮮度良いから美味い。

小ネタだと焼き鳥、必ず豚バラがあるのとモモ肉が四つ身とか一部呼び方が違う。

鉄なべ

餃子好きなら個人的に好きな店。一口サイズの餃子が鉄鍋で出てくる。ゴマサバとか居酒屋つまみメニューも置いてる。

ぐるなび - 味自慢 餃子の店 鉄なべ であい橋店 http://r.gnavi.co.jp/f039300/

元祖長浜屋

天神から車で10分くらい。

本当に長浜ラーメンの元祖らしい。メニューラーメンしか無く、座れば出てくる。

今同じかわからんけど、ラーメン400円、替え玉50円と激安。

味はこだわってるわけじゃないけど、素朴な長浜ラーメンで美味い。

元祖長浜屋 がんそながはまや - 赤坂/ラーメン [食べログ] http://r.tabelog.com/fukuoka/A4001/A400104/40006844/

柳川

柳川といえば川下り。昔の水路で数十分とかなり長いルートを下れる。

船頭さんが説明してくれるので退屈はしない。

柳川は観光と美味いものがセットであるのが良い。

水郷のまち柳川(川下り) http://www.chibaphoto.jp/yanagawa/kawakudari.html

うなぎのせいろ蒸し

柳川名物。福岡でも食えるけど関東ではほぼ見ない。

簡単に言うと甘めのタレでご飯ごと蒸したうな丼。

関東に来るまでうな丼とはコレのことだと思ってました…

うなぎめし 柳川鍋 古蓮 うなぎめし やながわなべ これん - 西鉄柳川/郷土料理(その他) [食べログ] http://r.tabelog.com/fukuoka/A4008/A400806/40004960/

(実際行った店では無いけど…行った店名忘れた…)

水城

でかいので高速道路からチラ見がオススメw

まあ丘にしか見えないので見つけられたら事前に場所把握しとかないと厳しいけどねw

[その他の史跡]水城跡 - 福岡 - goo 地域 http://local.goo.ne.jp/leisure/spotID_TO-40002052/

大分

湯布院

湯布院に行ったら金鱗湖に行って亀の井別荘の庭が素晴しい。

亀の井別荘は死ぬまでに一回は泊まりたい宿。

天井桟敷というのはこの旅館が経営してる喫茶店。中の雰囲気も良いし庭の景色も良い。

隣の亀の井別荘の土産物屋も良い品揃えで、よく自家製の柚子胡椒を買ってる。

由布院|亀の井別荘|天井桟敷 http://www.kamenoi-bessou.jp/tenjo/

あと、ウチの家族行き付けで湯布院行くと必ず寄るうどん屋がココ。

あ、九州ではうどんの基本は「ごぼ天」。ここも当然ごぼ天がオススメ。

田舎庵 - 由布院/そば [食べログ] http://r.tabelog.com/oita/A4402/A440201/44001717/

熊本

黒川温泉

全国的に有名。どの旅館もこだわりな露天風呂がある素晴しい温泉街。

個人的には「山みず木」の川沿いの露天が素晴らしかった。露天に入りながら手で触れそうなところに川が流れてるのですよ。

黒川温泉 山みず木 名湯・秘湯・立ち寄り湯300 http://www4.kcn.ne.jp/~t-yoko/74-kumamoto/74-kurokawa-yamamizuki.html

小国そば街道

かなりレベルの高いそば屋が田舎道になぜか集まってるところ。

一番有名な「戸無のそば屋」とか山の中っぷりが楽しい。

山の中だけど休日昼は一時間待ちとかにもなる…のでそば街道の他の店に行くのがパターンw

阿蘇小国郷そば街道 http://www.tonashinosobaya.info/

小国ジャージー牛乳

小国近辺なら道の駅とかで牛乳とか飲むヨーグルトは売ってる。

個人的飲むヨーグルトランク一位。すげえ濃厚。

ソフトクリーム | ジャージー牧場 カップル [阿蘇郡小国町 | ジャージー牛/牛乳/ヨーグルトレストラン/ランチ] http://websp01.com/couple/soft.html


やまなみハイウェイ

定番ドライブコース。

別府から阿蘇方面の移動時にはこの道を選択するように。

野焼きしてる牧草地帯があるので全般的に視界が開けていて景色が良い。大学のときにバイク買って初のツーリング目的地。

やまなみハイウェイ http://www5f.biglobe.ne.jp/~amacua/yamanami.htm


菊池渓谷

夏場でも涼しくて散策も快適。

何より水がめちゃめちゃ綺麗!

トップの写真が証拠写真。私が撮りました。

菊池観光協会 - 菊池渓谷は、日本名水百選です。 http://www.kikuchikanko.ne.jp/modules/group/index.php?cid=7


馬刺し

熊本に泊まるなら食うべき。まあホテルでも出ると思うけど…

市内に寄るならここは結構いい値段するけど馬肉尽くしで美味い!

馬刺し経験少なければ認識が変わると思う。

菅乃屋 上通店 すがのや - 通町筋/馬肉料理 [食べログ] http://r.tabelog.com/kumamoto/A4301/A430101/43000189/


いきなり団子

薄いモチモチな皮、でかいさつまいも、控えめな餡。

素朴で安いけど美味い!

熊本まわりのいろんなとこで売ってる。

おわり

こんなとこかなー。

ここらへんの地域でこの店が良いとかあったら指摘ください!

2011-07-19

RubyKaigi2011で気になった事メモ

最後のRubyKaigiに行ってきました。

Ruby初心者の私としては最初で最後でしたが、本当に素晴しいイベントでした。

参加者の方、特に運営、発表者の方々は本当にお疲れ様でした。

よく知らなかった一昨年以前はともかく、去年はつくばで遠いからと行かなかったので凄い後悔です…

レポート:RubyKaigi2011 スペシャルレポート|gihyo.jp … 技術評論社 http://gihyo.jp/news/report/01/rubykaigi2011

レポートは素晴しいまとめが公式でまとまってるので、自分用すぐにでも押さえなきゃと思ったキーワードを自分用メモでまとめてみた。

Ruby初心者で、WEBプログラマ歴10年ぐらいなのですごく偏ってると思います。

lokka

herokuにデプロイできるクラウド環境向けCMS。打倒wordpress!らしいです。

クラウドを意識して作成してあり、例えばアップロードファイルの保存をDBにする等でスケールアウト時もちゃんと動くようになってるとのこと。

herokuや、後述するfluxflexで使えば簡単に無料で自分が好きにいじれるブログシステムができるので使ってみたい。

このブログlokkaに移行してみようかな…

Lokka - CMS for Cloud http://lokka.org/

ちなみに国産ですので日本語環境は当然安心。`


fluxflex

herokuやdotcloudのようなPaasで国産。

特徴的なのはOneClickInstaller。

前述のlokkaが用意されてたのでインストールして動かしてみました。

  1. twitterアカウントでログイン
  2. 管理画面でプロジェクトを作る
  3. lokkaを選んでインストール

え?これだけ?って手順で動きました。

凄いのが価格。FREEでも3プロジェクト作れるんだけど、当然有料もあります…がなんと月額1$と9$!9$でSUPER GEEKプランっで50プロジェクト作れるとかwww

EC2ベースなので、当然QUOTAはリソース毎にありますが、それにしたって安い。

ほとんどはそんなにリソースを使わないものばっかりなんでしょうけど、これでペイするのかちょっと心配。

上記でインストールしたlokka - http://u1tnk-lokka.fluxflex.com/

fluxflex https://www.fluxflex.com/

gem

Gemも気になったのがあるけど、ほぼ以下のサイトで紹介されてたので手を抜いて概要だけ

#RubyKaigi 2011で気になったgem 13選 - 床のトルストイ、ゲイとするとのこと

http://d.hatena.ne.jp/mirakui/20110718/gems_in_rubykaigi2011

Fabrication, factory girl, machinist

fixture代替のテストデータ作成機能。

普通のRubyistなら常識のようですが個人的に--よくわかっていなかったので。

Fabricationが最後発で高機能らしい。

factory_girl | RubyGems.org | your community gem host http://rubygems.org/gems/factory_girl

machinist | RubyGems.org | your community gem host http://rubygems.org/gems/machinist

fabrication | RubyGems.org | your community gem host http://rubygems.org/gems/fabrication

mike, Capybara-webkit

Integration TestでJSも動かした上でテスト可能。

両方ともheadless(画面描画しない)ので高速らしい。

Capybara-webkitは

Ruby を利用した大規模ウェブサービスの開発・運用 – RubyKaigi 2011 発表資料 « クックパッド開発者ブログ http://techlife.cookpad.com/2011/07/19/rubykaigi2011/

でクックパッドで使用していると紹介があったので十分な実績あり。

mikeはV8でJSを動かしていて高速とのこと。

webmock,fakeweb

HTTPレスポンスのモックライブラリ。外部連携のテストに便利とのこと。

rails_best_practices

railsのbest practicesに則っていない箇所の指摘をしてくれる。

小ネタ

  • gem pristineコマンド。ローカルで修正されたGemをインストール時に戻すコマンド。-これで適当にいじって、ヤバくなったら戻せる!
  • Keynoteでメインディスプレイとサブディスプレイが入れ替わったときはx(X?)を押すらしい。2分間の短時間LTで闇に呑まれないようにするために重要。
  • Apache Solrの利用を各所で聞いた。かなり一般的になってる。
  • まどマギ大人気。名札のサンプルですらマミられるマミさんに始まって、締めの講演ですら…

まとめ

最終日行けなくて、2日だけだったけど盛り沢山で大満足。

参考になったこと、面白かった事レポートを書き出すと多すぎて終わる目処が立たないのでしょぼいですが、このぐらいで。

一緒にまわってくれたyokohama.rbの方々やrails hackathonで知りあったminami.rbの方々が居てくれたのでボッチにならず、より楽しめたと思います。ありがとうございました。

Connection: close