こんにちは、財前です。
最近、個人開発に取り組む方が増えているようですね。
日本の終身雇用も崩壊しつつあり、政府も副業を勧めている昨今、ITエンジニアとしてのスキルを高め、個人で収益を得られるような個人開発に魅力を感じる人は多いです。
堅苦しい話は置いておいても、個人で開発したWebサービスを公開して、多くの人の生活に影響を与えることは、とてもやりがいがあることですし、夢があります。
この記事を読まれているあなたは、既にITエンジニアとして働かれている方でしょうか。
それとも、手に職付けることを目指して、個人でプログラミングを勉強されている方でしょうか。
どちらにしても、個人開発でWebサービスを作ることには、大きなメリットがあります。
個人開発を通して休みの日に開発を行うことは、仕事のようなプレッシャーをあまり感じる必要もなく、自由な発想で、技術を学びながら、開発経験を積むことができます。
しかし、いざ個人開発でWebサービスを作ろうとしてみると、意外に何から手を付けて良いのか分からないこともあります。
会社での業務であれば、多くの人がそれぞれの役割をこなしていく中で、1つのWebサービスが完成していきます。
しかし、個人開発の場合、企画・デザイン・開発など、全ての業務を一人で行う必要があります。
フロントエンドエンジニアの方であれば、サーバーサイドの開発は苦手かもしれませんし、普段サーバーサイドの開発をメインで行っている方であれば、UIデザインの経験はないかもしれません。
もっと言えば、普段アプリケーション開発を行っているエンジニアであっても、基盤構築にまで精通しているとは限りません。
また、Webサービスの企画やビジネスの戦略については、普段全く気にしていない開発者の方も多いでしょう。
そういった背景から、個人開発というのは、ある意味でとっつきにくく、完成までのロードマップを描きにくい部分があるかもしれません。
この記事は、個人開発でWebサービスを開発していくための手順や気を付ける点をまとめることで、全ての人が、個人開発の途中で道に迷わないようにすることを目的としています。
この記事が、皆さんが個人開発を通してそれぞれの目的を達成していくための、一助になれば幸いです。
企画
まず、Webサービスを作るためには、企画を行う必要があります。
どういった人たちをターゲットにして、どのような価値を提供するのか。
そして、収益化するのであれば、マネタイズポイントはどうするのか。
狙っている市場には、どんなライバルがいて、どのように差別化していくのか。。。
様々なことを考慮して、今後の開発の方向性を決めていく必要があります。
…と、理想を言えばそうなのですが、初めて個人開発に挑戦するような場合は、そこまで堅苦しく考える必要はないように思います。
1つ目の企画で良いWebサービスを作れなくても、開発の過程で得たスキルを、また次の個人開発に活かせば良いのです。
何が当たるかなんて、一部の天才を覗いて、誰にも分かりません。
何度も企画・開発・リリースを繰り返していくうちに、精度を高めていきましょう。
最初のアイデアを出すためのとっかかりが欲しい人には、以下の2つの方法を試してみることをお勧めします:
- 身近な人や自分の課題をITで解決できないかを考える
- 既存のWebサービスの真似をしつつ、ターゲットを絞り込むことで差別化できないか考える
まずは身近な人や自分自身が日頃困っていることが、ITやWebの力で解決できないかを考えます。
誰かの課題をITで解決するアイデアが浮かべば、あとはそれを何とかして実装するだけです。
ただ何となく開発するだけでなく、そこに「誰かの課題を解決する」というモチベーションがあれば、完成したときに感謝され、達成感を得られることもあるでしょう。
また何より、後から収益化する際に、やりやすくなります。
もしくは、既存の有名なWebサービスの、一部の機能を取り出すことで差別化できないか考えるというアプローチを取るのも良いでしょう。
たとえば楽天やAmazon等のECサイトの真似をしつつ、子供向けのおもちゃの販売に特化することで差別化したり、既存のマッチングサービスの真似をしつつ、中高年向けに特化することで差別化したり…
上記は単なる例ですが、一般的に、個人開発者のような市場における弱者(チャレンジャー)は、ある特定の分野に特化してリソースを集中することで差別化を図ることが、良い戦略であると言われています。
もし上記の2つの方法を試しても、どうしてもWebサービスのアイデアが思い浮かばない人は、以下の記事を読んでみてください:
上記の記事では、Webサービスのアイデア出しの、7つの方法について説明しています。
7つ全て試してみれば、1つぐらいはアイデアが思い浮かぶはずです。
ただ、Webサービスの企画をしていくうえで、気を付けるべきことが1つあります。
それは、
コストがかかるようなことは極力避ける
ということです。
ビジネスのアイデアがひらめいた時、人はテンションが上がるものです。
「もしかしたら自分は天才かもしれない!」
と、心の中で叫びながら、いてもたってもいられなくなります。
開発のモチベーションを維持する上では、このワクワクはとても良いものです。
ただ、1つ忘れてはいけないのは、「どんなアイデアが世の中に受けるのかは、やってみないと誰にもわからない」ということです。
企画段階では絶対にうまくいくと思ったWebサービスが、いざリリースしてみると、イマイチ伸びない… というのは、よくある話です。
もしくは、人気が出るまでにしばらく時間がかかるということも、よく起こります。
そんな時、もし大きなコストを払い続けなければ維持できないWebサービスを構築してしまっていた場合、どうなるでしょうか。
たとえば、全く収益にならないWebサービスを維持するために、高いサーバー代を払い続けなければいけないとしたら、人気が出る前に心が折れ、サービスを畳んでしまうかもしれません。
しばらく待てば人気が出るのであればまだ良いものの、永久に人気が出ないことだってあり得ます。
そんなシステムを維持するためにお金を払い続けるのは、精神的にもつらいものがあります。
そうならないためにも、良いアイデアが思いついた時、勢いだけで実装に取り掛かる前に、「たとえ人気が出なくても、今後も持続的に個人開発を続けていけるような状況」を維持することを、忘れないようにしましょう。
1発目のサービスで大きく当てることにとらわれ過ぎず、何度もチャレンジするつもりで取り組むのが良いと思います。
技術選定
ある程度どんなWebサービスを作るのかの企画ができたら、開発を行うための技術の選定を行いましょう。
具体的には以下のようなことを決めていく必要があります。
- プログラミング言語・Webフレームワーク
- 利用するサーバーの種類
プログラミング言語・Webフレームワーク
読者の方が「既にITエンジニアとして働いている場合」と、「IT初心者の場合」の二通りのパターンを想定して、技術選定のやり方を書いていきます。
どちらか該当する方を読んでいただければ、十分だと思います。
既にエンジニアとして働いている場合
前提として、もしあなたが既にITエンジニアとして働いていて、仕事で日頃から使っている技術があるのであれば、個人開発でもそれを使うのが良いと思います。
フルタイムで働いているのであれば、基本的には1週間のうちのほとんどの時間を、業務をして過ごすことになるでしょう。
そう考えると、業務の中で得られる知識やスキルと言うのは、ばかにできません。
日頃から使い慣れた技術を使うことは、個人開発をスムーズに進める上で、大きな助けになります。
また、個人開発の中で身につけた知識を、日頃の仕事に還元していくこともできます。
個人開発で新しい技術にチャレンジしてみたい場合もあるとは思いますが、その場合も、フロントエンド・サーバーサイド・DBなど、全てをまるっきり新しい技術で固めるよりも、日頃から触っている技術をベースにして、部分的に新しい技術を採用していくのが良いと思います。
個人開発では、会社での業務のように、相談する上司や同僚がいるわけではありません。
全てがまるっきり経験のない技術だと、躓くことが多過ぎで、途中で挫折する原因になりかねません。
日頃から慣れ親しんだ技術をメインにしながら、適度に新しいことに挑戦してくのが良いでしょう。
開発の経験が浅い、もしくは初心者の場合
何か現状で興味があるプログラミング言語がある場合は、もちろんそれを使って開発してみるのも良いと思います。
ただ、まだ特定のプログラミング言語へのこだわりがないような場合は、個人的には、JavaScriptを開発言語として採用するのが良いと考えています。
理由としては、JavaScriptさえ覚えれば、Webサービスの開発に必要な全てのことが行えるからです。
基本的には、Webに関するプログラミングは2種類に大別されます。
それは、サーバーサイド開発とフロントエンド開発です。
ここではサーバーサイドとフロントエンドの詳細な説明は省きますが、気になる方は、以下の過去記事を参照してみてください:
サーバーサイドの開発には様々な言語が用いられますが、フロントエンドの開発は、実質JavaScript一択です。
WebAssemblyという技術を用いれば、JavaScript以外の言語でフロントエンド開発を行うこともできるのですが、まだまだWebAssemblyの利用は主流ではなく、開発に必要な情報も世の中にあまり出回っていない状況なので、開発経験が浅い方がいきなり取り組む代物ではありません。
つまり、どういうことかと言うと、もしサーバーサイド言語の開発にJavaScript以外の言語を採用してしまうと、1つのWebサービスを作るために、最低でも2つの言語を学ばなければいけないということです。
単純に考えて、学習コストは2倍です。
もちろん、全ての言語で共通して使える知識もあるでしょうが、2つの言語の文法の違いなどで混乱して、開発の手が止まってしまう場面もあるでしょう。
まずはJavaScriptというプログラミング言語を深く学び、サーバーサイド・フロントエンドの両方の開発をこなせるようになるところを目指した方が良いと思います。
もしサーバーサイドでJavaScriptを利用する場合には、Node.jsという技術を利用するのが一般的です。
Node.jsを用いてWebサービスを開発するための一通りの機能を備えた、Express.jsというフレームワークなどについて調べてみて、開発に使ってみることをお勧めします。
Expressに関する書籍も世の中にはたくさんありますから、体系的に知識を学ぶ方法もたくさんあります。
Expressで基礎を学んだら、Next.jsなど、JavaScriptを使った少し応用的なWeb開発にチャレンジしてみるのも良いと思います。
また、JavaScriptの使い方に慣れてきたら、次の個人開発では、TypeScriptに挑戦してみるのも良いでしょう。
JavaScriptとTypeScriptはとても似ている(同じと言っても過言ではない)言語ですが、慣れるとTypeScriptの方が圧倒的に書きやすいです。
TypeScriptを使うためには初期設定などが必要になるため、使い始めるのは、ある程度JavaScriptに慣れてきてからでも良いと思います。
利用するサーバーの種類
個人開発で利用すべきサーバーの種類については、以前、以下のような記事を書きました:
上記の記事には、「個人開発においては、国内のVPS(バーチャル・プライベート・サーバー)の利用が、コスト面・利便性の面から最適ではないか」という旨が書いてあります。
具体的には、ConoHa VPSや、さくらのVPSを使えば、コストを抑えながら、Webサービスの開発に必要な一通りの機能がスムーズに利用できると思います。
より詳細が気になる方は、上記の記事をご参照ください。
設計・開発
さて、開発に使用する技術の選定ができたら、設計・開発に取り掛かっていきます。
最低限の機能を、できる限り素早く作ってリリースする
大規模開発でよく行われるウォーターフォール呼ばれる手法の開発では、「設計」のフェーズと、「開発」のフェーズは、はっきりと分かれています。
ただ、個人開発においては、そこを厳密に区切る必要性は薄いと思います。
たしかに、複数人のチームで開発をする時は、開発を行うに当たって、事前にどのような設計で開発を進めていくのかをに明確にしておく必要があります。
そうしないと、各チームごとに認識が違うまま開発が進んでしまい、いざ成果物を結合したときにうまく動かない、という事態に陥りかねません。
しかし、個人開発においては、開発者は自分一人であるうえに、そもそもそんなに大規模なシステムを作ることはないと思います。
逆に、もしあなたが大規模なシステムの開発を企画段階で掲げてしまった場合は、いきなりすべてを作ろうとするのではなく、まずは、必要最低限の部分的な機能でリリースできないかを考えましょう。
MVP開発と呼ばれることもありますが、まずはユーザーにとって最低限必要な、核となる機能の開発に専念しましょう。
MVP開発について気になる方は、こちらの外部記事などを参考にしてみてください:
個人開発の場合は、自分用に一生懸命に設計書などを作成する必要はなく、頭の中でザックリと方針が見えていれば十分だと思います。
まずは最低限の機能をスピーディーに仕上げて、開発中に挫折する可能性を1%でも減らしましょう。
自分一人の頭の中であれこれ悩むよりも、まずは最低限の機能をユーザーに公開して、その反応を見ることで、どんな機能が世の中に求められているのかを知ることができます。
動作確認・テスト
動作確認やソフトウェアテストにどこまで時間をかけるかは、あなたがどんなWebサービスを作るかにもよります。
ただのWebサイトのようなものであれば、そこまでテストに時間をかけなくても、リリース後に指摘を受けてから修正するのでも十分間に合うでしょう。
しかし、もしあなたの作ったシステムがユーザーのデータを預かっている場合や、決済の機能が組み込まれているような場合は、その部分は徹底的にテストする必要があります。
会社で働きながらWebサービスを作る場合は、たとえそのサービスにバグがあったとしても、その責任は会社にあります。
意図的にバグを仕込むようなことをしない限りは、基本的には、開発者個人が損害賠償を支払うようなことはありません。
そういった意味で、会社員としての開発者は、会社に守られている部分があります。
しかし、もしあなたが個人で開発したWebサービスの不具合によって、ユーザーのデータが漏洩した場合や、ユーザーに金銭的な不利益が生じてしまった場合は、開発者本人が責任を問われることになります。
最悪の場合、個人では払いきれないような損害賠償を請求される事態に陥ることもあり得ます。
もし可能であれば、そもそも企画段階で、個人情報の扱いなどは極力避けられるのが一番良いです。
ただ、サービスの特性上、どうしてもそれらが避けられない場合は、ソフトウェアテストの段階で、徹底的に安全性を確認しましょう。
リリース
テストで安全性を確認したら、あとはリリースするだけです。
上記で選定したサーバー上に、開発したソフトウェアをリリースしましょう。
もしくは、全ての開発が終了する前に、事前に段階的にリリースしていくのも良いと思います。
基本的にはWebサービスをリリースしただけの段階では、GoogleのクローラーもあなたのWebサービスを見付けることはできませんし、サイトにユーザーが訪れることもありません。
開発を進めながら少しずつ本番環境にリリースしていき、本番環境でも動作することを随時確認しながら開発を進めていくのが良いと思います。
ただ、それを行う場合は、第三者が訪れる可能性も0ではないことには、気に留めておきましょう。
見られたら困る情報が画面に表示されているような状態で、本番環境に公開してはいけません。
さて、一通りの機能が本番に出揃ったら、SNSなどでURLをシェアしてユーザーを呼び込んだり、GoogleのSearch Consoleを用いて、あなたのWebサービスの存在をGoogleに知らせましょう。
多くのユーザーがあなたのWebサービスを訪れることを、祈っています!
この記事が、あなたの個人開発のヒントになりましたら、幸いです。
最後まで読んで下さり、ありがとうございました!
コメント