Webサービスをゼロから作るととても勉強になるという話
こんにちは。
先日Twitterでお知らせさせていただきましたが、温めに温めた旅行系のWebサービス「Tabimemo」を無事にリリースすることができました。今回のお知らせ後に多くの方からたくさんのリアクションを頂き、とても嬉しく感じました。
プライベートで作っていたWebサービスを一般公開します。去年の9月くらいから着手していた(開発も止めていた期間もありました)ので大分ゆっくりな開発になりました。GWにぴったりな旅のプランをシェアするサービスです。是非使ってみてくださいm(_ _)mhttps://t.co/UENr00HL3n
— Yuta(プチ農業エンジニア) (@toyokappa) 2018年4月30日
リアクションをしていただいた方、本当に有難うございました!
ということで、今回はTabimemoをリリースしてみてどうだったのか?について振り返りを行い、Webサービスをゼロからつくるとこれだけ勉強できるんだよ!ということをお伝えできればと思います。
リリースしたサービス
とその前に、今回リリースをした「Tabimemo」がどんなサービスなのか、について少しお話をさせて頂ければと思います。
https://tabimemo.funtabimemo.fun
「Tabimemo」は自身のオリジナルの旅行のプランを共有できるサービスです。例えば、このGWで旅行に行かれた方であれば、旅行で楽しかった想い出を振り返りながら実際に「訪れたスポット」や「撮影した写真」などを登録していくだけで、下記の画像のようなルートマップ付きのオリジナルプランを作成することができます。
また、他のユーザーから投稿したプランに「いいね!」や「コメント」などを受け取ることができます。他のユーザーが投稿したプランをスポット名や地名、住所で検索できるので、手軽に次の旅行のプランを立てることも出来るサービスとなっています。
新たにWebサービスを開発してみて
サービスの紹介で少々長くなってしまいましたが、本来お話したいのは「新たにWebサービスを開発してみてどうだったか?」ということです。
結論、Webサービスをゼロから作るととても勉強になります。勉強法としてはとてもおすすめです。
なぜオススメなのかをもう少し具体的に掘り下げていければと思います。
Webサービスが動いているしくみを理解できる
やはり一番はこれかなぁと。今までユーザーとして使っていたWebサービスがどのようなしくみで動いていたのかが分かるようになります。例えば「ログインがどのようなしくみなのか?」や「いいね!ボタンがどのように動いているのか?」などです。
もちろん、自身が作るサービスの内容にもよりますが、大抵の場合は今までに自分が使ったことのあるWebサービスに仕様は似通っていくことになります。今回私が作ったTabimemoも突き詰めれば「ブログ」と仕様は大きくは変わりません。
なので、1つ何かWebサービスを作ってみることで、自分が今までに使っていたWebサービスがなぜ動いているのかについて、改めて理解をすることが出来るので、Webのしくみについて少し詳しくなることができます。
開発における守備範囲が広がる
そして、Webサービスをゼロから作ることの最大のメリットは守備範囲が広がることだと思います。仕事で開発案件に携わっていて感じることは、誰かが作ったサービスの機能拡張や運用を行うことが多いということです。
もちろん、機能拡張や運用をやっていても勉強できることは多くあるので、まったくもって悪いことではないのですが、大抵の場合、既に開発環境が整っていたり、事前のコードが存在するので、少し付け加えれば実装ができてしまうケースが割りと多いのではないかなぁと感じています。
それに対してゼロからWebサービスを作るとなると、そもそもの下地の開発環境をどうするかというところからスタートし、どういう設計で機能を実装しようかというセルフ設計を行い、最終的に本番環境を用意するために色々と設定をしなければなりません。
そうなってくると、自前で色々と調べる必要が出てきますし、開発言語がRubyメインだったとしても、フロント知識(HTMLやCSS、JavaScript等)が必要になったり、インフラ(シェル、CI、AWS等)の知識が必要になってきます。
このような必然性に駆られた場合、人間は嫌でも勉強をする習性があるようなので(少なくとも私にはありました)Webサービスを作ることで、色々な知識がついてくることは少しずつ実感ができてくるはずです。
手を動かすことで理解のスピードは上がる
先程の内容と重複をしてしまいますが、Webサービスをゼロから作り始めると、自分の知らない知識を付ける必要が出てきます。そして、必然的に手を動かして実装をしていかなければならなくなります。
開発の勉強において技術書をしばしば読む機会があるかと思いますが、個人的には開発は手を動かしてなんぼなところが多い気がしています。そうなった場合に、技術書をひたすら読むよりも、Webサービスを開発しながら必要な部分を技術書などで補っていく方が、知識を付けてから手を動かすという反復が素早くこなせるため、結果的に理解のスピードアップにも繋がると思っています。
また、理解のスピードとは少し話がずれますが、一度とある機能の実装を経験してしまえば、次に同じような実装をするタイミングが出てきた際に、開発のスピードも上がります。
プライベートで実装した内容を、タイミングよく仕事でも実装することになった際の嬉しさは、感じたことのある人には分かるはずです。
Webサービスをつくる勉強法の注意点
上記の通り、Webサービスを作ることで「素早く」「幅広く」勉強が出来ることがなんとなくわかったかと思います。いい事づくめなので、個人的には多くの人にこの勉強法を実践してほしいなぁと思うのですが、自分で感じた幾つかの注意点もあるので、そちらも併せて共有ができればと思います。
クオリティの担保が難しい
仕事でプログラミングをやっている利得は、他のメンバーにコードレビューを依頼できることです。それが個人でのプライベート開発になると基本はセルフレビューに頼るしかありません。
特に初学者の場合は、セルフレビューをするにも難しい可能性があるので、身近にレビューが出来るエンジニアがいるようであれば(いないことの方が多いかとは思いますが)見てもらった方が、クオリティの担保ができ、かつ現場で働く環境に親しい形で学ぶことができるかと思います。
開発の優先順位がブレやすい
仕事であればどんなに難しい案件でも振られた際には「やらねばならぬ」という責任感が発生するのですが、プライベートの場合にはそれがありません。どのIssueから倒すのかを考えるのは自分ですし、倒せなかったとしてもそこまで痛くないのも事実です。
そうなると何が起きるかというと、面倒な実装は後回しになりがちになります。最悪の場合、Issueは立てたものの結果実装しないで終わるケースもゼロではありません。
一番もったいないケースとしては「面倒だけど倒したら多くのことが学べるIssueをほったらかしにする」ケースです。人間は弱い生き物です。面倒なものは避けたい生き物です。ですが、「面倒だから」というだけで開発の優先順位を下げるのは非常にもったいないことなので、何が学べるのかベースで優先順位を付ける癖付けはした方がいいかなぁと思いました。
リリース時期が延びがちになる
Webサービスの醍醐味としては実際に使ってもらうことだと思います。使ってもらえると非常に嬉しいです。使ってもらえないと悲しいです。
そういったことを考えていると、リリースをするのに完璧なクオリティのサービスが出したくなります。今回のTabimemoの開発でもそうでした。自身が納得する完璧なクオリティでリリースをすることは全く持って悪いことではないのです。
ですが、どんなに完璧なサービスを作っても「基本は誰も使わない」という考えを持ってリリースをしないと凹みます。時間と労力を割いて作り出した努力の結晶とも言える自分のサービスが使われないことは非常に悲しいです。
今回改めて感じたこととしては、リリースは早めにした上で、経過を見ながら改善サイクルを回していく、そしてだめなら改めて新しいものを作る、というPDCAを回した方が、学習のサイクルも早くなるなぁと思いました。
ちっちゃくリリースして、徐々に改善していく。まさにMVPですね。初心を忘れている証拠です。精進します。
まとめ
今回「Tabimemo」というWebサービスをゼロから作ってみて凄く良い学びになりました。そして、Webサービスを作る勉強法の改善すべき点も幾つか見つかりました。この改善点を私自身は次に活かすとして、みなさんも参考までにこういうところを気をつければ、更に効率よく学べるということをご理解いただけたら嬉しいです。
引き続きTabimemoの機能追加を行いつつ、新たなアイデアも幾つか浮かんでいる状況ではあるので、今度はMVPを意識して学びのサイクルを回していければと思います。
改めて気づきがあれば、このような形で共有をさせていただきますので、引き続きよろしくお願いします!