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

CureApp開発者ブログ

アプリで治療する未来を創造するCureApp, Inc. のエンジニアブログです

Advent Calendar 2016 完走できました !!

f:id:cureapp-dev:20161228094915j:plain

毎年の恒例となった Advent Calendar ですが、今年は CureApp も実施していました。

http://qiita.com/advent-calendar/2016/cureapp

参加していただいたみなさま、記事を読んでいただいたみなさま、誠にありがとうございました !!

スタートアップということもあり、完走できるかギリギリという状況でしたが、ご協力いただいている方々とともに、 1 日も遅れることなく 8 名で完走できたという誇るべき結果となりました。

また、テーマに縛りを設けずに記事を書いていただけたことで、さまざまな情報をさまざまな方に届けることができたかと考えております。図らずも弊社が大切にしているコミュニティへのコントリビュートをエンジニア陣で実施できる機会となりました。

今年の参加で、もう少し負担が少なくなるよう、よりよい記事を書きやすいよう、環境を整えていかなければという課題も見えました。来年も Advent Calendar にかぎらず、日常的に技術およびイベントの情報を投稿していきます !! よろしくお願いいたします !!

和田(t_wada)さんに技術相談をしました

二週間ほど前にはなりますが、 日本のTDD(テスト駆動開発)の先駆者である和田さん(t_wada)をお招きして、 技術相談会を行いました。

日頃、開発時に感じていた悩みを聞いていただき、 和田さんにビシバシと解決していただきました。

f:id:cureapp-dev:20161107112233j:plain

そこで今回は特に印象に残った、

  1. 不安定なテストとの付き合い方
  2. フレームワーク選定基準
  3. 品質保証のやり方

について書こうと思います。

不安定なテストとの付き合い方

私たちは、普段から不安定なテストに悩まされていました。

不安定なテストとは、

  • ローカルでは通るけどCIでは落ちる
  • 遅くてタイムアウトになるときがある

など、コードでなく環境によって結果が左右されるテストのことです。

この不安定なテストによって、開発に新しく関わった人に毎回同じような説明をしたり、説明をし忘れて不要な対応に時間をとられてしまったりということが起きていました。

どうすれば、不安定なテストとうまく付き合えるのか? 和田さんは テストにタグをつける という方法を教えて下さいました。

テストにタグをつけることでテストの特性(遅い、CIで落ちやすいなど)を明示することができます。 加えて、不安定タグだったらrebuildなどルールを決めておけば、説明する時間や無駄な対応などがなくなります。

また、環境や操作ごと(コミット時、マージ時など)に行うテストを分けることもでき、効率的にテストを行うことができます。

フレームワーク選定時の基準は?

最近のjavascriptフレームワークは目まぐるしい速さで進化していきます。 また、同じような機能で複数のフレームワークがあり、どのフレームワークを使うべきか悩みが尽きません。

私たちはどんなフレームワークを使うべきでしょうか?

和田さんは、フレームワーク選定基準には simpleeasy の2つの軸があるとおっしゃいました。

一般的に「簡単」と言われているものはeasyに分類されます。 これは、使い方を覚えた人には使いやすいですが、何も知らない人には覚えることが多くて使いづらいということが起きるからです。

対して、simpleは「考え方が簡潔」であることを表しています。 書くべきコードは増えてしまうかもしれませんが、考え方が簡潔なので、覚えることは少なくて済みます。

覚えること 手数
simple
easy

設定ファイルやリリースツールなど、誰かが一回設定すればみんなが使えるようになるものはeasyなものでもいいですが、ライブラリなど、みんなが一から使うものはsimpleなものの方が最終的に学習コストが少なくて済みます。

今使うべきなのはeasy, simpleどちらのフレームワークかを考えて選んでいくのが重要です。

品質保証

テストを書くようにするなど、日頃からソフトウェアの品質保証を心がけてはいましたが、 医療機器アプリとして品質を保証するにはどうしたらいいのか悩んでいました。

ソフトウェアとアプリの品質保証はどのように違うのでしょうか? 和田さんのご専門ではありませんが、ズバッと回答していただきました。

品質保証のやり方はサービスを提供しているプラットフォームによって異なります。 例えばウェブアプリとスマートフォンアプリが挙げられます。

ウェブアプリでは、バグ修正をしてサーバーにアップロードすれば、ユーザーにもその修正が自動的に反映されます。 なので、バグがあったらすぐ直すことで品質を高めることができます。

対してスマートフォンアプリでは、修正をアップロードしても、ユーザーがアップデートしてくれなければ修正が反映されません。 なので、なるべくバグをすぐ直すことよりもバグを出さないようにする方が品質向上につながります。

今までもなるべくバグを減らして、見つけたらすぐ直すようにはしていましたが、 バグとの付き合い方を俯瞰する立場から見直すいい機会になりました。


他にもTDDを始めとしたテストの知識やjsをとりまく環境など様々なお話をしていただき、とても濃密な時間を過ごすことができました。 和田さん、ありがとうございました。

CureAppではこんな濃密な時間を過ごしたいエンジニアを募集しています! http://jobs.cureapp.co.jp/engineers/

Event Dotsで開催された「React勉強会」に登壇しました!

CTOの鈴木が、9/5(月)、渋谷のEvent Dotsで開催された「React勉強会」に登壇しました。

eventdots.jp

ランサーズさん、Sansanさん、Bit Journeyさんとともに、React.jsをテーマに各社のノウハウを発表しました。 弊社は「React Native」という新しい技術を使ってアプリ開発をした事例を紹介しました。

その時のスライドがこちらです。 speakerdeck.com

イベントは大盛況で、鈴木も発表後、技術的な詳細の質問が殺到しておりました! これはキュア・アップ主催でまたイベントをやる流れなのかな!?

さらに「キュア・アップ」という事業の面白さに共感してくださった参加者もいました。

なお、各社の発表については、イベントの様子をまとめたQiitaの記事がとても分かりやすかったので、ご参照ください!

お知らせ

CureApp開発チームは、これまでこのブログに技術記事を掲載してきましたが、 これからはQiita Organization にまとめていきます。 弊社のスタンスは、

  • 「やってみた」の先の「考察」
  • 「Tips」の先の「理論」
  • ライブラリを「作って」説明

という孤高のオリジナリティです。 これからも皆様に「なるほど!」と思ってもらえるような良質な記事を提供していきたいと思います。 今後ともCureApp開発チームをよろしくお願いします。

Builderscon のスマートフォン版セッションタイマーを弊社エンジニアが作りました !!

元 YAPC::Asia 主催の牧さん @lestrrat によるカンファレンス Buildersconスマートフォン版セッションタイマーを弊社エンジニアの januswelimoans が休日プロジェクトとして作成しました !!

f:id:cureapp-dev:20160704121340p:plain

@lestrrat さんのセッションタイマーがあるといいなぁというつぶやきをうけて、弊社で推進中の React Native で実装してみた、という経緯です。

ぜひインストールしてイベントやカンファレンス、勉強会などでご使用ください !! ここをこうしたほうがいい、こういう機能つかないの ? などフィードバックを受け付けていますのでお気軽にどうぞ

現在 iOS 版は登録の最中とのことで Android 版のみの提供となっています。

CureApp ではカンファレンスでしゃべりたいエンジニア、 React Native で開発したいエンジニアを募集しています !!

power-assert の React Native サポートをお手伝いしました !!

CureApp では現在 React Native を使って開発をしています。

さらに、「契約による設計」という設計手法を積極的に使って各コンポーネントを設計しています。 JavaScript では @t_wada さんが作成された power-assert と unassert というパッケージを babel に組み込むことで実現可能です。

ところが React Native では依存モジュールの関係で実行時エラーになってしまうという問題がありました。本家にご対応いただいたのでもう再現しませんが、問題の再現コードはこちらです。

この件を @t_wada さんに報告したところ、一晩でご対応いただけました ! 早い !!

というわけで power-assert を React Native の Debug ビルドに組み込むことができるようになりました。 @t_wada さんご対応ありがとうございました。これで開発が捗ります !

CureApp は JavaScript による「契約による設計」が好きなエンジニアを募集しています !!

Node学園 21時限目 -ES Modules Meetup- に参加してきました !!

Node学園 21時限目 -ES Modules Meetup- に参加してきました !!

You don't know ES Modules by @teppeis さん

  • import / export するのが ES2015 の Modules とのこと
  • ES2015 Modules は静的な依存関係解決なのでブラウザーにやさしい
  • import xx from 'yy'yy の部分はどう書くべきかは仕様で決められていないそうです
  • Loader の仕様がブレブレとのこと
    • ブラウザー側は <script type="module"> で ES2015 Modules であることを明示できるという提案
    • 対して Node.js は .mjs という拡張子を提案…
    • package.json 内の module フィールドにエントリーポイントを定義する案もあってカオス
    • import / export しているなら ES2015 Modules として扱うという決めをしても、現在のところ import / export していなくても ES2015 Modules として扱えちゃうという問題がある

import / export しているモジュールだけを登録・ホスティングするサービスがあれば徐々に移行が可能なのかもしれないね、という話題が社内で持ち上がりました。ブラウザーから使う場合も HTTP/2 の server push 機能でロード時間はある程度緩和されるんじゃないかというようなハナシをしています。 CureApp は Universal JavaScript を応援しています !!

ECMAScript as a Living Standard by @azu さん

先日 ES2016 の仕様が発表されましたが、そういった意思決定はオープンなコミュニティで実施されているそうです。

参加のルール、議論のルールも決まっていて、自律した組織という印象を受けました。たとえば仕様の提案にあたっては次のロードマップにしたがえばよいようです。

呼び方 意味
Stage0 アイディア段階
Stage1 提案段階
Stage2 ドラフト段階
Stage3 仕様完成・フィードバック待ち段階
Stage4 取り込み待ち段階

また、 maximally-minimal 「問題を解決する最小の方法をとる」という議論パターンがあり、それが使われているそうです。

0 からはじめる Flow by @leader22 さん

JavaScript に型チェックを提供する flow のよさとつらさを紹介されていました。 CureApp でも flow を採用しているのでとても共感できる内容だった一方、知らないことも多くありとてもありがたい発表でした。

babel-register を高速にした話 by @yosuke_furukawa さん

babel のキャッシュは書き出し先がひとつしかないため、マルチプロセスで babel を使おうとするとキャッシュがヒットせずに遅くなってしまうそうです。そこで、キャッシュを共有することで速くなる仕組みを作ったとのこと。

Electron のセキュリティその後 by @hasegawayosuke さん

前回 から Electron も進化し、 Node.js を実行しないモードが親から伝播されるようになったそうです。そのためレンダラーで Node.js を使いたいときには preload 機能か、 IPC 通信で親に処理を移譲する方法をとる必要があるとのこと。 ただ、外部の広告を入れるときは相変わらず注意が必要で、 iframe の中ではなんでもできてしまうそうです。 JS を使って広告表示するのは危険ということでした。

懇親会

@leader22 さんはじめ、いろいろな方と flow 談義ができました。また、 @t_wada さんに power-assert を React Native で使う際、ハマった点について報告をさせていただきました。みなさまありがとうございました。

MedleyさんとHackers Barでイベントを開催しました。

http://cureapp.connpass.com/event/33755/

6/22、新進気鋭の医療ベンチャー、Medleyさんと、医療界隈でしっぽり集まろう、というイベントを開催いたしました。

今回の場所は、なんと、六本木のバー。しかもただのバーじゃありません。 Hackers Barという、おもてなしをするのがエンジニアというバーでやりました。

両社がおのおのの事業と開発体制などを紹介し、その後は医療系ベンチャー界隈のプレイヤーや、 そこに興味のあるエンジニアたちのトークで盛り上がりました。

Medleyさんありがとうございました!