tag:crieit.net,2005:https://crieit.net/users/promitsu/feed ぷろみつの投稿 - Crieit Crieitでユーザーぷろみつによる最近の投稿 2020-06-07T20:04:24+09:00 https://crieit.net/users/promitsu/feed tag:crieit.net,2005:PublicArticle/15924 2020-06-07T19:47:07+09:00 2020-06-07T20:04:24+09:00 https://crieit.net/posts/d18d57017a47b6f0774f4e7cbcea2b94 週末の時間を使って「みんなのきょうしつ」をアップデートしました。 <p>promitsuです。</p> <p>今週の土日の空いた時間を使って、先日リリースした「みんなのきょうしつ」というウェブサービスのアップデート作業を行いました。</p> <p><a href="https://crieit.now.sh/upload_images/8ae825a52f93537d282260b5dff649f25edcc4d28a7d5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8ae825a52f93537d282260b5dff649f25edcc4d28a7d5.png?mw=700" alt="image" /></a></p> <p><a target="_blank" rel="nofollow noopener" href="http://class-room.fun/"><strong>http://class-room.fun/</strong></a></p> <p>このアプリは、リアルタイム同期な共同編集機能により、オンライン上の別々の場所やデバイスから、友達と一緒に好き勝手に教室(という名の座席表)を作成し、その画像をシェアできるサービスです。</p> <p>開発の経緯などについては下記の記事を参照ください。</p> <p><a href="https://crieit.net/posts/620b85ee075fd93545b20ccfb92d3491">https://crieit.net/posts/620b85ee075fd93545b20ccfb92d3491</a></p> <h2 id="アップデート"><a href="#%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88">アップデート</a></h2> <p>先日のリリースは、複数人でリアルタイムに「教室」(座席表)を作成できるという目的のもとに、最低限の機能のみに絞った仕様になっていました。その後、友人などに使ってもらい、フィードバックをもらった内容について、以下のような機能追加や修正などを行いました。</p> <p>※ 前提としてこのサービスはNuxtjs(Vuejs)とFirebaseを使って開発・運用されています。</p> <h2 id="主な内容"><a href="#%E4%B8%BB%E3%81%AA%E5%86%85%E5%AE%B9">主な内容</a></h2> <h3 id="ステータスのタイプライター表示"><a href="#%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%82%BF%E3%83%BC%E8%A1%A8%E7%A4%BA">ステータスのタイプライター表示</a></h3> <p>黒板に表示される生徒のつぶやきをタイプライター風に1文字ずつ表示するようにしました。<br /> 普通に文字列を配列化して、一定間隔おきにv-modelの配列にpushする感じでJavascriptで実装しました。</p> <h3 id="教室ページのデザイン・レイアウト修正"><a href="#%E6%95%99%E5%AE%A4%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%BB%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E4%BF%AE%E6%AD%A3">教室ページのデザイン・レイアウト修正</a></h3> <p>VuejsもFirebase(firestore)もまともに使ったことがなかった3月ぐらいに一日間の突貫作業で作った時のままだったので、HTML/CSSの構造から、Vueコンポーネントの構成などもリファクタリングしました。</p> <h3 id="いいね機能"><a href="#%E3%81%84%E3%81%84%E3%81%AD%E6%A9%9F%E8%83%BD">いいね機能</a></h3> <p>現状ユーザー認証がないので、SessionStorageに自分がいいねした教室の情報を保持し、多重いいねを防ぐようにしました。<br /> 実装にはvuex-persistedstateを使っています。<br /> これ以外のデータの読み込みなどはvuexfireを使って、vuexのstoreとfirestoreをシームレスにつないでいるので、moduleとして分けてindex.jsから読み込む構成にしています。</p> <pre><code>```jsx store/ | +-- index.js | +-- like.js ``` </code></pre> <pre><code class="jsx">store/index.js import like from './like' import localStorage from 'vuex-persistedstate' ... export const plugins = [ localStorage({ key: 'like', paths: ['like'], storage: window.sessionStorage }) ] </code></pre> <p>vuex-persistedstate<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/robinvdvleuten/vuex-persistedstate">https://github.com/robinvdvleuten/vuex-persistedstate</a><br /> vuex-persistedstate<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/posva/vuexfire">https://github.com/posva/vuexfire</a></p> <h3 id="公開教室のトップページでのリスト表示"><a href="#%E5%85%AC%E9%96%8B%E6%95%99%E5%AE%A4%E3%81%AE%E3%83%88%E3%83%83%E3%83%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A7%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E8%A1%A8%E7%A4%BA">公開教室のトップページでのリスト表示</a></h3> <p>これがないと他にどんな教室があるかわからんし、アクセスもできないという指摘。ごもっともですね😓</p> <h3 id="座席削除"><a href="#%E5%BA%A7%E5%B8%AD%E5%89%8A%E9%99%A4">座席削除</a></h3> <p>作成・編集ができるのに、削除できないとは何事か!?というご指摘。さーせん。</p> <h3 id="公開・非公開設定"><a href="#%E5%85%AC%E9%96%8B%E3%83%BB%E9%9D%9E%E5%85%AC%E9%96%8B%E8%A8%AD%E5%AE%9A">公開・非公開設定</a></h3> <p>トップページにリストが表示される様になったので、他の人にアクセスしてほしくない人は非公開設定にできるようにしました。秘密の言葉による簡易認証を入れようかとも思ったのですが、ユーザーから見た複雑度が増す気がしたので一旦ペンディングにしました。</p> <h3 id="教室背景変更機能"><a href="#%E6%95%99%E5%AE%A4%E8%83%8C%E6%99%AF%E5%A4%89%E6%9B%B4%E6%A9%9F%E8%83%BD">教室背景変更機能</a></h3> <p>だだっ白い無味乾燥な背景が寂しかったので、教室の背景画像を変更できるようにしました。アップロード時の画像リサイズ・クロップなどはまだ実装できていないのでIssue積んどきました。</p> <p><a href="https://crieit.now.sh/upload_images/9dbfdbf890225ceaff9757a8e6fe561f5edcc4accecfa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9dbfdbf890225ceaff9757a8e6fe561f5edcc4accecfa.png?mw=700" alt="image" /></a></p> <h3 id="ドラッグ&amp;ドロップ編集機能"><a href="#%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%26amp%3B%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E7%B7%A8%E9%9B%86%E6%A9%9F%E8%83%BD">ドラッグ&ドロップ編集機能</a></h3> <p>vue-draggableを使って実装しました。(Vuejsは便利なコンポーネント・ライブラリが充実してるので、個人開発者にはとても嬉しい😭)<br /> もちろん編集結果はリアルタイムに他のデバイスに反映されるようになっています。(挙動をもうちょっとかっこよくしたい😓)</p> <h4 id="動作ムービー"><a href="#%E5%8B%95%E4%BD%9C%E3%83%A0%E3%83%BC%E3%83%93%E3%83%BC">動作ムービー</a></h4> <p><a target="_blank" rel="nofollow noopener" href="https://www.youtube.com/watch?v=2RCYmpFSae8">https://www.youtube.com/watch?v=2RCYmpFSae8</a></p> <p>vue-draggable<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/SortableJS/Vue.Draggable">https://github.com/SortableJS/Vue.Draggable</a></p> <h3 id="その他の修正(レイアウト変更、バグフィックス等)"><a href="#%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E4%BF%AE%E6%AD%A3%EF%BC%88%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E5%A4%89%E6%9B%B4%E3%80%81%E3%83%90%E3%82%B0%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E7%AD%89%EF%BC%89">その他の修正(レイアウト変更、バグフィックス等)</a></h3> <p>背面黒板を廃止して、全面の黒板につぶやきを表示するようにしたり、その他微妙なデザイン・レイアウト調整、及びバグ修正を行いました。</p> <hr /> <p>まだまだバグも多いし、実装したい機能や修正したいUX、インタラクションなどもたくさんありますが、地道に少しずつ良いプロダクトにしていこうと思います。</p> <p>ではまた。</p> ぷろみつ tag:crieit.net,2005:PublicArticle/15923 2020-06-05T22:29:21+09:00 2020-06-05T22:31:45+09:00 https://crieit.net/posts/620b85ee075fd93545b20ccfb92d3491 自分の理想の教室を、友達とリアルタイムで一緒に作れるウェブサービス「みんなのきょうしつ」をリリースしました。 <p>さっき投稿した記事で、4日前に「musico」というウェブアプリをリリースしたことについて書きましたが、</p> <p>好きな楽曲について語り合うウェブサービス「musico」を作ってみました。<br /> <a href="https://crieit.net/posts/musico">https://crieit.net/posts/musico</a><br /> <a target="_blank" rel="nofollow noopener" href="https://musi-co.fun">musico | find track you like and talk about it</a></p> <p>実は昨日、もう一つウェブアプリをリリースしましたw<br /> その名も「みんなのきょうしつ」。</p> <p><a href="https://crieit.now.sh/upload_images/8ae825a52f93537d282260b5dff649f25eda3eaa27764.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8ae825a52f93537d282260b5dff649f25eda3eaa27764.png?mw=700" alt="image" /></a></p> <p><a target="_blank" rel="nofollow noopener" href="https://class-room.fun">みんなのきょうしつ</a></p> <h2 id="開発の動機"><a href="#%E9%96%8B%E7%99%BA%E3%81%AE%E5%8B%95%E6%A9%9F">開発の動機</a></h2> <p>このアプリは、もともと3月のコロナ禍による一斉休校をきっかけに、いきなり会えなくなった友達とオンラインで再開して貰い、小中高生のみなさんに、社会の混乱からのストレスを一時的にでも忘れてもらえたら良いなという思いで、二日間ぐらいでガッと基本的な機能を作って公開しようとしていたものでした。ですが、その後なかなか着手する時間が取れず、限定的な公開にとどめて、ほぼ動いていない状態が続いていました。</p> <h2 id="開発頓挫、からの突貫リリースへ"><a href="#%E9%96%8B%E7%99%BA%E9%A0%93%E6%8C%AB%E3%80%81%E3%81%8B%E3%82%89%E3%81%AE%E7%AA%81%E8%B2%AB%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%B8">開発頓挫、からの突貫リリースへ</a></h2> <p>そんななか、先日の「musico」の開発と公開をきっかけに、テンションとモチベーションがひさびさに爆上がりしたので、この機を逃す手はないと思い、一念発起して昨日・一昨日をかけて最低限の機能を実装し、公開していみました。</p> <h2 id="どんなアプリ?"><a href="#%E3%81%A9%E3%82%93%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%EF%BC%9F">どんなアプリ?</a></h2> <p>このアプリでは、教室を模した座席表的なものに、自分の好きな人やモノの名前と写真を登録していき、自分の理想の教室が作れます。</p> <p><a href="https://crieit.now.sh/upload_images/3cd6bc3848f85dbd1abedf7a1cfeb3cc5eda46c7d816b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3cd6bc3848f85dbd1abedf7a1cfeb3cc5eda46c7d816b.png?mw=700" alt="image" /></a></p> <p>さらに、URLを共有することで、別の場所にいる友だちとオンラインでリアルタイムで共同編集することが出来ます。(動画は開発中に撮影したものです)</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.youtube.com/watch?v=N7qo5popZ3Q">動作ムービー</a></p> <p>また、「記念撮影」機能で作った教室の画像を作成・ダウンロードしたり、各種SNSに手軽にシェアすることが出来ます。(写真は友人が作った「あつまれ どうぶつの森」のキャラクターが集まる教室です)</p> <p><a href="https://crieit.now.sh/upload_images/43103ea48631f57b3237c5df0b282b575eda46f1109e2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/43103ea48631f57b3237c5df0b282b575eda46f1109e2.png?mw=700" alt="image" /></a></p> <p><a target="_blank" rel="nofollow noopener" href="https://class-room.fun/classrooms/8jVBr7suU0In1vbE3Ze8">https://class-room.fun/classrooms/8jVBr7suU0In1vbE3Ze8</a></p> <p>地味にインスタ映えしたりしますw</p> <p><a href="https://crieit.now.sh/upload_images/1780742f62e146dcfd91693883f4363d5eda47b04c5d4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1780742f62e146dcfd91693883f4363d5eda47b04c5d4.png?mw=700" alt="image" /></a></p> <h3 id="技術的なこと"><a href="#%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E3%81%93%E3%81%A8">技術的なこと</a></h3> <p>技術スタック的には「musico」と同じくFirebase+Vuejs(Nuxtjs)という、構成です。「musico」はUniversalモード(SSR)で作りましたが、こっちはSPAとして開発し、OGP取得部分のみCloud Functionsで作りました。</p> <p>しかし、Firebaseめっちゃ便利ですね〜。</p> <p>こっちもあんまり凝ったことはしていないのですが、OGPの動的生成あたりとか、記念写真機能あたりについて、あとで技術的なことを書こうかなと思っています。</p> <p>それではまた。</p> ぷろみつ tag:crieit.net,2005:PublicArticle/15920 2020-06-05T19:26:08+09:00 2020-06-05T19:26:08+09:00 https://crieit.net/posts/musico 好きな楽曲について語り合うウェブサービス「musico」を作ってみました。 <p>突然ですが、先々週に行われたweb1weekという1週間でウェブアプリを作って公開するオンラインハッカソンに参加しました。</p> <p><a href="https://crieit.net/boards/web1week-202005">(5/18~5/24)1週間でWebサービスを作るイベント - お題「Like」</a></p> <p>と、言いたいところだったのですが、実は2日目以降、家庭内のインシデント対応やそれに起因する自身の体調不良で、全く開発を進めることができませんでした(汗)</p> <p>昨日あたりから、体調含めて状況が落ち着いてきたので、遅ればせながら開発を進め、ガっと最低限の所まで作り込み、勢いでドメイン取って公開してみました。</p> <p>以下、今回開発したウェブアプリについて。</p> <p>お題は「Like」でしたので、好きな楽曲についてあーだこーだ語り合えるサービスを作ってみました。</p> <p>「<a target="_blank" rel="nofollow noopener" href="https://musi-co.fun">musico | find track you like and talk about it</a>」(何故か英語w)</p> <p><a href="https://crieit.now.sh/upload_images/cbe4c4b65476b6a84552bce4ea4da34f5eda1a8c5fd28.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cbe4c4b65476b6a84552bce4ea4da34f5eda1a8c5fd28.png?mw=700" alt="画面" /></a></p> <p>フリーワードで楽曲を検索して、その楽曲にLikeやコメントをすることができます。</p> <p>現時点での機能は以下、</p> <h3 id="未ログイン時"><a href="#%E6%9C%AA%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%99%82">未ログイン時</a></h3> <ul> <li>楽曲を検索、またはコメントがある楽曲リストを閲覧できる</li> <li>楽曲のコメントページを閲覧できる</li> <li>楽曲のプレビュー再生ができる(ファイルがあるもののみ)</li> <li>Spotifyで楽曲を聞くことができる(別タブでウェブ版を表示)</li> </ul> <h3 id="ログイン時"><a href="#%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%99%82">ログイン時</a></h3> <p>上記に追加して、<br /> - 楽曲にコメントできる<br /> - 楽曲にLikeできる</p> <h4 id="動作ムービー"><a href="#%E5%8B%95%E4%BD%9C%E3%83%A0%E3%83%BC%E3%83%93%E3%83%BC">動作ムービー</a></h4> <p><a target="_blank" rel="nofollow noopener" href="https://youtu.be/sDVK6O61_S0">https://youtu.be/sDVK6O61_S0</a></p> <p>各楽曲、コメントごとのページをSNSにシェアすることも出来ます。</p> <p><a href="https://crieit.now.sh/upload_images/f3869d86a81591bf66abf5f407661d895eda1b78e57e3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f3869d86a81591bf66abf5f407661d895eda1b78e57e3.png?mw=700" alt="image" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://musi-co.fun/tracks/6K53GM9W6Vle5KBwGFVnZM">https://musi-co.fun/tracks/6K53GM9W6Vle5KBwGFVnZM</a></p> <p>開発時の様々や動機はなどは下記のハッカソンのボードに書きました。<br /> <a href="https://crieit.net/boards/web1week-202005/musico">https://crieit.net/boards/web1week-202005/musico</a></p> <h2 id="技術的なこと"><a href="#%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E3%81%93%E3%81%A8">技術的なこと</a></h2> <p>技術スタック的にはFirebase+Vuejs(Nuxtjs)という、マネージドなサーバレス環境とコンポーネント思考なリアクティブフレームワークを組み合わせたJAMstackな流行りの構成です。</p> <p>最初はホスティングにNetlifyを選択したのですが、SSR周りやFirestoreなど他に使ってるサービスとの兼ね合いも考えて、Firebase全乗っかりな構成にしました。</p> <p>UIは最近良く使ってるBulmaのコンポーネントをほぼほぼそのまま使ってる感じです。</p> <p>本業ではAWSがっちり使って、コンテナとかサーバレスとかマネージドサービスを組み合わせたサーバサイド寄りの開発が多いので、個人開発ではフロントエンド寄りの技術を選定しがちですね(汗)</p> <p>あんまり凝ったことはしていないのですが、開発時に得た知見は今後すこしずつ書いていこうと思っています。</p> <p>それではまた。</p> <hr /> <h3 id="PS."><a href="#PS.">PS.</a></h3> <p>祝Crieit初投稿!!</p> ぷろみつ