ボクココ

個人開発に関するテックブログ

Web サービス開発に必要な技能について

ども、@kimihom です。

先日とある雑誌の記者さんから取材を受けて、自分のスキルについて色々と聞かれた。私自身は何かに特化したスペシャリストというよりも、あらゆることが一人でできるジェネラリストの部類である。前回の記事では web サービスのアイディアについて必要なことを書いたが、今回はそのアイディアを実現するためのジェネラリストとして必要な技能について紹介する。

www.bokukoko.info

俗にいう"有名エンジニア"の方々は何かの技術に特化したスペシャリストである場合が多いので下記の事項には当てはまらない。あくまでこれは1人のエンジニアとしての参考情報にすぎないことに注意していただきたい。

一人でサービスを作りきる能力を磨く

何かに特化したスペシャリストの人が、 CSS でデザインを整えたりすることとサーバーの負荷監視などをすることを同時に行うことは困難だ。だけども、ジェネラリストの場合はそのような技術の好き嫌いを無くし、全てできるようになる必要がある。

ただその中でやる必要のないことに時間を費やすような無駄なことをしてはならない。大抵のインフラ技術ってのは Heroku などの PaaS を使うことで共通化できるし、CSS もフレームワークに載せることで必要な実装を最小限に止めることができる。このようにオープンソースコミュニティやベンダーの力を借りながらも、自分の理想のサービスを最短で高品質なものにしていく力が求められる。

ちょっとでもオープンソース界隈の世界に足を踏み入れたなら、その技術にコントリビュート、つまりプルリクエストを通じてコードを改善していくほどの力を持つエンジニアこそ正義だと思われるかもしれない。しかしそんなこともなくてちゃんとそのオープンソースを使って、人々に価値を提供できるようなサービスを開発し、それによってそのオープンソースがより盛り上がって行けばそれでも十分すぎる貢献になるのである。

私はそう割り切って、いかに良いオープンソースを探し出して利用し、良い形で顧客に提供できるかに力を注ぐようにしている。

つまり求められるのは「正しいソフトウェアやミドルウェアを選別し利用する」ことである。言い換えれば、世に出回っている様々なAPI やプラットフォームのドキュメントを正しく読み解き、理解して使えるようになる力が求められる。組み合わせ・マッシュアップの世界に近いものがある。

その中でも特に一番大事な顧客の見える部分、つまり機能開発をより効果的に開発できるようになる技術を選ばなければならない。つまり、AWS で IaaS から構築し、yum や apt-get でソフトウェアをインストールするような時間をできる限り無くし、PaaS や その他 API サービスを効果的に活用するような道を模索しなければならない。

この記事では具体的にどんな勉強をすべきでどんなことができるようになるべきかの具体的な行動については示さない。それはご自身の興味関心に応じて変わることだし、その自分から学んでいくスタイルを身につけなければジェネラリストとしてのエンジニアを目指すべきではないからだ。自分の作りたいものを実現する上で何が必要かを正しく調べて結論を出せるように訓練していこう。

経験を積んで良いサービスとは何かについて自分なりの結論を出す

最初に作った自分のプロダクトってのは大抵は酷いモノである。大抵は誰にも使われないか 一部の友達にだけ使われてサービスは終了する運命にある。

だが、その次に作るプロダクトはその前のプロダクトより確実に良いものになっているはずだ。以前作ったプロダクト開発の反省を踏まえて、より良いデザインや機能について自分なりの哲学のようなものが次第に出来上がってくる。こうして意思のあるプロダクトを作り上げることができるようになり、やがて使ってくれるユーザーがいるアプリやサービスを開発することができるようになる。

自分で作るだけでなく、他の素晴らしいサービスを触って実感することも大切だ。色々な人に使われているサービスを実際に触ってみることで、「こういう機能やデザインは良いな」と思った部分を自分のサービスに反映していくことができる。

その学習を通して色々なサービスを何回も作ってはクローズするような段階の果てに理想のサービス開発を実現することができるようになる。その継続したサービス開発がより次なる高みへ連れて行ってくれる。

その中でも光る技術を持つ

今までの話とはちょっと矛盾するんだけど、ジェネラリストの中でもスペシャリストの要素を持つ必要が出てくる。つまり、「ある程度の技術は60点だけど、この技術は95点である」という状態が理想だ。

なぜならば、全て60点の場合は他の誰でも作れるサービスしか作れなくなってしまうからだ。それでもアイディア次第では人々に役立つものが作れるかもしれない。ただしあまり新規性を感じることができないサービスであるため、うまくマーケティングを通じて成功させるしか方法がなくなってしまう。

エンジニアであれば技術で差をつけたいと思うはずだ。だからこそある程度のことは一人でできるけど、それでもこの技術には絶対の自信があるという何かを磨き続けていこう。その技術に関しては常に Github の Issue を監視していたり、ドキュメントを購読して最新情報を得るようにしたりするような活動が必要になってくる。それこそがエンジニアとして違いを生むサービスを実現することのできるようになる秘訣だ。

終わりに

このようなエンジニアはスタートアップや新規事業部門などゼロからサービスを作っていくところでは重宝される。エンジニアでも色々な種類があるので自分のなりたい理想像について考えた上で行動していかなければならない。

私としては一人でサービス開発ができるエンジニアが増えていけば、よりシンプルで使いやすいサービスが日本でも増えていくと思っている。そんなサービスを日頃から使っていく日が、つまりはあなたが作ったサービスを使っていく日が来るのを心待ちにしている。