読者です 読者をやめる 読者になる 読者になる

ボクココ

サービス開発を成功させるまでの歩み

サービスを1から開発する時の実施方法

ようやく自分のサービスが完成に近づいてきた。エンジニアとして自分の頭の中で描いていたものが実現されていく過程ってのは本当に嬉しい。この思いを他の方にも味わってもらいたいと思い、このエントリーを書いてみる。

なぜサービス開発を開始できないのか

人と話していると、こういうサービスが作りたい、って相談をよく受ける。もちろんその人がエンジニア経験全くなしで言って来る場合もあるけど、エンジニアでもそこで行動を思いとどまることが多く見受けられる。これは自分も実際にそうだったんだけど、 何から開始すればいいのかがわからない という問題が根本にあるように思える。目の前が暗いから先に進むのを拒んでいる。だから今回は一人で何かサービスを作るときに考える手順を紹介しよう。

まずは必要と思われる機能を上げよう

パッと思いついた神懸かり的なアイディアにおいて必要と思われる機能をどんどん書こう。その中でまずは登場人物(レッスンサイトだったら先生、生徒、管理者など)を挙げる。登場人物毎にそれぞれで使う機能を考えてみよう。この時点ではまだ紙ベースで何ら構わない。「これ必要ってことはこれも必要か、、」みたいな連鎖が生まれてい来る感じがなかなか面白い作業だと思う。これを一般的にはユースケースというらしいが、そんなこと知らなくてもいい。

複雑になりそうな部分の流れを書こう

大体機能が決まったら、その中で複雑になりそうな部分の流れを図にまとめてみよう。これで複雑なものをシンプルにし、何を実装しなければならないのかが明確になる。ここからは最初は手書きでも良いけど、後の修正を考えるとソフトウェアを使う方が望ましい。今回は astah というモデリングツールを利用した。例えばこんな感じだ。

f:id:cevid_cpp:20140703100626p:plain

上に関連しそうなものを上げ、それがどのようなフローで関わり合っているのかを示す。左右の空白にコメントを残しておくと、後で便利だ。ここまでできたら、とりあえず誰かに見せてどう思うか聞いてみた方がいいかもしれない。思いがけないアドバイスを貰えるかもしれない。これを一般的にはシーケンス図というが知っておくといいかも。

おおざっぱなデータ構成を書こう

複雑な部分が大体見えてきたら、データベースのテーブル設計にとりあえず入る。ここでどんなのがデータとして保存しないといけないのかを明確にする。リレーションとかも考える必要があるけど、ここら辺は慣れと経験が必要なのは否めない。この時点で完璧な図を目指す必要は無いので、思いつく限り挙げていけばいい。

これを一般的にはER図というが知っておくべき。

画面設計をしてみよう

ある程度できてきたらどういう画面構成にしないといけないのかを考えていこう。各ページにボタンやテキストを配置してみてそれでサービスとして使えるのかを検証していく。ここでER図やシーケンスにおける過不足が見えてくるので、そこを適宜戻って補足していく。自分はPencil というソフトウェアを使ったが、ウェブでもできるような便利なサービスがちょくちょくできて見ているので探してみるといいだろう。ただウェブにあがってるのは大抵1週間無料でそこから有料みたいなのが多かったので無料でPencilくらいの機能があれば十分だと考えている。例えば新規登録画面はこんな感じだ。

f:id:cevid_cpp:20140703101607p:plain

こんな感じで全てのページに適用する。これが出来上がる頃には、洗練された設計図が出来上がるだろう。この全ての行程をクリアするには1〜3週間くらい必要だと思って欲しい。1日で設計作ってすぐ実装ってのは規模の小さいアプリなら良いが、あなたの素晴らしいアイディアを実現するにはもっと時間をかけて設計すべきだ。こういうのをデザイナーに任せてはいけない。意味不明な論理でのページ遷移や実装不可能な提案をしてくる可能性があるからだ。それをいちいち指摘してまた戻ってみたいな面倒なことになぬよう、ここは一番情熱のあるあなたにやって欲しい。

まとめ

最終的には画面設計とER図さえあれば開発はスタートできると思うので、この2つを完璧に作るように頑張る。そしたらもう一心不乱に開発していくだけだ。自分はかつてちょっと設計しただけでいきなり実装に入ろうとし、全く前に進めない状況に立ったことがある。そういうことのないよう、是非これを読んでくれた人にはちゃんとした設計から入ることをお勧めしたい。