ortの灰ログ

人狼のことや技術のことや日々雑感

HOWLING WOLFの姉妹サイト「FIREWOLF」

FIREWOLF

更新サボりすぎ事案
もう年も明けてしまいましたが、2020/08/07にFIREWOLFを公開していました。

特徴

HOWLING WOLFとほぼ同じUIで、
自分で長期人狼の村を作成できるサイトです。
(HOWLING WOLFは自動生成村)

HOWLING WOLFの再戦村などで遊んでいただければ嬉しいです。

HOWLING WOLF 自動生成村

自動生成村の予定

2020/12/25時点
調整中のため、常に変更する可能性があります。

編成

大人数村が揃いにくいようなので少人数に寄せてみます

33村以降

村番号末尾 編成 備考
0 10人: 狼狼狂占霊狩村村村村 ダミー役欠けなし
1 16人: 狼狼狼狂占霊狩村村村村村村村村村 ダミー役欠けなし、いわゆるG16
2 13人: 狼狼狼狂占霊狩村村村村村村 ダミー役欠けなし、いわゆるG13
3 16人: 狼狼狼狂占霊狩狐共共村村村村村村 ダミー役欠けなし、いわゆる汝編成
4 12人: 狼狼C占霊狩村村村村村村 ダミー役欠けなし、いわゆるC12
5 9人: 狼狼占村村村村村村 ダミー役欠けなし
6 11人: 狼狼狂占霊狩村村村村村 ダミー役欠けなし、いわゆるG11
7 12人: 狼狼狂占霊狩狐村村村村村 ダミー役欠け あり、いわゆる12B
8 8人: 狼狼占村村村村村 ダミー役欠けなし
9 14人: 狼狼狼狂占霊狩村村村村村村村 ダミー役欠けなし、いわゆるG14

更新時間、発言可能時間

編成ごとにローテーションしたいのでこちらは8の倍数の余り

村番号を8で割った余り 更新時間 発言可能時間
0 00時 07-24時
1 07時 いつでも
2 23時 07-23時
3 01時 いつでも
4 00時 いつでも
5 07時 17-翌07時
6 22時 いつでも
7 01時 07-翌01時

生成頻度

5日ごと
日付更新処理時に人数が揃っていなく、かつ次村が建っていたら廃村

初心者村

3村に一度程度初心者村とし、最初の更新時間までは初戦の人のみが入村可能
1日経つと誰でも入村できますが初心者初級者に優しくしてください

HOWLING WOLF公開しました

まえがき

ブログ書くのをだいぶサボってしまいました。
もうちょっと気楽に書いていこうかと思います。

HOWLING WOLF

6月頭ごろに、オンラインで人狼ゲームが遊べる
HOWLING WOLFをリリースしました。
(テストサーバーで動作確認にご協力いただいた皆様ありがとうございました)

特徴

基本的に人狼BBSリスペクトです。

  • ゲーム中の1日が24時間の、いわゆる長期人狼が遊べる
  • 村建てがいない、誰でも参加歓迎の自動生成村形式
  • シンプル
    • ガチ向けで、ロールプレイ向けの機能少なめ

2019年頭ごろから細々と作ったり休んだり(主に育児で)していて、
自動生成は人狼BBSがあるからカスタム村だけ作れればいいや、と思っていたのですが、
2020/1末に人狼BBSが終了してしまったので、
自動生成村の文化は絶やしたくないと思い、
急いで自動生成村形式で仕上げた感じです。

長期人狼ができるサイトは他にも多数ありますが、
終了するまで誰が相手かわからない一期一会感がある
「自動生成村」があるサイトは他になかったのですよね。
ネット人狼の先駆けとなったサイトでしたし、本当に惜しいです。

責任が伴うのは嫌ですし、自分勝手に運営していきたいので
人狼BBS後継」は謳いませんが、
自動生成村の良さは受け継いで良いサイトにしていければなと思います。

出産育休の話

子供が産まれました

だいぶ前ですが無事子供が産まれました。
せっかくなので、産後直後までをうちはこう乗り切ったよ、 というのを旦那視点で書いておこうと思います。

心構え

大体こんな心構えで臨みました。

知識は妻以上に仕入れておき、調査も自分でやる

自分も親になるので当然ですよね。
妊娠出産する女性は身体も変化するしホルモンも乱れるしで大変なので、
何も変化しない旦那がやるのが良いです。
両親教室も産後の仕事復帰までは全部参加しました。

妊娠出産で女性の身体に何が起こるかも理解しておいたほうが良いです。
「この時期はこうなるのは仕方ない」
「今こういう症状が出たら危ない」
「今はこういう食事を摂った方が良い」
を理解しておくのは大事です。

余談ですが、
保活激戦区に在住しているのもあり、子供ができる前から調べていたのですが、
保活の話をしていたら人狼界隈の人に女性誤認されていました。
男もやろう、保活。

妻に何もさせない

つわり時期はイメージが湧きやすいと思いますが、
妊娠直後の女性は眠気が凄かったり
出産直後の女性は交通事故レベルで身体にダメージを負ったりしています※ 。

身体の変化についていくだけでも大変ですし、 夫がやれないことは出産と母乳授乳くらいなので、
現実的にやれるかは別として、産後回復してくるまでは他の家事育児は全部やるつもりでいきました。

※個人差は当然ありますが、私の妻は

  • 1ヶ月は寝たきり、外出不可
  • 2ヶ月で近場なら短時間出かけられる
    • 一緒に保育園見学とかしました
  • 3ヶ月で家事復帰できる(完治ではない)

という感じでした。

こうして乗り切りました

前提:里帰りはしない

我が家は里帰りせず近場で産み、
私が育休を2ヶ月強取って諸々対応していました。
(+1ヶ月リモートワーク)

金銭面の都合や両親がまだ働いていること、
私も貴重な新生児時期に育児に参加したかったこと、
無痛分娩ができる良い病院が近場にあったこと、
などが理由です。

準備:育児関連

たまごクラブなりWebで検索するなりすると大体口コミも含めて出てくるので、
順々に買っていきました。

あまり特筆することはないですが、
「これ良かったよ」というものを挙げるとすれば

  • バウンサー(レンタルもあります)
  • メリー

あたりでしょうか。
メリーは生後2ヶ月くらいで買ったのですが、
我が子はかなり喜んでいました。
ベビーカーも産後でも良いのですが
買う暇がなさそうだと思ったので先に購入。

こんなやつです。軽くていい感じです。
セールを狙ったりメルカリもチェックしてました。
このあたりは調べればいくらでも出てくるのでこのくらいにします。

準備:家電

産後は睡眠時間も確保できず、
夫婦ともに鬱になりやすいらしいです。

我が家は
とにかく時間を金で買って睡眠を確保、
家事、妻のケア、赤ちゃんの世話を全力でやる

ことにしました。
体調を崩したり鬱になって育児も仕事もできず、、のほうが辛いですし。

正確には子供ができる前に買いましたが、

を揃えました。
(廉価版というか、安いものですが)

産後はとにかく睡眠時間の確保に必死だったので、
これがなかったら大変だったと思います。

産後サポート制度

プロの保育士の方が20回まで格安で来てくださるとか、
地域の育児経験のある方が育児サポートに来てくださるなど、
だいたいどこの自治体でもやっているはずです。
私は母子手帳をもらうあたりで説明された気がします。

「小さい子供を預けるなんて・・・」
という考えの人もいるようですが、
親の体力気力を回復させたほうが結果的により愛情を注げるので、
保育園の一時預かりも含め、我が家は利用できるものはなんでも利用することにしました。
根性論とか昔はどうだったとかは無視で良いです。

子供をみてくださってる間に寝るとか、
作り置きを大量に作っておいてもらう等
かなりありがたかったですね。

産後は調べる気力も中々湧かないので、
事前に調査しておいて、申し込みできるならしておいたほうが良いです。

食事を作るのを諦める

産後直後〜産後1ヶ月くらいまでは作るのを諦めて宅配に頼りました。
予想通り、新生児の世話や妻のケアを全力でやろうとすると、
産後1ヶ月くらいまでは料理/買い出しもロクにできなかったので、正解でしたね。

具体的には、生協のミールキットやセブンミールの弁当を1ヶ月ほど使って、
朝食くらいは(夜中に)作ったり、野菜系の副菜を1品追加したり、
母親が来てくれている間に副菜を追加で作ってもらったり、
で乗り切った記憶があります。

本当はもっと健康に良いものを食べさせてあげたかったのですが。。
さっと健康的なものを作れるスキルが不足してましたね。

寝る時間だけは確保して、あとは全部自分で

私が超夜型、妻が朝型の人間なのもあり、
仕事復帰までは

私:13〜30時は育児家事全部、6-13時に睡眠
妻:6-13時は育児、他は身体の回復に努める

というやり方でいきました。

寝る部屋も別にして、泣き声が聞こえない部屋で
連続した睡眠時間を確保するようにしました。

寝る時間が朝〜昼なので身体が慣れるまで大変でしたが、
やはり睡眠時間が確保できるのは良かったですね。

一人で見る時間がどうしても多くなるので、
ミルクを何時にあげたとかを夫婦で管理できるアプリも使ってました。

ただ、3時間くらい泣き続けられると精神が崩壊しそうになるので
その時は起こして助けを求めるとかした気はします。
わかっていても精神がやられるんですよね。

親にも頼る

妻の母が産後2週間から10日間ほど来てくださいました。

正直かなり準備してきたつもりでしたが、
来てくださらないとかなりしんどかったと思います。
産後1週間は病院、その後1週間は最初なのでまだ身体が保つのですが、
産後2週〜3週ごろが一番しんどかったです。

産後直後の女性はホルモンの問題でかなり精神的に不安定になるので、
その観点でも自分の親が居るというのは良かったようです。
(里帰りの良い点でもありますね)

最後に

産後直後をうちはこうやって乗り切ったよ、
というのをつらつら書いてみました。
すごく大変で辛いような書き味になってしまいましたが、
子供が可愛すぎて仕方ないのでただただ辛いというわけではなかったですね。

まだこれから違った大変さが出てくるのでしょうけど、
全然頑張れる気がします。

子供はいいぞ。

ワードウルフオンラインの技術スタック

ワードウルフオンラインの技術スタック

技術よりのお話です。
やっと個人アプリでJava以外の言語使いました。
(業務だと色々使ってるのですが..)

インフラ

Netlifyで動かしてます。
解説サイトがいくらでもあるので割愛しますが、今は静的サイトのホスティングサイトがいくつもあるし無料だしで本当に便利になりましたね。 独自ドメインSSLも大体いけますし。

  • GitHub Pages
  • Firebase Hosting
  • GitLab Pages
  • Netlify

このあたりで迷いましたが、ビルドできるのと無料枠が広いのでNetlifyにしました。
(他のでも別に問題があったわけではないです)

バックエンド

Firebase以外は使っていません。サーバーレスアプリにしました。

項目 採用したもの
DB Firebase Realtime Database / Firebase Cloud Firestore併用
認証 Firebase Authentication
バッチ処理 Cloud Functions (Typescript)

バッチ処理は終了した村を過去ログに移す程度の簡単なやつです。
DB併用のところは後で書きます。

フロントエンド

項目 採用したもの
言語 Vue.js
フレームワーク Nuxt.js
状態管理 Vuexfire
CSS Bulma, Font awesome

Angular2とかも業務で触っていたりするのですが、Vue.jsは触ったことがなかったのですよね。
使ってみた所感としては、簡単な個人アプリとかならVue.jsはかなり良さげでした。
ちゃんと型を定義して業務用のものを作るとかだとReactとかAngularとかのほうが良いかも?という感じ。
Nuxt.jsはなんとなくで使ってみたのですが、このくらいの規模なら不要だったかもしれないです。
規約ベースで混乱せずに開発できるので、チームで開発するとかだと良いかもしれないですね。

苦戦したところ

SPAも初、サーバーレスも初、Firebaseも初、、で手探りで始めてみましたが、Vue.jsもFirebaseもドキュメントが豊富でやりやすかったです。日本語ドキュメントもかなり豊富。
挙げるとしたら以下の点でしょうか。

Firebaseの無料枠に収める

ワードウルフオンラインはほぼほぼチャットアプリなので、DBアクセスの容量やAPI呼び出し回数以外は問題にならないだろうなとは思っていました。
参考: Firebase 料金
変わっていくかもしれませんが、この記事の執筆当時で

  • Realtime Databaseの1ヶ月のダウンロード容量は1GBまで
  • Cloud FunctionsのDocument Reads/dayが50kまで

になっています。
この表を見て「1日に5万回もAPIコールできるならFirestoreだな!」と思い、意気揚々とFirestoreにチャットメッセージを登録/読み取りするよう実装していたのですが、、、

呼び出し回数をモニタリングしながらテストプレイしていると、モリモリ増えていくDocument Reads。
6-7人で1時間プレイ、精々チャットメッセージ数は1000程度なのに1日の30%以上消費。

なんでぇ!?と思いながら調べてみると、どうやらDocument Readsは「API呼び出し回数」でなく「取得したdocument数」だったようで。。(今考えるとそりゃそうだ感ありますが)

いちいち大量のチャットメッセージを取得するガバガバ処理を修正したのでした。
(ついでに、チャットだけRealtime Databaseに、チャット以外をFirestoreに保存することで分散)
(↑ちなみにこの分散はFirestoreのDocument Readsの有料枠が安いので、容量次第ですが逆のほうが良い可能性があります。)

ガバコード

  async [INIT_MESSAGE]({ commit }, { roomKey }) {
    await messagesRef
      .where('roomKey', '==', roomKey)
      .orderBy('createdAt', 'desc')
      .onSnapshot(snapshot => {
        let messages = []
        let cnt = 0
        snapshot.forEach(function(doc) {
          if (cnt >= 100) return // 最新の100個だけ表示
          messages.push(doc.data())
          cnt++
        })
        commit('initMessage', messages)
      })
  },

まさかのlimitすらなし。

修正後

async [INIT_MESSAGE]({ commit }, { roomKey, isComplete }) {
    const messages = []
    
    messagesRef = dbMessagesRef(database, roomKey)
    await messagesRef
      .orderByChild('createdAt')
      .limitToLast(100)
      .once('value')
      .then(function(snapshots) {
        snapshots.forEach(snapshot => {
          messages.unshift(snapshot.val())
        })
      })
    await messagesRef
      .orderByChild('createdAt')
      .limitToLast(5)
      .on('value', function(snapshots) {
        snapshots.forEach(snapshot => {
          const newMessage = snapshot.val()
          const latestMessages = messages.slice(0, 10)
          if (latestMessages.some(l => l.key === newMessage.key)) {
            return
          }
          messages.unshift(newMessage)
        })
      })
    commit('initMessage', messages)
  }

一度に大量発言されると最新発言をうまく読み込めないので、相変わらず「変更があるたびに最後の5発言を取得」みたいにはしてますが。。
これでだいぶ改善されました。

今のところこれで無料枠に余裕で収まっています。
万が一利用者が増えて制限を超えそうになったらまた様子を見て最適化ですね。

こんなところでしょうか。

ワードウルフオンラインをリリースしました

ワードウルフオンライン リリースのお知らせ

2019/01/27に、ワードウルフが無料・専用アプリ不要で遊べるサービス「ワードウルフオンライン」をリリースしました。

ワードウルフとは?

ワードウルフオンライン |

上記ページでも説明していますが、ざっくり言うと、

  1. 参加者はお題となる「ワード」を配られます。
     このとき、一人だけ別の「ワード」が配られています。
     参加者は他の人のワードを知りませんし、自分が多数派のワードを配られたのか
     少数派のワードを配られたのかはわかりません。
  2. そのワードについて皆で話し合います。
  3. 違うお題を配られたと思う人を投票によって選びます。
  4. 別のワードが配られた人を単独最多票にすることができれば村人(多数派のワードを配られた人)の勝利、
     そうでなければ人狼(別のワードを配られた人)の勝利です。
  5. 人狼が最多票になった場合、村人のワードが何であったか当てることができれば人狼の勝利になります。

こんな感じです。人狼という言葉はついていますが1回5分程度でできるかなりライトなゲームです。
自分が村人なのか人狼なのか探りつつ、村人であることをアピールしつつ、人狼に村人のワードを探られないようにしつつ・・・という駆け引きがあります。

こんな感じ

f:id:oritone:20190214164019j:plain
ワードウルフオンライン画面イメージ

作ったきっかけ

  • ワードウルフ面白そう
  • ワードウルフがブラウザだけ & ネット上の他人同士でさくっと遊べるサイトがなかった
  • FirebaseやVue.jsを使ってサーバーレスアプリケーションを作ってみたかった
    • 流行ってるし技術的に使ってみたい
    • 基本的に無料だし、使いこなせれば今後何かを思いついたときにより手早く作れそう
    • チャット主体のアプリを作れるようになれば今後短期人狼のアプリとかを作るのとかにも活かせそう

こんなところです。
流行っているスマホアプリが既にあったりするのですが、個人的に、いざやりたいときにアプリをDLして・・・というのに心理的障壁があるのですよね。
ライトなゲームなのでブラウザでさくっとできたらいいのにな、と。
いつもの「自分が使いたいから作った」ってやつです。

謝辞

バグだらけの時期からテストプレイにご協力いただいたみなさま、大変ありがとうございました。 既に遊んでくださっている方もありがとうございます。これからもよろしくお願いします。

そのた

技術スタックと苦労した話は別の記事で書きます。

作ったもの

この記事は

これまで作ったものを纏めます。

作ったもの

WOLFBBS STATS

WOLFBBS STATS | 人狼BBS 統計情報

同人作品 | 人狼BBSのファンサイトで、
各種ランキング、傾向、プレイヤー戦績、村検索、高機能ログビューワーがあります。

紹介記事はこちら
oritone.hatenablog.com

WOLF MANSION

WOLF MANSION 〜人狼館の事件簿村〜

特殊ルール人狼人狼館の事件簿村」が遊べる人狼サイトです。
推理発言や更新立会いが一切必要なく、忙しい方でも参加しやすいルールとなっています。(通常の長期人狼はルール設計上長時間拘束されがちなのです)

紹介記事はこちら oritone.hatenablog.com

オンライン人狼ポータル

https://wolf-portal.herokuapp.com/

オンラインで人狼が遊べるサイトの紹介、最新の開催状況を掲載しているサイトです。

紹介記事はこちら

oritone.hatenablog.com

ワードウルフオンライン

ワードウルフオンライン |

ワードウルフが無料・専用アプリ不要で気軽に遊べるサービスです。

紹介記事はこちら

oritone.hatenablog.com

HOWLING WOLF

HOWLING WOLF

長期人狼が遊べるサービスです。
村が自動生成され、知り合いがいなくても参加することができます。

紹介記事はこちら

oritone.hatenablog.com

FIREWOLF

FIREWOLF

長期人狼が遊べるサービスです。
HOWLING WOLFから派生したサイトで、プレイヤーが自由に村を生成できます。

LASTWOLF

LASTWOLF

チャット形式の短期人狼が遊べるサービスです。
プレイヤーが自由に村を生成できます。

紹介記事はこちら

oritone.hatenablog.com

わーどるめーかー

わーどるめーかー

Wordleの問題を自分で作れるサービスです。
流行っているときにNext.jsの挑戦がてら3日くらいで作りました。

Scenario Tuker

Scenario Tuker

マーダーミステリーとTRPGの通過記録や所有シナリオなどを管理できるサービスです。
バックエンドはKotlin(SpringBoot)、フロントエンドはNuxt3です。

WOLF MANSION ANALYZER

WOLF MANSION ANALYZER

前述のWOLF MANSIONの推理補助ツールです。
自分用のツールを公開したもので、高解像度にしか対応していません。 フロントエンドはNuxt3です。

ロールをプレイ!

ロールをプレイ!

オリジナルキャラクターまたは提供されたキャラチップを用いてテキストでロールプレイを楽しめるサービスです。 バックエンドはGo、フロントエンドはNext.jsです。