最近ちょっと思ってたんだけど、自分のNode.jsのスキル、正直ちゃんと「稼ぐ」ために使えてるかなって。チュートリアルをこなしたり、会社の仕事でAPIをいじったりはするけど、それだけじゃ、なんかこう…道具箱に良い工具があるのに、棚を作るのにしか使ってないみたいな感覚。もったいないよな。
きっかけは、ECサイトやってる友達が「競合の価格チェックだけで毎日4時間溶ける」って愚痴ってたこと。それを聞いて、あ、これだって。彼が喉から手が出るほど欲しがってる「自動化」って、俺のスキルで解決できるじゃん、と。その瞬間に、ただのコードが「金になるスクリプト」に変わったんだよね。
重点一句話
誰かの「面倒くさい」は、Node.jsを使えば、自分が寝てる間にお金を生む「自動化ツール」になる。マジで。
そもそもなんでNode.jsなの?
うん、まあPythonとかでも出来るんだけど、個人的にはNode.jsがこういう「小遣い稼ぎスクリプト」にめちゃくちゃ向いてると思う。理由はいくつかあって…
一つは、とにかくすぐ試せること。思いついたアイデアを数時間で形にできる。週末にサクッとプロトタイプ作って、週明けにはもう動かせる、みたいなスピード感。これが大事。
もう一つは、自動化との相性が抜群に良いこと。非同期処理が得意だから、複数のサイトを同時に見に行ったり、APIを叩いたり…みたいな「ながら処理」がすごく書きやすい。CPUに張り付く重い計算じゃなくて、待ち時間が多いI/Oバウンドなタスクには最適解だと思う。
あと、やっぱりnpmの存在はデカい。Webスクレイピング、メール送信、API連携…やりたいことは大体誰かがパッケージを作ってくれてる。正直、`npm install`するだけで機能の半分は完成したようなもんだし。これを活用しない手はないよね。
実例1:家賃の足しになる価格監視ボット
最初に作ったのは、本当にシンプル。ECサイトの商品価格を定期的にチェックして、設定した値段より安くなったら通知するだけのボット。でも、これが一番安定した収入になったりする。
ロジックはこんな感じ。Puppeteerっていうヘッドレスブラウザを動かして、人間がブラウザで見るのと同じようにサイトを巡回させる。
const puppeteer = require('puppeteer');
class PriceMonitor {
constructor(products) {
this.products = products;
this.browser = null;
}
async init() {
this.browser = await puppeteer.launch({ headless: true });
}
async checkPrices() {
for (const product of this.products) {
const page = await this.browser.newPage();
try {
await page.goto(product.url, { waitUntil: 'networkidle0' });
const currentPrice = await page.evaluate((selector) => {
const element = document.querySelector(selector);
return element ? parseFloat(element.textContent.replace(/[^0-9.]/g, '')) : null;
}, product.priceSelector);
if (currentPrice && currentPrice < product.targetPrice) {
this.sendAlert(product, currentPrice); // ここでメールとかSlackに通知
}
console.log(`${product.name}: ${currentPrice}円`);
} catch (error) {
console.error(`${product.name}のチェックでエラー:`, error.message);
} finally {
await page.close();
}
}
}
async sendAlert(product, price) {
console.log(`🚨アラート: ${product.name}が${price}円に値下がりしました!`);
// nodemailerとか使ってメール送信処理
}
}
// こんな感じで使う
// const monitor = new PriceMonitor([
// { name: 'ゲーミングPC', url: '...', priceSelector: '.price', targetPrice: 150000 }
// ]);
ビジネスモデルは、まあ、クライアント(例の友人とか)から「監視したい商品リスト」をもらって、月額で課金する感じ。初期設定費を1万円もらって、商品10個につき月額5000円、とかね。正直、サーバー代なんて微々たるものだから、ほとんどが利益になる。
でも注意点があって。こういうスクレイピング、すぐブロックされる。特に日本の大手ECサイト、例えば楽天とかZOZOTOWNあたりは対策が結構しっかりしてる。`robots.txt` をちゃんと確認するのはもちろん、ユーザーエージェントを定期的に変えたり、アクセス間隔にランダムな揺らぎを入れたりしないと、即BANされる。これはマジで痛い目見て学んだ…。アメリカのサイトだと割と緩いとこもあるけど、日本では通用しないことが多いかな。
実例2:単発案件で稼ぐトレンド分析ツール
これも結構需要あるやつ。ブロガーとかWebメディアの編集者って、常に「今、何がバズってるか」を知りたがってる。でも、RedditとかHacker Newsとかいろんなサイトを人力で見て回るのは面倒くさい。
そこで、特定のキーワードに関連する話題を各所から集めてきて、レポートを自動生成するスクリプトを作る。axiosでAPIを叩いたり、CheerioでHTMLをパースしたり。
const axios = require('axios');
const cheerio = require('cheerio'); // APIがないサイト用
class TrendAnalyzer {
constructor() {
this.sources = [
{ name: 'Reddit', url: 'https://www.reddit.com/r/technology/hot.json', parser: this.parseReddit },
{ name: 'HackerNews', url: 'https://hn.algolia.com/api/v1/search?tags=front_page', parser: this.parseHN }
];
}
async analyzeTrends(keyword) {
// ...各ソースからデータを取得して、下で定義したparserで整形する処理...
// 最終的にMarkdown形式のレポートを吐き出す
}
parseReddit(data, keyword) {
return data.data.children
.filter(post => post.data.title.toLowerCase().includes(keyword.toLowerCase()))
.map(post => ({ title: post.data.title, score: post.data.score }))
.slice(0, 5);
}
parseHN(data, keyword) {
return data.hits
.filter(hit => hit.title && hit.title.toLowerCase().includes(keyword.toLowerCase()))
.map(hit => ({ title: hit.title, points: hit.points }))
.slice(0, 5);
}
generateReport(results, keyword) {
let report = `# 「${keyword}」に関するトレンド分析レポート\n\n`;
results.forEach(source => {
report += `## ${source.source}\n\n`;
source.trends.forEach(trend => {
report += `- **${trend.title}** (${trend.score || trend.points} points)\n`;
});
report += '\n';
});
return report;
}
}
これは「週刊〇〇トレンドレポート」みたいな形でサービス化する。特定ジャンル(例:「AI」「ガジェット」)のレポートを毎週納品する契約で、一件あたり週に8000円とか。これも複数クライアント抱えれば、そこそこの副収入になる。
どのスクリプトから始める?特徴をまとめてみた
ここまでいくつか紹介したけど、じゃあどれがいいの?ってなると思う。正直、それぞれに一長一短ある。まあ、個人的な感覚で表にしてみるとこんな感じかな。
| スクリプトの種類 | 実装の難易度 | 収入の安定性 | 向いてるクライアント |
|---|---|---|---|
| 価格監視ボット | 低い。基本はコピペで動くレベル。ただ、サイトごとの調整が地味に面倒。 | 高い。一度設定すれば放置できるから、月額課金にしやすい。まさに不労所得。 | 個人で物販やってる人、せどらー、小規模なECショップ。 |
| トレンド分析ツール | 中くらい。APIの仕様を読んだり、HTML構造を解析したりする必要がある。 | 波があるかな…。単発のレポート依頼が多いかも。継続させるには工夫がいる。 | ブロガー、アフィリエイター、Webメディアの編集者、コンテンツマーケ担当者。 |
| SNS自動投稿 | 中くらい。各SNSのAPI利用申請がまず最初の関門。意外と面倒。 | まあまあ安定。設定変更が少なければ、これも月額の保守費をもらいやすい。 | 時間がない個人事業主、飲食店とかの小さいお店、インフルエンサー。 |
| 競合サイトの分析 | 高い。これが一番やっかい。SEOの知識もちょっと要るし、何をどう比較すれば価値ある情報になるか考えるのが難しい。 | かなり高い。でも、その分もらえる額も大きい。レポートの価値を理解してくれる相手じゃないと売れない。 | Web制作会社、マーケティング代理店、本気でSEO対策したい企業。 |
ハマりがちな失敗と、その対策
ovoこういうの作ってると、だいたい皆同じところでつまづく。俺もそうだった。先に言っておくから、同じ轍は踏まないでほしい。
失敗1:API制限とかを無視して、全力でアクセスしちゃう
最初はとにかく早く結果が見たくて、`for`ループの中で待たずにガンガンAPI叩いたり、スクレイピングしたりしちゃう。で、気づいたらIPアドレスがブロックされてる。…あるあるだよね。`robots.txt`は神のお告げだと思ってちゃんと従うこと。あと、ループの中には最低でも数百ミリ秒、できればランダムなsleepを入れる癖をつけないとダメ。マジで。
失敗2:エラー処理をサボって、夜中にスクリプトが止まる
「まあ、動くだろ」って思って`try-catch`なしで書くと、サイトのHTML構造がちょっと変わっただけで例外吐いて即死ぬ。朝起きてログ見たら、夜中の2時で処理が止まってて徒労感に襲われる。非同期処理は特に、どこでエラーが起きるか予測しづらいから、怪しい処理は全部`try-catch`で囲むくらいの臆病さが必要。
失敗3:黒い画面(ターミナル)のまま納品しようとする
これはエンジニアが一番やりがちなミス。自分たちにとってはCUIって最高にクールだけど、お客さんからしたらただの「黒い画面」で、不安しかない。Expressとかで簡単なWebインターフェースを作って、ボタン一つで実行できたり、結果が表で表示されたりするだけで、体感価値が10倍は上がる。EJSみたいな簡単なテンプレートエンジンでもいいから、UIは絶対に作るべき。
じゃあ、今週末から何する?
ここまで読んで、なんか面白そうかも、って思ったら、もう半分は成功したようなもん。難しく考えずに、まずは一つ、身近な「面倒くさい」を見つけるのが第一歩。
- 友達とか家族とか、身近な人が何に時間を使ってるか聞いてみる。
- 一番簡単そうな「価格監視ボット」あたりから、真似して作ってみる。
- まずは自分の欲しいものを対象に、1週間くらい動かしてテストしてみる。
- ちゃんとエラー処理とかログ出力をつけて、ちょっとだけ「製品っぽく」する。
- 勇気を出して、誰か一人に「月1000円でどう?」って言ってみる。最初は無料でもいい。
大きな話に見えるけど、やってることはすごく地味。でも、その地味なスクリプトが、自分が知らないところで誰かの時間を節約して、その対価としてお金を生んでくれる。この感覚は、一度味わうとちょっと癖になる。
自分のスキルって、思ってるより価値があるのかも。ただ、その価値をちゃんと届ける方向を向いてなかっただけなのかもしれないな。
もしあなたが作るとしたら、どのスクリプトが一番面白そうですか?あるいは、他に「こんなの自動化できたらな」っていうアイデアはありますか?
