ネクストイノベーション開発ブログ

ネット診察「スマ診」を手がけるネクストイノベーション株式会社の開発ブログです。

ネット診察サービス「スマ診」を提供するネクストイノベーション株式会社の開発者ブログです。

入社して間もない新人がWebアプリケーションの再構築プロジェクトをリードするためにまずやったこと

はじめまして。

今年の6月にネクスイノベーション株式会社(以下弊社)に入社したWebエンジニアの大山と申します。

私が弊社に入社してすぐ、弊社が運用しているサービス「スマ診」のアプリケーションを再構築して大幅リニューアルするプロジェクトが始動し、私も参加することになりました。 現在このプロジェクトにはWebアプリに2名、iOS, Androidアプリに2名と計4名のエンジニアがアサインされています。私は現在Webサーバサイドの開発をメインに担当していますが、プロジェクト初期からWebフロントエンドやインフラの設計のみならず、サービス全体の設計にも積極的に関わってきました。

そこで今回は「入社してすぐ、システムをイチから作り直すプロジェクトに参加することになったWebエンジニア」が、まずはじめに何をやったのかについて簡単にお話させていただきます。
ちなみに、アプリケーションを「再構築」することになった経緯について説明するのは今回のテーマに合わないため割愛しますが、弊社CTOのこちらの投稿に目を通していただければ、ある程度お察しできるのではないかと思います。気になる方は是非お読みください。

nextinnovation-tec.hatenablog.com

アプリケーションを再構築するにあたってはじめにやったこと・やらなかったこと

「アプリケーション再構築プロジェクト」に参加することになった私は入社して間もない新人です。つまりサービスの仕様や運用プロセスについての理解度が他のメンバーと比較して全くない状態です。とはいえ、既存の仕様を把握しているデザイナーの方が新しいUIのワイヤーフレームを作成していたので、フロントエンドの開発にはすぐにでも着手することは可能でした。
しかし、Webサーバサイドの仕様については全く固まっておらず、詳細な仕様を取り決めるためにすぐ動ける人間が私しかいないという状態でした。なので私は早急に現在稼働中のサービスの「いま」を知るために動くことを選択しました。
このプロセスを進めるにあたってはじめに個人的にやったこと、やらなかったことがあったので紹介します。

やったこと

やったことは以下の2つです。それぞれの詳細はこの後に説明します。

  1. 社内にいる全メンバーとコミュニケーションを取る
  2. サービスの運用に関するフィードバックをもらう

1. 社内にいる全メンバーとコミュニケーションを取る

まずはじめにやったことは、社内の全メンバーとコミュニケーションを取るよう努めることです。 この段階で積極的にコミュニケーションを取る際に優先すべきことは、「自分のことを知ってもらう」よりも「相手のことを知る」でした。どのような人がこの会社とサービスに携わっているのか、どのような領域を担当しているのかなどを早めに把握しておく必要がありました。なぜなら、ある特定の問題を解決するために誰を巻き込むべきなのかが判断できるからです。
これにより、何かわからないことがあったとき、そもそも誰に聞けば正しい答えが返ってくるのかもわからないという状態に陥ることは阻止できるようになりました。

2. サービスの運用に関するフィードバックをもらう

次に現在稼働中のサービスの運用を担当しているメンバーに、運用に関するフィードバックをもらいました。サービスを利用しているユーザからのフィードバックも含みます。 特に、マイナスのフィードバックを中心にもらうようにしました。「この仕様のせいで運用が大変だ」「はじめは必要だと思って追加してもらった機能、今は全く使っていない」「複数のユーザから同じ箇所についての問い合わせがきている」…などなど。
アプリケーションを再構築するとはいえ、現在稼働しているサービス仕様の大半は継承します。その中には、そのまま継承したら結局使いにくいアプリケーションのままになってしまう仕様が混入しています。ですがそれを開発チームだけでは判別できなかったりします。
予め運用メンバーからフィードバックをもらっておいたことにより、「この機能は実装しなくていい!」「この部分の仕様は思いっきり変更してしまおう!」なんてことをサクッと決断できるようになりました。

やらなかったこと

次に意図的にやらなかったことが1つだけあります。エンジニアなのにまじ?と思われるかもしれませんが、「稼働中のアプリケーションのソースコードにしっかり目を通す」ことです。
もちろんソースコードを開発PCに入れ、軽く目を通したり、実行してみたりしようとはしました。ですが、アプリケーションの再構築のための参考としてちゃんと確認したのはデータベーステーブルの構造だけでした。(Railsが分かる人にしかわからない表現ですが db/schema.rb だけしっかりチェックしました。)
それほどデータベーステーブルの構造というものはアプリケーションの仕様に直結しているものです。その他のロジックがどう実装されているのかについて理解することは、この段階においては全く必要ありませんでした。

Webアプリケーションを再構築する際の技術的な選択

入社してすぐ「アプリケーション再構築プロジェクト」に参加することになった私はどうにか現在稼働中のサービスの「いま」を知り「これから」をイメージできるようになりました。
その結果、再構築するWebアプリケーションに対して以下のような技術的選択を行いました。

Webサーバサイド

既存のアプリケーションはモノリシックな構造で構築されています。しかし、今回のような破壊的な仕様変更がいつ訪れてもおかしくないです。引き続きモノリシックで構築すれば、またどこかで破綻する可能性が十分にあります。
そういったコストを避けながら爆速で成長し続けるために、今回からモノリシックではなくマイクロサービスという形でサービスを構築することにしました。
フレームワークは引き続きRuby on Railsを採用。マイクロサービスということもあり、Hanamiも検討していましたが、知見が無いため今回は採用を断念しました。 現在はRails5.2のAPIモードで構築された5つのマイクロサービスを立ち上げ、順次開発を進めています。

Webフロントエンド

今回からiOSAndroid向けネイティブアプリの本格的なリリースが決定しており、サーバサイドではネイティブアプリ用のJSON APIを実装する必要があります。このJSON APIをそのままWebアプリケーションのフロントエンドでも使用すれば実装コストを削減できるうえ、よりよいUI/UXをWebアプリケーションからでも提供できるため、React.jsベースのSPA(シングルページアプリケーション)を採用しました。
SSR(サーバサイドレンダリング)対応などにも考慮した結果、Next.jsを使用して開発中です。
Next.jsの導入奮闘記は別のエンジニアが担当してくれる予定です。(無茶振り)

nextjs.org

インフラ

AWSを利用します。現在稼働しているアプリケーションはEC2インスタンス上で稼働していますが、次に新しく構築されるWebアプリケーションの各サービスはすべてDockerコンテナ化され、ECS+Fargateで稼働させる計画です。
ECS+FargateやDevOpsについては知見が集まり次第、別途記事を作成して投稿できればいいなーと思っております。
aws.amazon.com

まとめ

入社してすぐ「アプリケーション再構築プロジェクト」に参加することになったWebエンジニアの私がまずはじめにやったことは、ディレクターっぽいことを自発的にやる、でした。
今回のテーマ的に、あたかも私だけがディレクションを行っていたかのような内容になってしまいましたが、実際には開発チーム含め社内メンバー全員がこのようなプロセスに積極的に取り組んでいます。
それぞれが担当する領域に縛られず、メンバー全員が積極的にコミュニケーションを取っており、一丸となってよりよいサービスを私達全員で発信していくのだという強い志を持って活動しております。 今回はこのことをエンジニア的な味付けをしつつ伝えようと頑張ってみましたが、なんかオチが雑になってしまいましたね。
次はもっと技術的な内容を投稿する予定です!お楽しみに!

ネクスイノベーションではエンジニア募集中です!!!

www.wantedly.com

設立当初に負債覚悟でプロダクトを作った話

こんにちは。ネクスイノベーションCTOの宮田です。 今回はネクスイノベーションの最初のプロダクトである「スマ診」の開発思い出ばなしをしたいと思います。

f:id:hardison:20181031184013j:plain

え、4ヶ月ですか!??

スマ診のサービスを構想しているときは、ネクスイノベーションにはエンジニアは僕一人でした。 スタートアップあるあるですが、投資家さんにいつまでにサービスを作ってローンチします!と事業計画をお約束をして資金を調達しますので、開発前に納期が決まっていました。その納期から逆算すると、仕様が固まった段階で、え、開発期間があと4ヶ月しかない!!(結局、規制対応で2ヶ月伸びたんで、実際は6ヶ月)という状況でした。

1人じゃ無理だ、と、外部の開発会社さんにお手伝いいただきながら出来上がったサービスです。

スマ診は、当時の要件を簡単にいうとテキストチャットでドクターと診察してもらい、お薬代や診察代を決済してもらうサービスです。目立つ機能はドクターとのリアルタイムチャット、決済機能、そして医療をあつかうので医療記録を保存する電子カルテや、セキュリティにも気を配る必要がありました。

何でつくる?

スマ診のサービスを期限までに作り上げるということは経営にかかわる大きな課題です。少しでも早くサービスを届けたい! しかし、言語や構成を決めるという段階で、悩むこととなりました。エンジニアとしては人気のある言語や構成でやりたいな〜、でもそれで良いんだろうか…

できるだけエンジニア母数が多くて、枯れたものを駆使して作る

新進気鋭のスタートアップらしくはないと思われるかもしれませんが、僕たちは技術を提供する会社ではなくて医療サービスを提供する会社です。エンジニアとしての面白い技術を取り入れたいと思う一方で、「医療サービスとしてのプロダクトを完成させる」ということに全力を投資しないといけません。そんな中、エンジニア母数が少ない技術で作ってしまったら、僕が病気になったらサービスが死んでしまうかもしれない、、、これは恐怖でした。

設立直後のスタートアップに転職しようと思う人は、ほとんどいません。だって、お金もねぇ、人もいねぇ、要件毎日ぐーるぐる、、です。おら、こんな村嫌だ〜となっても当然のことだと思います。お金のないスタートアップでもエンジニア採用できる可能性がある構成をとっていく必要があると考えていました。「どこかで困っている人の辛みを解決する」サービスを作る上では、少ないリソース(IT的目線でいうと人、時間、金)でも回すことができるプロダクトを目指すことにしました。決して奇をてらわず、泥臭くやっていく。

枯れた構成の採択

当初はWebサービスだけですが、サーバーサイドをRailsにして、フロントはjQueryで動かして、チャット部分はFirebase使っちゃえ、、というエンジニア母数が多い構成を選びました。Railsの採用理由は未だ人件費が低い若い世代が多かったからです。また仮想DOMの時代には入っていましたが、jQueryはデザイナーさんでも触れる人が結構いるという利点もありました。Firebaseは実装が楽だったからです。

f:id:hardison:20181031184301j:plain

紆余曲折を経て作り上げたプロダクト

スタートアップですもの要件すぐ変わります。。

どこもそうですが、作っている途中での要件変更は日常茶飯事でした。社外の環境の変化などで容易に要件はドカンと変わります。こんなことを言ってしまうと、要件がすぐ変わるような会社は嫌だなと思わせてしまうかもしれません。僕自身もネクスイノベーション以前は要件変更による手戻りで散々嫌な思いもしてきました。 でも常に変更を走らせないとビジネスは死にます。プログラミングでスクラップ&ビルドを回すように、ビジネスも試しては変えの連続です。自分の作り上げる価値を最大限に昇華させてユーザーに届けるためには、常に変更を受け入れて適応するという体制がとても大事です。ただ、期限もあります。変更の受け入れで、どんどん当初の設計どおりにはいかなくなり、無理やりな実装が増えることにもなりました。

で、作ったらどうなった?

サービスが出来たときには、すでに多くの問題を抱えていました。

  • 規制要件を安易に考えたために拡張性を殺してしまった
  • 動的描画処理でエゲツナク負荷かかる
  • 使ってないのに放置されているもの(テーブルとか)が乱立していて、整理整頓できていない (特にフロントのUIデザインを変えまくったおかげでフロントまわりがゴミのように)
  • jQueryのもっさり感

まぁ分かっていたことですし、リソースが整ってから直していけばいいだけのことです。技術負債を恐れては何も作れませんし、変更を予想しきることなんて出来ませんから構成にそこまで気に病む必要はありません(でかい変更なんてあるもんです)。 負債抱えて、内心はうわぁぁぁ〜やっべ〜な〜とは思ってますが、それでもいいから利用者のために、プロダクトを磨きあげていく気持ちと実行力が大事だと思っています。

f:id:hardison:20181031184939j:plain

今現在はサービス再構築中

第一弾のプロダクトが完成して、ユーザー需要を確認できたことで、1億円の資金調達をすることができました!!!!資金調達のおかげで、スマホアプリエンジニア2名、サーバーサイドエンジニア2名、サービスデスクエンジニア1名の採用ができ、現在ではチームを作ることができました。

そして今は、スマホアプリの構築に向けて(ついでに負債回収!!!)、スマ診サービスを再構築しています!! WebフロントはReact、サーバーサイドはRailsAPI、iOSはSwift4、AndroidはKotlin。 詳しい構成は後のブログに託しますが、ナウでヤングでトレンディーな構成でやってます!

「結局ナウでヤングな構成を取り入れたんだ〜?」というツッコミが聞こえてきそうですが、先行プロダクトの成果がでて新たに資金を調達できた結果、取り入れることが出来たんだと思っています。ただ結果論ですが、振り返ると最初からヤングな構成でも良かったと今では思ってます(オイッ!!)、だってモチベーションが上がらん(ゥオイッッ!!)。。 今ではエンジニアが自由にやりたい構成をとることを良しとして開発をしています。ビジネスの方向性が決まったので次元を超えた要件変更がなくなり、余裕と自由を手に入れることができたというのが大きいですが、なにより自分で決めた方が楽しい!(冒頭の話はなんやったんや!!)

まとめ

設立当初は資金に懸念がある状況で、ただ作ればいいというだけでもなく、どうやって開発を進めていくかを常に悩んでいましたが、今振り返ってみればプロダクトへの想いさえあれば、気にせず好きなようにやってもよかったと思います。常に考えることは必要ですが、設立当初はガンガン環境が変化するので、考えていたとおりになんてなりません。だったら、ちゃんとマネジメントしながら、常に考えていれば、好きにやってモチベーションを高い状態で維持し続けることの方が価値があります。

5年たったらどう考えているかは分かりませんが、今はそんなことを思っているよ。という思い出話でした。

あぺんでぃっくす

ネクスイノベーションではエンジニア募集中です!!!

www.wantedly.com

ネクイノ開発ブログはじめました!

こんにちは!ネット診察「スマ診」「スマルナ」サービスを展開するネクスイノベーション株式会社でCTOをやっている宮田です。 ネクスイノベーションをもっとよく知ってもらう為に、プロダクト開発の裏側やチャレンジしていることをブログで発信していこう! ということで開発ブログはじめました!みなさま、是非、応援してください!!! f:id:hardison:20181031160042j:plain

「ネット診察」ってなんだろう?

風邪などで具合が悪くなったときに、皆さん病院にいきますよね?お薬を飲んで早く直したい、早く楽になりたい。そういった思いでしんどいけど病院に向かうと思います。すぐいける病院ならいいですが、結構行くのにも時間がかかって、病院が開いてる時間も限られていて、行ったら行ったで長らく待たされて、診察が終わったらまた待たされて、薬局が別にある病院なら今度は薬局でお薬がでるまで待って、、、と「仕方ないんだけど、病院いくのって辛いなぁ」という方も多いと思います。

じゃあネットで解決したらいいじゃん!! 「忙しくて、行くのが辛くて病院にいけない」、そういう方のために、 スマホで、しかもチャットで診察をしちゃって病院からお薬も送っちゃおうというのがスマ診なのです!!!

オンライン診療にまつわる制約

実はオンラインでの診療は、いろいろな国からの規制があります。

  • 初診が対面でないと保険が使えない

これは辛いですね・・多くの人は3割負担で医療費を支払ってると思いますが、保険が使えないと10割負担になります。 でも安心してください!さすがに3割負担と同じとまではいきませんが、スマ診ではICTを駆使して医療業務を効率化して現実的な価格を実現しています!交通費や、長時間拘束による時間損失を考えたら、安い!そう思っていただけるような価格になっています!!

  • 対面とオンラインを組み合わせないといけない

これは安全のため大事なことです。長期間お薬を服薬すると、身体に影響が必ずでます。なので医師の判断で適切なタイミングで対面で診察してもらうということが必要です。結局病院にいくのか〜面倒だな〜と思うところですが、たまに行くくらいなら大した苦ではないですよね。

  • 国からの規制ではありませんが、疾患を限定しています。

実は、例にあげた風邪ですが、「熱がある」だけでは何の病気がわかりません。ただ風邪なのか、別の病気なのか、会話だけでは、実は判断つかないんです。医療という命を扱う尊い世界で間違いはできません。なので、スマ診ではチャットでの応対でも断定できるという領域に限定してサービスを提供しています。

f:id:hardison:20181031160206j:plain

まとめ

どうでしょうか?ネット診察サービス「スマ診」のことを少しでも知っていただければ幸いです。 もっと言わないといけなこともいっぱいあるんですが、開発ブログって言っておきながらサービス紹介だと飽きちゃうので、今日はこの辺で!

定期的に更新していく予定なので、みなさま是非お楽しみにしてください〜!!

あぺんでぃっくす

スマ診

sumashin.com

スマルナ

sumaluna.com

ネクイノ エンジニア募集してるってよ!!

www.wantedly.com