tag:crieit.net,2005:https://crieit.net/boards/web1week-202102/feed 「(2/22~2/28)1週間でWebサービスを作るイベント - お題「増やす」」の投稿 - Crieit Crieitで「(2/22~2/28)1週間でWebサービスを作るイベント - お題「増やす」」ボードに投稿された最近の投稿 2021-03-09T17:34:43+09:00 https://crieit.net/boards/web1week-202102/feed tag:crieit.net,2005:PublicArticle/dca47bef823b7a912ddfa5cb854aacf9 2021-03-09T17:31:14+09:00 2021-03-09T17:34:43+09:00 https://crieit.net/boards/web1week-202102/dca47bef823b7a912ddfa5cb854aacf9 web2week +2day かかってしまった。作りたかったもの権力を振りかざして人々からの愛... <p>web2week +2day かかってしまった。</p> <h1>作りたかったもの</h1> <ul> <li>権力を振りかざして人々からの愛を貪る(増やす)デスゲーム</li> <li>選択式コマンド</li> <li>リアルタイム連動</li> </ul> <p>など、ゲームとしての面白さを追求したかった。</p> <p><a target="_blank" rel="nofollow noopener" href="https://myrungo.net/games/home">愛のある日々を</a></p> <p><a href="https://crieit.now.sh/upload_images/fabd6bf9d8e5af1221c5a27b365d777f604731212b540.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fabd6bf9d8e5af1221c5a27b365d777f604731212b540.png?mw=700" alt="image.png" /></a></p> <p>まぁ、時間かかった割にはクォリティーが伴ってません。</p> <p>Rails 使って バグの多い書き方&時間がかかるやり方しているのでまだまだ勉強が必要だなと実感しました。</p> <p>次回は1ページ完結のアニメーションを使った制作物を作ろうと思います。</p> <p>日々、勉強だぁ!<br /> 今回も良いモチベーションアップになりました。</p> デンデン@オブジェクト指向を諦めたい tag:crieit.net,2005:PublicArticle/GDevelop5 2021-03-09T04:45:15+09:00 2021-03-09T04:51:30+09:00 https://crieit.net/boards/web1week-202102/GDevelop5 陣地を「増やす」ブラウザゲームを作ってみた【GDevelop5】 <p>web1week遅刻勢です!</p> <h1>作ったもの</h1> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604287f80426d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604287f80426d.png?mw=700" alt="image.png" /></a></p> <p><strong>陣取り合戦ロッカッケー</strong><br /> <a target="_blank" rel="nofollow noopener" href="https://rokkakkee.netlify.app"><strong>https://rokkakkee.netlify.app</strong></a></p> <p>Webブラウザ上で遊べる、ボードゲームのようなルールの自作ゲームです。<br /> コンピュータと対戦する「CPU戦」と、スマホを縦に持ち向かい合って遊べる「対人戦」があります。</p> <h1>遊び方</h1> <p>基本的なルールを説明します。</p> <p><strong>【移動】</strong><br /> プレイヤーは自分の隣のマスに移動または攻撃を行い、交互に自分の色の陣地を増やしていきます。<br /> 移動するときは、矢印のマスをタップしてください。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604287cfd02b7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604287cfd02b7.png?mw=700" alt="image.png" /></a></p> <p><strong>【勝敗】</strong><br /> <code>CPU : 2</code>とか<code>You : 1</code>とか書いてあるのは自陣のマスの個数です。<br /> 最後までマスが埋まったとき、どちらか多いほうが勝利となります。<br /> Splatoonみたいですね!</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604289cf4db40.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604289cf4db40.png?mw=700" alt="image.png" /></a></p> <p><strong>【攻撃・防御】</strong><br /> 白いマスには移動できますが、相手のマスには移動できません。<br /> 代わりに、相手のマスをタップするとそのマスを攻撃します。<br /> マスに書かれた数字は防御の厚さを表していて、攻撃を受けて防御力が下がり0になってしまうと白いマスに戻ります。<br /> 逆に、自陣の上を何度も通っていると、防御が厚くなっていきます。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428b5796609.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428b5796609.png?mw=700" alt="image.png" /></a></p> <p><strong>【弱点】</strong><br /> 防御があるから大丈夫…なわけではありません。<br /> 弱点として、本体を直接攻撃されると、防御力に関係なくマスを奪われる上に、キャラクターがスタート地点に戻されてしまいます。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428dab49c55.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428dab49c55.png?mw=700" alt="image.png" /></a><br /> ↓ Youに襲われたCPUがスタート地点に戻されています<br /> <a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428dcb02268.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428dcb02268.png?mw=700" alt="image.png" /></a></p> <p>ただし、相手のスタート地点の隣で攻撃すると、こんな風に逆襲されてしまうことも…。</p> <p>↓ CPUがスタート地点の隣にいたYouを攻撃し、Youは戻されてしまいました<br /> <a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428f80d1f3a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60428f80d1f3a.png?mw=700" alt="image.png" /></a></p> <p>相手が最後のマスを塗ったため、この時点で面積の多い私が勝ちました。<br /> 相手の立場であれば、ここで塗らずにこちらの陣地を攻撃していれば勝てる可能性はありましたね。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6042900c6c3b0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6042900c6c3b0.png?mw=700" alt="image.png" /></a></p> <p>正直CPU戦のCPUさんは非常に弱いのですが、ルールを把握して頂くには十分かと思います。</p> <h2>対人戦</h2> <p>オンラインではありません。対面です。</p> <p>【先攻】<br /> 先攻はランダムに決まります。ちなみに、これはCPU戦でも同じです。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604291f786954.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604291f786954.png?mw=700" alt="image.png" /></a></p> <p>防御力の数字の向きは紫側から見ると逆さまになります。申し訳ないです。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6042925695a1c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6042925695a1c.png?mw=700" alt="image.png" /></a></p> <p>勝敗画面はこんな感じです。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6042935b97f31.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6042935b97f31.png?mw=700" alt="image.png" /></a></p> <h1>開発に使ったソフト</h1> <p>web1weekにゲームエンジン持ち込むのは反則だろうというような気はしないでもないですが、まあWebなら何でもいいだろうということで、国内ではあまり認知度が高くない「GDevelop」というゲームエンジンを使用しました。</p> <h2>なぜGDevelopにしたのか</h2> <p>元々このゲームの構想自体はずっと温めていて、今回web1weekに便乗して実装することにしたわけですが、1週間で作るとなるとJavaScriptのコードを直接書いてゲームを1から作っていくのはなかなか骨が折れそうだと思いました。</p> <p>そこでWebに出力できるゲームエンジンを探したのですが、意外とこれが少ないのです。<br /> UnityにもWeb出力機能はありますが、機能制限が色々ある予感がしたのと流石にUnityでweb1weekに参加するのはお門違いだろうという思いがありまして、結局たまたま検索で見かけたGDevelopを採用しました。</p> <h1>GDevelopとは</h1> <p>GoogleのソフトウェアエンジニアであるFlorian Rival氏が手掛けている、様々なプラットフォーム上で動作するゲームが作れるゲームエンジンです。<br /> 2008年から続いているプロジェクトのようですが、未だに高頻度にリリースが続いており、しっかりメンテナンスされている印象を受けます。</p> <p>操作はGUIで完結していて、コードを書く必要はありません。(これがあまり嬉しくないわけですが)</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60429942e2de4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60429942e2de4.png?mw=700" alt="image.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60429977033f9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60429977033f9.png?mw=700" alt="image.png" /></a></p> <p>また、日本語訳が充実しており、ドキュメントも完全に日本語で利用することができます。<br /> 原文より日本語訳のほうがまともなんじゃ…と思う瞬間すらあります。<br /> どうやら、株式会社マイティークラフトという会社が日本語訳を担当しているようです。ありがたいことです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.4gamer.net/games/999/G999905/20191216096/">簡単にゲームアプリを作れるゲームアプリ制作ツール「GDevelop」の日本語化とサポートを開始 - 株式会社マイティークラフト</a></p> <p>日本語版のドキュメントはこちらです。</p> <p><a target="_blank" rel="nofollow noopener" href="http://wiki.compilgames.net/doku.php/ja/gdevelop5/start">GDevelop 5 ドキュメント</a></p> <p>GDevelop5を試してみたい方は、このページの「<a target="_blank" rel="nofollow noopener" href="http://wiki.compilgames.net/doku.php/ja/gdevelop5/getting_started">はじめに</a>」、「<a target="_blank" rel="nofollow noopener" href="http://wiki.compilgames.net/doku.php/ja/gdevelop5/tutorials/basic-game-making-concepts">ゲーム作りの基本コンセプト</a>」、そして「<a target="_blank" rel="nofollow noopener" href="http://wiki.compilgames.net/doku.php/ja/gdevelop5/tutorials">チュートリアル</a>」を見ておくことをおすすめします。<br /> 非常にクセがあるので未読で触るとヤケドするかもしれないです…。</p> <h1>GDevelop5のここがつらいよ</h1> <p>正直実装がここまで苦労するとは思っていませんでした。<br /> まだ理解が不十分なところはあるかもしれませんが、仕様レベルでしんどいと感じた点をいくつか挙げてみます。</p> <h2>1. インスタンスの扱いがつらい</h2> <p>まず、GDevelop5で言うインスタンスとは何かを説明しますね。<br /> GDev5にはオブジェクトというものがあります。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451d3898ac6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451d3898ac6.png?mw=700" alt="image.png" /></a></p> <p>オブジェクトは「スプライト」「テキスト」など様々な種類があります。<br /> オブジェクト自体にはどのような画像を使うかなどを設定します。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451dda7d270.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451dda7d270.png?mw=700" alt="image.png" /></a></p> <p>オブジェクトの設定ができたら、オブジェクトを画面上にドラッグアンドドロップすることでインスタンスが画面上に作成され、利用できるようになります。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451e8896e8a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451e8896e8a.png?mw=700" alt="image.png" /></a></p> <p>オブジェクトが利用可能な形になったものが「インスタンス」、と捉えれば一般的な認識の通りでしょう。</p> <p>画面構成を終えたら、それぞれのオブジェクトがどのように挙動するのか、「イベント」設定画面で設定する必要があります。</p> <p>つらいのはここからです。<br /> イベントは、「○○だったら△△する」という形式、つまり「条件」と「アクション」がセットになったものを大量に並べることで構成されていきます。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451fc1a8ddc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f60451fc1a8ddc.png?mw=700" alt="image.png" /></a></p> <p>ここで例えば「衝突」などの条件を設定することができるのですが、このとき対象として設定できるのは「オブジェクトの名前」になります。<br /> 「インスタンス」ではありません。<br /> これが非常に大きな罠として待ち構えています。</p> <h3>インスタンスの罠</h3> <p>どういうことでしょうか?<br /> 例えば、マリオのようなゲームを考えてみましょう。<br /> これは公式チュートリアルに書かれている「<a target="_blank" rel="nofollow noopener" href="http://wiki.compilgames.net/doku.php/ja/gdevelop5/tutorials/platformer/start">プラットフォームゲーム</a>」を実装したものです。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604521464ef08.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604521464ef08.png?mw=700" alt="image.png" /></a></p> <p>空中にコインが3枚ありますね。<br /> これはCoinというオブジェクトのインスタンスが3つ並んだものです。<br /> このコインを取ったときに、コインが消えるイベントは以下のようになっています。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604522027dadf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604522027dadf.png?mw=700" alt="image.png" /></a></p> <p>条件は「<code>Player</code>は<code>Coin</code>と衝突している」、アクションは「<code>Coin</code>を削除する」。<br /> ここで違和感を感じると思うのです。<br /> Coinって、どのコインのこと?</p> <p>このときの挙動がこちらになります。</p> <p>(↓GIFが動いていない場合クリックすると動くかもしれません)<br /> <a href="https://crieit.now.sh/upload_images/ba0d06aa03cedf80ce618782a9963c4e604523317459d.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ba0d06aa03cedf80ce618782a9963c4e604523317459d.gif?mw=700" alt="shsgsgsw.gif" /></a></p> <p>ちゃんと取ったコインだけが消えていますね。<br /> では次に、条件を「<code>Player</code>は<code>Cloud</code>と衝突している」に変えてみます。<br /> Cloudとは、飾りとして置いている雲のオブジェクトのことです。</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604523a828478.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f604523a828478.png?mw=700" alt="image.png" /></a></p> <p>(↓GIFが動いていない場合クリックすると動くかもしれません)<br /> <a href="https://crieit.now.sh/upload_images/e8a82ffd47252f07ac5de1659cf2689d604524809594e.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e8a82ffd47252f07ac5de1659cf2689d604524809594e.gif?mw=700" alt="rhswgwerg.gif" /></a></p> <p>全部のコインが消えましたね。<br /> ここから分かることは、オブジェクト名を指定しつつ、その参照先インスタンスは文脈によって変化しているということです。</p> <p>前者のイベントでの<code>Coin</code>は、「<code>Player</code>と衝突したインスタンス」でした。<br /> 一方、後者のイベントでの<code>Coin</code>は「全てのインスタンス」になっています。</p> <p>つまり、オブジェクトを指定したように見せかけていますが、その実態は複雑なインスタンス指定を隠蔽したものだったわけです。<br /> 見かけは簡単になっていますが、私はこの挙動が非常に気持ち悪いと感じています。</p> <p>これに拍車をかけてつらいのが、「インスタンスを個別に指定して参照できない」ということです。えっ…なんで?<br /> 普通ゲーム作るときってインスタンスの参照できるように配列にインスタンス突っ込んだりしますよね?</p> <p><a href="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6045272236ddf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f37dd84b36bcbac2749ed7d9d5d7127f6045272236ddf.png?mw=700" alt="image.png" /></a></p> <p>えー配列はまだ扱えません。<br /> というか配列が使えるようになったところでインスタンスの参照は代入できないのでね。えー…。</p> <p>例えば今回のロッカッケーでは六角形のタイルの表示に<code>BaseTile</code>というオブジェクトを使用しています。<br /> 見た目が変わったり矢印を出したりかなり複雑な挙動をするのですが、イベントの中でどのタイルが参照されているのか全くわかりません。勘ですかね?</p> <p>基本的に条件があればその条件で使われたインスタンスが、親イベントがあれば親イベントで参照されているインスタンスが使われる気がしますが、正直わからないです。地獄。</p> <p>インスタンス毎にidが振られて参照できたりするようになればだいぶマシになると思います。改善希望です。(2021/3/8時点)</p> <p>ちなみにそれまではインスタンス変数にidっぽいものを入れて「インスタンス毎に繰り返し」を使ってインスタンス変数をチェックしていく方法が疑似的に使えると思います。<br /> なんで使いたいたびに繰り返さないといけないんだ…。</p> <h2>2. 時間管理がつらい</h2> <p>コードからゲームを作ったことがある人は分かってもらえると思うのですが、コードから作ると毎フレーム1つの関数の中に書いた処理が全部実行されますよね。<br /> GDevelop5もあのような仕組みで、「イベント」に書かれた内容が毎フレーム実行されます。</p> <p>これはScratchのようなビジュアルプログラミング言語に親しんでいた人たちにとっては中々慣れないのではないでしょうか。<br /> Scratchの優秀なところは、非同期に書かれたプログラムを逐次実行してくれるところです。<br /> 右に行って、1秒待って、左に戻る、なんてScratchなら3行で書けるでしょうが、GDevelop5では地獄のようなものを組まないといけないわけです。<br /> 右にアニメーションして移動するなんていうのはTweenビヘイビアというのを使えばまだマシになるのですが、何秒待つというのは本当に面倒です。<br /> 待機させる仕組みが無いのです。なんで…??<br /> 調べた感じ変数にフレーム数を入れるだとか、シーンタイマーを使うだとか、Tweenで疑似的に待たせるだとか、色々試されているようですが、正直どれもしっくりこないし、しんどいです。<br /> 全部つらい。Scratchのほうがずっと簡単で高度なものを作れた気がするよ…。</p> <hr /> <p>他にもいろいろ細かい不満がないわけではないですが、仕様レベルでつらいのは大きくこの2つだと思います。<br /> まだ積極的にアップデートが続いているようなので、GDevelop6でも来たらまた触ってみようと思います。</p> <h1>ロッカッケーのこれから</h1> <p>オンライン対戦ができるようにしたいです。<br /> WebSocketの使い方とかも少しずつ覚えてきたので、PixiJSとかと併せて使ったら実装できそうです。<br /> あと今回GDevelopの仕様につまづいて燃焼不良となっている部分が多いので、挑戦も兼ねてUnityとかでも改めて実装してみたいです。</p> <p>とにかく今回、頭の中で考えて面白いか不安だったものを他の人に面白いと言ってもらえて嬉しかったです。<br /> 新しい技術に触れる良いチャンスでもありますね。ありがとうございました。</p> ウラル tag:crieit.net,2005:PublicArticle/eea4ad1861fc03b09eb47ff2ce3f666f 2021-03-09T01:13:55+09:00 2021-03-09T01:13:55+09:00 https://crieit.net/boards/web1week-202102/eea4ad1861fc03b09eb47ff2ce3f666f オンラインスナック街「星くずアーケード」をつくったよ! <p><a href="https://crieit.now.sh/upload_images/eb3533011d20e5dabe0cb747403c4cc560464ba61baa1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/eb3533011d20e5dabe0cb747403c4cc560464ba61baa1.png?mw=700" alt="Screenshot_146.png" /></a></p> <p>「星くずアーケード」というサイトを作りました。いろんなお店が並ぶアーケード街のイメージです。<br /> <a target="_blank" rel="nofollow noopener" href="https://stardust-arcade.com/">https://stardust-arcade.com/</a></p> <p>現在、私がZOOMでやっているオンラインの昭和カルチャースナック(Twitterで集客、Paypalで清算)が、ぼちぼちうまくいっているので、同じモデルで気軽にイベントやスナックを興せる人が増えたらいいなと思って、サイトだけ作ってみました。</p> <p>大きなプロジェクトに入ったり、プラットフォームに依存したりせずとも、自分のスキルやコミュニケーションでお金がもらえる、というのを体験する人が増えたらいいなと思っています。</p> <p>諸々つくるのも初めてだったのですが、よきメンターのおかげで形にできました。本当に、本当にありがとうございます~!!そして今日はもうweb1weekの締め切りから1週間以上たってますね…。Helloworldレベルでいいって…書いてあったから…。真に受けちゃいましたよ…。無課金ユーザー、初期アバター、無装備状態ですが…。お手柔らかに…。</p> <p>必要最低限の情報しか載せられていませんが、実際に友人のお店を起こすお手伝いをして、役目を果たせればいいな。自分のお店もがんばりま~す。<br /> お店立ててくれる方はこれまでご縁あった方々で、目星ついているのですが、現在は仮店舗状態なので、詳細早く載せたいです!サイトももっとつよつよにしたいです!</p> <p><a href="https://crieit.now.sh/upload_images/4556c817d78efb401fe2c78b5b35283560464c794d37f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4556c817d78efb401fe2c78b5b35283560464c794d37f.png?mw=700" alt="Screenshot_147.png" /></a></p> 堀アヤ inニュー・パルリー tag:crieit.net,2005:PublicArticle/Markdown-Live-Reload-Nodemon-BrowserSync 2021-03-08T21:12:09+09:00 2021-03-08T21:12:09+09:00 https://crieit.net/boards/web1week-202102/Markdown-Live-Reload-Nodemon-BrowserSync MarkdownファイルをブラウザでLive Reloadしながら編集する(Nodemon + BrowserSync) <p>完全に遅刻投稿ですがこっそり投稿します…</p> <hr /> <p>会議の議事録、タスク管理、仕様の細かい備考など、メモというものは仕事に欠かせないものです。</p> <p>メモの取り方は人それぞれですが、私は好んでMarkdown形式でメモを取ります。<br /> Marddown形式であれば、Vimでシンタックスハイライトが効きますし、後々何かしらのブログサービスに記事として残す場合にそのまま貼り付ければ大概フォーマットに沿った形式となります。もしくはMarkdownはプレーンなテキストであり、それを何らかの形式に変換することが可能な場合があります。何らか、というのは全く想定していないのですが、何らかの形に変換したいときが来たときにスムーズに対応できる、という理由からとても心が安らぎます。話は逸れますが、同様に音楽ファイルなんかも可逆圧縮形式が好きです。今のところ実際に「何らかの形」に変換したことはないんですが。</p> <p>しかし、Markdownテキストは通常のエディタで見ると、一定のフォーマットに則ったただのテキストです。</p> <pre><code># 見出し1 ## 2021/3/7 本文 </code></pre> <p>↑こんな感じです</p> <p>ある程度の俯瞰しやすさはありますが、更にもう少し、分かりやすく見たいというときがあるのです。つまり、MarkdownテキストをHTMLで展開し閲覧したい。そんなときのために、MarkdownファイルをWebブラウザで確認しながら編集できる環境を作りました。</p> <h1>できあがったもの</h1> <p><a href="https://crieit.now.sh/upload_images/ca54f5791bc575292e36b08a5956d5c960461254d23c3.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ca54f5791bc575292e36b08a5956d5c960461254d23c3.gif?mw=700" alt="image" /></a></p> <h1>機能構造</h1> <p>仕組みとしては、</p> <ol> <li>任意のHTMLファイルをローカルサーバーで監視し、Webブラウザで閲覧する</li> <li>任意のMarkdownファイルが保存 / 編集されると、それをもとにしたHTMLファイルを生成する</li> <li>HTMLが生成されたことを検知し、ブラウザをリロードさせる</li> </ol> <p>という単純な構造です。</p> <p>Express(Node.jsのフレームワーク)を使えばその機能だけで作れてしまうらしいのですが、それだと利用するライブラリに無駄が多く勉強にもならないため、少し細かいスコープで機能を実装しました。といっても全てライブラリの機能で実現してしまったので勉強も何もないのですが。</p> <p>以下、各種機能の実装方法です。</p> <h2>1. 任意のHTMLファイルをローカルサーバーで監視し、Webブラウザで閲覧する</h2> <p>これはBrowserSyncというライブラリで実現しました。</p> <p>Node単体でも実現できるのですが、BrowserSyncは任意のファイルをserveし、ファイルの変更を検知するとブラウザをLive Reload(自動更新)することができます。</p> <p>ちなみに私はブラウザの自動更新をHot Reloadと呼んでいたのですが、Hot ReloadはLive Reloadとは異なり、アプリケーションのstateを失わずに自動更新する機能のことのようです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/BrowserSync/browser-sync">https://github.com/BrowserSync/browser-sync</a><br /> <a target="_blank" rel="nofollow noopener" href="https://stackoverflow.com/questions/41428954/what-is-the-difference-between-hot-reloading-and-live-reloading-in-react-native">https://stackoverflow.com/questions/41428954/what-is-the-difference-between-hot-reloading-and-live-reloading-in-react-native</a></p> <h2>2. 任意のMarkdownファイルが保存 / 編集されると、それをもとにしたHTMLファイルを生成する</h2> <p>これはNodemonとmarkedというライブラリで実現しています。</p> <p>Nodemonは任意のJSファイルを立ち上げ、任意のファイルの変更を検知するとJSファイルを再実行するライブラリです。</p> <p>Nodemonで実行するJSファイルでは任意のMarkdownファイルを読み取ってHTMLファイルを生成する、という処理を行い、Markdownファイル編集されるたびにNodemonでJSファイルを再実行され、最新のMarkdownファイルからHTMLが再生成されるという流れになります。</p> <p>(初めはこのNodemonでLive Reloadができるかと勘違いしており、無駄に時間を取ってしまいました)</p> <p>markedはmarkdownテキストをHTMLに変換します。</p> <p>markedはサニタイズをしないとXSSの脆弱性を持つためリポジトリ上でオススメされているDOMPurify(もしくは他のライブラリ)でサニタイズを行う必要があります。</p> <p>(今回のように自分で作ったファイルを自分で開く分には気にしなくて良いと思います)</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/remy/nodemon">https://github.com/remy/nodemon</a><br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/markedjs/marked">https://github.com/markedjs/marked</a></p> <h2>3. HTMLが生成されたことを検知し、ブラウザをリロードさせる</h2> <p>これも先に述べたBrowserSyncというライブラリの機能を使います。</p> <p>どのファイルを検知するかは予め設定ファイルを書いておく必要があります(もしくはCLIでの実行時に引数で指定する必要があります)。</p> <p>以下セクションにて、ファイル全体の細かいコードを書いていきます。</p> <h1>ファイルの全体像</h1> <pre><code>- dist/ - node_modules/ - public/ - index.html - index.css - app.mjs - bs-config.js // BrowserSyncの設定ファイル - nodemon.json // Nodemonの設定ファイル - package.json - yarn.lock </code></pre> <p><code>.mjs</code> という、人によっては奇妙な拡張子がありますが、今回利用したのはこれを使うことでどういう考慮をする必要があるか(もしくは考慮をする必要がなくなるか)を確認するためです。様々なデメリットを考慮すると <code>.js</code> の方が良いと結論づけます。以下に <code>.mjs</code> にまつわる背景が記述されていますが、正直今の私にとっては「そうですか」という感想しか湧きませんでした。つまるところ、よく分からなかったです、すみません。</p> <p><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Modules">https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Modules</a></p> <h1>app.mjs</h1> <pre><code>import marked from 'marked'; import fs from 'fs'; const headHTML = ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Markdown Browser</title> <link rel="stylesheet" href="index.css" type="text/css"> </head> <body> ` const footHTML = ` </body> </html> ` // 再実行されるたびにファイル作成処理が走るので、差分がない場合は無視したい fs.readFile('public/index.md', 'utf-8', (errRead, data) => { if (errRead) { throw errRead; } const bodyHTML = marked(data); const allHTML = headHTML + bodyHTML + footHTML fs.writeFile('dist/index.html', allHTML, function (errWrite) { if (errWrite) { throw errWrite; } console.log('build dist/index.html from markdown'); }); }); // アクセスするたびにファイル作成処理が走るので、差分がない場合は無視したい fs.copyFile('public/index.css','dist/index.css', (err) => { if (err) { throw err; } console.log('copy public/index.css to dist/index.css'); }); </code></pre> <p>やっていることは単純で、実行された際に、public/index.mdを読み込み、それをもとにdist/index.htmlを生成します。</p> <p>ついでにpublic/index.cssファイルもdist/index.cssとしてcopyしています。</p> <h2>nodemon.json</h2> <pre><code>{ "ignore": [ ".git", "node_modules/**/node_modules" ], "watch": [ "public/index.md", "public/index.css" ] } </code></pre> <p>Nodemonの設定ファイルです。</p> <p>これも非常に単純で必要ないファイルを無視し、public/index.mdもしくはpublic/index.cssに変更があった場合にapp.mjsを再実行する仕組みとしています。</p> <h2>bs-config.js</h2> <pre><code>module.exports = { "watch": ["dist/index.html"], "server": { baseDir: "dist", index: "index.html", }, port: 5000, }; </code></pre> <p>BrowserSyncの設定ファイルです。</p> <p>これも単(以下略)</p> <h2>package.json</h2> <pre><code>{ ... "scripts": { "start": "concurrently 'yarn:start-*'", "start-nodemon": "yarn nodemon app.mjs", "start-sync": "yarn browser-sync start --config bs-config.js" }, ... } </code></pre> <p>npm-scriptsでNodemon用のサーバーとBrowserSync用のサーバーを並行で起動させています。</p> <p>concurrentlyはnpm-scriptを簡単に記述するためのライブラリで上記のように <code>start-*</code> と書くことでprefixが <code>start-</code> のコマンドを簡単に指定することができます。</p> <p>(おそらくもっとトリッキーな使い方ができそうです)</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/kimmobrunfeldt/concurrently">https://github.com/kimmobrunfeldt/concurrently</a></p> <p>この状態で</p> <pre><code>$ yarn start </code></pre> <p>とすると、自動的にブラウザのページが開きます。</p> <p>index.cssはお好みで設定してください。</p> <p>表示の見た目が自分好みになれば、メモがもっと楽しくなるはずです。</p> <p>多分ね。</p> <h1>振り返り</h1> <p>BrowserSyncのProxyモードで簡単にできるかと思ったのですが、ProxyモードだとProxyしている場合Live Reloadはされないようでした。こちらの設定ミスかも?また、BrowserSyncではきちんとしたHTMLではないとLive Reloadされず、index.htmlにプレーンなテキストを書いても上手く反映されなかったためそこでかなり時間を取られました。本当はLive Reloadを自分で実装したかったのですが、力量が足りず断念。単純に基礎知識が足りないのでnpmパッケージのコードリーディングが全くできませんでした。WebSocketを使えば可能だとは思うので、まずはWebSocketの基本から学ぶことにします。拡張子ごとのシンタックスハイライトも入れたいですが、さすがにライブラリで良いかな……。メモの作成や一覧表示なんかもCLI上でできるようにしたいので、そこができればツールとして公開したいですね。みなさんもオレオレメモ環境を作ってどんどんメモ & 知見を増やしていきましょう。</p> <h1>備考</h1> <p>書いて気づいたんですが、これ提供してないのでサービスでもなんでもないですね。さらにいうとWebという点でも怪しいですが、もう少し最低限の機能追加をしたらパッケージとして公開します!という意気込みを以てご容赦ください。</p> defu@Todo:早寝早起き tag:crieit.net,2005:PublicArticle/666bcf4f8adfa9eedea1267d4c283116 2021-03-08T01:01:23+09:00 2021-03-08T01:10:11+09:00 https://crieit.net/boards/web1week-202102/666bcf4f8adfa9eedea1267d4c283116 クッキークリッカーメーカー <p><a href="https://crieit.now.sh/upload_images/7e296d36550250076b8613927acd139e6044f3cb1c741.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7e296d36550250076b8613927acd139e6044f3cb1c741.png?mw=700" alt="Screen Shot 2021-03-07 at 21.59.33.png" /></a></p> <p>増やすの代名詞でもある(?) クッキークリッカーゲームを増やせたら嬉しいな、と思って作成しました。</p> <p>サービスはこちら → <a target="_blank" rel="nofollow noopener" href="https://cookie.dayo.app/">https://cookie.dayo.app/</a></p> <h2>説明</h2> <p>右上の「投稿」ボタンからクッキークリッカーもどきのゲームを投稿できます。ゲームが投稿されると、トップページのカウントが一つ増えます。</p> <h2>できたこと</h2> <ul> <li>ゲームの投稿</li> <li>「もっと見る」ボタンによる無限スクロール</li> <li>リアルタイムに増減するゲーム総数カウント</li> </ul> <h2>できていないこと</h2> <ul> <li>各ゲームの背景色を反映させる</li> <li>クリック数をローカルストレージに保存する</li> <li>シェア機能</li> <li>たくさん</li> </ul> <h2>使ったもの</h2> <ul> <li>Firebase</li> <li>Next.js</li> <li>Vercel</li> <li>tailwindcss</li> <li>Twemoji</li> <li>Emoji Mart</li> </ul> <h2>感想</h2> <p>web1weekに参加すると、作ったサービスが増える。(嬉しい)</p> すし職人 tag:crieit.net,2005:PublicArticle/5fe665987475d0340f34568c2ae89f5f 2021-03-06T18:02:25+09:00 2021-03-06T18:15:30+09:00 https://crieit.net/boards/web1week-202102/5fe665987475d0340f34568c2ae89f5f みんなのメッセージを集めて増やして元気玉を膨らませ…たかった <p><a href="https://crieit.now.sh/upload_images/b0a02ebb3fa76b3acb0799bfcd6d49f86043420da89df.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b0a02ebb3fa76b3acb0799bfcd6d49f86043420da89df.png?mw=700" alt="image" /></a></p> <p><a target="_blank" rel="nofollow noopener" href="https://script.google.com/macros/s/AKfycbwPkXzLjAd6xyda1oG7cOJ_HWXAdFwDa_wiq2EPip_m6w7hDIoBXI7ZzAS9kv1PgLBc/exec">https://script.google.com/macros/s/AKfycbwPkXzLjAd6xyda1oG7cOJ_HWXAdFwDa_wiq2EPip_m6w7hDIoBXI7ZzAS9kv1PgLBc/exec</a></p> <p>「ユーザーが送った送信したメッセージで元気玉を膨らませたら面白そう」というアイディアからつくったアプリです。Google Apps Script(GAS)で作りました。元気玉知らない人はググってください。</p> <p>応援メッセージを入力して送信したらメッセージがサーバー側で保存されて、みんなが送ったメッセージがブラウザ上に表示されます。本当は送信したらすぐにブラウザの表示に反映させたかったのですが、うまくいかなかったので送信後に「更新してメッセージを確認する」ボタンを押してブラウザを更新してください。</p> <p>本当はメッセージが増えるにつれて元気玉を膨らませたかったのですが、メッセージの送信と表示の処理をつくって力尽きました。メッセージは上限5個しか表示されません。</p> <p>※ブラウザでGoogleのアカウントにログインしていると、うまく動かない場合があるようです。お手数ですがログアウトしてもらうか、Chromeだったらシークレットモードで開くなどしてください。</p> <p>GASつかってLINEボット作った軌跡とかをブログで書いたりしてます。</p> <p><a target="_blank" rel="nofollow noopener" href="https://wakky.tech/reminder-line-bot-gas/">映画と旅行とエンジニア</a></p> <p>お時間あったら覗いてみてください。</p> Wakky tag:crieit.net,2005:PublicArticle/PUIPUI-feat-iPad 2021-03-03T01:12:26+09:00 2021-03-03T01:12:26+09:00 https://crieit.net/boards/web1week-202102/PUIPUI-feat-iPad PUIPUIモールス信号 feat. iPad ~脱無機質なモールス音~ <p><a href="https://crieit.now.sh/upload_images/536230422f82e2c25600530ae2c400ef603e60d87323f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/536230422f82e2c25600530ae2c400ef603e60d87323f.png?mw=700" alt="image" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://csb-wplrk-5g16c5s30-yoshisansan.vercel.app">https://csb-wplrk-5g16c5s30-yoshisansan.vercel.app</a></p> <p>文字をあのPUIPUIで人気急上昇中のモルモットの鳴き声でモールス信号に変換するサービスを作りました。(フリーで良い音あった)</p> <p>バックサウンドとしてPUIPUIモルカ○ーを流し聴きしていたところ鳴き声に癒し効果を覚えたため世界にPUIPUI音を布教(増やす)することを決意。</p> <p>パソコンが壊れていて修理に出しているのでiPad無印を使ってReactで頑張って作りました。</p> <p>インプットに問題がありしんどくて途中で投げ出しそうになったのですがCodeSandBoxからVercel使ったら楽にデプロイできることを知り形だけでも残そうと思い諦めませんでした。<br /> そして深夜にモルカー並にさまざまなツッコミを残した状態でローンチするに至ります。</p> あきふみ🇹🇭タイ個人開発 tag:crieit.net,2005:PublicArticle/4f79d3d4ef23378b0aa56de1c67e5eda 2021-03-02T23:03:36+09:00 2021-03-02T23:34:28+09:00 https://crieit.net/boards/web1week-202102/4f79d3d4ef23378b0aa56de1c67e5eda 画像から塗り絵を作れるサービス「塗り絵ツクール」をリリースしました! <p>「増やす」ということで、塗り絵を「増やせる」と無理やりな解釈をしたサービスをリリースしました。</p> <p>塗り絵ツクール<br /> <a target="_blank" rel="nofollow noopener" href="https://nurie-maker.com/">https://nurie-maker.com/</a></p> <p><a href="https://crieit.now.sh/upload_images/5f6299405f5cd48bfacee5b3921741f5603e41dd2043a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5f6299405f5cd48bfacee5b3921741f5603e41dd2043a.png?mw=700" alt="スクリーンショット 2021-03-02 22.43.49.png" /></a></p> <h2>使い方</h2> <p>画像をアップすることで塗り絵を作成するサービスです。</p> <p><a href="https://crieit.now.sh/upload_images/c05e14ebfac907291d6eaade0493cbc3603e41d1d1b50.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c05e14ebfac907291d6eaade0493cbc3603e41d1d1b50.png?mw=700" alt="スクリーンショット 2021-03-02 22.46.53.png" /></a></p> <p>画像を選択して....</p> <p><a href="https://crieit.now.sh/upload_images/fb624feb41314cfc0033dc43fb5a47c3603e41fb5d596.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fb624feb41314cfc0033dc43fb5a47c3603e41fb5d596.png?mw=700" alt="スクリーンショット 2021-03-02 22.47.35.png" /></a></p> <p>塗り絵にするor 塗り絵に変換して公開する<br /> を選びます。</p> <p>作った画像はシェアしたり保存できます。</p> <p>ちなみに塗り絵に変換して公開する、を押したとしてもその画像が18禁に抵触するものである場合は自動で弾かれるので公開されません。笑<br /> (個人保存やシェアは可能)</p> <p>皆が作った公開画像を見て楽しんだりもできます。</p> <h2>実装方法&期間</h2> <ul> <li>openCVを使って画像処理</li> <li>それをAWSを使ってAPI化</li> <li>ついでに18禁フィルターをAmazon Rekognition Imageを使って入れました</li> <li>フロントはNuxt.jsとtailwind cssで組んだので楽ちん</li> <li>ホスティングはVercel</li> <li>2/27から作り始めて3/2に完成でした。web1week間に合わんかった..</li> </ul> <p>ちなみにAPI化とかわからなさすぎて同居人がほとんど組んでくれたので、私は実質フロントとデザインぐらいしかしてないです。笑</p> <p>同居人がそのへんのロジックまとめて書いてくれたんで、ロジック気になる方は<a target="_blank" rel="nofollow noopener" href="https://qiita.com/ba-yu/items/a0ff7d8ae960c144edbf">こちら</a>をどうぞ。</p> <p>動的OGPで少しハマったんですが、<a target="_blank" rel="nofollow noopener" href="https://twitter.com/xhackjp1?ref_src=twsrc^google|twcamp^serp|twgr^author">松田さん</a>をはじめ様々な人に助けてもらってなんとかできました。</p> <p>また、デフォルトのトップページのOGP画像に関しては個人開発仲間のmikkameさんが作られた<a target="_blank" rel="nofollow noopener" href="https://ogp-builder.com/">サービス</a>を利用させてもらいました!</p> <h2>感想</h2> <p>web1weekの締切には間に合わなかったんですが、参加できて楽しかったです。<br /> また参加しようと思います!</p> YuikoIto tag:crieit.net,2005:PublicArticle/be239632164800f35b1eabd69ac7a137 2021-03-02T21:22:26+09:00 2021-03-02T21:22:26+09:00 https://crieit.net/boards/web1week-202102/be239632164800f35b1eabd69ac7a137 その他見つけた情報 <p>投稿はされていませんがTwitter等でハッシュタグを使って開発されている方を見かけたので観測範囲でリストアップしておきます。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/web1week?src=hash&ref_src=twsrc%5Etfw">#web1week</a>最低限だけど出来ましたー- 画像は投稿できない- まだ退会機能作ってないので利用する人は注意して下さい<a target="_blank" rel="nofollow noopener" href="https://t.co/hrAuXuL9Dz">https://t.co/hrAuXuL9Dz</a> <a target="_blank" rel="nofollow noopener" href="https://t.co/ZTNxj4nBF2">pic.twitter.com/ZTNxj4nBF2</a></p>— せせり(大岡まひろ)@個人開発 (@sesere115) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/sesere115/status/1365756176101564416?ref_src=twsrc%5Etfw">February 27, 2021</a></blockquote> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今日はAmong Usの参加者を選び、選ばれた人に通知するBotを作りました<a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/web1week?src=hash&ref_src=twsrc%5Etfw">#web1week</a> <a target="_blank" rel="nofollow noopener" href="https://t.co/QjiWKrxzl8">pic.twitter.com/QjiWKrxzl8</a></p>— Terai Shogo (@krpk1900_dev) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/krpk1900_dev/status/1366066484405936128?ref_src=twsrc%5Etfw">February 28, 2021</a></blockquote> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">世界にPUIPUIを増やすべくPUIPUIモールス信号のサイトを作りました🐹🚗文字を入力するとPUIPUIモールス信号に変換してくれます<a target="_blank" rel="nofollow noopener" href="https://t.co/coJnDAs7Si">https://t.co/coJnDAs7Si</a><a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/PUIPUI%E3%83%A2%E3%83%BC%E3%83%AB%E3%82%B9%E4%BF%A1%E5%8F%B7?src=hash&ref_src=twsrc%5Etfw">#PUIPUIモールス信号</a> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/%E3%83%A2%E3%83%AB%E3%82%AB%E3%83%BC?src=hash&ref_src=twsrc%5Etfw">#モルカー</a> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/web1week?src=hash&ref_src=twsrc%5Etfw">#web1week</a> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/dala00?ref_src=twsrc%5Etfw">@dala00</a> <a target="_blank" rel="nofollow noopener" href="https://t.co/DFdboAVlWJ">pic.twitter.com/DFdboAVlWJ</a></p>— よしむ🇹🇭チェンライでミュート生活 (@akifumiyoshimu) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/akifumiyoshimu/status/1366117654327488514?ref_src=twsrc%5Etfw">February 28, 2021</a></blockquote> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/enjoyoss-com 2021-03-02T20:07:34+09:00 2021-03-02T20:07:34+09:00 https://crieit.net/boards/web1week-202102/enjoyoss-com コントリビュータが「増える」enjoyoss.com を作りました <p><a href="https://crieit.now.sh/upload_images/3b283aec91781c04870650a4d0f42202603e1b4465266.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3b283aec91781c04870650a4d0f42202603e1b4465266.png?mw=700" alt="スクリーンショット 2021-03-02 20.02.18.png" /></a></p> <p><a target="_blank" rel="nofollow noopener" href="https://enjoyoss.com/">https://enjoyoss.com/</a></p> <p><a href="https://crieit.now.sh/upload_images/1a2f920f943879a976932da5bd37f0d2603e1b89adb20.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1a2f920f943879a976932da5bd37f0d2603e1b89adb20.jpg?mw=700" alt="FUOnJ5-A.jpg" /></a></p> <p>PRに対しては<br /> こんな感じの表彰状を。</p> <p>Issueに対しては<br /> <a href="https://crieit.now.sh/upload_images/bf9549b11196fc8c47639a31122a11e2603e1bb754256.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bf9549b11196fc8c47639a31122a11e2603e1bb754256.jpg?mw=700" alt="hPXh_BWH.jpg" /></a></p> <p>こんな感じの#bosyuっぽいやつ画像を生成してツイートできるツールです。</p> <p>技術的には拙作の<a target="_blank" rel="nofollow noopener" href="https://ogp-builder.com/">https://ogp-builder.com/</a> を使用しています。</p> <p>LP、UI、ドメインは金で買って解決しました。収益せいがないサービースなので完全な赤字です!助けてください!。寄付は<a target="_blank" rel="nofollow noopener" href="https://github.com/sponsors/mikkame">ここ</a>からできます!</p> mikkame tag:crieit.net,2005:PublicArticle/b9ea16789caa579a3e9692c01236d47c 2021-03-02T19:39:14+09:00 2021-03-02T19:49:27+09:00 https://crieit.net/boards/web1week-202102/b9ea16789caa579a3e9692c01236d47c MEASUREEEMEASUREEEエンジニアの評価を相互投票で評価し、数値化するサービスです... <h1>MEASUREEE</h1> <p><a target="_blank" rel="nofollow noopener" href="https://measureee.vercel.app">MEASUREEE</a></p> <p><a href="https://crieit.now.sh/upload_images/a9516bea98e593e9550632fe6b7e20fb603e159036677.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a9516bea98e593e9550632fe6b7e20fb603e159036677.png?mw=700" alt="rating.png" /></a></p> <p>エンジニアの評価を相互投票で評価し、数値化するサービスです。Hackされにくい設計を目指し、数値の大きさを信用の大きさとなることを目指し、誰の情報発信が正しいのかということを可視化することを目指しています。</p> sadnessOjisan tag:crieit.net,2005:PublicArticle/falling-emojis-genarator 2021-03-01T00:56:15+09:00 2021-03-01T20:58:36+09:00 https://crieit.net/boards/web1week-202102/falling-emojis-genarator 絵文字を入力しがいのある『falling emojis genarator』 <p>サービスはこちら↓<br /> <a target="_blank" rel="nofollow noopener" href="https://aiandrox.github.io/emoji-typing/">https://aiandrox.github.io/emoji-typing/</a></p> <p><a href="https://crieit.now.sh/upload_images/9b150b48b2513bc00b5c43a572516326603bb8511ecda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9b150b48b2513bc00b5c43a572516326603bb8511ecda.png?mw=700" alt="image" /></a></p> <h2>is 何❓</h2> <p>入力した絵文字が落ちてきます。<br /> 絵文字は下にどんどん溜まっていきます。<br /> たくさん入力して絵文字の名前を覚え、絵文字に溺れましょう🌊</p> <p>ちなみに背景はカンペなので、何を入力しよう〜〜って人はこれをとりあえず全部打つといいと思います。</p> <p>Twitterシェア機能を追加できなかったので、頑張って積んだ方はスクショで見せてください……私が見たい……。</p> <p>ちなみに、個人的に好きなアイコンの😇は「innocent」🤔は「thinking_face」🥺は「pleading」で出ます。</p> <h2>使用技術💎</h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ja.reactjs.org/">React</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://missive.github.io/emoji-mart/">Emoji Mart</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://material-ui.com/">Material-UI</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://animate.style/">Animate.css</a></li> </ul> <p>ライブラリは偉大だと改めて感じました。巨人の肩には積極的に乗っていきたい所存。</p> <p>メタタグ作成に便利だった↓<br /> - <a target="_blank" rel="nofollow noopener" href="https://deerboy.github.io/emoji-favicon-generator/">Emoji Favicon Generator</a><br /> - <a target="_blank" rel="nofollow noopener" href="https://metatags.io/">Meta Tags — Preview, Edit and Generate</a></p> <h2>やり残したこと😢</h2> <ul> <li><del>空白・アンダースコア、ハイフンを区別しないようにする</del></li> <li>背景を固定する</li> <li><del>「pien」で🥺を出す</del></li> </ul> <p>いつかやります。多分。</p> END tag:crieit.net,2005:PublicArticle/Twitter-GoGoHouse 2021-02-28T23:13:25+09:00 2021-03-01T16:52:49+09:00 https://crieit.net/boards/web1week-202102/Twitter-GoGoHouse Twitterフォロワーとお喋り『GoGoHouse』 <h1>音声SNSが熱いのでTwitterフォロワーと音声トークを楽しめるサービスを作ってみました。</h1> <p><strong>※3/1 API Keyを開発者アカウント登録済みのプロジェクトのものに入れ替えたのでTwiiter連携が復活しました</strong></p> <p><a target="_blank" rel="nofollow noopener" href="https://gogo.house/">https://gogo.house/</a><br /> <a href="https://crieit.now.sh/upload_images/663ab220a94ba8dafae54994210ef236603c9d4337348.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/663ab220a94ba8dafae54994210ef236603c9d4337348.jpg?mw=700" alt="image" /></a></p> <h2>『フォロワーの声を聞き、会話を楽しみ、親しくなる機会を増やす』</h2> <h3>コンセプトなど</h3> <ul> <li><p>疲れないやつ。Twitterのアカウントに紐づけられるのでTwitterの人格で参加できる</p></li> <li><p>1対1では気が引ける人も参加しやすいようにルーム方式</p></li> <li><p>ルームオーナーがルームに入れるメンバーの管理でき、マイクで発言する人を指名できて、聴くだけでもいいようなルールづくり</p></li> <li><p>専用アプリを入れるのも面倒なのでブラウザで動くやつ。できればTwitterアプリ内ブラウザで動くとよい</p></li> <li><p>タイムラインのリンクを踏んで5秒で参加できる(利用規約は読んでください><)</p></li> <li><p>他のユーザーの音声の録音は禁止</p></li> </ul> <p>たまたま<strong>webRTC</strong>という、ブラウザで動いて端末同士が直接つながって音声や動画を低遅延でやりとりできる技術があり、サーバー代もかからないので今回それを利用しました。ちなみにエンジン部分は自作で商用ライブラリ不使用。中国のサーバーを経由したりすることはありません。通信は暗号化されています。</p> <h3>スクリーンショット</h3> <p>画面は開発中のものです</p> <p>ルーム内<br /> <a href="https://crieit.now.sh/upload_images/ab869503232f0d1aa299ff81afce245b603b9ddc6809c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ab869503232f0d1aa299ff81afce245b603b9ddc6809c.png?mw=700" alt="image" /></a></p> <p>ルーム管理画面<br /> <a href="https://crieit.now.sh/upload_images/9939dde82b8fd302c0b160ee7f5b5ee0603b9e0622804.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9939dde82b8fd302c0b160ee7f5b5ee0603b9e0622804.png?mw=700" alt="image" /></a></p> <p>ドア(入口)<br /> <a href="https://crieit.now.sh/upload_images/6b7167b5cfe773d8a1fef48612ae1b3e603ba0e4e400a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6b7167b5cfe773d8a1fef48612ae1b3e603ba0e4e400a.png?mw=700" alt="image" /></a></p> <p>詳しくは サイトのヘルプ https://gogo.house/help をご覧ください。</p> <h3>名前の由来</h3> <p>Clubhouse、Discohouseときて次は何だ?<strong>ゴーゴー</strong>だ!<br /> <a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/ゴーゴー喫茶">https://ja.wikipedia.org/wiki/ゴーゴー喫茶</a></p> <p>知らない人はお父さんやお母さんに聞いてみてね</p> <h3>技術</h3> <p>NuxtとFirebaseとwebRTC。今回新しく挑戦したのはTypeScript。<br /> 余力があればTURNサーバーも立てたいです。</p> <h3>サイト</h3> <p><del>web1weekの期限にあわせて、オープンβテストを開催していますが、Twitter連携ができなくなっていてご迷惑をおかけします。</del><br /> 3/1 復旧しました</p> <p><a target="_blank" rel="nofollow noopener" href="https://gogo.house/">https://gogo.house/</a></p> 国崎犀考 tag:crieit.net,2005:PublicArticle/6ebb0f91b6b99f977fce035a596ef92f 2021-02-28T21:54:27+09:00 2021-02-28T21:54:27+09:00 https://crieit.net/boards/web1week-202102/6ebb0f91b6b99f977fce035a596ef92f 『ふやすを増やすゲーム』https://gamingchahan.com/fuyasu「ふ」や... <h1>『ふやすを増やすゲーム』</h1> <p><a target="_blank" rel="nofollow noopener" href="https://gamingchahan.com/fuyasu">https://gamingchahan.com/fuyasu</a><br /> 「ふ」や「す」を増やすゲームを作りました。「ふ」と「す」の合計が100匹を超えるとクリアです。</p> 群青ちきん tag:crieit.net,2005:PublicArticle/b59b51227736c0f3aaafbd1535535d1e 2021-02-28T21:14:17+09:00 2021-02-28T21:14:49+09:00 https://crieit.net/boards/web1week-202102/b59b51227736c0f3aaafbd1535535d1e 【素敵な出会いを増やす!90%の確率で運命の相手(相性の良い人)を選ぶ方法を教えるアプリ】 <p>できたー!!!</p> <p>【素敵な出会いを増やす!90%の確率で運命の相手(相性の良い人)を選ぶ方法を教えるアプリ】<br /> <img src="http://localhost:3000/assets/love-1bde0db5232137a120319a115bbfd1c09b43066e347a30fa7aed5873d611ddc7.png" alt="image" /></p> <p>数学者による計算(最適停止理論)を用いて、出会った人の中から、運命の相手を選ぶ最適な方法がわかります。</p> <p>■運命の相手を見つける。<br /> <a target="_blank" rel="nofollow noopener" href="https://love-web-app.herokuapp.com/">https://love-web-app.herokuapp.com/</a></p> YuKiO | 個人開発&Flutter学習中