天然パーマです。

一人で作る!Webサービスに必要な知識とか能力

iPhoneアプリの設計や開発に比べるとWebサービスのそれは、 かなり複雑でやることが多いことに改めて考えました。

Webサービスは個人で小さいものをたくさん作ってきましたし、 以前技術評論社のWEB+DB PRESSで「Webサービス[即日]開発 〜思いつきをすぐにカタチに!〜」 という30数ページの特集を書かせてもらったことがあります。

WEB+DB PRESS Vol.54
posted with amazlet at 12.02.16
和田 裕介 飯塚 慶則 羽生 章洋 高林 哲 小飼 弾 角田 直行 はまちや2 小林 陽介 西田 圭介 藤澤 瑞樹 西林 孝 加藤 幹生 木村 俊也 森田 創 鶴岡 直也 川口 耕介 ミック 伊藤 直也 武者 晶紀
技術評論社
売り上げランキング: 299828


僕にはそれなりの経験と知識があるのかもしれませんね。てへぺろ

そこで、特に個人とか小さな規模のチームでWebサービスを作っていくために必要な知識を、 開発のプロセス順に、それぞれ短く紹介します。ちなみに、ググったら同じようなテーマの記事がいくつか出てきたけど、 なんか「足りてない感」がしたのでBlogに残そうかなぁと。 また予め伝えておきますが、より詳しいお話はメルマガの方で 掲載していきたいと思います。

では行ってみよう!



1. 準備

「Webサービスを作ろう!」と思い立って、いきなりコードを書き始めることはできません。 準備をしましょう。そのためには最低限以下の4つの能力とか知識が必要だったり、 経験すると身についていきます。

  • マーケティング
  • 発想力
  • 調査
  • 設計

実はこの準備ってのが注目すべき点で、ついつい「どうやって作るのか」に目が行きがちですが Webサービスにおいて「何を作るのか」が一番大切だったりします。

マーケティング発想力はその起点になります。少なからずあなたが誰かに使ってもらいたいサービスを 作りたいならば、対抗サービスやユーザーについて調べなくてはいけません。 また、アイデアの作り方のコツを覚えておくといいでしょう。以下の題名ずばりの本がオススメです。 30分くらいで読めちゃう薄い本です。

アイデアのつくり方
アイデアのつくり方
posted with amazlet at 12.02.16
ジェームス W.ヤング
阪急コミュニケーションズ
売り上げランキング: 407


作りたいものが決まったら調査をしましょう。特に技術的なことについてです。 ここで言う技術というのは、「自分が作りたいことが世の中の利用可能な技術で実現できるか?」を意味します。 その際に「自分のスキル」と「世の中の技術」を分けて考えるといいでしょう。 アイデアを実現するために「利用可能な技術が無い」ケースはあきらめればいいですし、 「あるけれども自分にスキルがない」ケースは頑張ればいいのです。

設計は紙に書いちゃうくらい簡素なもので最初はいいかもです。個人個人のスタイルがあるので。 ユースケースという「ユーザーがシステムに対して振る舞う行為」を図にすることと、 扱うデータには何があるのかを列挙して構造化することは最低限行います。


2. 開発

いよいよ開発です。Perl、Python、Ruby、PHP... 何を使うにしろ以下の知識が必要になると思います。

  • 言語に対する理解
  • WAF
  • DB
  • フロントエンド
  • セキュリティ

言語に対する理解は当然必要です。いきなりWebアプリを作って学ぶよりも、 僕はコマンドラインのスクリプトを使って勉強したりしました。 たった以下のコマンドラインのスクリプトでもWebサービスではたまに使う「クローラー」の機能を果たしていますし、 とはいえ、言語に対する理解(構文、データ表現、ライブラリの利用など)がなくては書けないものです。

use strict;
use warnings;
use LWP::UserAgent;

my $url = $ARGV[0];
my $ua = LWP::UserAgent->new;
my $res = $ua->get($url);
my ($title) = $res->decoded_content =~ m!<title>(.+?)</title>!i;
print "$title\n";


安全で効率的に開発を進めるにはWeb Application Framework(WAF)を使うのが基本です。 ドキュメントをしっかり読んで、サンプルを動かしてみましょう。そういえば、 その際には英語の理解も必要ですね。プログラミング関係の英語って、ソースコードがよく出てくるので、 そこまで把握するのが難しくないのがよいですね。

そのサービスがデータを永続的に保存したいのであれば、DBの知識も必要です。また、 フロントエンドと言ってHTMLやCSS、JavaScriptも書かなくてはいけないと思います。 このあたりはやりながらWebのリソースや本を見て学ぶのがいいと思いますね。

最後にセキュリティに関してですが、これはフレームワークやライブラリの利用である程度防げるものもあれば、 うっかりしてしまう部分もあるので、学んだ方がよいです。徳丸さんの本が今ならオススメです。

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩
ソフトバンククリエイティブ
売り上げランキング: 2444



3. 運用

自分のマシンだけで動かしているアプリをいよいよ運用環境へと移します(配置=デプロイと言います)。

  • サーバ
  • プロモーション
  • 負荷対策

どこのサーバを使うのかは結構悩ましいところ。ですが、昔よりかかなり環境はよくなっています。 Google App EngineやdotcloudなどのPaaSなサービスもありますし、もちろんさくらやLinodeのVPSもあります。 比較的安いお値段からサーバを利用できるのではないでしょうかね。 で、もちろんその際にはLinux/Unixの知識も必要になってきますのでそれもある程度知らなきゃですね。

プロモーションと書いてるのは広告代理店がやるような大々的なものじゃなくって、 TwitterとかBlogとかでの発信も含めたものです。 僕はプレスリリースを個人名で結構出します。ITMediaやTechCrunchなどの大手メディアのメールアドレスに直接、 文面をメールします。ちなみにプレスリリース専門の配信会社もありますが、あまり効果的じゃないので、 オススメはあんまりできないっすね。

サービスに人気が出たり、パフォーマンスを改善したい時は負荷対策、チューニングを行いましょう。 MySQLでしたらインデックスの見直し、memcachedなどによるコンテンツのキャッシュ、 JobQueueを利用した非同期処理などが考えられます。 今だと、mixiやDeNAなど大規模なサービスの負荷対策ドキュメントが出ているので、規模は違いますが、 何かしらの参考になるかもしれません。



以上、なんかまだまだ足りてない気がしますが、僕が今のところ思い浮かぶ最低限はこんな感じですね。 Webサービスの開発はやることが多い分、すごく勉強になりますし、楽しい部分が多いです。 再びになりますが、 メルマガではより深くこれらWebサービスのつくり方を掘り下げていきたいと思います。