【個人開発】アイデアに困った時に見るアイデアまとめを作ろうとしてやめたので供養します

ここで個人開発したサービスをお知らせするのが常ですが、自身の不徳の致すところで大したリリースもないので、誰かの役にたつかも?という情報をお届けできればと思います。

どうぞよろしくお願いいたします。

# 何を紹介するの?

さて、本日公開するものは世界中で個人、またはスタートアップで開発されたサービスをまとめます。

スクレイピングしてまとめのSpreadsheetを作ろうとしていましたが、途中でめんどくさくなりました。ので供養します。

URL: StratupList

*あくまでも自分用に作っていたのを公開するだけなのでなんの工夫もなくクオリティとかは大したことないです、、すみません。。でもサービスのプロトタイプの考え方で言えばこれで十分じゃないかとか言い訳してみたり、、ぐぬぬ

# なんでつくったの?

「個人開発者になりたい、そんでもって一発当てたい!」と思っているのですが、一人で作ったものが大当たりするなんて相当な何かがないと難しいと思っていて、だったら誰かが成功した道を同じように辿ればいいんじゃない?という考えに至ったのが始まりです。

また、日本人にとって海外のプロダクト・サービスは一切触れる機会がなく、向こうで有名だったとしても、日本語にローカライズされない限りは利用者は増えません。

そこで、日本人のために日本語で作れば、日本のインターネットコミュニティの中でバズることができるのでは?と考え、そのために情報を集め始めたのがきっかけです。

# どこから情報を取っているの?

現在では、2つのサイトから取っています。

  1. [ The 24 Hour Startup Challenge ]
  2. [ Breakout List ]

上記のサイトは開発者も知らないようなサイトです。 結構ニッチなアイデアだったり、とてもインスピレーションが得られそうなものなど、ずっと見ていても自分は飽きないのでたまに見ているのですが、日本人がリーチしないのも勿体無いなと思います。

今後も、定期的に更新できたらいいですし、日本語の注釈やらもつけられたらなと思います。

# 使っている技術は?

一応AdventCalendarだし技術的な内容も軽く掲載しておきます。

puppeteerを利用してスクレイピングしており、取得した情報をgoogleapisで書き込んでいます。 puppeteerについて詳しくは以下の参考記事をご覧ください。

例えば、The 24 Hour Startup Challengeをスクレイピングするには下記のコードで実現できます。 もっといい書き方があると思います。。

sheetsというのは別モジュールで、SpreadsheetsのAuthや、スクレイピングしてできた配列を実際に書き込む処理をするようになっています。


const sheets = require('./sheets')
const puppeteer = require('puppeteer')

const scrape = async () => {
  
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto('https://24hrstartup.com/voting')

  let links = await page.$$eval('.product-card__caption > a', async (list) => {
    return list.map(data => data.href)
  })

  let result = []
  for (link of links) {
    try {
      await page.goto(link)

      let title = await page.$eval('div.header__headlines > h1', item => {
        return item.textContent
      })
      let description = await page.$eval('div.header__headlines > p', item => {
        return item.textContent
      })
      let productLink = await page.$eval('div.row > div > a', item => {
        return item.href
      })

      result.push([
        title,
        description,
        productLink
      ])
    } catch (err) {
      console.log(err)
      continue
    }
  }

  browser.close()
  return result
}

const main = async () => {
  try {
    const array = await scrape()
    sheets.write(array)
  } catch (error) {
    console.log(error)
  }
}

main()

# なんか見栄え悪くない?

ロゴ取ればよかったと反省しています。。 面倒臭さが勝ってしまいました。

# なんで挫折したの?

限りある人生の中において、リソースを割くべきものでなく、時間対効果が悪いと判断し戦略的撤退を余儀なくされました。 残念です。

# Twitterやってる?

やってます!

[ @mtfum | Twitter ]

フォローお願いします!!! たぶんフォロバします!

最後までお読みいただき、ありがとうございました!!!!