nigoblog

技術系会社のCEOブログ~私的編~

これからWeb系のベンチャーで起業しようと思っている人へ考慮しなければいけないリストを作成した ~技術編~

Web系に限らずですがとにかくいろんなことを考えなければいけません。

業界で3年以上やっていたエンジニアならいざしれず、非エンジニアやフロントエンドしか触ったことのないエンジニア。
そして学生等々、Web系ベンチャーをやるには案外考えることが多いんだぜってことを伝えたいと思います。

  • 開発編
  • 運用編
  • まとめ

という流れで説明します。

開発編

主にサービスローンチまでのプロセス。
最近でいうとMVP (Minimum Viable Product)だったりアジャイルだったりが流行っていますが、
とりあえずMVPを構築するまでに考えなければいけないことをリストを書いていきます。

1. 言語は何を使うか

一番ベーシックな概念にして、一番重要かもしれません。
とりあえずフロントエンドはさておき、バックエンドをどうするか。

ここで選択肢を上げておきます。

  1. PHP
  2. Perl
  3. Ruby
  4. Python
  5. Scala

順番に悪意はありませんが、PHPの場合はすぐに始められドキュメントやライブラリも豊富。ただし世間ではぺちぱーなどと言われディスられがちだが、以前ユーザー数の衰えは感じられず。とにかく学習コストが低いのでこの記事のターゲットなら最有力候補。
PerlPython, Scalaは使ったことがないのでなんとも言えませんが、
今回はRubyを押します。使うフレームワークはもちろんRuby on Railsで。
とにかく段違いのスピードでMVPを作れます。
RubyPHPに負けず劣らず学習コストが低いのでそこも楽。
というわけで結論

言語はRubyフレームワークRailsを!

Ruby on Rails 3 アプリケーションプログラミング

Ruby on Rails 3 アプリケーションプログラミング

Railsのインストールから簡単なアプリケーションの作成まで - nigoblog
Devise + omniauthでfacebookでログインする機能を実装でハマったところを説明 - nigoblog

2. データベースは何を使うか

これはMySQLがいいですね。なにせドキュメントが多い!
他にもmongoDBとかもありますが、メインで使うならやっぱりRDBMSがいいでしょう。

データベースはMySQLを!

実践ハイパフォーマンスMySQL 第2版

実践ハイパフォーマンスMySQL 第2版

3. サーバーをどう用意するか

はっきりいうとレンタルサーバーはありえない。
あれは個人でブログとかやるのに利用する程度。ビジネス用にはつかえないですね。
あと自社サーバー、ラックを立ててやるタイプの。これはセキュリティ上良くない上に金もかかるし場所もかかるし電気代(CPU, クーラー)もかかるしスケールしにくいし、スタートアップには全く向いていない。
というわけでVPSクラウドの2択。ここで推したいのはクラウド、さらにAWSを推します。
簡単、すぐにサーバーをたてられ、周辺のサーバー系サービスもフルで揃っている。
先人たちが残したデザインパターンに沿っていけばだれでも簡単に冗長化ができます。
ただし問題はコスト計算がやっかいなところ。
あらゆるサービスがあるのですべてを考慮するのは大変。だけどそれ以上に便利なのがAWS

サーバー周りはAWSですべて解決!

Amazon Web Services クラウドデザインパターン実装ガイド

Amazon Web Services クラウドデザインパターン実装ガイド

Amazon Web Services クラウドデザインパターン 設計ガイド

Amazon Web Services クラウドデザインパターン 設計ガイド

お手軽環境構築 !chefでrubyのバージョンを2.0.0-p195にする方法 ~CentOS~ - nigoblog
Vagrantとchefで簡単お手軽ローカル環境構築 - nigoblog

4. バージョン管理をどうするか

バージョン管理は要するにソースコードをどう管理していくか。
これはGit一択。Subversionは正直古い(最近のベンチャーで使ってる話を聞いたことない)。
特にGithubを利用すればGit用にサーバーを建てる必要もない。

バージョン管理にはGithubで!

Gitポケットリファレンス

Gitポケットリファレンス

GitとGithubの使い方~超初級編~ - nigoblog
Githubの使い方 Rails編 ~railsプロジェクトをGithubのリポジトリにアップ~ - nigoblog

5. デプロイをどうするか

Railsを使うのであればCapistrano一択。
今どきFTPでアップする人はいるのかな?
デプロイ前にさらにJenkins等CIツールを利用できれば最高。
他にもCircle CIというものがあるみたいですが。。。正直このへんはあまり詳しくないのでおすすめがあれば。

Capistranoを使っていればなんとかなる

Ruby on Rails環境構築ガイド

Ruby on Rails環境構築ガイド

Capistranoの詳しい使い方が書かれています

6. ドメインSSL証明書はどうするか

ドメインはできればサービス名で、サービス名を決める際に予め利用できるかどうかはチェケラーしとく必要あり。
ドメインSSL証明書は特にこだわりがなければ一番安いところで。

サービス名となるべく一致したドメインを取得すること!ドメインの有無を考えてサービス名を考える必要あり。

7. セキュリティはどうするか

CSRFSQLインジェクションXSSRailsがすべて解決してくれる。
ただそれらがどのような攻撃方法かを知っておく必要はあり。

リリース前には徳丸本を読むこと!

8. メール配信はどうするか

webサービスには欠かせないメール配信機能。
登録時のメール認証。パスワード忘れ時のメール経由での変更通知。
さらにはユーザーへのプッシュ!
これらはWebサービスには必須機能。メール配信は設定がかなり楽なSESをおすすめします。
AWSの機能の一つです。

SESを使えば一瞬で開始可能!



運用編

実際にローンチ・リリースした後の話。
ユーザーが入ってきてサービスが周り、収益が上がる段階。

9. 監視をどうするか

サービスにはどれだけ落ちている時間を減らせるかという事情があります。
監視には主に

  • 外部監視
  • 内部監視
  • パフォーマンス監視

があります。
外部監視はつながるかどうか
内部監視はCPUやメモリなどの使用状況はどうか
パフォーマンス監視はスロークエリなどがないか
などいろいろありますが、上記の役目を果たします。
じゃあ具体的に何を使うかということですが、
外部監視にはNagios
内部監視にはGanglia
パフォーマンス監視にはNewRelic
といったところでしょうか。
他に良いのがあればよろしくお願いします。

三種類の監視体制で落ちない信頼性の高いサービスを!

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

10. ディスク容量をどうするか

基本的webサービスはサーバー上に置かれます。
そしてサーバーのディスクを利用します。
開発時ならばこの時のディスクは
OS + ミドルウェア + Webアプリケーション
で使用されます。
しかし運用時にはLogがどんどんたまっていきます。
ApacheやNginxなどのアクセスログやエラーログ、
アプリケーションのエラーログ
cronの実行ログ
その他ミドルウェアのシステムログ等々
これらによりディスクの容量はどんどん圧迫されていきます。
なので運用時には
OS + ミドルウェア + Webアプリケーション + ログ
で使用されます。
これを考慮してディスクを増やしていきます。
Amazon Web ServiceではEBSというのを増やしていけば、枯渇した都度、ディスクを増やすことができます。
また、単純にディスクを増やすのではなく、ログファイルを別サーバーに逃がすという手法もあります。
これはfluentdを利用します。

運用時にはログによるディスク容量の圧迫に気をつけること!

Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]

Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]

fluentdの事が書いてあります

11. 決済システムをどうするか

例えば課金処理やプレミアムユーザー等、ユーザーに決済をさせる仕組み。
様々な企業がありますが、簡単にできるものとして

等があります。これらはSDKも公開されており、web上に資料があるため、簡単に導入できます。

WEB+DB PRESS Vol.76

WEB+DB PRESS Vol.76

  • 作者: 五十嵐啓人,伊野亘輝,近藤宇智朗,渡邊恵太,須藤耕平,中島聡,A-Listers,はまちや2,川添貴生,片山育美,池田拓司,濱崎健吾,佐藤太一,曾川景介,久保渓,門脇恒平,登尾徳誠,伊藤直也,mala,後藤秀宣,若原祥正,奥野幹也,大林源,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/08/24
  • メディア: 大型本
  • この商品を含むブログを見る
上記2つについて書かれています

12. KPI管理をどうするか

当然、サービスを運用するからには大きくしていきたいですよね。
その際、しっかり数値を取り、分析して改善することが重要です。
その数値の取り方や分析についてです。
まず、アクセス解析ならgoogle analyticsが無料で使えて良いでしょう。
ただ、あくまでとれるのはアクセスに関わることだけ、
他にも直接DBを叩かなければいけないKPIもあります。
Railsの場合はgoogle_driveというgemがあり、cronでDBにアクセスし、google docsのスプレットシートに出力するやり方が出来ます。
これによってSQLがわからない非エンジニアでも確認ができます。
管理画面を作る時間がない場合そのような方法を取りましょう。

Google Driveを利用したKPI管理!

まとめ

とりあえず最初はこんな感じでしょうか。
まだまだあると思うので徐々に加筆はしていきますが、
とにかくこれだけ考慮しなければいけないということを非エンジニアの方に伝わると良いかと思います。