tag:crieit.net,2005:https://crieit.net/tags/Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9/feed
「Webサービス」の記事 - Crieit
Crieitでタグ「Webサービス」に投稿された最近の記事
2023-04-11T23:36:31+09:00
https://crieit.net/tags/Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9/feed
tag:crieit.net,2005:PublicArticle/18423
2023-04-11T23:29:51+09:00
2023-04-11T23:36:31+09:00
https://crieit.net/posts/simple-hr-reporter
SmartHRと連携して人事データを可視化するツールを作ってみた
<p>個人開発でSmartHRと連携したレポーティングツールを作成してみました。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://simple-hr-reporter.saikicks.net/report"><strong>人事データ簡易分析ツール</strong></a></p>
<h2 id="概要"><a href="#%E6%A6%82%E8%A6%81">概要</a></h2>
<p>このツールはSmartHRと連携してAPI経由でデータを取得して可視化を行うためのレポーティングツールです。</p>
<p>SmartHRではフリープラン、労務管理プランでは分析レポートの利用が有料プランに切り替えるなどの対応を行わないと利用できません。</p>
<p>オプション機能として提供されていますが、そこまで細かく分析するほどでは無く現状の人事情報を可視化したい、みたいな緩い使い方でも許容できるユーザーさんを対象に簡易的なグラフ出力を提供します。</p>
<p>利用にはテナントIDとアクセストークンを利用しますが、サイト内にも記載がある通り<strong>このツールはテナントIDやアクセストークンを保存したりはしません。データ取得時のみに利用します</strong>。</p>
<p>そのため画面をリロードしたりするともちろん情報は失われます。</p>
<p>再度表示したい場合は都度テナントID、アクセストークンはをもう一度入力していただく手間はありますが…</p>
<h2 id="技術構成"><a href="#%E6%8A%80%E8%A1%93%E6%A7%8B%E6%88%90">技術構成</a></h2>
<ul>
<li>React</li>
<li>rebass</li>
<li>styled-component</li>
<li>recharts</li>
<li>TypeScript</li>
<li>Vite</li>
<li>VItest</li>
<li>Axios</li>
<li>CloudFlare Pages</li>
</ul>
<h2 id="レポート出力結果"><a href="#%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E5%87%BA%E5%8A%9B%E7%B5%90%E6%9E%9C">レポート出力結果</a></h2>
<p>出力結果は以下のような感じでシンプルに出力しています。</p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/y_saiki/20230324/20230324202730.png" alt="image" /></p>
<p>もしご興味あれば是非使ってみてください。</p>
<p>次にテナントIDとアクセストークンについて簡単に説明します。</p>
<h2 id="テナントIDについて"><a href="#%E3%83%86%E3%83%8A%E3%83%B3%E3%83%88ID%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">テナントIDについて</a></h2>
<p>テナントIDはSmartHRのURLに含まれている以下の部分の文字列です。</p>
<pre><code>[https://[テナントID].smarthr.jp/](https://[テナントID].smarthr.jp/)
</code></pre>
<h2 id="アクセストークンについて"><a href="#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">アクセストークンについて</a></h2>
<p>アクセストークンは管理画面より作成を行うため以下に手順を載せておきます。</p>
<p>SmartHRにログインした後、右上のユーザー名の部分をクリックするとメニューが表示されます。</p>
<p>その中の「共通設定」をクリックしてください。</p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/y_saiki/20230324/20230324201148.png" alt="image" /></p>
<p>次に左側メニューから「外部システム連携」をクリックします。</p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/y_saiki/20230324/20230324201203.png" alt="image" /></p>
<p>API連携より「アクセストークン」をクリックします。</p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/y_saiki/20230324/20230324201159.png" alt="image" /></p>
<p>「新規発行」をクリックします</p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/y_saiki/20230324/20230324201155.png" alt="image" /></p>
<p>「アクセストークン名」を入力します。利用する用途を名前にしておくと良いです。</p>
<p>例えば「分析レポート」とか…</p>
<p>必須項目の入力が埋まると「登録」ボタンがクリックできるようになるので登録するとアクセストークンが払い出されます。</p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/y_saiki/20230324/20230324201151.png" alt="image" /></p>
<p>これらのテナントIDとアクセストークンを利用して本ツールにて入力して「出力」ボタンをクリックしてもらうとレポートが出力されます。</p>
<p>まだまだ表示がおかしい部分があったり、追加したい機能等があるので引き続き開発を進めていきたいと思います!</p>
<p>採用計画や人事データを活用して分析を行いたい方は是非活用してみてください。</p>
Sassy_1123
tag:crieit.net,2005:PublicArticle/18330
2022-12-05T05:35:35+09:00
2022-12-05T10:40:53+09:00
https://crieit.net/posts/SaaS-12-1
初のSaaSが12月で1周年なので振り返ってみた
<p><a href="https://crieit.now.sh/upload_images/17513f79bbd637dff441e7cab57d2ace638d03de62032.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/17513f79bbd637dff441e7cab57d2ace638d03de62032.png?mw=700" alt="OGP_お知らせ (1).png" /></a></p>
<p>※これは<a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2022/individual-developers">個人開発 Advent Calendar 2022</a>のカレンダー2/5日目の記事です。</p>
<p>個人開発でいろいろ作ってきたけど、<br />
去年の12月にはじめてSaaSをリリースしました。</p>
<p>ちょうど1年経ったので、少し振り返ってみる。<br />
12月はいろんな記事が出てくるので、少し触発されました(<em>´ω`</em>)</p>
<p>GoogleスプレッドシートのJSON API化サービス</p>
<p><a target="_blank" rel="nofollow noopener" href="https://sssapi.app/">https://sssapi.app/</a></p>
<h2 id="どんなサービス?"><a href="#%E3%81%A9%E3%82%93%E3%81%AA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%EF%BC%9F">どんなサービス?</a></h2>
<p>スプレッドシートのJSON APIをつくれるごくごくシンプルなサービス。</p>
<p>スプレッドシートのURLを登録すると、<br />
中身をJSONで受け取れるAPIを作れます。</p>
<p>検索・絞り込み・ページングなどAPIでよくつかう機能や、<br />
ネストオブジェクトへの変換などいくつか変換機能、<br />
外部API呼び出しやGitHub Actionsとの連携機能などなども用意。</p>
<h2 id="どうして作ったの?"><a href="#%E3%81%A9%E3%81%86%E3%81%97%E3%81%A6%E4%BD%9C%E3%81%A3%E3%81%9F%E3%81%AE%EF%BC%9F">どうして作ったの?</a></h2>
<p><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/kira_puka/articles/f9496a6a847799">β版リリース時の記事</a>でもいろいろ書いたけど、<br />
スプレッドシートをJSON化する方法はいくつか既存のサービスでは少し使いにくいな。。と思うことがあった。</p>
<h3 id="既存のサービスでの課題"><a href="#%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A7%E3%81%AE%E8%AA%B2%E9%A1%8C">既存のサービスでの課題</a></h3>
<p>ちょっとしたJSON APIを作る方法はいくつかあるけど、<br />
実際のサービスで利用しようとした場合、すこし気になることが。。</p>
<ul>
<li>GAS
<ul>
<li>レスポンスが遅い/同時実行数などの制限がある</li>
<li>シートごとに準備が必要/どこで使ってるかわからなくなる</li>
<li>リッチな検索の実装がめんどくさい</li>
</ul></li>
<li>ヘッドレスCMS
<ul>
<li>個人・小規模・開発初期では手を出しにくい価格</li>
<li>機能がリッチだけど、初期ではなくていいものも多い</li>
</ul></li>
<li>スプレッドシートDB関連サービス
<ul>
<li>必要な権限が多い</li>
<li>プライベートなAPIは作れない</li>
</ul></li>
</ul>
<p>資金が潤沢であればヘッドレスCMSがよい選択だけど、<br />
試作段階で、いきなり手を出すのはなかなか厳しいお値段。。</p>
<p>GASやスプレッドシートDB関連サービスは、<br />
個人利用なサービスや学習用ではよいけど、<br />
実サービスではなかなか厳しい制約。。</p>
<p>もう少しお手軽で実サービスでも利用できるものがほしいと思い、<br />
このサービスを作りはじめることに。</p>
<h3 id="スプレッドシートをDBにするときの懸念"><a href="#%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92DB%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E6%87%B8%E5%BF%B5">スプレッドシートをDBにするときの懸念</a></h3>
<p>多くの競合サービスは直接スプレッドシートに接続しているけど、<br />
実際にスプレッドシートをDBにすることを考えたときに、<br />
いくつか気になる点が。。</p>
<ul>
<li>トランザクションがない -> データ壊れる可能性</li>
<li>編集中のリクエストも受け付ける -> 不正なJSONを返すの可能性</li>
<li>Sheets APIが必要 -> 実サービスだとつらい遅さ</li>
</ul>
<p>作ったサービスが(万が一でも)大ヒットしたときに、<br />
データが壊れたり、意図しないレスポンスになるのは、<br />
かなりつらい。。</p>
<p>そのため、任意のタイミングのスプレッドシートでAPIを更新でき、<br />
読み込み専用のAPIのみとする、いまの方針になりました。</p>
<h2 id="1年やってみてどうだった?"><a href="#1%E5%B9%B4%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%A6%E3%81%A9%E3%81%86%E3%81%A0%E3%81%A3%E3%81%9F%EF%BC%9F">1年やってみてどうだった?</a></h2>
<ul>
<li>予想以上に利用されてた!!</li>
<li>エンジニア以外の人の利用が多い!!</li>
<li>企業での利用が多い!!</li>
</ul>
<p>自分と同じような個人開発者をイメージしていたので、<br />
かなりびっくり。。うれしい悲鳴。。(*´ω`*)<br />
年プランの購入もあり、黒字で運営できてる。ありがたい。。(*´ω`*)</p>
<p>CloudFlareの障害のときは気が気じゃなかった。。</p>
<h3 id="マッチするユーザ"><a href="#%E3%83%9E%E3%83%83%E3%83%81%E3%81%99%E3%82%8B%E3%83%A6%E3%83%BC%E3%82%B6">マッチするユーザ</a></h3>
<p>アンケートやインタビュー、利用データを見ていると、こんな感じに(*´ω`*)</p>
<ul>
<li>スプレッドシートを介したコラボレーション
<ul>
<li>エンジニア以外がデータを操作しやすい</li>
</ul></li>
<li>お知らせなどを極小のコンテンツをあとづけしたい
<ul>
<li>単純なものを素早く作れる</li>
</ul></li>
<li>スキーマが決まってない開発初期
<ul>
<li>データからスキーマが作成できる</li>
</ul></li>
</ul>
<p>特に、スプレッドシートは多くの人が見慣れているので、<br />
データを作る人に管理画面の操作方法を説明しなくてもよく、<br />
共有も共同編集も簡単にできるというのが強みのよう。</p>
<p>また、スキーマをあらかじめ用意しなくてよく、<br />
列を追加すると自由に変更できるのでプロトも素早くできる。</p>
<h3 id="マッチしないユーザ"><a href="#%E3%83%9E%E3%83%83%E3%83%81%E3%81%97%E3%81%AA%E3%81%84%E3%83%A6%E3%83%BC%E3%82%B6">マッチしないユーザ</a></h3>
<p>逆にマッチしないユーザとしては、<br />
スプレッドシートをDBとして使いたいエンジニア。</p>
<p>やはり、書き込みができない、すぐに反映されないのは、<br />
かなりネックなため、刺さらない感じだった。。</p>
<p>とはいえ、DBとして使う懸念があるので、<br />
妙案が出るまで少し難しいことを思っている。。</p>
<h2 id="振り返り(というなの後悔&反省)"><a href="#%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A%28%E3%81%A8%E3%81%84%E3%81%86%E3%81%AA%E3%81%AE%E5%BE%8C%E6%82%94%EF%BC%86%E5%8F%8D%E7%9C%81%29">振り返り(というなの後悔&反省)</a></h2>
<p>うれしかったことも多かったけど、<br />
「こうしとけばよかった。。」の日々(´・ω・`)</p>
<h3 id="ユーザとのコミュニケーション"><a href="#%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">ユーザとのコミュニケーション</a></h3>
<p>機能の開発はずっとやってきたけど、<br />
マーケティングは考えていなかった。。</p>
<p>リリースしたはいいものの、フィードバックを受けたり、<br />
何かを個別に伝えたりというのが難しい状態に。。</p>
<p>以下のようなものが必要だと感じた。<br />
さらにサイト上とメールなどのサイト外でやり取りできるとよい。</p>
<ul>
<li>運営 -> 全体
<ul>
<li>サイト内: お知らせ・更新履歴のページ</li>
<li>サイト外: メーリングリスト</li>
</ul></li>
<li>運営
<ul>
<li>サイド内: フィードバックフォーム</li>
<li>サイト外: お問い合わせフォーム/メール</li>
</ul></li>
<li>運営 -> 個別
<ul>
<li>サイト内: (現状なし。例:個別のお知らせ)</li>
<li>サイト外: メール</li>
</ul></li>
<li>運営 個別
<ul>
<li>サイト内: (現状なし。例:チャット)</li>
<li>サイト外: メール</li>
</ul></li>
</ul>
<p>当たり前のことだけど、機能の開発が優先になってしまっていた。。<br />
機能は最低限でもいいけど、<br />
ユーザとやり取りできる部分はあらかじめ用意できていると良かった。。</p>
<h3 id="統計データの収集"><a href="#%E7%B5%B1%E8%A8%88%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%8E%E9%9B%86">統計データの収集</a></h3>
<p>これもマーケティング関連。</p>
<p>リリースして終わりではなく、なにを改善すべきかを把握する必要があるが、<br />
こんなに利用される想定ではなかったので、かなり後回しに。。</p>
<p>最低限でも仕込んでおけば、かなり改善を早く回せた気がする。</p>
<p>特に、Twitterでのコメントと、実際の利用データとはかなりの乖離があるので、<br />
もっとはやく実データを見て判断できる基盤を用意しておけばよかった。。</p>
<h3 id="個人利用の想定"><a href="#%E5%80%8B%E4%BA%BA%E5%88%A9%E7%94%A8%E3%81%AE%E6%83%B3%E5%AE%9A">個人利用の想定</a></h3>
<p>想定ユーザが自分自身であったので、<br />
複数人でがっつり利用されるのを想定しなかった。。</p>
<p>フタを開けてみると、企業での利用や、<br />
エンジニア/非エンジニアとのコラボレーションが多い。</p>
<p>そういった場合、プロジェクトやワークスペースみたいな、<br />
複数人で共同編集できる構成が必要。</p>
<p>そうしておくことで、メンバーを招待したりもできるので、<br />
バイラル効果も期待できる。</p>
<p>特にSaaSの場合はマルチテナントな構成で組んでおけばよかった。。<br />
(新機能として実装中...)</p>
<h3 id="料金プラン設計"><a href="#%E6%96%99%E9%87%91%E3%83%97%E3%83%A9%E3%83%B3%E8%A8%AD%E8%A8%88">料金プラン設計</a></h3>
<p>個人利用の想定も絡んでいるけど、<br />
アカウント単位のシンプルな3プランだけにしていた。<br />
(しかもかなり手を出しやすい価格...)</p>
<p>この設計の場合、なかなか収益を増やすのが難しい。。<br />
ランニングコストがかかるリッチな機能も開発しにくい。</p>
<p>また、APIがたくさん作りたい人と行数をたくさん増やしたい人がいて、<br />
ニーズにあうプランがないことも多い。</p>
<p>今回のサービスの場合は、ある程度、好きなプランにできるよう、<br />
ユーザがカスタマイズできる構成で組んでおけばよかったと思う。</p>
<p>とはいえ、ユーザが無駄に費用をかけなくていいように、<br />
無料で試せて、小さくはじめて、大きく伸ばせる、<br />
みたいな仕組みにしておくと個人的にはとっつきやすい。</p>
<h3 id="その他もろもろ"><a href="#%E3%81%9D%E3%81%AE%E4%BB%96%E3%82%82%E3%82%8D%E3%82%82%E3%82%8D">その他もろもろ</a></h3>
<p>書きはじめるときりがないけど、ほかにもいろいろと。。</p>
<ul>
<li>より積極的なインタビュー/事例収集</li>
<li>大きな更新よりも小さくても定期的な更新&お知らせ</li>
<li>UIフレームワークは利用を控える/移行つらい</li>
<li>広告は少額だと微妙かも/ある程度の金額なら効果的</li>
<li>記事募集やクーポン配布は効果薄いかも</li>
</ul>
<p>はやく小さくリリースするのも大事だけど、<br />
こういったサービスの場合には、<br />
マーケティング関連や共同利用の想定ももっと想定しておけばよかった。。</p>
<h2 id="今後は?"><a href="#%E4%BB%8A%E5%BE%8C%E3%81%AF%EF%BC%9F">今後は?</a></h2>
<p>まずは後悔している部分の対応と使い勝手を向上していく。</p>
<p>あとはNuxt3がリリースされたので、Buetfyを剥がしつつ、<br />
すこしずつ移行している感じ。</p>
<p>シンプルさを保ちつつ、よりサクッと便利なサービスになるよう、<br />
少しずつでも長く運営できるようがんばります(*´ω`*)!!</p>
<p>ご興味がある方も無い方も一度はぜひぜひ〜(*´ω`*)</p>
<p><a href="https://crieit.now.sh/upload_images/f4d68ff5b3ff8494cd994b7c45ad4257638d046a36eb3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f4d68ff5b3ff8494cd994b7c45ad4257638d046a36eb3.png?mw=700" alt="ogp_1syuunen_2.png" /></a></p>
<p>GoogleスプレッドシートのJSON API化サービス<br />
<a target="_blank" rel="nofollow noopener" href="https://sssapi.app/">https://sssapi.app/</a></p>
<h2 id="参考になった本"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E6%9C%AC">参考になった本</a></h2>
<p>マーケティングの本が多め。どう理解してもらい、どう広めていくかの学びが多い。。</p>
<ul>
<li><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/4799327844/tsundoku-hm-22">PLG プロダクト・レッド・グロース「セールスがプロダクトを売る時代」から「プロダクトでプロダクトを売る時代」へ</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/479815816X/tsundoku-hm-22">THE MODEL(MarkeZine BOOKS) マーケティング・インサイドセールス・営業・カスタマーサクセスの共業プロセス</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/462108786X/tsundoku-hm-22">Fearless Change アジャイルに効く アイデアを組織に広めるための48のパターン</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/4408650056/tsundoku-hm-22">スモールビジネスの教科書</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/4320023684/tsundoku-hm-22">ライト,ついてますか: 問題発見の人間学</a></li>
</ul>
きらぷか@積読ハウマッチ/SSSAPIなど
tag:crieit.net,2005:PublicArticle/18232
2022-06-26T21:18:47+09:00
2022-06-26T21:22:16+09:00
https://crieit.net/posts/Web-62b84ea799d15
ブラウザだけで複数コピペ保存・共有が出来るWebサイト
<p>個人的に困っていた事を解消するサイトを作ったので紹介させて下さい。</p>
<h1 id="コピのすけとは"><a href="#%E3%82%B3%E3%83%94%E3%81%AE%E3%81%99%E3%81%91%E3%81%A8%E3%81%AF">コピのすけとは</a></h1>
<p>ブラウザだけでパソコンやスマホ間で、複数コピペの保存・共有が出来るサイトです。<br />
入力内容は保存及び共有時に暗号化されます。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://copypaste.stingrey.xyz/">コピのすけ</a></p>
<h1 id="困っていた事"><a href="#%E5%9B%B0%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E4%BA%8B">困っていた事</a></h1>
<p>ちょっとしたコピペの繰り返しや、他の端末(パソコンからスマホ等)に送りたい時、<br />
アプリや連携サービスを使うまでも無いのになと、少し手間に感じていました。</p>
<p>このちょっとした手間を解消するために「コピのすけ」サイトを作成しました。</p>
<h1 id="機能"><a href="#%E6%A9%9F%E8%83%BD">機能</a></h1>
<h4 id="複数テキスト枠でのコピー機能"><a href="#%E8%A4%87%E6%95%B0%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E6%9E%A0%E3%81%A7%E3%81%AE%E3%82%B3%E3%83%94%E3%83%BC%E6%A9%9F%E8%83%BD">複数テキスト枠でのコピー機能</a></h4>
<p>テキスト枠が複数あり、それぞれの内容を「コピー」ボタンでクリップボードにコピー出来ます。<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297571/b8820f97-8b9c-cb07-9070-fbd864b497c1.png" alt="image.png" /></p>
<h3 id="保存"><a href="#%E4%BF%9D%E5%AD%98">保存</a></h3>
<p>暗号化したコピー内容をブラウザに保存出来ます。<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297571/1f2d9b5b-cfab-62d1-715a-fc8378dcae21.png" alt="image.png" /></p>
<h3 id="URL共有"><a href="#URL%E5%85%B1%E6%9C%89">URL共有</a></h3>
<p>URLでコピー内容を共有出来ます。<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297571/69c72b6a-da72-db74-9e54-9ee9e30aa7a8.png" alt="image.png" /></p>
<h3 id="リアルタイム共有"><a href="#%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E5%85%B1%E6%9C%89">リアルタイム共有</a></h3>
<p>複数端末でコピー内容をリアルタイムに共有出来ます。<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297571/1dedf782-bac2-b163-5968-2f1080a7c57e.png" alt="image.png" /></p>
<h1 id="こだわりポイント"><a href="#%E3%81%93%E3%81%A0%E3%82%8F%E3%82%8A%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88">こだわりポイント</a></h1>
<ul>
<li>スマホを考慮し、ボタン配置や操作性などの対策を行っています。</li>
<li>テキストエリアがコピーする内容に応じて自動調整します。</li>
<li>セキュリティを考慮し、暗号化対策を行い、安全性を高めています。</li>
</ul>
<p>同じ事でお困りな方がいましたら、ぜひご活用下さい。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://copypaste.stingrey.xyz/">コピのすけ</a></p>
【コピのすけ】コピペ保存・共有 Webサイト 運用
tag:crieit.net,2005:PublicArticle/18161
2022-04-09T22:40:57+09:00
2022-04-09T22:40:57+09:00
https://crieit.net/posts/metnal
気分が落ち込んだ時に、自動で周囲の人に通知するアプリを作りました
<p>こんにちは!</p>
<p>「<a target="_blank" rel="nofollow noopener" href="https://metnal.stock-stu.com/">metnal</a>」というアプリを作りましたので、ご紹介させてください。</p>
<h2 id="metnalとは"><a href="#metnal%E3%81%A8%E3%81%AF">metnalとは</a></h2>
<p>metnelは、「気分が落ち込んだ時に、自動で家族や友人、パートナーなどに通知することで、周囲の人の助けを受けることをサポートする」アプリです。</p>
<p>特徴として、<br />
1. 手軽に始められるように、LINEでのみログイン可能。メールアドレスやパスワードでアカウントを管理すると、アカウントを紛失したり、ログインが面倒になったりすることで、離脱してしまうリスクがあります(多くの人がアカウントを紛失した経験があると思います笑)。<br />
2. 機能は非常にシンプル。その時の気分をつけるだけで、独自のスコアリングに基づき、自動で気分のスコアが表示されます。<br />
3. 周囲の人に、気分のスコアを共有できます。また周囲の人が登録することで、スコアが極端に低くなった時(気分が落ち込んだ時)にLINEのbotを通じて自動で通知されます。</p>
<p>となっております。<br />
このアプリが十分に機能した場合、周囲の人の落ち込みを即座に発見できることが期待されます。</p>
<h3 id="利用方法"><a href="#%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95">利用方法</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://stock-stu.com/introduce_metnal/#howtouse">こちら</a>をご覧ください!</p>
<h3 id="利用技術等"><a href="#%E5%88%A9%E7%94%A8%E6%8A%80%E8%A1%93%E7%AD%89">利用技術等</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/StStu/items/11dabe66a2f92665d551#使用技術等">qiita</a>にまとめてみました。<br />
一読して頂ければ幸いです!</p>
nyonyataro
tag:crieit.net,2005:PublicArticle/17895
2021-12-27T23:20:34+09:00
2021-12-27T23:20:34+09:00
https://crieit.net/posts/Web-61c9cbb273b27
【個人開発】踏破した都道府県を日本地図でシェアできるWebサービス「日本踏破図🗾」を作りました
<h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2>
<p>「日本踏破図🗾」というWebサービスをNuxt × Vuetifyで個人開発しました!</p>
<p><a target="_blank" rel="nofollow noopener" href="https://traverse-japan.dev/">日本踏破図🗾</a></p>
<h2 id="どんなWebサービスか"><a href="#%E3%81%A9%E3%82%93%E3%81%AAWeb%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%8B">どんなWebサービスか</a></h2>
<p>踏破した都道府県を日本地図でチェックすることができ、自分が今までに日本をどれだけ踏破したかをみんなにシェアできます👍<br />
以下のように日本地図上で都道府県をチェックできます。これをシェアボタンでシェアすると・・・<br />
<a href="https://crieit.now.sh/upload_images/c21a19f689e6b03b8fd32ed155a13cc561c9c9f546005.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c21a19f689e6b03b8fd32ed155a13cc561c9c9f546005.gif?mw=700" alt="cap3.gif" /></a></p>
<p>以下のようなOGP画像でシェア可能です!地図のカラーも好きな色に変更することができます。<br />
<a href="https://crieit.now.sh/upload_images/c96a5c5d12e327a1c82680dd58a2f4c261c9c899adde1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c96a5c5d12e327a1c82680dd58a2f4c261c9c899adde1.png?mw=700" alt="cap2.png" /></a></p>
<h2 id="使用したフレームワーク・インフラなど"><a href="#%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%BB%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%81%AA%E3%81%A9">使用したフレームワーク・インフラなど</a></h2>
<ul>
<li>NuxtJS(Nuxt Bridge)</li>
<li>Vuetify</li>
<li>vuex(vuex-module-decorators)</li>
<li>PWA</li>
<li>Vercel(Serverless Functions)</li>
</ul>
<p>主なものになります。多機能なWebサービスではないのでそんなに色々使ってはいません。<br />
よく使うNuxtとVuetifyでフロントを構築して、Nuxtの<a target="_blank" rel="nofollow noopener" href="https://v3.nuxtjs.org/concepts/server-engine/">Nitroエンジン</a>を使ってVercelのServerless Functionsへデプロイしています。</p>
<p>当初はSSRにするつもりはなかったのですが、動的OGPを実装するために色々試行錯誤した結果SSRにしました。ただ、Nuxt3/Nuxt Bridgeから使えるようになったNitroエンジンのおかげで高速&ゼロコンフィグでVercelを利用できます。</p>
<h2 id="苦労したところ"><a href="#%E8%8B%A6%E5%8A%B4%E3%81%97%E3%81%9F%E3%81%A8%E3%81%93%E3%82%8D">苦労したところ</a></h2>
<h3 id="動的OGPをどう実装するか"><a href="#%E5%8B%95%E7%9A%84OGP%E3%82%92%E3%81%A9%E3%81%86%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%81%8B">動的OGPをどう実装するか</a></h3>
<p>正確に言うと「いかに簡単かつ無料で実装するか」に苦労しました。<br />
検索するとfirebaseを使ってmetaだけSSRしたものを返してリダイレクトさせる等々、実現方法自体は色々でてきます。</p>
<p>ただ、正直なところこの規模・機能のWebサービスにそこまでしたくなかったんですね(できるだけシンプルな作りにするということも最初に決めていました)</p>
<p>最終的に実装した方法は以下です。</p>
<ol>
<li>OGP画像を生成して画像を返すServerless Functionsを用意する</li>
<li>Functionsへ画像生成に必要な情報(チェック済みの都道府県、地図カラー)を渡す</li>
</ol>
<p>必要な情報をURLパラメータに持ち、それを利用してmetaタグのog:imageのエンドポイントを作っています。<br />
そのためサービス自体はSSRする必要がありますがVercelを使えば十分な無料枠でServerless FunctionsでSSRできます。</p>
<p>個人的には下手にhackyな方法をとるよりも、SSRが必要な場面ではおとなしくSSRしておいた方が良い気がします🤔<br />
(結局のところTwitter・Facebookのクローラーのためだけにあれこれやりたくない)</p>
<p>ちなみにNetlifyに<a target="_blank" rel="nofollow noopener" href="https://docs.netlify.com/site-deploys/post-processing/prerendering/">Prerendering</a>という機能があるのですが、これを有効にすることで事前レンダリングされたHTMLを返すことができます。<br />
SPA構成にしてPrerenderingを試してみたのですが、どうもPrerenderingの対象はUserAgentを見ているだけらしくTwitterクローラーであればNetlify Functionsのエンドポイントも問答無用でPrerenderingされるみたいでした。<br />
なのでOGP画像を返すはずのFunctionsがTwitterクローラーの時はPrerenderingされてHTMLを返すようになってしまい、OGP画像が表示されず使えませんでした。。</p>
<p>まぁ、NetlifyのPrerenderingはキャッシュ時間(24〜48時間)もコントロールできないし、なによりBETAなのでまだ実用的ではないですね。。</p>
<h3 id="サイトデザイン"><a href="#%E3%82%B5%E3%82%A4%E3%83%88%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3">サイトデザイン</a></h3>
<p>デザインというのはセンスだと思っています。つまるところ、それを磨くためには多大な時間・努力が必要ということです😉<br />
私はデザイナーではないのでそこについて時間をかけて勉強するのは得策ではありません。<br />
悩み・試行した結果、全体的にカードベースのデザインになりました。</p>
<p>また、根本のデザインはいわゆるUIフレームワークに頼るわけですが今回はよく使うVuetifyを利用しました。Vuetifyのコンポーネントを使うことで何も考えずそこそこきれいなサイトができあがります。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://vuetifyjs.com/ja/">https://vuetifyjs.com/ja/</a></p>
<p>ただ、今回は個人的にやってみたいと思っていたGlassmorphism(グラスモーフィズム)チックなデザインを実装しました。<br />
これが間違いで、Vuetifyはマテリアルデザインを実装するフレームワークなんですね。それに対してマテリアルデザインからかけ離れるようなものを実装すると色々と歪みが生じます🙃</p>
<p>importantを使ってVuetifyのcssを上書きして実装しましたが、こういうことをする場合はTailwind CSSを利用するべきでした。。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://tailwindcss.com/">https://tailwindcss.com/</a></p>
<h2 id="運営コストについて"><a href="#%E9%81%8B%E5%96%B6%E3%82%B3%E3%82%B9%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">運営コストについて</a></h2>
<p>現状、ドメイン代オンリーです。<br />
上の方でも少し書いていますが個人開発においては<strong>無料で運営できること</strong>にこだわっています。</p>
<p>まぁ、お金はかからないに越したことはないし、お金がかかってくるとちゃんとメンテしなくちゃとか、マネタイズ考えないと!とか思ってしまうわけですが無料であればひとまず放置で問題ないですからね。</p>
<p>ちなみに、このWebサービスでは最初からマネタイズは一切考えていません。機能的にサービス自体がマネタイズにつながるものでもないですがアドセンス等の広告等も一切はらないと決めて開発をスタートしました。</p>
<h2 id="サイトパフォーマンスについて"><a href="#%E3%82%B5%E3%82%A4%E3%83%88%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">サイトパフォーマンスについて</a></h2>
<p>使っている技術からもわかるかと思いますが、パフォーマンスは問題なく良いです。<br />
特にSSRするとやっぱり初期描画のパフォーマンスがすごいです(コールドスタート時以外)</p>
<p>いくら無料のインフラにこだわっているかといってパフォーマンスを犠牲にしたらお話にならないですからね😉</p>
<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271387/b46f5426-3ef1-c2d9-327f-071178f7d3b2.png" alt="image.png" /></p>
<h2 id="機能の説明"><a href="#%E6%A9%9F%E8%83%BD%E3%81%AE%E8%AA%AC%E6%98%8E">機能の説明</a></h2>
<p>日本踏破図🗾でできることを改めて説明させていただきます。</p>
<h3 id="日本地図で踏破した都道府県をチェック"><a href="#%E6%97%A5%E6%9C%AC%E5%9C%B0%E5%9B%B3%E3%81%A7%E8%B8%8F%E7%A0%B4%E3%81%97%E3%81%9F%E9%83%BD%E9%81%93%E5%BA%9C%E7%9C%8C%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF">日本地図で踏破した都道府県をチェック</a></h3>
<p><a href="https://crieit.now.sh/upload_images/8bd592eed3b0970775e45c8493e1361161c9ca82b4032.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8bd592eed3b0970775e45c8493e1361161c9ca82b4032.png?mw=700" alt="image.png" /></a></p>
<p>日本地図上の都道府県を選択することができます。選択状況した数によって日本をどれくらい踏破したかがわかります。<br />
また、シェアボタンから踏破した都道府県をシェアすることができます❗</p>
<h3 id="日本地図のメニュー"><a href="#%E6%97%A5%E6%9C%AC%E5%9C%B0%E5%9B%B3%E3%81%AE%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC">日本地図のメニュー</a></h3>
<p><a href="https://crieit.now.sh/upload_images/8bd592eed3b0970775e45c8493e1361161c9ca9f1b976.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8bd592eed3b0970775e45c8493e1361161c9ca9f1b976.png?mw=700" alt="image.png" /></a></p>
<p>地図メニューから、それぞれの機能を利用できます。</p>
<ul>
<li>地図をリセットする(都道府県の選択状態・色をリセットする)</li>
<li>地図の色を変える(日本地図の色を変更できます)</li>
<li>日本を踏破する(すべての都道府県を選択状態にします)</li>
<li>コピー(日本地図をクリップボードへコピーします)</li>
<li>ダウンロード(日本地図をpng画像としてダウンロードします)</li>
</ul>
<h3 id="チェックボックス"><a href="#%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9">チェックボックス</a></h3>
<p><a href="https://crieit.now.sh/upload_images/8bd592eed3b0970775e45c8493e1361161c9cab5eba93.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8bd592eed3b0970775e45c8493e1361161c9cab5eba93.png?mw=700" alt="image.png" /></a></p>
<p>日本地図上から都道府県を選択する以外に、チェックボックスでも選択することができます。チェックボックスで選択すれば連動して日本地図上の都道府県も選択状態になります。</p>
<h2 id="ソースコード"><a href="#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89">ソースコード</a></h2>
<p>日本踏破図🗾のソースコードはMITライセンスで公開しています👉</p>
<p><a target="_blank" rel="nofollow noopener" href="https://github.com/k-urtica/traverse-japan">https://github.com/k-urtica/traverse-japan</a></p>
<h2 id="さいごに"><a href="#%E3%81%95%E3%81%84%E3%81%94%E3%81%AB">さいごに</a></h2>
<p>登録ログイン不要で使えるのでぜひ使ってみてください。<br />
よろしくおねがいします!</p>
<p>🌐 サイト:<a target="_blank" rel="nofollow noopener" href="https://traverse-japan.dev/">https://traverse-japan.dev/</a><br />
👀 開発:<a target="_blank" rel="nofollow noopener" href="https://twitter.com/k_urtica">K</a><br />
🚩 ソース:<a target="_blank" rel="nofollow noopener" href="https://github.com/k-urtica/traverse-japan">https://github.com/k-urtica/traverse-japan</a></p>
<h2 id="おまけ"><a href="#%E3%81%8A%E3%81%BE%E3%81%91">おまけ</a></h2>
<p>Web ToolBoxというブラウザで無料で使えるツール集を公開しています。<br />
こちらもよろしくおねがいします。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://web-toolbox.dev/">https://web-toolbox.dev/</a></p>
K@個人開発バックエンドエンジニア
tag:crieit.net,2005:PublicArticle/17821
2021-12-05T00:06:11+09:00
2021-12-05T00:06:11+09:00
https://crieit.net/posts/ver-2021
個人開発ふりかえり ver.2021年
<p>この記事は<a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2021/personal-project">個人開発 Advent Calendar 2021</a>の5日目の記事です。</p>
<p>今年ずっと<a target="_blank" rel="nofollow noopener" href="https://sssapi.app">つくってたサービス</a>も無事正式リリースできたので、<br />
個人開発について振り返ってみようかなと。</p>
<p>はじめたころからすると目的もだいぶ変わってきてるけど、<br />
こんなに長く続けられる個人開発ってたのしい(*´ω`*)</p>
<h2 id="2021年につくったもの"><a href="#2021%E5%B9%B4%E3%81%AB%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE">2021年につくったもの</a></h2>
<p>振り返ってみると4つも作ってた(*´ω`*)</p>
<ul>
<li><strong>4月: <a target="_blank" rel="nofollow noopener" href="https://umaiku.app/">ウマ育ノート</a>をリリース</strong><br />
ゲーム・ウマ娘のお助けアプリ</li>
<li><strong>7月: <a target="_blank" rel="nofollow noopener" href="https://coco-gacha.memory-lovers.com/">CoCoガチャ</a>をリリース</strong><br />
カレーのトッピングをガチャで決めるネタアプリ<br />
Crieitの<a href="https://crieit.net/boards/web1week-202107">web1week</a>への投稿作</li>
<li><strong>10月: <a target="_blank" rel="nofollow noopener" href="https://press-done.memory-lovers.com/">PRESS-DONE</a>をリリース</strong><br />
プレスリリースの送付記録サービス</li>
<li><strong>12月: <a target="_blank" rel="nofollow noopener" href="https://sssapi.app">SSSAPI</a>を正式リリース</strong><br />
GoogleスプレッドシートのAPI化サービス</li>
</ul>
<p>あと、<a target="_blank" rel="nofollow noopener" href="https://tsundoku.site/">積読ハウマッチ</a>もちょこちょこアップデート</p>
<p>ほぼ、<a target="_blank" rel="nofollow noopener" href="https://sssapi.app">SSSAPI</a>をがんばっていた年。<br />
ほかの3つのアプリもSSSAPIを使ってるので、ほぼ一色に。</p>
<p>SSSAPIについてはこちらの記事にまとめたので、もしよければ!<br />
・<a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/42fa53dd2fa381a742d2">スプレッドシートをWeb APIにできるサービスを作ってみた - Qiita</a></p>
<h2 id="目的の変化"><a href="#%E7%9B%AE%E7%9A%84%E3%81%AE%E5%A4%89%E5%8C%96">目的の変化</a></h2>
<p>かれこれ8年くらい個人開発をしてるけど、<br />
目的がだいぶ変わってきた気がする。</p>
<h3 id="はじめはストレス発散"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AF%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E7%99%BA%E6%95%A3">はじめはストレス発散</a></h3>
<p>いま思うと、ストレス発散だったとかも。</p>
<p>だんだんコードを書く機会がなくなって、<br />
コードを書けないストレスの発散する場所だったかもしれない。</p>
<p>なので、「コード書ける〜たのし〜」という感じで、<br />
コードを書くこと自体が目的だった。</p>
<h3 id="新しい技術を試す場所"><a href="#%E6%96%B0%E3%81%97%E3%81%84%E6%8A%80%E8%A1%93%E3%82%92%E8%A9%A6%E3%81%99%E5%A0%B4%E6%89%80">新しい技術を試す場所</a></h3>
<p>新しい技術とかはフィードを見ているくらいだったけど、<br />
いろんなライブラリや言語などを個人開発で試すように。</p>
<p>記事を読んだり、サンプル動かすだけだと身につかないけど、<br />
実プロジェクトで試せるので、理解も深くなる。</p>
<p>「個人開発で試す」→「本業で導入する」<br />
という、このサイクルがとてもよくて、<br />
新しめ技術でも自信を持って提案できる気がする。</p>
<p>「個人開発=新しいものを試したり、訓練する場所」<br />
という感じだったかも。</p>
<h3 id="新しい領域へのチャレンジ"><a href="#%E6%96%B0%E3%81%97%E3%81%84%E9%A0%98%E5%9F%9F%E3%81%B8%E3%81%AE%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8">新しい領域へのチャレンジ</a></h3>
<p>このサイクルにも慣れてきて、自由に作れるようになると<br />
「あわよくば、これで暮らしていきたい。。」<br />
という気持ちが湧くように。。ほんと、人間は欲深い。。</p>
<p>そうなると、広報とか営業とかQAとか<br />
いままでの開発以外にも力を入れていくことが大事。</p>
<p>なので、今は開発以外も含めて、<br />
どう運営していくのがよいかを考えることが多くなってきた感じ。</p>
<p>本業だと別の領域にチャレンジできる機会は、<br />
なかなかないので、これも個人開発のいいところ。</p>
<h2 id="個人開発はたのしい"><a href="#%E5%80%8B%E4%BA%BA%E9%96%8B%E7%99%BA%E3%81%AF%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84">個人開発はたのしい</a></h2>
<p>なんでこんなに長く続けてるんだろう?<br />
と考えてみると、この3つなんじゃないだろうか。</p>
<ul>
<li>なにもかも自由</li>
<li>フィードバックがダイレクト</li>
<li>個人でもひとりじゃない</li>
</ul>
<p>(もちろん、個人開発ドリームもあるけど(*´ω`*))</p>
<h3 id="なにもかも自由"><a href="#%E3%81%AA%E3%81%AB%E3%82%82%E3%81%8B%E3%82%82%E8%87%AA%E7%94%B1">なにもかも自由</a></h3>
<p>独立してフリーランスになったときも、<br />
自由だと感じたけれど、それ以上に自由。</p>
<p>作りたいものも、使いたい技術も自由に選べるのがいい。</p>
<p>仕事となると、作るもののテーマは大体決まっているし、<br />
安定している枯れた技術やチームにあう言語など、<br />
いろんな制約を考えて決めたりする。</p>
<p>個人開発なら、そんな制約も無いので、<br />
「ぼくがかんがえたさいきょうの構成」<br />
なんてのもOK。</p>
<p>上で書いたとおり、目的すらも自由なので、<br />
心のままに楽しめるのがいい(*´ω`*)</p>
<h3 id="フィードバックがダイレクト"><a href="#%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E3%81%8C%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88">フィードバックがダイレクト</a></h3>
<p>なにもかも自由である反面、<br />
すべての責任があるのも醍醐味の一つ。</p>
<p>いいこともわるいこともあるけど、<br />
ストレートにフィードバックが来るのは刺激的。</p>
<p>本業だとほめられることが少ないけど、<br />
9対1くらいでいいフィードバックなのでたのしい。</p>
<p>わるいフィードバックも改善点の指摘なので、<br />
どちらのフィードバックもとってもありがたい(*´ω`*)</p>
<h3 id="個人でもひとりじゃない"><a href="#%E5%80%8B%E4%BA%BA%E3%81%A7%E3%82%82%E3%81%B2%E3%81%A8%E3%82%8A%E3%81%98%E3%82%83%E3%81%AA%E3%81%84">個人でもひとりじゃない</a></h3>
<p>自分でそういう情報を追っていっているというのもあるけど、<br />
意外と個人開発者はたくさんいて、コミュニティや勉強会/もくもく会も多くある。</p>
<p>ぼくも<a target="_blank" rel="nofollow noopener" href="https://qiita.com/organizations/admin-guild">運営者ギルド</a>というコミュニティに参加させてもらってるけど、<br />
・ リリース前のサービスにバグ出し/アイデア出しする<strong>バグバッシュ</strong>や<br />
・ 1ヶ月の活動内容を報告する<strong>月報</strong><br />
なんてのも開催されていて、それをみると「がんばるぞ!」って気持ちになる。</p>
<p>コードを書くのは一人だけど、コミュニティやTwitterを見てても、<br />
がんばっている同志がたくさんいる感じなのが、続けられるのかも。</p>
<p>それと、フィードバックがダイレクトな効果なのか、<br />
<strong>ユーザさんと一緒に作ってる感じがすごく強い</strong>。</p>
<p>最初のプロトくらいまでは自分だけだけど、<br />
いろんなフィードバックを取り込んでいくうちに、<br />
「自分だけで作ったサービスじゃない感」が出てくる。</p>
<p>ユーザさんが増えていくたびに、<br />
気づかなかったことや自分にない視点が増えていくのがたのしいし、<br />
より喜んでもらえるようにとやる気が出るからかもしれない(*´ω`*)</p>
<h2 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h2>
<p>振り返ってみて思ったけど、目的すら自由な個人開発ってすごい(*´ω`*)</p>
<h3 id="【PR】SSSAPIをリリースしました!!"><a href="#%E3%80%90PR%E3%80%91SSSAPI%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%EF%BC%81%21">【PR】SSSAPIをリリースしました!!</a></h3>
<p>スプレッドシートをWeb APIにできるサービスをリリースしました🎉<br />
・ 1件取得/フィルタリング/ページング/ソートもできるAPIを簡単作成<br />
・ ドメインやアクセストークンによるアクセス制限もOK</p>
<p>「お知らせとかリリースノートを作りたいけど、<br />
毎回ビルドするのも、管理画面をつくるのもめんどくさい。。」</p>
<p>ってときに便利です!! スプシが管理画面になっちゃいます!!<br />
無料枠もあるので、ぜひぜひ遊んでみてください(<em>´ω`</em>)</p>
<p>GoogleスプレッドシートのAPI化サービス<br />
「<a target="_blank" rel="nofollow noopener" href="https://sssapi.app/">SSSAPI</a>」</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">\㊗️正式リリース㊗️/<a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/SSSAPI?src=hash&ref_src=twsrc%5Etfw">#SSSAPI</a> の正式版を公開しました🎉開発開始から9ヶ月...無事リリースを迎えられました😭β版でのご協力、ありがとうございます🙇♂️まだまだ不便なところもございますが、より一層便利になるよう改善がんばります💪💪💪<a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/%E6%8B%A1%E6%95%A3%E5%B8%8C%E6%9C%9BRT%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%BE%E3%81%99?src=hash&ref_src=twsrc%5Etfw">#拡散希望RTお願いします</a> <a target="_blank" rel="nofollow noopener" href="https://t.co/znp6CJGZEs">https://t.co/znp6CJGZEs</a></p>— 【公式】SSSAPI / GoogleスプレッドシートのAPI化サービス (@sssapi_app) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/sssapi_app/status/1465802829906558984?ref_src=twsrc%5Etfw">November 30, 2021</a></blockquote>
きらぷか@積読ハウマッチ/SSSAPIなど
tag:crieit.net,2005:PublicArticle/17787
2021-11-26T13:02:23+09:00
2021-11-26T13:02:23+09:00
https://crieit.net/posts/Twitter-Web
【Twitter連携サービス】連続ツイートをスレッドまるごとダウンロードできるWebサービスを公開しました
<p>Twitterを見ていると、とても参考になる連続ツイートをしている人がいらっしゃいます。</p>
<p>私はそういうツイートを見つけるとブックマークしておき、後でいつでも見返せるようにしていました。</p>
<p>ただ、そういう有益なツイートも、もしツイートしたご本人がツイ消ししたり、アカウント自体が消えてしまったりすると <strong>後で見れなくなってしまいます</strong>。</p>
<p>そこで、<strong>連続ツイートをWordファイルとしてダウンロードしておけるWebサービス</strong> を開発いたしました。</p>
<p><strong>「ツイスレバックアップ」</strong> というサービスです。<br />
<a target="_blank" rel="nofollow noopener" href="https://twibackup.com/">https://twibackup.com/</a></p>
<h1 id="作ったきっかけ"><a href="#%E4%BD%9C%E3%81%A3%E3%81%9F%E3%81%8D%E3%81%A3%E3%81%8B%E3%81%91">作ったきっかけ</a></h1>
<p>個人開発者界隈で有名(と私は勝手に思ってる)な方が、先日個人開発について参考になる連続ツイートをされていました。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://twitter.com/sesere115/status/1459167602094133254">https://twitter.com/sesere115/status/1459167602094133254</a></p>
<p>「ヒトリッター」というサービスを土日に開発しながら、サービスをリリースしていく中で考えるべきことを連続ツイートする内容です。</p>
<p>定期的に読み返したいような内容だったのですが、ふと「もしせせりさんがツイ消ししたら見れなくなるよな…」「念のため手元にずっと残しておきたいな」と思いました。</p>
<p>そこで、連続ツイートをスレッドまるごとダウンロードする、つまり手元にバックアップしておくためのサービス「ツイスレバックアップ」を開発しようと思い立ちました。<br />
(※せせりさんはよくツイ消しする人、という意味ではありません。)</p>
<h1 id="なぜWordファイル?"><a href="#%E3%81%AA%E3%81%9CWord%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%EF%BC%9F">なぜWordファイル?</a></h1>
<p>PDFファイルでのダウンロードも考えたのですが、以下の理由によりWordファイルでのダウンロードにしました。</p>
<ul>
<li>画像もWordファイル内に入れ込めるので便利。(これはPDFでも出来ますが)</li>
<li>あとで自分でメモを追記できる方が便利。(PDFだとメモしずらい)</li>
<li>なんならそのままマニュアル化しても良い。</li>
</ul>
<h1 id="このサービスを使うと何が嬉しい?"><a href="#%E3%81%93%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%86%E3%81%A8%E4%BD%95%E3%81%8C%E5%AC%89%E3%81%97%E3%81%84%EF%BC%9F">このサービスを使うと何が嬉しい?</a></h1>
<p>このサービスを使うと、やはり一番は <strong>「いつ連続ツイートが消える(見れなくなる)か分からない不安」</strong> から開放されるのが嬉しいですね。<br />
自分で開発して、自分で使ってます 笑</p>
<p>あと、Wordファイルでダウンロードしておけば仲間内での共有等も格段にしやすくなりますね。</p>
<h1 id="今後の展開"><a href="#%E4%BB%8A%E5%BE%8C%E3%81%AE%E5%B1%95%E9%96%8B">今後の展開</a></h1>
<p>今後はPDFファイルでのダウンロード等、ニーズに合わせて機能追加していきたいと思います。</p>
<p>なにか欲しい機能があれば教えてください!</p>
hoku
tag:crieit.net,2005:PublicArticle/17733
2021-11-02T08:57:05+09:00
2021-11-02T08:59:02+09:00
https://crieit.net/posts/QnQ-SNS-Slack
QnQ開発日誌 SNSからSlack寄りのツールへの移行を模索中
<p>まだ続けていたのかと思われそうだけれどまだ続けていた。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/">Search | QnQ</a></p>
<p>今何をしているのかというと、SNS的な使い方を諦めて、SlackとかTeams寄りに方向性を変えている。あと使い勝手が悪すぎるので、少しでもUXを上げようと細かい修正。</p>
<p>具体的には、「チーム」みたいなものを作って、そのチーム内でのみ閲覧・書き込みできるような体制にしようとしている。</p>
<p>言い方としては、SlackやTeamsの感じで使う掲示板、って感じかな。あるいは、グループチャットしかないLINEとか?</p>
<h2 id="SNSはキツイしもういらんかな、と"><a href="#SNS%E3%81%AF%E3%82%AD%E3%83%84%E3%82%A4%E3%81%97%E3%82%82%E3%81%86%E3%81%84%E3%82%89%E3%82%93%E3%81%8B%E3%81%AA%E3%80%81%E3%81%A8">SNSはキツイしもういらんかな、と</a></h2>
<p>元々SNS的な使われ方を考えて作っていたサービスだけれど、「もうSNSはいいんじゃない」、という話に。評価経済だのなんだの、もう十分でしょ、っていう。</p>
<p>というのは表向きの理由で、実際は「この手のサービスって流行るところまで持っていくのがたいへんすぎるし無理だね」っていう実質的な理由のほうが大きい。特に最近はもうコンテンツさえ作ればGoogleが拾ってくれる時代でもなくなっているし。時代は変わっている。</p>
<p>それでまぁ、それよりも今あるリアルの課題として、「オンラインコミュニケーションの難しさ」があるけれど、それを解決するものとして使えないかな、という話でまとまっている。</p>
<h2 id="イメージはSNSとSlackとかTeamsの間の子くらい"><a href="#%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AFSNS%E3%81%A8Slack%E3%81%A8%E3%81%8BTeams%E3%81%AE%E9%96%93%E3%81%AE%E5%AD%90%E3%81%8F%E3%82%89%E3%81%84">イメージはSNSとSlackとかTeamsの間の子くらい</a></h2>
<p>リモートワークでSlackとかTeamsとか使っていると思うけれど、なかなかみんな書き込まないよねとか、すぐ流れちゃうよね、とかいう話をしていて、本サービスの二次元チャットで、ある程度その問題を解決できるんじゃないか、と。</p>
<p>というのも、二次元チャットは言ってしまえば「すべてのレスがリプライ待ち」なので、「話題に遅れる」ということがないし、比較的のんびりしたコミュニケーションにも向いているからだ。このへんの話は、もうちょっと時間をかけてどこかで書きたい。</p>
<p>実際の機能的には、SNSや掲示板とチャットサービスの間くらいの位置づけになるかなぁと思う。開発ではTreeと呼んでいるスレッドをたてるのは掲示板チックだけれど、閲覧権限がチーム。</p>
<p><img src="https://hack-le.com/wp-content/uploads/2021/11/93d4769032ac42b08ee54391daf2e7bb-1.png" alt="" /></p>
<p>画像のとおり、「チームの選択」なるものがある。この場合は「qq」としたチームのみで閲覧できるツリー(スレッドみたいなもの)をポストすることになる。ちなみにqqは開発者チームのことで、publicを選ぶと全体公開になる。このへんの名前はわかりやすくしたほうがよさげ。</p>
<p>この機能を、どうつたえるのが一番わかりやすいだろうか。SlackやTeams感覚で使う掲示板。グループチャットしかないLINE。スペースしかないTwitter。そんな感じ?</p>
<p>なので、まだ画面にはフォローとかフォロワーの機能が残っちゃっているけれど、これは完全に撤廃する予定。</p>
<p>なお、まだテスト段階で肝心の「チーム作成機能」はまだ実装していなかったりする。現状、チームは開発者が直接登録する形だ。なので、普通にサインアップすると「全体公開」しか相変わらずできなったりする。</p>
<h2 id="地味なUXの改善"><a href="#%E5%9C%B0%E5%91%B3%E3%81%AAUX%E3%81%AE%E6%94%B9%E5%96%84">地味なUXの改善</a></h2>
<p>あとはとにかくUX改善しなきゃねっていうところで、本サービス最大の特徴である「二次元チャット」の操作性の向上も少しずつやっている。</p>
<p>友人がしれっと入れた「Ctrl(Cmd) + Enter」での投稿機能は、以前から「あればいいね」くらいの気持ちだったんだけれど、いざ使ってみたら相当便利で、やっぱりUXは実際に入れてみないとわからんなぁと思った。</p>
<p>他、SNSからチャットツール的な使い方を想定=スマホよりPCと割り切ったことで、Macのトラックパッド対応なども。このへんは主に友人が頑張って入れていた。僕はチーム周りの設計などを今メインでやっていて、フロントまわりはあまり絡んでいない。そろそろフロントも真面目にやらんとなぁ、とは思っているけれど中々。</p>
<h2 id="しつこく続ける"><a href="#%E3%81%97%E3%81%A4%E3%81%93%E3%81%8F%E7%B6%9A%E3%81%91%E3%82%8B">しつこく続ける</a></h2>
<p>ということで、しつこく開発を続けている。まぁこの開発自体が、僕の数少ない友人とのコミュニケーションになっている、というのも大いにあるかもしれない。</p>
tama
tag:crieit.net,2005:PublicArticle/17698
2021-10-05T17:05:54+09:00
2021-10-05T17:05:54+09:00
https://crieit.net/posts/Firebase-SSSAPI-Web
FirebaseとSSSAPIでプレスリリースを送ったサイトを記録できるWebサービスを作ってみた
<p>開発しているGoogleスプレッドシートのAPI化サービス「<a target="_blank" rel="nofollow noopener" href="https://sssapi.app">SSSAPI</a>」をβ版リリースしたときに、<br />
プレスリリースをいろんなメディアに送ってみてた。</p>
<p>せっかく調べてまとめたし、次も使う機会があるだろうと思ったので、<br />
Nuxt/Firebase/SSSAPIの構成でWebサービス化してみた。</p>
<p>プレスリリースを受け付けてるサイトを調べるのは大変なので、<br />
どこに送れるのかな〜と思った方は使ってみてもらえるとうれしいです(<em>´ω`</em>)</p>
<h3 id="作ったサービス"><a href="#%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9">作ったサービス</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://press-done.memory-lovers.com">https://press-done.memory-lovers.com</a></p>
<p>送付するプレスリリースごとに、どのサイトへ送ったかの状態管理ができます。<br />
それだけのシンプルなWebサービス。</p>
<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/b52d95a8-788f-5625-c536-4ecd6cc147b5.png" alt="スクリーンショット 2021-10-04 23.35.26.png" /></p>
<h3 id="システム構成"><a href="#%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%A7%8B%E6%88%90">システム構成</a></h3>
<p>基本構成はこんな感じ。</p>
<ul>
<li>フロントエンド: Nuxt+Buefy</li>
<li>認証: Firebase Authentication</li>
<li>ユーザデータ: Firestore</li>
<li>マスターデータ: <a target="_blank" rel="nofollow noopener" href="https://sssapi.app">SSSAPI</a></li>
</ul>
<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/d9f069c4-7d32-5ea8-aea5-91300fea7030.png" alt="スクリーンショット 2021-10-04 23.40.41.png" /></p>
<p>ユーザが更新しないマスターデータはSSSAPIを利用している感じ。</p>
<p>メディアサイトのデータをFirestoreに入れておく形もあるけど、<br />
Firebaseコンソールで追加や編集するより、<br />
スプレッドシートを更新するほうが楽なので、この形にしている。</p>
<p>スプレッドシートの中身はこんな感じ。</p>
<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/e130e233-915d-e105-0e75-48249f002a13.png" alt="スクリーンショット 2021-10-04 23.43.50.png" /></p>
<p>SSSAPIはこんなJSONを返してくれる。</p>
<pre><code class="json">[
{
"id": 1,
"サイト名": "TechCrunch Japan",
"サイトURL": "https://jp.techcrunch.com",
"送付方法": "メール",
"isActive": true
},
{
"id": 2,
"サイト名": "日経クロステック",
"サイトURL": "https://xtech.nikkei.com",
"送付方法": "メール",
"isActive": true
},
{
"id": 3,
"サイト名": "ITmedia",
"サイトURL": "https://www.itmedia.co.jp/",
"送付方法": "メール",
"isActive": true
},
]
</code></pre>
<p>※「行数をIDとして追加」オプションを使ってるので、idが自動で付与されています。</p>
<p>このスプレッドシートは登録依頼のGoogleフォームと連動しているので、<br />
追加依頼があったら内容を確認して<code>isActive</code>を<code>true</code>にすれば反映されます。</p>
<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/39ce3a05-cd7b-2ed8-81e1-af76025e6175.png" alt="スクリーンショット 2021-10-04 23.56.34.png" /></p>
<p>こういった構成は割と多く、本の貸し出し管理と備品管理とかでも使える。<br />
Webサービスからスプレッドシートを編集できないので、<br />
管理者権限とか不要なので、その分フロント側も楽に作れた(<em>´ω`</em>)</p>
<p>プレスリリースってどこに送れるのかな〜と思った方は、<br />
ぜひ使ってみてもらえるとうれしいです(<em>´ω`</em>)</p>
<p><a target="_blank" rel="nofollow noopener" href="https://press-done.memory-lovers.com">https://press-done.memory-lovers.com</a></p>
<h3 id="SSSAPIはβ版ユーザを募集しています!!"><a href="#SSSAPI%E3%81%AF%CE%B2%E7%89%88%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%92%E5%8B%9F%E9%9B%86%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%21%21">SSSAPIはβ版ユーザを募集しています!!</a></h3>
<p>β期間中はプレミアムプランの内容を無料で使えるのでお得!<br />
ぜひぜひ、この機会にお試しいただければ!</p>
<p>わからないところやこんなのあったらいいなぁ〜などあれば、<br />
Twitterやお問い合わせなどからお気軽にご連絡ください〜</p>
<p>GoogleスプレッドシートのAPI化サービス<br />
『<a target="_blank" rel="nofollow noopener" href="https://sssapi.app">SSSAPI</a>』<br />
Twitter: <a target="_blank" rel="nofollow noopener" href="https://twitter.com/sssapi_app">@sssapi_app</a></p>
<p><a target="_blank" rel="nofollow noopener" href="https://sssapi.app">https://sssapi.app</a></p>
<p>開発の励みや記事を書くモチベにもなるので、<br />
いいねやシェア、はてブなどしてもらえるとかなりよろこびます!!</p>
きらぷか@積読ハウマッチ/SSSAPIなど
tag:crieit.net,2005:PublicArticle/17671
2021-09-13T02:57:17+09:00
2021-09-13T02:57:17+09:00
https://crieit.net/posts/QnQ-613e3f7d5cc6d
QnQ開発日誌 チームで使う作業メモの共有的な使い方を考える
<p>開発っていうか、まぁこのままじゃ一生誰も使わないよね、ということで、どうしたもんかな、と話していた。</p>
<p>結論的には、チームで作業メモを残して共有するような用途に使えないかな、という話になっている。それに向けて、具体的な作業を明日から始めて、来週の連休には実証できるような状態にしたい。</p>
<h2 id="なんちゃってもくもく会"><a href="#%E3%81%AA%E3%82%93%E3%81%A1%E3%82%83%E3%81%A3%E3%81%A6%E3%82%82%E3%81%8F%E3%82%82%E3%81%8F%E4%BC%9A">なんちゃってもくもく会</a></h2>
<p>時間をかけて作ったWebサービスは、相変わらず僕の独り言か、あるいは友人との交換日記くらいにしか使われていない。</p>
<p>なんだけれど、アクセス解析を見ると、どうも10人くらいはそれなりに見にきてくれている人がいると思われる。個人ブログを購読しているような感じなんだろうか。不思議だ。まぁユーザー10人って、個人ブログにしてもあまり流行っていない規模だけどね……マンネリ化して久しい僕のブログのほうがよっぽど人が多い。</p>
<p>まぁでも、見てくれる人がいることは有り難い。が、書き込みまではいかないし、このまま続けても書き込まれる未来が見えないので、いい加減ちょっと方向性考えないとね、という話を友人としていた。</p>
<p>話しているうちに、ユースケースとして、チームで開発経過を残し、共有する用途はどうだろうか、という話になった。というのも、現在、僕と友人は「もくもく会」と称して、毎日に近い割合で、日々の作業をサービス上で共有しているのだ。ちょうど50回を迎えた。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/tree/Iv1lkmpJ6XbaGbqS493T">もくもく50 2021-09-12 | QnQ</a></p>
<p><img src="https://hack-le.com/wp-content/uploads/2021/09/1439859dbf44b2fc9ce7bde0b230b2b8.png" alt="" /></p>
<p>tamaは僕で、yuが友人なのだが、それぞれの枝に分かれて、自分の作業を書き残しているような感じ。で、時々相手の枝にレスしたりしている。</p>
<p>これを、チームの開発に使えないかな、というわけだ。</p>
<h2 id="作業報告、雑談、軽いコミュニケーション"><a href="#%E4%BD%9C%E6%A5%AD%E5%A0%B1%E5%91%8A%E3%80%81%E9%9B%91%E8%AB%87%E3%80%81%E8%BB%BD%E3%81%84%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">作業報告、雑談、軽いコミュニケーション</a></h2>
<p>このコンセプトは悪くないんじゃないか、と思っている。</p>
<p>リモートワークが盛んになって、よく言われる問題として、「雑談がなくなった」「寂しい」「他の人が何をしているのかわかりづらい」というのがある。</p>
<p>原理的には、SlackなりTeamsなりで個々人が自分の作業を報告しあえればいいんだけれど、SlackにせよTeamsにせよ、そういう用途を想定して作られたわけではなく、ちょっとやりづらい。</p>
<p>まぁやるとすれば、自分の作業用のスレッドを作って投稿していく、というスタイルが考えられるだろう。というか、昔職場でそんなようなことをしていたこともあった。</p>
<p>あれは悪くなかったんだが、他の人のスレッドって、なかなか見に行こうと思わないと見に行かないんだよね。その点、このサービスなら、特に意識せずとも相手の状況を把握できる。なにかエラーなどでハマっているようであれば、力になれることがあるかもしれないし、逆に助けてもらえるかもしれない。また、仲間のやっている仕事は、けっこう参考になるものだ。</p>
<p>ということで、リモートワークが盛んになり始めた今の時代に即したサービスだと考えられて、中々面白いんじゃないかと思っている。</p>
<p>まー、使ってもらう、というのが一番むずかしいんだけどさ。ただまぁ、目的が明確なら、誰かを誘ってやってみる、ということもできないことはないはずなので、そこはまぁ、頑張るしかない。</p>
<p>技術よりも広報が難しい!!</p>
tama
tag:crieit.net,2005:PublicArticle/17624
2021-08-29T17:21:16+09:00
2021-08-29T17:26:06+09:00
https://crieit.net/posts/Web-15-5
つくってるWebサービスのユーザ数が15倍になったときにやった5つのこと。
<p><a href="https://crieit.now.sh/upload_images/e1987b7820c75d7857fbfe4ca21013da612b3b60d79bd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e1987b7820c75d7857fbfe4ca21013da612b3b60d79bd.png?mw=700" alt="OGP_お知らせ (2).png" /></a></p>
<p>先日、<a target="_blank" rel="nofollow noopener" href="https://sssapi.app">開発中のサービス</a>のオープンβ版を公開したら、<strong>4日でユーザ数が15倍に</strong>。。<br />
想像以上の反響だったので、どんなことをやってたかをまとめてみました。</p>
<p>リリース後のプロモーションはいつも困っているので、、<br />
これから何かを作ろう、リリースしようとしている人の一助になれば。</p>
<p>※注意※<br />
・元のユーザ数が少ないのですごく増えた感あり。運要素が強めです。<br />
・実際のユーザ数やデータはちょっとはずかしいので有料にしてます<br />
(Crieitの有料記事機能を使ってみたかったって理由も)</p>
<h2 id="実際にやったこと"><a href="#%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">実際にやったこと</a></h2>
<ol>
<li>LPや事前登録サイトを公開</li>
<li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/organizations/admin-guild">運営者ギルド</a>でバグバッシュしてもらう</li>
<li>PR TIMES等でプレスリリースを公開&ツイートする</li>
<li>Zenn/Crieit/Qiita等で記事を公開&ツイートする</li>
<li>RTされやすそうな時間帯にセルフRTなどする</li>
</ol>
<h5 id="実際のやったときの流れ"><a href="#%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%82%84%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E6%B5%81%E3%82%8C">実際のやったときの流れ</a></h5>
<ul>
<li>7/6(火): 事前登録サイトの公開&PR TIMESで<a target="_blank" rel="nofollow noopener" href="https://prtimes.jp/main/html/rd/p/000000006.000056359.html">プレスリリース</a>を公開</li>
<li>7/10(土)-7/12(月): <a target="_blank" rel="nofollow noopener" href="https://qiita.com/organizations/admin-guild">運営者ギルド</a>でバグバッシュ</li>
<li>8/24(火): PR TIMESで<a target="_blank" rel="nofollow noopener" href="https://prtimes.jp/main/html/rd/p/000000007.000056359.html">プレスリリース</a>を公開
<ul>
<li>→ <a target="_blank" rel="nofollow noopener" href="https://digital-shift.jp/flash_news/FN210824_2">プレスを元にした記事</a>をデジタル シフト タイムズさまから公開</li>
<li>→ この記事がはてなブックマークのテクノロジーでホッテントリに!!</li>
<li>→ ホッテントリに入ったので、Discoverで表示(Google砲)!!</li>
<li>→ つられて、SSSAPI自体もホッテントリに!!</li>
</ul></li>
<li>8/25(水): Zennで記事を公開
<ul>
<li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/kira_puka/articles/f9496a6a847799">Firestore最高だけど、初期データとかマスタデータ管理がめんどくさいので、スプレッドシートをAPI化サービスを作ってみた</a></li>
<li>→ トレンド入りし、トップページに表示される!!</li>
</ul></li>
<li>8/26(木): Qiitaに記事を投稿
<ul>
<li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/b61f8cd682161afb55a9">GASでもできるけど、スプシをAPI化するサービスを作ってみた。そして、そのときハマったこと。 - Qiita</a></li>
<li>→ トレンド入りし、トップページに表示される!!</li>
</ul></li>
</ul>
<p>それぞれ記事を投稿したら、朝/昼/夜くらいでセルフRTなどしてました。</p>
<p>(フィードバックやいいね/RTで拡散で協力してくれた方、ほんとありがとうございます!!)</p>
<h3 id="1. LPや事前登録サイトを公開"><a href="#1.+LP%E3%82%84%E4%BA%8B%E5%89%8D%E7%99%BB%E9%8C%B2%E3%82%B5%E3%82%A4%E3%83%88%E3%82%92%E5%85%AC%E9%96%8B">1. LPや事前登録サイトを公開</a></h3>
<p>まずは、トップページのみの事前登録サイトを作って公開してました。<br />
事前登録の受付は、Googleフォームの簡易的なサイト。</p>
<p>事前登録のプレスリリースを打つためもありますが、<br />
<strong>サービス名を検索するとヒットするように、あらかじめ用意していました</strong>。</p>
<p>ツイートへの反応や登録者数なども、ウケそうかのどうかの判断材料に。</p>
<h3 id="2. 運営者ギルドでバグバッシュ"><a href="#2.+%E9%81%8B%E5%96%B6%E8%80%85%E3%82%AE%E3%83%AB%E3%83%89%E3%81%A7%E3%83%90%E3%82%B0%E3%83%90%E3%83%83%E3%82%B7%E3%83%A5">2. 運営者ギルドでバグバッシュ</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/organizations/admin-guild">運営者ギルド</a>は、Webサービス運営者が集まっているコミュニティ。<br />
すごい人ばかりで、Slack内も知見がすごいですが、<br />
その中のイベントの一つ、バグバッシュをしてもらいました。</p>
<p>バグバッシュは、「リリース前にみんなにさわってもらってバグを見つけよう!」<br />
という活動なのですが、バグだけでなく、どこがわかりにくい?なども聞けることも。</p>
<p>みんなそれぞれ運営しているので、いろんな視点のフィードバックが集まり、<br />
自分では気づけないポイントのコメントを多くもらえました。。!</p>
<p>そのフィードバックを踏まえ、改善&ブラッシュアップ。</p>
<h3 id="3. PR TIMES等でプレスリリースを投稿"><a href="#3.+PR+TIMES%E7%AD%89%E3%81%A7%E3%83%97%E3%83%AC%E3%82%B9%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%82%92%E6%8A%95%E7%A8%BF">3. PR TIMES等でプレスリリースを投稿</a></h3>
<p>PR TIMESにプレスリリースを投稿すると、<br />
各種メディアに掲載され、露出が増えるので、活用しています。</p>
<p>配信のタイミングは、以下の記事を参考にしていて、<br />
火曜日の朝10時10分にしました。<br />
・<a target="_blank" rel="nofollow noopener" href="https://prtimes.jp/magazine/time-to-pressrelease/">プレスリリースの配信タイミングは?曜日・時間を戦略的に決定して効果を最大化させよう</a></p>
<p>また、会社設立日から2年は無料枠がもらえる、<br />
スタートアップチャレンジを活用しています。</p>
<p>・<a target="_blank" rel="nofollow noopener" href="https://prtimes.jp/startup_free/">スタートアップチャレンジ|PR TIMESプレスリリース無料配信プログラム</a></p>
<h3 id="4. Zenn/Crieit/Qiita等で記事を投稿"><a href="#4.+Zenn%2FCrieit%2FQiita%E7%AD%89%E3%81%A7%E8%A8%98%E4%BA%8B%E3%82%92%E6%8A%95%E7%A8%BF">4. Zenn/Crieit/Qiita等で記事を投稿</a></h3>
<p>なにか作ったら各種サイトに記事を書いてます。<br />
今回は<a target="_blank" rel="nofollow noopener" href="https://zenn.dev/">Zenn</a>と<a href="https://crieit.net/">Crieit</a>と<a target="_blank" rel="nofollow noopener" href="https://qiita.com/">Qiita</a>。<br />
(Zennはずっと投稿したかったけど、ネタがなかったけど、初Zennできてよかった(<em>´ω`</em>))</p>
<p>それぞれトレンドに掲載されると露出が増えるのもあるけど、<br />
LPやトップページには書ききれないことを記事で補足している感じ。</p>
<p>今回は、以下のテーマでそれぞれ書きました。<br />
・Zenn ... <strong>なんで作ろうと思ったかの理由と経緯</strong><br />
・Qiita ... <strong>システム構成や技術要素</strong><br />
・Crieit ... <strong>PRのためになにをしたか</strong>(この記事)</p>
<p>特に、Crieit独自の機能である、カノニカルが設定できるのが好きで、<br />
Zennなどに投稿するときは合わせてクロス投稿しています。</p>
<p>いいね等が集計時に5〜10くらいつくとトレンドに乗れるっぽいので、<br />
記事書いて、ツイートして、RTして、たくさん祈ります🙏</p>
<p>Qiitaは毎日5時/17時に更新されるので、<br />
集計対象の時間が長くなるよう、その時間くらいに投稿がよさそうです。</p>
<h3 id="5. RTされやすそうな時間帯にセルフRT"><a href="#5.+RT%E3%81%95%E3%82%8C%E3%82%84%E3%81%99%E3%81%9D%E3%81%86%E3%81%AA%E6%99%82%E9%96%93%E5%B8%AF%E3%81%AB%E3%82%BB%E3%83%AB%E3%83%95RT">5. RTされやすそうな時間帯にセルフRT</a></h3>
<p>プレスリリースや記事を投稿したときもそうですが、<br />
Twitterで伸びる曜日と時間帯というツイートを見てから、<br />
なるべくこのときに投稿するように意識しています。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【データから見るTwitterのツイートが伸びる曜日と時間帯🔥】◼︎平日・5:00、11:00、15:00、20:00◼︎休日・8:00、12:00、14:00、16:00→多くの方が通勤時間帯や夜間がユーザー数が多い為、良いと考えているが、実はタイムラインの流速が早くツイートが流れてしまう可能性が高い。<a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/%E3%83%87%E3%82%B8%E3%83%97%E3%83%AD?src=hash&ref_src=twsrc%5Etfw">#デジプロ</a> <a target="_blank" rel="nofollow noopener" href="https://t.co/JHIT9Nv6QK">pic.twitter.com/JHIT9Nv6QK</a></p>— デジプロ🔥@デジタル広告のプロを育てる学習サービス (@digimapro) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/digimapro/status/1161375718611140608?ref_src=twsrc%5Etfw">August 13, 2019</a></blockquote>
<p>◼︎<strong>平日</strong> ... 5:00、11:00、15:00、20:00<br />
◼︎<strong>休日</strong> ... 8:00、12:00、14:00、16:00</p>
<p>一日に何回かあるので、他の時間帯にセルフRTを活用。</p>
<p>セルフRTは結構抵抗があったけど、<br />
昔、とあるマンガ家さんが</p>
<blockquote>
<p>ツイートしただけではダメ。<br />
何度もセルフRTしない届かないし、見てもらえないよ。</p>
</blockquote>
<p>的なことをいってたツイートを見てから、<br />
見てほしいツイートはなるべくRTするようがんばってる。<br />
(イラスト系だと昼あげ/夜あげとかみるので同じ感じ。)</p>
<p>運要素多いけど、やさしいフォロワーさんが<br />
いいね/RTで拡散してくれるので、ほんとありがたすぎる。。</p>
<h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2>
<p>こんな感じで、なるべく露出が増えるよう、<br />
サービスを知ってもらえるような活動をしていました。</p>
<ol>
<li>LPや事前登録サイトを公開</li>
<li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/organizations/admin-guild">運営者ギルド</a>でバグバッシュしてもらう</li>
<li>PR TIMES等でプレスリリースを公開&ツイートする</li>
<li>Zenn/Crieit/Qiita等で記事を公開&ツイートする</li>
<li>RTされやすそうな時間帯にセルフRTなどする</li>
</ol>
<p>トレンド→はてブのホッテントリ→Google砲、<br />
などのコンボが決まると広く拡散しますが、<br />
0いいねなどよくあるので、いつも運ゲー。。</p>
<p>地道にサービスを改善しつつ、<br />
記事などのコンテンツを増やしつつ、<br />
最後は天にまかせて、がんばっています!</p>
<p>リリース後のプロモーションはいつも困っているので、<br />
これから何かを作ろうとしている人の参考になれたらうれしいです😊</p>
<h3 id="SSSAPIでは、β版ユーザを募集中です!"><a href="#SSSAPI%E3%81%A7%E3%81%AF%E3%80%81%CE%B2%E7%89%88%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%92%E5%8B%9F%E9%9B%86%E4%B8%AD%E3%81%A7%E3%81%99%EF%BC%81">SSSAPIでは、β版ユーザを募集中です!</a></h3>
<p>β期間中はプレミアムプランの内容を無料で使えるのでお得!<br />
ぜひぜひ、この機会にお試しいただければ〜!</p>
<p>GoogleスプレッドシートのAPI化サービス<br />
『<a target="_blank" rel="nofollow noopener" href="https://sssapi.app">SSSAPI</a>』<br />
URL: <a target="_blank" rel="nofollow noopener" href="https://sssapi.app">https://sssapi.app</a><br />
Twitter: <a target="_blank" rel="nofollow noopener" href="https://twitter.com/sssapi_app">@sssapi_app</a></p>
<p><a href="https://crieit.now.sh/upload_images/661a1f43523cb2f246e88ee6362c26f8612b3d4166323.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/661a1f43523cb2f246e88ee6362c26f8612b3d4166323.png?mw=700" style="max-width: 500px;" /></a></p>
<p>記事を書く励みにもなるので、<br />
よかったら、いいねやシェア、はてブなどもよろしくおねがいします!</p>
<p><a target="_blank" rel="nofollow noopener" href="https://b.hatena.ne.jp/entry/s/crieit.net/posts/Web-15-5">はてなブックマークはこちらから</a></p>
<p><strong>※以下、有料コンテンツです※</strong></p>
<p>以下のデータを公開しています。<br />
ちょっとはずかしいので、おもしろいと思ってくれた方は、<br />
コーヒー一杯差し入れるくらいの気持ちで見てもらえれば〜</p>
<ul>
<li>Google AnaliticsのPV数/流入元</li>
<li>PR TIMESの統計情報</li>
<li>SSSAPIの登録者数とAPI作成数</li>
<li>(おまけ) Twitter広告を試してみた結果</li>
</ul>
きらぷか@積読ハウマッチ/SSSAPIなど
tag:crieit.net,2005:PublicArticle/17614
2021-08-25T05:47:03+09:00
2021-08-25T05:47:03+09:00
https://crieit.net/posts/Firestore-API
Firestore最高だけど、初期データとかマスタデータ管理がめんどくさいので、スプレッドシートをAPI化サービスを作ってみた
<p>開発しているGoogleスプレッドシートのAPI化サービス「<a target="_blank" rel="nofollow noopener" href="https://sssapi.app">SSSAPI</a>」。<br />
無事にオープンβ版を公開できたので、なんで作ろうと思ったかを書いてみた。</p>
<p><a href="https://crieit.now.sh/upload_images/7622e92a81d522c24c95246b0656b8e3612559a688a84.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7622e92a81d522c24c95246b0656b8e3612559a688a84.png?mw=700" style="max-width: 600px;"></a></img><br />
<a target="_blank" rel="nofollow noopener" href="http://sssapi.app">http://sssapi.app</a></p>
<h2 id="なぜ作ろうと思ったか"><a href="#%E3%81%AA%E3%81%9C%E4%BD%9C%E3%82%8D%E3%81%86%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%E3%81%8B">なぜ作ろうと思ったか</a></h2>
<p>個人開発が好きで、いろんなものをちょこちょこ作ってる。<br />
今は、Nuxt.jsとFirebaseがお気に入りで、<br />
小さなものを含めると20サービスくらい作ったと思う。</p>
<p>ちょっとしたものを作ることも多く、<br />
「<strong>もっと楽に作ることはできないかなぁ?</strong>」<br />
といろいろ考えたりしていた。</p>
<p>その時同時に考えていたのが、<a target="_blank" rel="nofollow noopener" href="https://umaiku.app">ゲーム攻略のサービス</a>。<br />
マスタデータが多く、更新も早いので、どうしようかなと。</p>
<p>とりあえず、初期データが必要なので、<br />
スプレッドシートにまとめていた。</p>
<p>データを集め終わって、いざつくろうとしたときに、<br />
「<strong>このままJSON APIにできれば楽なのにな〜</strong>」<br />
というのが最初だった。</p>
<h2 id="最初はJSONファイル"><a href="#%E6%9C%80%E5%88%9D%E3%81%AFJSON%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB">最初はJSONファイル</a></h2>
<p>ゲームの攻略サービスを作っている途中だったので、<br />
まずは、スプレッドシートAPIでJSON化して、<br />
JSONファイルをソースに含める形で開発。</p>
<p>これだけでも割とよく、<br />
とりあえずJSONファイルで開発するのは良い感じだった。</p>
<p>データの項目が足りなくても、<br />
スプレッドシートなら列を追加するだけなので、<br />
<strong>データ構造を検討している初期はスムーズに進んだ</strong>。</p>
<p>ただ、JSONファイルをインポートしてるので、<br />
<strong>ビルドサイズは大きくなる</strong>し、<br />
<strong>データを更新したいときはビルドしないといけない</strong>ので、<br />
めんどくさいな思うようになり、API化は必要だなと作りはじめた。</p>
<h2 id="Firestoreで初期データをめんどくさい"><a href="#Firestore%E3%81%A7%E5%88%9D%E6%9C%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%82%81%E3%82%93%E3%81%A9%E3%81%8F%E3%81%95%E3%81%84">Firestoreで初期データをめんどくさい</a></h2>
<p>今まで作ってきたものを振り返ると、<br />
割とこういうことが多い感じだった。</p>
<p>過去に作ったものでも、カテゴリやお知らせなど、<br />
こちらが用意するデータは、JSONファイルで用意していたり、<br />
<strong>JSONファイルの内容をFirestoreに登録するスクリプト</strong>を書いていた。</p>
<p>Firestoreは便利なんだけど、<br />
<strong>管理画面は自分で用意しないといけない</strong>ので、<br />
マスターデータを扱いたいときは、めんどうな部分があった。</p>
<p>1つ項目を追加するのにも、JSONファイル&ビルドだったり、<br />
追加用のスクリプトを書かないといけない。。</p>
<p><strong>SSSAPIであれば、スプレッドシートを管理画面にでき、<br />
そのままAPI化できるので、かなり楽になるな〜と。</strong></p>
<p>実際、楽になって、<a href="https://crieit.net">crieit</a>の<a href="https://crieit.net/boards/web1week-202107/CoCo">web1week</a>の企画へ<br />
参加したときに作ったWebサービスは1~2日で開発できた。</p>
<h2 id="他のじゃダメだった?"><a href="#%E4%BB%96%E3%81%AE%E3%81%98%E3%82%83%E3%83%80%E3%83%A1%E3%81%A0%E3%81%A3%E3%81%9F%EF%BC%9F">他のじゃダメだった?</a></h2>
<p>いざ作るとなると、時間が必要なので、<br />
既存のものはないかな〜と見てみた。</p>
<p>見てみたのは、GAS、ヘッドレスCMS、競合サービスの3種類。</p>
<h4 id="GASは?"><a href="#GAS%E3%81%AF%EF%BC%9F">GASは?</a></h4>
<p>一番よく見るのはこれかなと思う。<br />
Google Action ScriptでWebサービスとして公開するパターン。</p>
<p>記事も多くコードもあるので、便利で昔使っていた。</p>
<p>ただ、<strong>シートごとにGASの設定が必要だったり、<br />
どれが設定したスプレッドシートか忘れてしまう</strong>ので、<br />
一元管理ができればな〜と思ったりする。</p>
<p>SSSAPIであれば、<strong>毎シートにGASを設定する必要はない</strong>し、<br />
登録してあるスプレッドシート=API化しているなので、<br />
<strong>一元管理も簡単にできる</strong>ようにした。</p>
<h3 id="ヘッドレスCMSは?"><a href="#%E3%83%98%E3%83%83%E3%83%89%E3%83%AC%E3%82%B9CMS%E3%81%AF%EF%BC%9F">ヘッドレスCMSは?</a></h3>
<p>次によくみるのはヘッドレスCMSかなと思う。<br />
スキーマも柔軟に設定できて、管理画面もリッチ。</p>
<p>ただ、内容がリッチすぎたり、<br />
<strong>個人開発だとお高めの価格設定なので、手が出せず。。</strong></p>
<p>「多くのサービスを楽に作りたい!!」と思うと、<br />
無料枠の制限では心もとないなと。。<br />
また、<strong>アクセス制限などは有料プラン</strong>ぽいので、断念。</p>
<p>SSSAPIでは、機能は限定的だけど、<br />
<strong>個人開発でも使いやすい価格帯</strong>になるようにがんばってる。<br />
無料のプランでもドメイン制限を使えるようにしている。</p>
<h3 id="競合サービスは?"><a href="#%E7%AB%B6%E5%90%88%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AF%EF%BC%9F">競合サービスは?</a></h3>
<p>今まで聞いたことがなかったけど、調べてみたら、<br />
6つくらい競合のサービスがあった。</p>
<p>もちろん、ヘッドレスCMSよりも安めだけど、<br />
<strong>Googleドライブやスプレッドシートへの全権限を許可しないといけない。。</strong><br />
もしくは、全員がアクセスできるように共有設定を変更する必要がある。</p>
<p>Googleドライブやスプレッドシートへの全権限を許可は、<br />
割とこれが強くて、<strong>個人情報や機密情報を入れているアカウントだと使えない</strong>。</p>
<p>API化したいスプレッドシートのデータ自体も財産なので、<br />
<strong>オープンにはしたくない</strong>ときも多い。</p>
<p>SSSAPIでは、権限を共有するのではなく、<br />
システムアカウントを共有設定に追加してもらう形にし、<br />
<strong>共有設定されているシートのみ参照できる方法</strong>にしている。</p>
<p>すこし手間ではあるけど、安心・安全のため。</p>
<p>ドメイン制限やアクセストークンによる認証も用意しているので、<br />
<strong>APIのURLがわかっていても、アクセスできない仕組み</strong>を用意している。</p>
<h2 id="使ってみてどうだったか?"><a href="#%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%A6%E3%81%A9%E3%81%86%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%8B%EF%BC%9F">使ってみてどうだったか?</a></h2>
<p>利便性・価格・セキュリティの面から、<br />
作ったほうがいいなぁと思って、開発を進めてみた。</p>
<p>使っているのが、マスターデータが多いものに偏っているけど、</p>
<ul>
<li><strong>スプシが管理画面になる</strong></li>
<li><strong>ビルドしないで更新できる</strong></li>
<li><strong>ドメイン制限できるので守れる</strong></li>
</ul>
<p>と、かなり便利に。</p>
<p>他のサービスのお知らせやリリースノートなども、<br />
順次、SSSAPIに置き換えている。</p>
<p>ユーザが作成するデータは、今までどおりFirestoreを使っている感じだけど、<br />
プロトタイプ開発のときやテストデータ作成なんかでも活躍してるので、<br />
<strong>最初に思っていた「ちょっとしたものを早く楽に作れる」ようになった</strong>気がする。</p>
<p>スプレッドシートで管理するのつらいな。。という規模になってきたら、<br />
<strong>JSON APIの結果をFirestoreに突っ込めばよい</strong>のもいい。</p>
<p>β版なので、まだまだ足りないところはあるけど、<br />
ユーザさんからのフィードバックとドックフーディングをして、<br />
よりよいものにしていければと思う。</p>
<h2 id="SSSAPIでは、β版ユーザを募集中です!"><a href="#SSSAPI%E3%81%A7%E3%81%AF%E3%80%81%CE%B2%E7%89%88%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%92%E5%8B%9F%E9%9B%86%E4%B8%AD%E3%81%A7%E3%81%99%EF%BC%81">SSSAPIでは、β版ユーザを募集中です!</a></h2>
<p>β期間中はプレミアムプランの内容を無料で使えるのでお得!<br />
ぜひぜひ、この機会にお試しいただければ〜!</p>
<p>GoogleスプレッドシートのAPI化サービス<br />
『SSSAPI』<br />
Twitter: <a target="_blank" rel="nofollow noopener" href="https://twitter.com/sssapi_app">@sssapi_app</a></p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">🌟🌟オープンβ版の公開開始🌟🌟フィルタリングやページングなど機能を強化し、より便利になりました😊β版はプレミアムプランの内容を無料で利用できます🙌ぜひ、この機会にお試しください‼️‼️GoogleスプレッドシートのAPI化サービス<a target="_blank" rel="nofollow noopener" href="https://t.co/fKUGVFeQR7">https://t.co/fKUGVFeQR7</a><a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/%E6%8B%A1%E6%95%A3%E5%B8%8C%E6%9C%9BRT%E5%8D%94%E5%8A%9B%E3%81%8A%E9%A1%98%E3%81%84%E8%87%B4%E3%81%97%E3%81%BE%E3%81%99?src=hash&ref_src=twsrc%5Etfw">#拡散希望RT協力お願い致します</a> <a target="_blank" rel="nofollow noopener" href="https://t.co/O2rjs35BZD">pic.twitter.com/O2rjs35BZD</a></p>— 【公式】SSSAPI / GoogleスプレッドシートのAPI化サービス (@sssapi_app) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/sssapi_app/status/1429986819047792662?ref_src=twsrc%5Etfw">August 24, 2021</a></blockquote>
<p><a target="_blank" rel="nofollow noopener" href="http://sssapi.app">http://sssapi.app</a><br />
<a href="https://crieit.now.sh/upload_images/7622e92a81d522c24c95246b0656b8e3612559a688a84.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7622e92a81d522c24c95246b0656b8e3612559a688a84.png?mw=700" style="max-width: 600px;"></a></img></p>
きらぷか@積読ハウマッチ/SSSAPIなど
tag:crieit.net,2005:PublicArticle/17540
2021-07-26T02:59:19+09:00
2021-07-26T02:59:19+09:00
https://crieit.net/posts/QnQ-Web
QnQ開発日誌 開発したWebサービスは俺の日記帳になった
<p>こんにちは。二次元掲示板、「<a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/">QnQ</a>」の開発日誌でございます。</p>
<p>前回の記事「<a target="_blank" rel="nofollow noopener" href="https://hack-le.com/qnq-1/">開発中のWebサービスは友人との交換日記と化した – 或る阿呆の記</a>」では友人との交換日記と言ったが、最近は友人も忙しいのか書き込み頻度がめっきり減ってしまい、最近は書き込みの多分9割くらいが僕の独り言と思われ、交換日記どころかもはや「俺の日記帳」みたいになってしまった。まぁTwitterのタイムラインを汚さずに、いいたいことをネットの虚空に向かってペラペラとしゃべっているとでも言えばよいだろうか。</p>
<p>長らくそんな状態だったのだが、本当に「みんなの日記帳」的な方向に開発が進みそうだ。</p>
<h2 id="俺の日記帳"><a href="#%E4%BF%BA%E3%81%AE%E6%97%A5%E8%A8%98%E5%B8%B3">俺の日記帳</a></h2>
<p>ここまでに大きな変化もあり、発起人である友人は元々の目論見が外れたということで、ユースケースに悩んでいるようだった。まぁ悩んでいるのは、僕が散々「このサービスは結局なんなんだ」とつっついたせいもあるかもしれない。</p>
<p>というと肝心なところを人任せかという感じだが、それは彼が発起人でありプロジェクトでいえばリーダーに相当するからであって、別に責任を押し付けているわけではない。実際、僕も僕なりにサービスの可能性は模索していて、冒頭に書いたとおりもはや書き込みの9割……多分言い過ぎじゃなくそれくらいが僕の独り言みたいな状態になっているほどだ。</p>
<p>そして僕の現在における結論、というよりは現状が、「俺の日記帳」なのである。</p>
<p>具体的には、普段の開発や勉強の軌跡を綴ったり、YouTubeでやっているアニメ美味しんぼの実況をしたり、気になるニュースについて徒然と語ったり、といった具合である。</p>
<ul>
<li><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/tree/DTsVdnxa7XesE64Oscq0">もくもく20 2021-07-25 | QnQ</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/tree/FXvPhhK2edRumLPolyxD">美味しんぼ 84話 食は三代? Food is 3 generations? | QnQ</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/tree/eV4TJFozsys8J2vReX89">京都市ってヤバいの?2 | QnQ</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/tree/1nMj6k4oYCWgvsdVBf2D">小山田圭吾を種火にして、キャンセルカルチャーの猛威が日本を襲う | QnQ</a></li>
</ul>
<p>まぁ正直、<strong>Twitterのタイムラインを汚さずに好き勝手言えていいな、程度の感じ</strong>である。ここから記事化したのもあるので、まったくもって全部無駄というわけではない。</p>
<h2 id="二次元掲示板の使い道"><a href="#%E4%BA%8C%E6%AC%A1%E5%85%83%E6%8E%B2%E7%A4%BA%E6%9D%BF%E3%81%AE%E4%BD%BF%E3%81%84%E9%81%93">二次元掲示板の使い道</a></h2>
<p><strong>現状のUXから、このサービスの本質を一言で言えば、「二次元掲示板」になるだろう</strong>。時系列、あるいは人気順などで書き込みを並べる通常の掲示板と違って、このサービスは書き込みの流れを二次元的に表現している。</p>
<p>個人的にはこのUIだけで面白いものだと思うし、本当を言えばいろいろな人たちの雑談や議論に使われてほしいと思う。<strong>二次元掲示板は、常に文脈が強烈に意識されるため、単発の言いっぱなしになりづらいのである</strong>。これはTwitterなどで実りのない応酬にしんどみを感じている人たちなんかには特に有効だと思われる。</p>
<p>ただまぁ、そのためには人を集める必要があるのだがそれも難しく、結局ソロユースでの使い道ばかりになってしまった、というのが実際のところだ。これはこれで個人的には可能性があるものだとは思ってはいるので、とりあえず当面はソロでぼちぼちやっていくつもりだ。</p>
<p>と、いう決意を固めていたわけではなかったのだが、今日の話し合いでもまずはソロで地道に使っていくのが現実的かもね、という話になってしまったので、<strong>晴れてチームとしても方向性が「俺の日記帳」ならぬ「みんなの日記帳」サービスになってしまったかもしれない</strong>。</p>
<p>僕もそうするより他ないんじゃないの、なんて言いながら、正直言うと本当にそれでいいのかなぁ、とか思ったりする気持ちはないでもない。かといって他にアイディアがあるわけでもない。</p>
<p>サービスを使ってもらうってのは難しいなぁなんて思いながら、つくづくTwitterとかnoteはすげぇなぁと、感心するばかりだ。</p>
tama
tag:crieit.net,2005:PublicArticle/17134
2021-05-16T18:36:44+09:00
2021-05-16T18:36:44+09:00
https://crieit.net/posts/Web-60a0e7acad13c
開発中のWebサービスは友人との交換日記と化した
<p>友人が発起人になって、一緒に開発したWebサービスがある。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/">QnQ</a></p>
<p>これはまぁ、一言で言うと二次元チャットみたいな感じ。二次元チャットってなにそれ意味分かんないと思われるが、Twitterのツイートツリーが分岐する様子が可視化されたもの、といえば少しイメージがわくだろうか。たとえば以下のような感じだ。</p>
<h2 id="二次元チャット"><a href="#%E4%BA%8C%E6%AC%A1%E5%85%83%E3%83%81%E3%83%A3%E3%83%83%E3%83%88">二次元チャット</a></h2>
<p><img src="https://hack-le.com/wp-content/uploads/2021/05/18867459e909fafc2ca4c2ec36c0ab4d.png" alt="" /></p>
<p><a target="_blank" rel="nofollow noopener" href="https://qnqtree.com/tree/PMwn4zOY5yLTm6itVbHz">ブログとnoteの使い分け | QnQ</a></p>
<p>僕がnoteを本格的に書き始めたのはここ10日ばかりのことだが、もともとブログをやっていた僕は、その使い分けをどうしたものかと考えていた。で、それについて考えた軌跡である。僕の考えがツリー上に展開されているのがわかるだろうか。</p>
<p>これは僕の独り言状態だが、ログインしていれば誰でもコメントをつけることが可能だ(上記のURLについては、既にクローズしているのでコメントはつけられない)。で、見切れているが友人もコメントしてくれている。</p>
<p>多分今までにないフレームワークで、けっこう面白いと思う。</p>
<p>ちなみに、当初かなり意識高い系で売ろうとしていた。友人がnoteに公開記事を書いている。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://note.com/shigeta3732/n/n1868925d3f8f">質問に質問で返されるドM向けQ&Qサービスを公開|adnyer|note</a></p>
<p>ちなみに僕も自分のブログに紹介記事を書いた。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://hack-le.com/qnq/">質問に質問で返されるドM向けQ&Qサービス、QnQを公開・開発中です – 或る阿呆の記</a></p>
<p>タイトルは似ているが、内容は僕と友人の性格的な違いがけっこう出ている。</p>
<p>さて、このサービスだが、公開して半年ほど経過するものの、たいへんなことに現在定着したユーザーは0である。マジで。使ってくれた人もいるが、定着した人はいなかった。</p>
<p>その理由については色々思うところありつつ、せっかく作ったので僕と友人は使っている。その結果、長い時間をかけて作られたこのサービスは現在、僕と友人の交換日記状サービスになっている。交換日記ならまだマシで、僕の独り言コーナーになっていることもよくある。</p>
<p>それでも開発を続けているのは、実際面白いサービスだと思っているのと、まぁ数少ない友人との繋がりだから、みたいなのもある。後はまぁ、自分でサービスを開発して運用しています、というのは今後転職する時にも使えるだろう、というのもある(今の職場にはそれなりに満足しているので、転職予定はない)。</p>
<p>とはいえ、さすがに僕と友人の交換日記状態が延々と続くのは余りにも悲しいし虚しい。使ってもらえないのはサービスとしての魅力がないからなんだが、僕にはどうしても本質的に面白さのあるサービスだと思えてならない。自分の子供だから可愛く感じるんだと言われればそうかもしれないんだが……。</p>
<p>どうにも諦めるには惜しい気がするので、もうちょっとちゃんと作り直し、都度宣伝もしていきたいと思っている。</p>
<p>noteは始めたばかりだが、SNSとして非常に参考になるところがあるので、色々考えて反映し、なんとか使ってもらえるような、魅力あるサービスにしていきたい。定期的に開発日誌をつけていくつもりだ。がんばろう。</p>
tama
tag:crieit.net,2005:PublicArticle/16845
2021-04-14T20:37:19+09:00
2021-04-14T20:37:19+09:00
https://crieit.net/posts/SNS-Ammot
制限の少ない自由なSNS ~Ammot~
<h1 id="初めに"><a href="#%E5%88%9D%E3%82%81%E3%81%AB">初めに</a></h1>
<p>この度<a target="_blank" rel="nofollow noopener" href="https://ammot.net/">Ammot</a>というwebアプリを開発しました。<br />
「制限の少ない自由な投稿を」がコンセプトで文字数が6000字まで、画像・動画・PDF・音声は同時に10個まで投稿可能です。<br />
「ツイッターは文字数制限がきつい、ただfacebookは実名制だしデザインがごちゃごちゃでいや」<br />
という声を聴いたので作ってみました。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://ammot.net/">https://ammot.net/</a></p>
<p>qiitaのほうでも宣伝したのでよかったら見てください(ちょい違う内容です。)<br />
<a target="_blank" rel="nofollow noopener" href="https://qiita.com/UTOG/items/d5e6194aaa31b54e97c9">https://qiita.com/UTOG/items/d5e6194aaa31b54e97c9</a></p>
<h1 id="どんなサービスか"><a href="#%E3%81%A9%E3%82%93%E3%81%AA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%8B">どんなサービスか</a></h1>
<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/48b63235-f2b6-ac69-bc72-8c61cd41d877.png" alt="453789.png" /></p>
<p>↑これがログイン後のトップです。フォローしたユーザーの投稿がHOMEに流れて、<br />
サイドバーにはおすすめの投稿と現在人気のタグを表示しています。</p>
<p>文字数制限が6000字まで、画像・動画・PDF・音声は同時に10個まで投稿可能です。</p>
<p>先ほどサイドバーにおすすめを表示していると書きましたが<br />
実はサイドバーはおすすめ機能などなくランダムで表示してるだけです。。。<br />
おすすめ機能(レコメンド)を実装できなかったというのもありますが、僕自身レコメンド機能が結構嫌いなんですよね。同じ、似たようなものばかり出てきて飽きてきますしたまには普段と全く違うものを見たい時もあるでしょう。<br />
だからタイムライン(home)には好きな投稿が流れるようになっていてサイドバーは完全ランダムにしました。</p>
<h3 id="ツイッターのいやなとこ"><a href="#%E3%83%84%E3%82%A4%E3%83%83%E3%82%BF%E3%83%BC%E3%81%AE%E3%81%84%E3%82%84%E3%81%AA%E3%81%A8%E3%81%93">ツイッターのいやなとこ</a></h3>
<p>文字数制限<br />
編集ができない(個人的にめちゃ嫌)</p>
<h3 id="facebookのいやなとこ"><a href="#facebook%E3%81%AE%E3%81%84%E3%82%84%E3%81%AA%E3%81%A8%E3%81%93">facebookのいやなとこ</a></h3>
<p>制限はないがデザインがぐちゃぐちゃ<br />
実名制はなんかいやだ</p>
<p>この二つSNSの問題を解決するのがAmmotです。</p>
<h1 id="工夫した点"><a href="#%E5%B7%A5%E5%A4%AB%E3%81%97%E3%81%9F%E7%82%B9">工夫した点</a></h1>
<h4 id="無料プランにこだわった"><a href="#%E7%84%A1%E6%96%99%E3%83%97%E3%83%A9%E3%83%B3%E3%81%AB%E3%81%93%E3%81%A0%E3%82%8F%E3%81%A3%E3%81%9F">無料プランにこだわった</a></h4>
<p>こういうものはバズらない限り、すぐには成功しません。使用者が全くいなくても1年は公開しようと思います。<br />
でも使用者がいないのに月数百円も取られるの馬鹿馬鹿しいじゃないですか。だからドメイン以外はすべて無料です。<br />
ただherokuの無料プランだとドメインを設定できないのでCloudflareを使い設定しました。</p>
<p>参考記事:<br />
<a target="_blank" rel="nofollow noopener" href="https://qiita.com/serinuntius/items/f7f08b2221f5ad068f5d">https://qiita.com/serinuntius/items/f7f08b2221f5ad068f5d</a></p>
<p>しかし、やはりSNSは速度が非常に重要なので少しだけ批判を受けました。自分はもう少しユーザーと投稿が増えてきたら有料のサーバーにしようと思います。</p>
<h4 id="デザインとUIにこだわった(つもり)"><a href="#%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%A8UI%E3%81%AB%E3%81%93%E3%81%A0%E3%82%8F%E3%81%A3%E3%81%9F%EF%BC%88%E3%81%A4%E3%82%82%E3%82%8A%EF%BC%89">デザインとUIにこだわった(つもり)</a></h4>
<p>フィットスクロール?だったり投稿画面のポップアップだったり<br />
今まで使ってこなかった手法を使ってみました。<br />
自己満になってるかもしれない</p>
<p>ちなみにデザインを参考にしたサイトは<a target="_blank" rel="nofollow noopener" href="https://www.tumblr.com/">tumblr</a>です。<br />
比べればまぁまぁ似てると思います。</p>
<h4 id="機能性"><a href="#%E6%A9%9F%E8%83%BD%E6%80%A7">機能性</a></h4>
<p>最初にも書きましたが画像・動画・PDF・音声の投稿とプレビュー機能を実装しました。<br />
これにはいろんな記事がありましたが</p>
<p>まともに動きかつ一番簡単でコードもシンプルなこの記事を参考にするのをお勧めします。<br />
<a target="_blank" rel="nofollow noopener" href="https://qiita.com/0thefool/items/5af0f17f0075e7e0e013">https://qiita.com/0thefool/items/5af0f17f0075e7e0e013</a></p>
<h4 id="マークダウン"><a href="#%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%80%E3%82%A6%E3%83%B3">マークダウン</a></h4>
<p>他SNSとの差別化も含めマークダウンに対応しました。<br />
文字の大きさやフォント?も自由に変えれます。</p>
<h1 id="使用した技術"><a href="#%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%8A%80%E8%A1%93">使用した技術</a></h1>
<p>rails6<br />
ruby2.7<br />
postgresql<br />
heroku free<br />
aws s3</p>
<pre><code>gem 'ridgepole'
gem 'slim-rails'
gem 'html2slim'
gem 'pry-rails'
gem 'devise'
gem 'kaminari'
gem 'activeadmin'
gem 'rack-attack'
gem 'rails-i18n'
gem 'devise-i18n'
gem 'devise-i18n-views'
gem 'carrierwave'
gem 'rmagick'
gem 'rinku'
gem 'fog-aws'
gem 'dotenv-rails'
gem 'omniauth-google-oauth2'
gem 'omniauth-rails_csrf_protection'
gem 'redcarpet'
gem "rouge"
gem 'redis-rails'
#一部抜いてます
</code></pre>
<h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1>
<p>今回の開発は今までやらなかったことにめちゃ挑戦できたので楽しかったです<br />
苦手なjquery・javascriptもプレビュー機能のおかげでちょっとわかった気がしてます。</p>
<p>文字数制限や実名制で不便を感じたことのある人はぜひAmmot使ってください!お願いします。</p>
<p>↓URL<br />
<a target="_blank" rel="nofollow noopener" href="https://ammot.net/">https://ammot.net/</a></p>
<p>↓僕のAmmotのアカウント<br />
<a target="_blank" rel="nofollow noopener" href="https://ammot.net/user/yamada">https://ammot.net/user/yamada</a></p>
<p>↓僕のツイッターのアカウント<br />
<a target="_blank" rel="nofollow noopener" href="https://twitter.com/yamada1531">https://twitter.com/yamada1531</a></p>
山田悠
tag:crieit.net,2005:PublicArticle/16317
2020-12-09T12:01:40+09:00
2021-02-28T22:08:13+09:00
https://crieit.net/posts/Web-5fd03e14052c6
過去に思いついたWebサービス/アプリのアイデアを吐き出す
<p>僕はWebサービスを作るのが好きなのだが、ZennというWebサービスを開発しているため、しばらくは実際に作ることが難しい。そこで、アイデアを書き出しておくことにする。中にはすでにサービスとして存在するようなアイデアもあると思われる。</p>
<h2 id="画像出力前提のTwitter用ブログサービス"><a href="#%E7%94%BB%E5%83%8F%E5%87%BA%E5%8A%9B%E5%89%8D%E6%8F%90%E3%81%AETwitter%E7%94%A8%E3%83%96%E3%83%AD%E3%82%B0%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9">画像出力前提のTwitter用ブログサービス</a></h2>
<ul>
<li>Twitterと連携することを前提としたミニブログ投稿サービス</li>
<li>ツイッターでちょっとした長文を書きたいときに使う</li>
<li>書き終えると「タイトル」1枚 + 「本文」最大3枚の画像が出力されるので、この画像をTwitterに流せる
<ul>
<li>よく長文をメモアプリとかのスクショで投下する人がいるが、あれをもっとやりやすく最適化したイメージ</li>
<li>Twitterでちょうど見やすいように画像サイズや文字の配置などを調整する</li>
</ul></li>
<li>Twitter APIを使って、自動で4枚の画像をツイートできるようにする
<ul>
<li>「こういうツイートがされます」と公開前にプレビューを分かりやすく表示できるのがポイント</li>
</ul></li>
<li>画像では読みにくい人のために本文はサービス上で読めるようにする
<ul>
<li>Twitter APIで投稿する場合は、本ツイートへのリプライで「全文はこちら」というリンクを自動で貼るようにする</li>
</ul></li>
</ul>
<h2 id="40字制限のTwitter"><a href="#40%E5%AD%97%E5%88%B6%E9%99%90%E3%81%AETwitter">40字制限のTwitter</a></h2>
<ul>
<li>140字って意外と書けるよね。だから意識高いこととか書いちゃう
<ul>
<li>僕もTwitterに意識高いこと書いてるよ。もう後戻りできないよ</li>
</ul></li>
<li>40字制限にすれば意識高いことを書きづらくなり、みんな「にゃーーん」とかしか言えなくなるのでは</li>
<li>代わりに投稿に対するリアクションでSlackみたいに色々使えるようにするといいんじゃないかな</li>
</ul>
<h2 id="TwiPicks"><a href="#TwiPicks">TwiPicks</a></h2>
<ul>
<li>News Picksのコメント欄をツイートに代替したもの</li>
<li>APIで自動でツイート取得。</li>
<li>記事(URL)ベースでアグリゲーション</li>
<li>よく考えたらこれ<a target="_blank" rel="nofollow noopener" href="https://newstopics.jp/url/14336196">ニュートピ</a>がやってることか</li>
<li>UIの工夫次第では時間を潰せる場所になりそう</li>
</ul>
<h2 id="でぶレシピ"><a href="#%E3%81%A7%E3%81%B6%E3%83%AC%E3%82%B7%E3%83%94">でぶレシピ</a></h2>
<ul>
<li>ファミチキを買ってきて米の上にのせてマヨネーズとベビースターラーメンかけて出来上がりです!みたいなデブための簡単レシピだけを集めたサイト</li>
<li>全部のレシピの手順をTwitterであるあるな感じにする「騙されたと思ってさ…ごはんの上にファミチキのせて、ベビースターラーメンとマヨネーズぶっかけてみて…。悪魔みたいな旨さになるから…」。ひたすらこういうのがサイトに並んでるというカオスな感じ。
<ul>
<li>はてぶ民に嫌われそう</li>
</ul></li>
<li>Twitterで拡散されることを前提にサイトを作る</li>
</ul>
<h2 id="保護犬の良さみを広めるためのwebメディア"><a href="#%E4%BF%9D%E8%AD%B7%E7%8A%AC%E3%81%AE%E8%89%AF%E3%81%95%E3%81%BF%E3%82%92%E5%BA%83%E3%82%81%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEweb%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2">保護犬の良さみを広めるためのwebメディア</a></h2>
<ul>
<li>これは僕がやりたいだけ</li>
<li>保護犬はいいぞ。みんなペットショップで犬を飼おうとする前に保護犬を探してみたらどうだい?</li>
<li>全国の保護犬を飼ってる人たちにインタビューして胸アツエピソードとか残していきたい</li>
<li>ページビューが増えたら、犬を保護しているNPOとかと連携して、保護が必要な犬の情報も載せる</li>
<li>Twitterで拡散されやすいようにうまく設計できれば、もしかすると不幸なワンコたちを減らしていけるかも?</li>
</ul>
<h1 id="OSSのアイデア"><a href="#OSS%E3%81%AE%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2">OSSのアイデア</a></h1>
<h2 id="オープンソース絵文字"><a href="#%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E7%B5%B5%E6%96%87%E5%AD%97">オープンソース絵文字</a></h2>
<ul>
<li>これはWebサービスではなくただのアイデア</li>
<li>現状だとサービスに導入しやすいオープンソースの絵文字はTwemojiくらい。でもTwemojiってあまり映えない絵文字が多かったりする。</li>
<li>イラストを練習がてら全種類の絵文字を描いて、オープンソースとしてGitHubに公開する
<ul>
<li>イラストが綺麗で統一感があれば、多分ものすごくStarがつく。僕もつける</li>
<li>SVGとPNGの2種類が必要だと思われる。SVGだけでもいいかも</li>
</ul></li>
<li>世界的に普及すればFontAwesomeっぽいビジネスが可能かも</li>
</ul>
<h2 id="macho.css"><a href="#macho.css">macho.css</a></h2>
<ul>
<li>茶色っぽいゴリゴリでテカテカのWebサイトを作るためのCSSフレームワーク</li>
<li>キャッチコピー「Light weight and well built CSS frame work that lift up your website.」</li>
<li>コンポーネント
<ul>
<li>ボタンはとても立体的に隆起したテカテカしたものを</li>
<li>チェックボックスやラジオボタンなどのフォーム部品も思わず押したくなるような筋肉みたいなテカテカしたものを</li>
<li>「style--thin」とか「style---well-built」とか筋肉を想起させるようなクラス名にする</li>
</ul></li>
<li>サイトのフッターに「Buy me protain」という寄付を募るリンクを貼る</li>
</ul>
<p>他にもありますが、力尽きたのでこんなところで。</p>
catnose
tag:crieit.net,2005:PublicArticle/16139
2020-10-18T18:32:30+09:00
2020-10-18T18:32:30+09:00
https://crieit.net/posts/51666379560ed175bbb7725cb5f01193
プログラムコードを販売できるサービスまとめ
<p>今回はプログラムコードを販売できるサービスをまとめました。</p>
<h2 id="code-sell"><a href="#code-sell">code-sell</a></h2>
<p><a target="_blank" rel="nofollow noopener" href="https://www.code-sell.net/">code-sell</a><br />
<a href="https://crieit.now.sh/upload_images/58040fa19563696175b43776ee552c375f8c097ec198c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/58040fa19563696175b43776ee552c375f8c097ec198c.png?mw=700" alt="image" /></a><br />
宣伝です...。僕が1週間くらい前に作ったサービスです。なるべく簡単に販売・購入できるようにしました。<br />
いま僕が今まで作ったwebアプリのコードをすべて無料で公開しています。</p>
<h2 id="piecex"><a href="#piecex">piecex</a></h2>
<p><a target="_blank" rel="nofollow noopener" href="https://piecex.com">piecex</a><br />
<a href="https://crieit.now.sh/upload_images/7ee158079f977ed09bd1f41679bf02bf5f8c09672c2d1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7ee158079f977ed09bd1f41679bf02bf5f8c09672c2d1.png?mw=700" alt="image" /></a><br />
おそらく一番メジャーで人気のあるサービスです。<br />
AIを搭載していて最適な価格がわかるそうです。</p>
<h2 id="osadasoft"><a href="#osadasoft">osadasoft</a></h2>
<p><a target="_blank" rel="nofollow noopener" href="https://www.osadasoft.com/support/source/">osadasoft</a><br />
コード一つ一つが高額です</p>
<h3 id="補足"><a href="#%E8%A3%9C%E8%B6%B3">補足</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://www.source-gene.com/sg/top.do">sourcegene</a><br />
は登録ができませんでした。最新のコードも2018年なのでおそらくサービス終了しているんだと思います。</p>
<h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2>
<p>今回はプログラムコードを販売できるサービスをまとめてみました。とりあえずいえるのは<br />
<a target="_blank" rel="nofollow noopener" href="https://www.code-sell.net/">code-sell</a>使ってください。</p>
山田悠
tag:crieit.net,2005:PublicArticle/15975
2020-06-23T09:37:52+09:00
2020-06-23T09:43:27+09:00
https://crieit.net/posts/game1week
【1週間】Web ゲームを爆速で開発するために実践したこと🐧個人開発向け
<p>(内心)<br />
作ったゲームを沢山の人に触ってもらってリアクションが欲しいなぁ~<br />
そうだ、記事投稿して宣伝しよう!</p>
<p>といった<strong>下心で書いた記事です</strong>。すみませんでした 遊んでください😆</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Web Game 処女作🎉シンプルでストレス発散になるゲームが爆誕!敵さんを吹っ飛ばして 1,000 G 以上を目指してみてね😆<a target="_blank" rel="nofollow noopener" href="https://t.co/h8w574aGGQ">https://t.co/h8w574aGGQ</a>★アドバイス急募★『こうしたらもっと面白くなる』など、ご意見ご感想を頂けると嬉しいっす(〃´∪`〃)ゞ<a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/%E4%BB%8A%E6%97%A5%E3%81%AE%E7%A9%8D%E3%81%BF%E4%B8%8A%E3%81%92?src=hash&ref_src=twsrc%5Etfw">#今日の積み上げ</a> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/100DaysOfCode?src=hash&ref_src=twsrc%5Etfw">#100DaysOfCode</a> DAY 21 <a target="_blank" rel="nofollow noopener" href="https://t.co/HJvFj87zTf">pic.twitter.com/HJvFj87zTf</a></p>— hikaru🐧#100DaysOfCode! (@hikaru_firecamp) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hikaru_firecamp/status/1273289660186292224?ref_src=twsrc%5Etfw">June 17, 2020</a></blockquote>
<blockquote>
<p>ペンギンがサメさんを倒すゲーム<br />
敵さんを吹っ飛ばして 1,000 G 以上を目指してみてね😆<br />
<a target="_blank" rel="nofollow noopener" href="https://games.westa.io/">https://games.westa.io/</a></p>
</blockquote>
<h2 id="0⃣ 結論 / 爆速で開発するために実践したこと"><a href="#0%E2%83%A3+%E7%B5%90%E8%AB%96+%2F+%E7%88%86%E9%80%9F%E3%81%A7%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%AE%9F%E8%B7%B5%E3%81%97%E3%81%9F%E3%81%93%E3%81%A8">0⃣ 結論 / 爆速で開発するために実践したこと</a></h2>
<ul>
<li>1週間のカウントダウンタイマーを設置する</li>
<li>適当な企画書を作って全体を把握しならが作業する</li>
<li>新しいことは1個までに制限して知っているものを使う</li>
<li>こだわりたい部分を絞り他を捨てる覚悟を持つ</li>
</ul>
<h2 id="1️⃣ この記事の対象読者"><a href="#1%EF%B8%8F%E2%83%A3+%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%AF%BE%E8%B1%A1%E8%AA%AD%E8%80%85">1️⃣ この記事の対象読者</a></h2>
<p>この記事では<strong>1週間で Web ゲームを作る為に何を考え何をしたのか</strong>を書きました。<br />
以下に当てはまる人達に参考になれば嬉しいです。</p>
<ul>
<li>好きなことへのこだわりが強く<strong>いつまでも作品が完成しない</strong>人</li>
<li>いつも<strong>ダラダラ期限を伸ばしてしまう</strong>人</li>
<li>このゲームがどんなライブラリ使っているか知りたい人</li>
<li>奇特な人</li>
</ul>
<h2 id="2️⃣ なぜ1週間なの?"><a href="#2%EF%B8%8F%E2%83%A3+%E3%81%AA%E3%81%9C%EF%BC%91%E9%80%B1%E9%96%93%E3%81%AA%E3%81%AE%EF%BC%9F">2️⃣ なぜ1週間なの?</a></h2>
<p>個人開発の一番の敵って<strong>いかにモチベーションを保つか</strong>だと思いませんか?</p>
<p>私の場合1ヶ月もたてば他に興味あることが出てきてしまうのでモチベーションが移ってしまいます。<br />
でも、<strong>1週間なら全力で頑張れるちょうどよい長さ</strong>かな~と考えました。</p>
<p>(それと、1週間ならクオリティ低くても言い訳になるかな と)</p>
<h2 id="3⃣ 1週間という短い期間で終わらせるために意識したこと"><a href="#3%E2%83%A3+%EF%BC%91%E9%80%B1%E9%96%93%E3%81%A8%E3%81%84%E3%81%86%E7%9F%AD%E3%81%84%E6%9C%9F%E9%96%93%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%89%E3%81%9B%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E6%84%8F%E8%AD%98%E3%81%97%E3%81%9F%E3%81%93%E3%81%A8">3⃣ 1週間という短い期間で終わらせるために意識したこと</a></h2>
<h3 id="(1) 1週間のカウントダウンタイマーを設置する"><a href="#%281%29+%EF%BC%91%E9%80%B1%E9%96%93%E3%81%AE%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E7%BD%AE%E3%81%99%E3%82%8B">(1) 1週間のカウントダウンタイマーを設置する</a></h3>
<p>いつもズルズル伸ばしてしまう癖があるので <strong>Twitter で公開日を宣言</strong>しました。<br />
そして公開日までの<strong>カウントダウンタイマーを常に目に入る位置に設置</strong>しておきました。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">次に出す Web アプリのリリース日を 6/17 12:00 頃に決めました🎉メリハリ付けるために中途半端でもこのタイミングで出します写真はちょうどいいカウントダウンタイマーが無かったので作ってみました▪コードはこちら<a target="_blank" rel="nofollow noopener" href="https://t.co/HiGjiROP4R">https://t.co/HiGjiROP4R</a>(8,9行目を編集すれば自分用に使えるよ!) <a target="_blank" rel="nofollow noopener" href="https://t.co/HnjXxktDLb">pic.twitter.com/HnjXxktDLb</a></p>— hikaru🐧#100DaysOfCode! (@hikaru_firecamp) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hikaru_firecamp/status/1269807592533979138?ref_src=twsrc%5Etfw">June 8, 2020</a></blockquote>
<p>このカウントダウンタイマー、<strong>すっごく効果があった</strong>ように思います。度々目に入るので<strong>程よい緊張感と無機質な圧力</strong>をくれます。<br />
さらにシレっと<strong>周囲の人たちに公開日を宣言</strong>できるのでかなりお勧めです。</p>
<blockquote>
<p>⚠ 補足 ⚠<br />
さも予定を守ったように言ってますが結局半日ほど遅く公開してしまいました<br />
ほ ん と す み ま せ ん で し た 😗</p>
</blockquote>
<h3 id="(2) 適当な企画書を作って全体を把握しならが作業する"><a href="#%282%29+%E9%81%A9%E5%BD%93%E3%81%AA%E4%BC%81%E7%94%BB%E6%9B%B8%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E5%85%A8%E4%BD%93%E3%82%92%E6%8A%8A%E6%8F%A1%E3%81%97%E3%81%AA%E3%82%89%E3%81%8C%E4%BD%9C%E6%A5%AD%E3%81%99%E3%82%8B">(2) 適当な企画書を作って全体を把握しならが作業する</a></h3>
<p>企画書などが無い状態でコーディングすると目に付いた場所から手を付けてしまいがちで<strong>視野が局所的になりやすく作業の優先度決めが難しく</strong>なります。</p>
<p>簡単なものでも<strong>全体像を把握できるもの</strong>があると、次にどの部分を実装するか考えるときに『最低でもここを実装しないとだから優先度高めで』みたいな<strong>スケジュール管理が容易</strong>になります。</p>
<p>今回は以下の様な簡易仕様書をあらかじめ書いておりました。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">これから作るミニゲームの簡易仕様書!よくあるクリックゲームですが、ちゃんと作りきれるか不安😇1週間がんばります〜(あ、奇しくも一人 web1week みたいになってる)全然関係ないけど最近 iPad でお絵描きの練習始めました!スマブラやったことあればピンとくるはず😎 <a target="_blank" rel="nofollow noopener" href="https://t.co/oVo5xAUeBe">pic.twitter.com/oVo5xAUeBe</a></p>— hikaru🐧#100DaysOfCode! (@hikaru_firecamp) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hikaru_firecamp/status/1270280818116583425?ref_src=twsrc%5Etfw">June 9, 2020</a></blockquote>
<p>これのおかげで実装段階での仕様変更が減り、<strong>一直線にゴールに向かって実装できるので結構大切</strong>なものだと思います。</p>
<h3 id="(3) 新しいことは1個までに制限して知っているものを使う"><a href="#%283%29+%E6%96%B0%E3%81%97%E3%81%84%E3%81%93%E3%81%A8%E3%81%AF%EF%BC%91%E5%80%8B%E3%81%BE%E3%81%A7%E3%81%AB%E5%88%B6%E9%99%90%E3%81%97%E3%81%A6%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%82%82%E3%81%AE%E3%82%92%E4%BD%BF%E3%81%86">(3) 新しいことは1個までに制限して知っているものを使う</a></h3>
<p>初めて使う道具が多いと勉強することが増えたり些細なことにはまったりして時間を消費しがちなので、<strong>使い慣れた開発環境</strong>と<strong>使った事のあるライブラリ</strong>を中心に選定しました。</p>
<h4 id="使い慣れたもの"><a href="#%E4%BD%BF%E3%81%84%E6%85%A3%E3%82%8C%E3%81%9F%E3%82%82%E3%81%AE">使い慣れたもの</a></h4>
<ul>
<li><strong>VS-Code</strong> ... 開発環境</li>
<li><strong>TypeScript</strong> ... 開発言語</li>
<li><strong>UIKit</strong> ... UI コンポーネント</li>
</ul>
<h4 id="以前から実験レベルで遊んでいたもの"><a href="#%E4%BB%A5%E5%89%8D%E3%81%8B%E3%82%89%E5%AE%9F%E9%A8%93%E3%83%AC%E3%83%99%E3%83%AB%E3%81%A7%E9%81%8A%E3%82%93%E3%81%A7%E3%81%84%E3%81%9F%E3%82%82%E3%81%AE">以前から実験レベルで遊んでいたもの</a></h4>
<ul>
<li><strong>Three.js</strong> ... 3D 描画エンジン</li>
<li><strong>Cannon.js</strong> ... 3D 物理エンジン</li>
</ul>
<h4 id="初めて使うもの"><a href="#%E5%88%9D%E3%82%81%E3%81%A6%E4%BD%BF%E3%81%86%E3%82%82%E3%81%AE">初めて使うもの</a></h4>
<ul>
<li><strong>Audio API</strong> ... BGM や効果音の再生</li>
</ul>
<p>今回は遊べる Web ゲームを<strong>短期間で作ることが目的</strong>だったので冒険をしない制約を設けましたが、完成度が低くても<strong>未知なる技術を沢山学びたいならどんどん新しい技術を使ってみたらよい</strong>と思います。</p>
<p><strong>目的次第でやり方を臨機応変にする</strong>ことが大事なのかなと😎</p>
<h3 id="(4) こだわりたい部分を絞り他を捨てる覚悟を持つ"><a href="#%284%29+%E3%81%93%E3%81%A0%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%84%E9%83%A8%E5%88%86%E3%82%92%E7%B5%9E%E3%82%8A%E4%BB%96%E3%82%92%E6%8D%A8%E3%81%A6%E3%82%8B%E8%A6%9A%E6%82%9F%E3%82%92%E6%8C%81%E3%81%A4">(4) こだわりたい部分を絞り他を捨てる覚悟を持つ</a></h3>
<p>こだわりが強いと味のあるイイものができるけど、その代わり<strong>完成が遅くなる</strong>傾向にあると思います。</p>
<p>今回は『ローポリキャラ達が<strong>物理演算で予想外の挙動</strong>をする』部分だけこだわりましたが、操作 UI の見た目などはブラウザ標準のプログレスバーを使っていたりと<strong>大部分はかなり適当</strong>です。</p>
<p>個人的にはゲームの中に<strong>ブラウザの DOM を混ぜることに違和感</strong>とアレルギーを感じるのですが『<strong>こだわる部分を絞って他は適当</strong>』と大胆に割り切っちゃいました。<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67192/ef433b3e-8d54-62b9-94b9-83f98f528ade.png" alt="image.png" /></p>
<p>他にも、ペンギン/サメ/コイン/木 の当たり判定はすべて立方体(正六面体)で手抜きをしましたが、これは予想に反して『<strong>サメさんやコインが地面に刺さってる</strong>』ように見えたり『木々があらぶってる』感じになったり<strong>ヘンテコな世界観の演出</strong>に一役買ったように思います。<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67192/a1a1764b-8e99-17a7-de03-a410ae195d96.png" alt="2020-06-18_00h32_18.png" /></p>
<h2 id="4⃣ おまけ: 実装 Tips"><a href="#4%E2%83%A3+%E3%81%8A%E3%81%BE%E3%81%91%3A+%E5%AE%9F%E8%A3%85+Tips">4⃣ おまけ: 実装 Tips</a></h2>
<p>唐突なおまけの実装 Tips です。</p>
<h3 id="(1) Cannon.js / サメさんの Z 位置(奥行)を固定"><a href="#%281%29+Cannon.js+%2F+%E3%82%B5%E3%83%A1%E3%81%95%E3%82%93%E3%81%AE+Z+%E4%BD%8D%E7%BD%AE%28%E5%A5%A5%E8%A1%8C%29%E3%82%92%E5%9B%BA%E5%AE%9A">(1) Cannon.js / サメさんの Z 位置(奥行)を固定</a></h3>
<p>Cannon.js は 3 次元物理演算なので XYZ 軸分の動きがあるのですが、サメさん(敵)に関しては奥行方向に動かれると攻撃を当てられなくなるので Z 軸を固定しています。</p>
<pre><code class="ts">// CannonJs: サメさんの物理演算用の剛体を生成
const sharkBody = new CANNON.Body({ <省略> });
// ThreeJs: アニメーションループを開始
renderer.setAnimationLoop(() => {
// CannonJs: 1フレーム分の物理演算を実行
world.step(<省略>);
// ★★ サメさんのZ位置を固定する ★★
sharkBody.position.set(
sharkBody.position.x,
sharkBody.position.y,
0); // Z軸を0に変更
});
</code></pre>
<h3 id="(2) Cannon.js / 摩擦設定・反発設定"><a href="#%282%29+Cannon.js+%2F+%E6%91%A9%E6%93%A6%E8%A8%AD%E5%AE%9A%E3%83%BB%E5%8F%8D%E7%99%BA%E8%A8%AD%E5%AE%9A">(2) Cannon.js / 摩擦設定・反発設定</a></h3>
<p>初期値だとほとんど滑ることは無く、滑らせた方が面白そうだったので摩擦と反発の設定をいじっています。</p>
<p>モデルごとに摩擦係数や反発係数を設定できれば直感的だったのですが、Cannon.js では『モデル1とモデル2に対しての摩擦・反発を設定』といった具合に設定が必要でした。</p>
<pre><code class="ts">//
// 物理演算ワールドを初期化
//
const world = new CANNON.World();
world.gravity.set(0, -9.82, 0); // m/s²
const floorBodyMaterial = new CANNON.Material(`FloorModel`);
const penguinBodyMaterial = new CANNON.Material(`PenguinModel`);
const sharkBodyMaterial = new CANNON.Material(`SharkModel`);
// 摩擦反発設定: 床とペンギン
world.addContactMaterial(new CANNON.ContactMaterial(
floorBodyMaterial,
penguinBodyMaterial,
{
friction: 0.01, // 摩擦設定 (ペンギンが床を滑るように)
restitution: 0.8, // 反発設定
}
));
// 摩擦反発設定: 床とサメ
world.addContactMaterial(new CANNON.ContactMaterial(
floorBodyMaterial,
sharkBodyMaterial,
{
friction: 0.05, // 摩擦設定
restitution: 0.3, // 反発設定
contactEquationStiffness: 1e8,
contactEquationRelaxation: 3,
}
));
// 摩擦反発設定: ペンギンとサメ
world.addContactMaterial(new CANNON.ContactMaterial(
penguinBodyMaterial,
sharkBodyMaterial,
{
friction: 0.01, // 摩擦設定
restitution: 2.0, // 反発設定 (攻撃を受けたサメが吹っ飛びやすいように)
}
));
</code></pre>
<h3 id="(3) Three.js / 同じモデルは使いまわして効率化"><a href="#%283%29+Three.js+%2F+%E5%90%8C%E3%81%98%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AF%E4%BD%BF%E3%81%84%E3%81%BE%E3%82%8F%E3%81%97%E3%81%A6%E5%8A%B9%E7%8E%87%E5%8C%96">(3) Three.js / 同じモデルは使いまわして効率化</a></h3>
<p>今回ゲーム内では<strong>同じモデルが大量に出現</strong>します。その際に<strong>毎回モデルをロードしていると実行効率が悪い</strong>ので、モデル管理クラスが必要になります。</p>
<p>こういった目的の管理クラス系にはシングルトン実装が最適かと思いますが、TypeScript では <strong><code>module</code> を使うと簡単にシングルトン実装が可能</strong>です。</p>
<pre><code class="ts">/** モデル名の型定義 */
export type ModelName = `PENGUIN` | `SHARK` | `TREE` | `COIN`;
/**
* ゲーム内のモデルを管理するモジュール
* シングルトン実装
* モデルをあらかじめロードして、ロード済みのモデルを使いまわすことで効率化
*/
export module ModelManager {
/** ロード済みのモデルを保持 */
const modelMap = new Map<ModelName, THREE.Object3D>();
/** 各種モデルをロードする */
export async function load() {
await loadModel(`PENGUIN`, `models/PenguinJumping.glb`);
await loadModel(`SHARK`, `models/Shark.glb`);
await loadModel(`TREE`, `models/Tree.glb`);
await loadModel(`COIN`, `models/Coin.glb`);
}
/** モデルを複製して取得する */
export function getModel(modelName: ModelName) {
return modelMap.get(modelName)!.clone();
}
/** ロード済みモデルを開放する */
export function dispose() {
// ThreeJs: ロードしたモデルをすべて解放
modelMap.forEach((obj3D, key) => {
GameUtils.disposeObject3D(obj3D);
});
}
async function loadModel(modelName: ModelName, path: string) {
// ThreeJs: モデル読み込み
const obj3D = await GameUtils.loadGltfModel(path);
// リストに追加
modelMap.set(modelName, obj3D);
}
}
</code></pre>
<p>使い方</p>
<pre><code class="ts">// あらかじめすべてのモデルをロードする
await ModelManager.load();
// ペンギンモデルを取得する (内部的にはロード済みのモデルを複製しているので効率的)
const penguin1 = ModelManager.getModel(`PENGUIN`);
const penguin2 = ModelManager.getModel(`PENGUIN`);
const penguin3 = ModelManager.getModel(`PENGUIN`);
</code></pre>
<h2 id="最後に"><a href="#%E6%9C%80%E5%BE%8C%E3%81%AB">最後に</a></h2>
<p>ゲーム開発中に Twitter でいいねやコメントなどでリアクションをくれた方、開発中のゲームを試してヒントをくれた友人方、本当にありがとうございました。<br />
大変励みになりモチベーションになりました、重ねてお礼申し上げます😆</p>
<p>あと、ここまで読んでまだプレイしていない人!!<br />
↓ やってからリアクションをクレクレ厨😗</p>
<blockquote>
<p>ペンギンがサメさんを倒すゲーム<br />
敵さんを吹っ飛ばして 1,000 G 以上を目指してみてね😆<br />
<a target="_blank" rel="nofollow noopener" href="https://games.westa.io/">https://games.westa.io/</a></p>
</blockquote>
<hr />
<p>P.S. crieit.net で初カノニカル投稿してみました🎉これ書く側としてはイイ仕組みですね</p>
hikaru🐧
tag:crieit.net,2005:PublicArticle/15900
2020-05-17T06:58:19+09:00
2023-07-07T18:45:02+09:00
https://crieit.net/posts/pay-web-service-release-knowledge-summary
有料のWebサービスをリリースするまでに取り組んだこと・知見をまとめました【個人開発】
<h1 id="1. 作ったサービス"><a href="#1.+%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9">1. 作ったサービス</a></h1>
<p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117180/dbadeb45-61fc-48d6-3a8c-d7908b6270d8.png" alt="twikeshi-ogp.png" /></p>
<p><strong>ツイ消し職人 | ツイ消しツールの決定版!</strong><br />
<strong><a target="_blank" rel="nofollow noopener" href="https://twikeshi.net/">https://twikeshi.net/</a></strong></p>
<blockquote>
<p>ツイ消しツールの決定版!<br />
ツイ消し職人は 今までのツイートを全消しできる「ツイート一括削除ツール」 です。<br />
3200件を超える大量のツイートを全て削除できます。<br />
無料のツールなどでうまく削除できなかった方は是非ご利用ください。<br />
既存のフォロワーをそのままに、Twitterをやり直すことができます。</p>
</blockquote>
<h1 id="2. 自己紹介"><a href="#2.+%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B">2. 自己紹介</a></h1>
<p>こんにちは、ひろと申します。<br />
現在はフリーランスエンジニアとして活動しています。</p>
<h1 id="3. なぜ作ったのか"><a href="#3.+%E3%81%AA%E3%81%9C%E4%BD%9C%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B">3. なぜ作ったのか</a></h1>
<p>私は2020年4月にフリーランスとして独立しました。<br />
それに伴い、学生時代から使っていたTwitterアカウントの運用を変えようと思い、今までのツイートを削除してやり直すことにしました。<br />
アカウントを作り直す選択肢もあったのですが、フォロワーを減らしたくなかったため、ツイ消しの道を選びました。<br />
調べてみるとツイートの一括削除ツールがいくつか見つかったため、それを使ってツイ消しをすることにしました。</p>
<p>しかし、<strong>既存のツールではツイートの削除ができませんでした。</strong><br />
私の今までのツイート数は<strong>19万件</strong>で、Twitterアーカイブをダウンロードしたところzipファイルのサイズは<strong>31GB</strong>。<br />
私が<strong>ツイ廃</strong>だったのが全ての原因です。</p>
<p>普通のツイ消しサービスは、API制限の関係で3,200ツイートが削除の上限となってしまいます。私の19万ツイートに対してはあまりに無力すぎました。</p>
<p>もちろん、API制限を回避するためにTwitterアーカイブをアップロードして削除を行うサービスもあります。<br />
しかし、31GBのzipファイルを送りつけると必ず500エラーが返ってきてしまい、私の試した範囲では、まともに動くものはありませんでした。海外の有料サービスでさえダメでした。(具体的なサービス名は出しませんが、日本円で1,600円払いました。手痛い出費です)</p>
<p>そこで私は、「ツイ廃でもツイートを削除できるサービス」が必要だと思い、ツイ消し職人の開発を始めました。</p>
<h1 id="4. リリースするまでに取り組んだこと"><a href="#4.+%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B%E3%81%BE%E3%81%A7%E3%81%AB%E5%8F%96%E3%82%8A%E7%B5%84%E3%82%93%E3%81%A0%E3%81%93%E3%81%A8">4. リリースするまでに取り組んだこと</a></h1>
<p>取り組んだ全てのことを記載しています。</p>
<h2 id="一. サービスの命名"><a href="#%E4%B8%80.+%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%91%BD%E5%90%8D">一. サービスの命名</a></h2>
<p>最初は「ツイートクリーナー」という名前にしていました。<br />
開発中盤に「ツイ消し職人」という名前を思いつき、変更しました。<br />
ランサーズなどで名前を募集するのも良いと思います。</p>
<h2 id="二. ドメインの取得"><a href="#%E4%BA%8C.+%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97">二. ドメインの取得</a></h2>
<p>ムームードメインでtwikeshi.netを取得しました。<br />
欲しいドメインが埋まっている場合は、twikeshi-app.netのように工夫するのもオススメです。</p>
<h2 id="三. 商標登録"><a href="#%E4%B8%89.+%E5%95%86%E6%A8%99%E7%99%BB%E9%8C%B2">三. 商標登録</a></h2>
<p>登録しました。<br />
今は<a target="_blank" rel="nofollow noopener" href="https://toreru.jp/">Toreru</a>などの便利なサービスがあり、ものすごく簡単に出願できます。<br />
48,000円で5年間有効になります。<br />
商標権の取る取らないを選択するのは自由ですが、後から商標を第三者に取得されて商標権の侵害警告を受けた場合、サービス名やドメインを変えなければならないリスクがあることは認識しておく必要があります。</p>
<h2 id="四. プライシング"><a href="#%E5%9B%9B.+%E3%83%97%E3%83%A9%E3%82%A4%E3%82%B7%E3%83%B3%E3%82%B0">四. プライシング</a></h2>
<p>海外の同じようなサービスを参考に値付けを行いました。<br />
現在は700円(税込)で提供しています。</p>
<p>その後、プライシングに関する本を3冊読んで(<a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/gp/product/B07KWRPBP9/">この本</a>と<a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/gp/product/B013JEK6YS/">この本</a>と<a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/gp/product/B077S7BDD9/">この本</a>)考え方が変わったので、そのうち値上げするかもしれません。</p>
<p><strong>間違っても、本来ターゲットでない人を取り込むために値下げするのはやめてください</strong>。<br />
例えば、私は友人達に「ツイ消し職人の適正価格はいくらだと思う?」と質問をすると、2人が「100円」と答えました。<br />
しかし、断言しますが彼らは<strong>100円でも絶対に利用しません</strong>。何故ならば、彼らはこのツールの価値を理解していないからです。ツイ消しをしようと思ったことがない人に相場感を聞いても意味がありません。<br />
逆に、本っっ当にツイ消しをしたくて困っている人からすれば、このツールが例え1万円でも喜んでお金を払うはずです。</p>
<h2 id="五. 技術選定"><a href="#%E4%BA%94.+%E6%8A%80%E8%A1%93%E9%81%B8%E5%AE%9A">五. 技術選定</a></h2>
<h3 id="1. バックエンド"><a href="#1.+%E3%83%90%E3%83%83%E3%82%AF%E3%82%A8%E3%83%B3%E3%83%89">1. バックエンド</a></h3>
<p>バックエンドはLaravelで開発しました。<br />
Laravelはコードもドキュメントも読みやすいため、使っていて楽しいですね。</p>
<div class="table-responsive"><table>
<thead>
<tr>
<th align="left">役割</th>
<th align="left">技術</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">PHPフレームワーク</td>
<td align="left">Laravel</td>
</tr>
<tr>
<td align="left">データベース</td>
<td align="left">MySQL</td>
</tr>
<tr>
<td align="left">Twitterログイン</td>
<td align="left">Laravel Socialite</td>
</tr>
<tr>
<td align="left">Twitter APIライブラリ</td>
<td align="left">TwitterOAuth</td>
</tr>
<tr>
<td align="left">メール送信</td>
<td align="left">SendGrid</td>
</tr>
</tbody>
</table></div>
<h3 id="2. フロントエンド"><a href="#2.+%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89">2. フロントエンド</a></h3>
<p>CSSフレームワークにはMaterializeを採用しました。初めて使ったのですが、ドキュメントが分かりやすく情報量も多いのでオススメです。<br />
今回はフロントで処理をする必要が無かったので、基本的にJavaScriptは使っていません。ファイルアップロードの画面は、アニメーションを付けるためにVue.jsを使いました。Vue.jsは以前から使っていたので、特に困ることはありませんでした。<br />
次はNuxt.jsに挑戦するために勉強中です。</p>
<div class="table-responsive"><table>
<thead>
<tr>
<th align="left">役割</th>
<th align="left">技術</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">CSSフレームワーク</td>
<td align="left">Materialize</td>
</tr>
<tr>
<td align="left">JavaScriptフレームワーク</td>
<td align="left">Vue.js</td>
</tr>
<tr>
<td align="left">決済</td>
<td align="left">Stripe Checkout</td>
</tr>
</tbody>
</table></div>
<h3 id="3. インフラ"><a href="#3.+%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9">3. インフラ</a></h3>
<p>サーバーにはレンタルサーバーを採用しています。</p>
<div class="table-responsive"><table>
<thead>
<tr>
<th align="left">役割</th>
<th align="left">技術</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">レンタルサーバー</td>
<td align="left">エックスサーバー</td>
</tr>
</tbody>
</table></div>
<p>Heroku / VPS / AWS EC2 / GCP App Engineなどの選択肢もありましたが、主にコストと運用の観点から除外しました。個人開発は自分でインフラを選べるのが良いですね。<br />
今後もどんどんサービスを作っていく予定なので、サーバー費がかさむのはイヤだし、サービスを作る度に環境を構築するのも避けたかったのです。</p>
<p>もちろん要件によってはレンタルサーバーが使えない場合もあります(ミドルウェアの設定変更や追加インストールが必要な場合など)。</p>
<p>例えば、FFmpegを使って動画のエンコード等を行う場合です。<br />
まずrootが使えないのでインストールができません。自前でmakeして無理やり手動インストールすることも不可能ではなさそうですが、なるべく避けたいところです。また、動画のエンコード処理はCPUを食うので、運営に利用を停止される可能性があります。</p>
<p>このようにrootユーザーが使えないと困る場合は、状況に応じて各サービスを比較検討しましょう。<br />
サーバーはHerokuだけどストレージにはS3を使って、DBにはCloud SQLを使うといったトリッキーなこともできます。柔軟な発想で最適な構成を作りましょう。</p>
<p>参考に、私の考える主なインフラサービスのメリット・デメリットをまとめておきます。<br />
※App Engineは詳しくないので簡易的な記載になってます</p>
<div class="table-responsive"><table>
<thead>
<tr>
<th align="left">インフラサービス</th>
<th align="left">メリット</th>
<th align="left">デメリット</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">VPS(IaaS)</td>
<td align="left">・安い・root使える</td>
<td align="left">・借りる度にお金がかさむ・環境構築や設定が必要</td>
</tr>
<tr>
<td align="left">EC2(IaaS)</td>
<td align="left">・root使える・マイクロサービス沢山ある</td>
<td align="left">・高い・借りる度にお金がかさむ・環境構築や設定が必要</td>
</tr>
<tr>
<td align="left">App Engine(PaaS)</td>
<td align="left">・環境構築不要</td>
<td align="left">・高い・借りる度にお金がかさむ</td>
</tr>
<tr>
<td align="left">Heroku(PaaS)</td>
<td align="left">・安い・環境構築不要</td>
<td align="left">・借りる度にお金がかさむ・30秒タイムアウト辛い</td>
</tr>
<tr>
<td align="left">レンタルサーバー(ほぼPaaS)</td>
<td align="left">・安い・1台でアプリ沢山動かせる・環境構築ほぼ不要</td>
<td align="left">・root使えない</td>
</tr>
</tbody>
</table></div>
<h2 id="六. 設計"><a href="#%E5%85%AD.+%E8%A8%AD%E8%A8%88">六. 設計</a></h2>
<p>小規模なサービスなので、ここにはほぼ時間をかけていません。<br />
ワイヤーフレームなどは作らず、実際に画面をコーディングしてレイアウトを決めました。<br />
DB設計もパパッと考えて終わり。<br />
開発の中で必要になったときに都度、テーブルやカラム・画面を増やしていきました。<br />
サービスによっては色々な機能を思いつくと思いますが、まずはスモールスタートでリリースすることをゴールにしましょう。</p>
<h2 id="七. 開発"><a href="#%E4%B8%83.+%E9%96%8B%E7%99%BA">七. 開発</a></h2>
<p>一番時間をかけたのはこの工程です。<br />
他の仕事が並行していたため正確ではありませんが、全体で2〜3週間はかかったと思います。<br />
伝えたい情報がある場合はコメントを書いています。<br />
有料サービスのみ必要になる項目には「☆」を付けています。</p>
<h3 id="1. サービスの機能開発"><a href="#1.+%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E6%A9%9F%E8%83%BD%E9%96%8B%E7%99%BA">1. サービスの機能開発</a></h3>
<h4 id="一. Twitterログイン"><a href="#%E4%B8%80.+Twitter%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3">一. Twitterログイン</a></h4>
<p>ツイ消し職人では、決済完了時とツイート削除完了時に確認メールを送信しています。<br />
そのため、Twitter AppのAdditional permissionsとして、Request email addressにチェックを入れています。</p>
<h4 id="二. ☆決済"><a href="#%E4%BA%8C.+%E2%98%86%E6%B1%BA%E6%B8%88">二. ☆決済</a></h4>
<p>Stripe Checkoutは神。<br />
JavaScriptをちょろっと書くだけで決済を提供できます。返金もボタンポチるだけです。<br />
週次で売上を銀行口座に入金してくれるところも良いですね。至れり尽くせり。<br />
ツイ消し職人はクレジットカード、Google Pay、Apple Payに対応しています。</p>
<h4 id="三. アーカイブアップロード"><a href="#%E4%B8%89.+%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89">三. アーカイブアップロード</a></h4>
<p>Twitterが生成したデータを読み取らないといけないので、アーカイブのどのファイルに何の情報があるのかを全て自分で調べました。<br />
そして、ツイートの削除に本当に必要なファイルだけをアップロードさせることで、ファイルサイズを31GB→200MBまで減らすことができました。</p>
<p>アーカイブからはツイートの削除に必要な情報を正規表現で抽出する必要があります。<br />
最初は、JavaScriptを使いフロント側で情報を抽出し、サーバーには最低限のデータだけ送るようにする予定だったのですが、少し時間がかかりそうだったので諦めました。</p>
<p>FileReader.readAsText()に100MBのファイルを食わせるとクラッシュしてしまうことが判明し、ファイルをチャンクして処理する必要が出てきたためです。<br />
コンソールにエラーは出力されず、サイレントでクラッシュするので問題の特定に時間がかかりました。<br />
サーバ側で抽出処理をやっても特に問題はないので、サーバ側で処理するようにしました。</p>
<h4 id="四. ツイート削除"><a href="#%E5%9B%9B.+%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E5%89%8A%E9%99%A4">四. ツイート削除</a></h4>
<p>ノーコメント</p>
<h4 id="五. 非同期処理"><a href="#%E4%BA%94.+%E9%9D%9E%E5%90%8C%E6%9C%9F%E5%87%A6%E7%90%86">五. 非同期処理</a></h4>
<p>アップロードされてそのままツイートの削除を行うと、画面がタイムアウトしてしまいます。<br />
そのため削除処理はLaravelのキューを使って非同期にしています。<br />
失敗時の再実行もできるようになるので便利ですね。</p>
<h4 id="六. メール送信"><a href="#%E5%85%AD.+%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1">六. メール送信</a></h4>
<p>必ずユーザーに到達するように<a target="_blank" rel="nofollow noopener" href="https://sendgrid.kke.co.jp/">SendGrid</a>を使っています。<br />
返信や問い合わせを受けるためにはメールサーバーの設定が必要なので注意してください。<br />
サーバーが用意できない場合は、G Suiteなどのホスティングサービスを利用しましょう。</p>
<h4 id="七. ログ出力 + Slack通知"><a href="#%E4%B8%83.+%E3%83%AD%E3%82%B0%E5%87%BA%E5%8A%9B+%2B+Slack%E9%80%9A%E7%9F%A5">七. ログ出力 + Slack通知</a></h4>
<p>本番での例外発生時にはSlackにスタックトレースを飛ばすようにしています。<br />
他にも、ツイート削除処理成功時など、正常系でも重要なものはSlackに通知を飛ばしてます。</p>
<p>ログは、出せる項目をなるべく出すようにしています。<br />
Laravelのログ出力について記事書いてるので興味あったら読んでください↓<br />
<a target="_blank" rel="nofollow noopener" href="https://qiita.com/_hiro_dev/items/cea556897a36fcec31bf">【Laravel】ログのフォーマットを変更してIPアドレスやユーザー名などを出力する</a></p>
<h3 id="2. リリース準備"><a href="#2.+%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E6%BA%96%E5%82%99">2. リリース準備</a></h3>
<h4 id="一. LP(トップページ)作成"><a href="#%E4%B8%80.+LP%28%E3%83%88%E3%83%83%E3%83%97%E3%83%9A%E3%83%BC%E3%82%B8%29%E4%BD%9C%E6%88%90">一. LP(トップページ)作成</a></h4>
<p>ユーザーに効果的に訴求できる文言を考える必要があります。<br />
デザイナーの人は腕の見せどころだと思います。<br />
文字や画像・アニメーションを使っていい感じのレイアウトにしましょう。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://peraichi.com/">ペライチ</a>などのツールを使っても良いと思います。<br />
コンバージョンに直結するので、一番力を入れるべき部分です。外注も考えましょう。</p>
<p>ツイ消し職人のようなツール系のサービスの場合は、そんなに凝らなくても結構コンバージョンします。</p>
<h4 id="二. 利用規約・プライバシーポリシーの制定"><a href="#%E4%BA%8C.+%E5%88%A9%E7%94%A8%E8%A6%8F%E7%B4%84%E3%83%BB%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%81%AE%E5%88%B6%E5%AE%9A">二. 利用規約・プライバシーポリシーの制定</a></h4>
<p><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/gp/product/B07Q721691">この本</a>が大変参考になりました。コピペできるひな形データも付いてくるのでオススメです。</p>
<h4 id="三. ☆特定商取引法に基づく表示の作成"><a href="#%E4%B8%89.+%E2%98%86%E7%89%B9%E5%AE%9A%E5%95%86%E5%8F%96%E5%BC%95%E6%B3%95%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8F%E8%A1%A8%E7%A4%BA%E3%81%AE%E4%BD%9C%E6%88%90">三. ☆特定商取引法に基づく表示の作成</a></h4>
<p>同上。<br />
有料サービスの場合は必須です。<br />
本名や住所、電話番号を晒さないといけないので、ここが一番の難関ではないでしょうか。<br />
私の場合、IP電話アプリ(SMARTalk)を使い050から始まる電話番号を載せています。</p>
<h4 id="四. Googleアナリティクス・Search Console設定"><a href="#%E5%9B%9B.+Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%83%BBSearch+Console%E8%A8%AD%E5%AE%9A">四. Googleアナリティクス・Search Console設定</a></h4>
<p>ノーコメント</p>
<h4 id="五. meta description設定"><a href="#%E4%BA%94.+meta+description%E8%A8%AD%E5%AE%9A">五. meta description設定</a></h4>
<p>Googleの検索結果でタイトルとともに出るやつです。<br />
meta keywordは不要です。</p>
<h4 id="六. ファビコン設定"><a href="#%E5%85%AD.+%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3%E8%A8%AD%E5%AE%9A">六. ファビコン設定</a></h4>
<p>GIMPで作りました。<br />
サービスのロゴがある場合はファビコンにも活かせます。</p>
<h4 id="七. OGP設定"><a href="#%E4%B8%83.+OGP%E8%A8%AD%E5%AE%9A">七. OGP設定</a></h4>
<p>GIMPで作りました。<br />
OGP画像を動的に生成するサービスでは、トップページ用の画像を同じ方法で作るのも良いかも。<br />
CTRに直結するので、ここも外注を検討しましょう。</p>
<h4 id="八. サイトマップ設定"><a href="#%E5%85%AB.+%E3%82%B5%E3%82%A4%E3%83%88%E3%83%9E%E3%83%83%E3%83%97%E8%A8%AD%E5%AE%9A">八. サイトマップ設定</a></h4>
<p>Search Consoleで送信します。<br />
<a target="_blank" rel="nofollow noopener" href="http://www.sitemapxml.jp/">sitemap.xml Editor</a>を使うと簡単に作成できます。<br />
サイトが新しく、外部からのリンクが少ない場合はあったほうが良いみたいです。</p>
<h4 id="九. SNSシェアボタンの設置"><a href="#%E4%B9%9D.+SNS%E3%82%B7%E3%82%A7%E3%82%A2%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%AE%E8%A8%AD%E7%BD%AE">九. SNSシェアボタンの設置</a></h4>
<p>↓こういうのです。<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117180/71ddf9f6-9556-80d9-1554-2d0fb875a11e.png" alt="ツイ消し職人 - twikeshi.net.png" /><br />
ユーザーに拡散してもらえる仕組みを作っておくことは重要です。</p>
<h4 id="十. お問い合わせフォームの設置"><a href="#%E5%8D%81.+%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E8%A8%AD%E7%BD%AE">十. お問い合わせフォームの設置</a></h4>
<p>自分で作るのがめんどくさい場合は、<a target="_blank" rel="nofollow noopener" href="https://www.google.com/intl/ja_jp/forms/about/">Googleフォーム</a>や<a target="_blank" rel="nofollow noopener" href="https://form.run/ja">formrun</a>などを活用しましょう。<br />
お問い合わせフォームの代わりに、チャットサポートツールを入れるのもオススメです。</p>
<h3 id="3. リリース"><a href="#3.+%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9">3. リリース</a></h3>
<h4 id="一. デプロイ"><a href="#%E4%B8%80.+%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4">一. デプロイ</a></h4>
<p>Laravel + レンタルサーバーの場合はgit pullすればほぼ終わりです。<br />
あとは.env書いてマイグレーションしてキャッシュ系のコマンドを叩くだけです。<br />
もちろん、GitHub ActionsなどのCIを設定するのも良いと思います。</p>
<p>私の場合は、以下のようなデプロイスクリプトを用意しています。</p>
<pre><code>#!/bin/sh
git pull
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan view:cache
php artisan route:cache
</code></pre>
<h4 id="二. テスト"><a href="#%E4%BA%8C.+%E3%83%86%E3%82%B9%E3%83%88">二. テスト</a></h4>
<p>本番環境で全ての機能がうまく動くことを確認しました。<br />
中規模〜大規模サービスの場合は、検証環境の用意とテスト自動化がされていないと運用がしんどくなります。</p>
<h2 id="八. リリース後"><a href="#%E5%85%AB.+%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E5%BE%8C">八. リリース後</a></h2>
<h3 id="1. 知り合い・友人への拡散"><a href="#1.+%E7%9F%A5%E3%82%8A%E5%90%88%E3%81%84%E3%83%BB%E5%8F%8B%E4%BA%BA%E3%81%B8%E3%81%AE%E6%8B%A1%E6%95%A3">1. 知り合い・友人への拡散</a></h3>
<p>LINE, Twitter, Facebookなどで拡散して使ってもらいましょう。</p>
<h3 id="2. プレスリリースを出す"><a href="#2.+%E3%83%97%E3%83%AC%E3%82%B9%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%82%92%E5%87%BA%E3%81%99">2. プレスリリースを出す</a></h3>
<p>お金があれば<a target="_blank" rel="nofollow noopener" href="https://prtimes.jp/">PR TIMES</a>などの有名サイトに出すのがオススメです。<br />
(もしくは、法人なら<a target="_blank" rel="nofollow noopener" href="https://prtimes.jp/startup_free/">スタートアップチャレンジ</a>の条件を満たすと無料になります)</p>
<p>私はお金がなかったので、<a target="_blank" rel="nofollow noopener" href="https://www.value-press.com/">valuepress</a>のフリープランで配信しました。<br />
配信は無料ですが、プレスリリースの内容を修正する場合はお金がかかるので気を付けましょう。<br />
<a target="_blank" rel="nofollow noopener" href="https://www.value-press.com/pressrelease/241519">3,200件を超えるツイートを一括削除できるツイ消しサービス「ツイ消し職人」を提供開始</a></p>
<h3 id="3. アプリ紹介サイトに登録"><a href="#3.+%E3%82%A2%E3%83%97%E3%83%AA%E7%B4%B9%E4%BB%8B%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E7%99%BB%E9%8C%B2">3. アプリ紹介サイトに登録</a></h3>
<p>私の場合、<a target="_blank" rel="nofollow noopener" href="https://anymake.app/">AnyMake</a>や<a target="_blank" rel="nofollow noopener" href="https://www.makepost.net/">makepost</a>、<a target="_blank" rel="nofollow noopener" href="https://www.eggineer.com/">Eggineer</a>、<a target="_blank" rel="nofollow noopener" href="https://applishow.com/">Applishow</a>を活用しています。</p>
<h3 id="4. 新聞の広告枠に出稿する"><a href="#4.+%E6%96%B0%E8%81%9E%E3%81%AE%E5%BA%83%E5%91%8A%E6%9E%A0%E3%81%AB%E5%87%BA%E7%A8%BF%E3%81%99%E3%82%8B">4. 新聞の広告枠に出稿する</a></h3>
<p>リリース直後にスポーツ新聞の方から電話があり、新聞とサイトに広告を載せないかと打診がありました。<br />
条件が合わなかったためお断りしましたが、人によっては選択肢になり得ると思います。</p>
<h3 id="5. アフィリエイト広告に出稿する"><a href="#5.+%E3%82%A2%E3%83%95%E3%82%A3%E3%83%AA%E3%82%A8%E3%82%A4%E3%83%88%E5%BA%83%E5%91%8A%E3%81%AB%E5%87%BA%E7%A8%BF%E3%81%99%E3%82%8B">5. アフィリエイト広告に出稿する</a></h3>
<p>検討しましたが、結局使いませんでした。<br />
お金がある場合は、<a target="_blank" rel="nofollow noopener" href="https://www.a8.net/">A8.net</a>などの大手ASPを使うのが良いと思います。<br />
<a target="_blank" rel="nofollow noopener" href="https://www.monetrack.com/">マネートラック</a>ならば初期費用0円・月額費用0円で始められるようです。</p>
<h3 id="6. SNS広告に出稿する"><a href="#6.+SNS%E5%BA%83%E5%91%8A%E3%81%AB%E5%87%BA%E7%A8%BF%E3%81%99%E3%82%8B">6. SNS広告に出稿する</a></h3>
<p>以前利用していました。<br />
私の場合はTwitterユーザーをターゲットにしたサービスなので、Twitter広告と相性が良いです。<br />
月予算は安めでもかなりコンバージョンに繋がったので、広告費は普通に回収できています。</p>
<h3 id="7. リスティング広告に出稿する"><a href="#7.+%E3%83%AA%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E5%BA%83%E5%91%8A%E3%81%AB%E5%87%BA%E7%A8%BF%E3%81%99%E3%82%8B">7. リスティング広告に出稿する</a></h3>
<p>以前利用していました。<br />
Twitter広告よりも予算が必要で効果が薄かったため、すぐにやめました。</p>
<h3 id="8. 保守開発"><a href="#8.+%E4%BF%9D%E5%AE%88%E9%96%8B%E7%99%BA">8. 保守開発</a></h3>
<p>本番環境でのエラーを監視し、新しく発現したバグがあれば修正しましょう。<br />
手元で再現しないエラーは...ユーザー問い合わせを待つしか無い。。</p>
<p>もちろん、機能追加などサービス改善のための開発は怠らないようにしましょう。<br />
大幅リニューアルや作り直しなどの選択肢もあります。</p>
<h3 id="9. ブログなどでの発信"><a href="#9.+%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AA%E3%81%A9%E3%81%A7%E3%81%AE%E7%99%BA%E4%BF%A1">9. ブログなどでの発信</a></h3>
<p>この記事のことですね。<br />
Qiita, Crieit, Zenn, Note, ブログなどの選択肢があります。<br />
サービスを知ってもらうだけでなく、転職活動などでも役に立ちます。</p>
<p>Noteに記事を投稿しているのでこちらも参考にしてください。<br />
<a target="_blank" rel="nofollow noopener" href="https://note.com/_hiro_dev/n/n3332c056a65a">たった2週間で作ったWebサービスで月11万円の売上を達成した話</a></p>
ひろ⚡個人開発
tag:crieit.net,2005:PublicArticle/15877
2020-04-28T20:39:30+09:00
2020-05-01T12:28:56+09:00
https://crieit.net/posts/fd9c13514e253694c6cf6f3fe9c72014
サービスの閉鎖の仕方
<p>今日(2020/4/28)サービスを一つ閉鎖しました。記念に残しておいても良かったのですが、GCPの無料クレジットが終わるため、残すのであれば無料運用できるよう構成を変更する作業が必要で面倒だったのと、ユーザーデータを色々扱っているサービスだったのであまり放置しておきたくないなというのがあり削除することにしました。</p>
<p>閉鎖にあたって色々と手順があると思いますので解説していきたいと思います。</p>
<p>と言いつつメインで伝えたいことはこれ一つだけです。</p>
<h2 id="スクショを撮ろう"><a href="#%E3%82%B9%E3%82%AF%E3%82%B7%E3%83%A7%E3%82%92%E6%92%AE%E3%82%8D%E3%81%86">スクショを撮ろう</a></h2>
<p>スクショは記念に撮っておきましょう。</p>
<p><a href="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5ea814883440a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5ea814883440a.png?mw=700" alt="" /></a></p>
<p>スクショを残しておかないと、将来「こんなサービスを作ってたんだ~」と何かポートフォリオ的なものを残したりする時や、サービス供養サービスなどが現れた時に画像と一緒に登録できず困ることがあります。</p>
<p>ですので適当に主要なページのスクショを取り、プロジェクトにscreenshotsフォルダを作ってそこに入れてコミットしてGitHubに保存しておきましょう。プライベートな情報を過去にcommitしたことが無いのであればpublicにしてポートフォリオ的に残しておいてもよいでしょう。</p>
<p>以上で終わりですが、一応他の作業も話しておきます。</p>
<h2 id="ユーザーに連絡"><a href="#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AB%E9%80%A3%E7%B5%A1">ユーザーに連絡</a></h2>
<p>普段から使っているユーザーがいるのであれば事前に連絡しましょう。特に課金機能がある場合は急に閉鎖するとトラブルにもなります。何ヶ月か前から課金機能終了機能の連絡をしておきましょう。</p>
<p>今回のように誰も使っていないサービスであれば急に削除しても問題ないと思います。とは言え、削除したあとに「あれつかってたのに…!」と言われたこともありました。逆にユーザー視点で、消えてほしくないサービスが有るのであればその旨を普段から開発者に伝えておくと良いでしょう。声を出さないと思いは一切伝わりませんので誰も使っていないと思われているでしょう。</p>
<h2 id="アカウントを削除しよう"><a href="#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%82%88%E3%81%86">アカウントを削除しよう</a></h2>
<p>公式アカウントや認証用などのために専用のTwitterアカウントを作っていたり、プロジェクト用にAWSやGCPの専用アカウントを作っていた場合には削除しましょう。</p>
<p>Twitterは電話番号の利用回数を消費してしまうため残しておくともったいないですし、各プラットフォームのアカウントも残しておくといつの間にか課金が発生したりしまうこともあります。まとめて全て削除してしまうと安心です。</p>
<h2 id="使っているサービスを削除しよう"><a href="#%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%82%88%E3%81%86">使っているサービスを削除しよう</a></h2>
<p>自分のアカウントにプロジェクトを作って運用していたりする場合には、アカウントをまるごと消せない場合もあると思います。その場合は一つずつ削除していきましょう。</p>
<p>GCP等の場合はプロジェクトをまるまる削除してしまうのも楽です。それ以外は一つずつ削除していきましょう。</p>
<ul>
<li>Webサーバー</li>
<li>データベースサーバー</li>
<li>ロードバランサー</li>
</ul>
<p>クラウドのWebサーバーの場合、固定IPを利用しているのに、サーバーだけ削除するとIPの保有料金だけが発生している場合もあります。そちらも忘れず削除しましょう。</p>
<p>データのバックアップなども必要であればやっておきましょう。</p>
<h2 id="独自ドメインを削除"><a href="#%E7%8B%AC%E8%87%AA%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E5%89%8A%E9%99%A4">独自ドメインを削除</a></h2>
<p>これも意外と忘れやすいかもしれません。自動更新にしていると使ってもないのに更新されてしまったりします。自動更新を解除しておきましょう。</p>
<p>レアなドメインの場合は売ってもいいと思います。</p>
<h2 id="Gmail、Chromeのユーザーを削除"><a href="#Gmail%E3%80%81Chrome%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E5%89%8A%E9%99%A4">Gmail、Chromeのユーザーを削除</a></h2>
<p>僕の場合はサービスごとにChromeのユーザーを作って利用しています。</p>
<p><a href="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5ea815408a3d0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5ea815408a3d0.png?mw=700" alt="" /></a></p>
<p>ログインやブックマークも全部独自にできるので便利です。削除するときもこのユーザーを削除すればまるまる関連している全てを削除できます。</p>
<p>また、これに合わせて事前にGoogleアカウントも削除しています。</p>
<h2 id="解析とか"><a href="#%E8%A7%A3%E6%9E%90%E3%81%A8%E3%81%8B">解析とか</a></h2>
<p>Google Analytics, Search Consoleのプロパティ、Firebaseのプロジェクトなど。登録数制限があるものは削除したほうが良さそうではありますが、残していて支障が出るものでもないので、邪魔でなければ足りなくなった時に削除でも良い気はします。</p>
<p>AdSenseはしばらくこのサイトが使われていませんとか小言を言ってくるので先に削除しておきました。</p>
<h2 id="次のサービスを作る"><a href="#%E6%AC%A1%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%9C%E3%82%8B">次のサービスを作る</a></h2>
<p>余裕ができたらやっていきましょう……!!</p>
だら@Crieit開発者