タグ

ブックマーク / www.m3tech.blog (14)

  • 7年間運用している主力iOSアプリをリファクタリングしている話 - エムスリーテックブログ

    こんにちは、マルチデバイスチームでスマホアプリのエンジニアをしております星野です。 エムスリーでは医療従事者向け/一般の方向けに複数のアプリを開発していますが、その中でも特に主力のアプリである m3.com アプリで現在行っているリファクタリングについてお話ししていきます。 ※iOS/Android のアプリがあり、両方のリファクタリングを進めていいますが、今回は iOS 版の話です ※この内容は私個人ではなく、チーム全体で行なっていることをまとめたものです イントロダクション 新規アプリかリファクタリングか リファクタリングの大まかな設計 MVVM + Flux マルチモジュール化 DI リファクタリングの進め方 その他のルール 異なるデータ同士を構造が似ているという理由でまとめない Helper や Manager といった責務が不明瞭な名前のクラスは作らない ID 型を定義する 参考

    7年間運用している主力iOSアプリをリファクタリングしている話 - エムスリーテックブログ
    invent
    invent 2022/06/02
  • 7年間運用している主力アプリをリファクタリングしている話 Android編 - エムスリーテックブログ

    こんにちは、エンジニアリンググループ マルチデバイスチーム 新卒2年目の小林です。 先日、iOS版m3.comアプリのリファクタリングに関する記事が公開されましたが、Android版もリファクタリングを行っているため、Androidの方で起きていた問題とリファクタリングをどのように行っているのかについて紹介します。 m3.com Androidアプリについて m3.com Androidアプリの課題 ActivityやFragmentにビジネスロジックが書かれている 必要以上にコードが共通化されている、ActivityやFragmentが多段階に継承されている 責務が不明なクラスがある 多くのコードがJavaで書かれている リファクタリングの検討 リファクタリングの大まかな設計やルール アーキテクチャをFluxに FluxとAAC ViewModelの使い分け StateFlowによるVi

    7年間運用している主力アプリをリファクタリングしている話 Android編 - エムスリーテックブログ
    invent
    invent 2022/06/02
  • 3年半デプロイのなかったクラウド電子カルテ体験版をついに本番追従させた話 - エムスリーテックブログ

    こんにちは、電子カルテチームの鳥山(@to_lz1)です。私のチームではクラウド電子カルテ「エムスリーデジカル」を開発運用しています。今回はそんなエムスリーデジカルの "オンラインデモ版"、つまり体験版アプリケーションを3年半ぶりにアップデートさせたお話です。具体的には インフラをAWSに移行 最新のコードベースでデプロイ 製品版のリリースと同タイミングでCI/CDできるように変更 という大きく3点を一気に実施しました。 3年半ぶりというとなんだかすごいことのようですが、そもそもなぜ製品版と異なる環境にあったのか、アップデートできないままだったのはなぜなのかといった疑問は皆さま抱かれるかなと思います。 この記事では、オンラインデモ版サイトの移行に関連するエムスリーデジカルのインフラの変遷、そして移行に際して工夫したこと・考えたことをご紹介しようと思います。 前提 オンラインデモ版更新の意義

    3年半デプロイのなかったクラウド電子カルテ体験版をついに本番追従させた話 - エムスリーテックブログ
    invent
    invent 2022/06/02
  • Slack botをCloud Runで作る時には気をつけろ - エムスリーテックブログ

    こんにちは、スプラトゥーン3が待ちきれないAI機械学習チームの丸尾 (@snowhork) です。 みなさん、Slack botは作ってますか? Slack botをつくるときはやはり公式のフレームワーク、Boltがやはり便利ですよね。 みなさん、GCPのCloud Runは使ってますか? ちょっとしたジョブを作って実行するにはやはり便利ですよね。コンテナ実行できるので開発や動作検証もしやすいですし。 SlackとCloud Runは相性が悪い!? 世の中にこんなに便利なものがあったら、やっぱり組み合わせて使いたくなりますよね。ただ、便利なものには思わぬ副作用があり、見事にハマって1週間苦しんだ体験を残しておこうと思います。この記事でSlack bot開発で苦しむ人が一人でも救われたら幸いです... 何が起きたか? 結論と原因 謎の現象集 1. ローカルだと全く再現しない 2. ackよ

    Slack botをCloud Runで作る時には気をつけろ - エムスリーテックブログ
    invent
    invent 2022/05/17
  • ユーザーの成功体験を探せ! - エムスリーテックブログ

    エムスリー、プロダクトマネージャーの坂(ばん)です。2021年6月、医療従事者専用サイト『m3.com』のコンテンツ配信準備を支援する社内業務システムをリリースしました。 プロダクトリリース後は、PMFを目指したグロースの戦略が必要です。 今回のリリースでは、ユーザー(エムスリー社員)から多くの改善要望が集まりました。これらに順次対応する戦略もありますが、私はほぼ全ての改善要望をいったん無視することにしました。そして、提供システムでユーザーが得た成功体験を探し始めました。 なぜ改善要望を無視したのか、どうやってユーザーの成功体験を探したのか、どんな良い事があったのかを記載します。 開発チームに加わる リリースを決意する ユーザーの成功体験を探す アンケートで成功体験を見つける ユーザーを定点観測し、成功を可視化する 業務体験で、自ら成功する 成功体験で、ユーザーを増やす 成功体験を追加開発

    ユーザーの成功体験を探せ! - エムスリーテックブログ
    invent
    invent 2021/09/28
  • 片づけの魔法でFargateの費用を65/168にしましょう - エムスリーテックブログ

    こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。 前回の記事で書いたように、 現在、クラウド化推進で、多くのサービスのAWS移行を実施している関係で知見が貯まっているので、今回もインフラの話題です。 横浜アリーナは、1989年4月1日に神奈川県横浜市に開業した多目的イベントホール。文には特に関係ありません。 使わないなら片付けましょう 検証環境の監視通知は無視してよい? ECSとCloudWatch Alarmの通知を片づける魔法 ECSの停止/再開 CloudWatch Alarmによる通知の停止/再開 We are hiring! 使わないなら片付けましょう 検証環境で動いているサービスのうち、主に人が使うためのサービスは人がいない時間帯は動いている必要がありません。 例えば、スタッフ向けの管理画面は、検証環境では、検証用のデータを投入したり、設定

    片づけの魔法でFargateの費用を65/168にしましょう - エムスリーテックブログ
    invent
    invent 2021/08/11
  • Google AnalyticsのBigQuery Exportを使って検索ログデータ分析基盤を構築した - エムスリーテックブログ

    エムスリーエンジニアリンググループ AI機械学習チームでソフトウェアエンジニアをしている中村(@po3rin) です。 好きな言語はGo仕事では主に検索周りを担当しています。 Overview 医師に質問ができるサービスであるAskDoctorsではユーザーが質問を検索できる機能があり、今回は検索改善タスクのために検索ログデータ分析基盤を構築したお話をします。これにより改善サイクルを回せるようになったり、検索ログを使った各種アルゴリズムが利用可能になりました。 データ基盤構築では他チームとの連携が必要不可欠であり、コミュニケーションで工夫した点などもお話できればと思います。 Overview なぜ検索ログデータ分析基盤が必要なのか 検索を監視して改善サイクルを回したい 各種アルゴリズムに利用できるデータを取得したい データ分析に利用したい データアーキテクチャを書き出す イベントとデー

    Google AnalyticsのBigQuery Exportを使って検索ログデータ分析基盤を構築した - エムスリーテックブログ
    invent
    invent 2021/07/16
  • 5年もののiOSアプリのフルSwift化が完了した話 - エムスリーテックブログ

    こんにちは。エムスリー エンジニアリンググループの藤原です(※ 技術顧問の藤原さんとは別人です)。 医師・薬剤師向けプラットフォーム「m3.com」のiOSアプリの開発をしています。 メインはiOSですが、Androidやサーバーサイドを担当したりと色々とやっています。 iOS版「m3.com」アプリは2014年ファーストリリースで、フルObjective-Cで書かれていましたが、 2019年2月のリリースをもって、フルSwift化が完了しました。 今回はこれまでコツコツと実施してきた、Swift化周りの取り組みについてお話します。 Swift = アマツバメ (wokoti [CC BY-SA 2.0], ウィキメディア・コモンズより) モチベーション 私がm3.comアプリの開発にジョインしたのは2017年7月頃です。その頃には半分以上のコードはSwiftで書かれていました。 そのため

    5年もののiOSアプリのフルSwift化が完了した話 - エムスリーテックブログ
    invent
    invent 2021/05/19
  • iOS向けに作った子供向けのアプリをFlutter Webでpublishしてみたら思いの外良かった - エムスリーテックブログ

    エムスリー エンジニアの岩です。 4月から小学生1年生になる子供を育てています。 最近子供と図鑑を見ていました。そのとき目次をから目的のページが250ページにあるということがわかったようです。 しかし、一度開いた150ページあたりから250に向かうのではなく、100ページの方に戻っていってしまいました。 それを見て「あれ?もしかして数字の概念が全くわかってない?」と心配になってしまいました。 とはいえ、数字は1〜100まで数えられるし、一桁の足し算引き算は指などを使ってできます。 数字の概念がわかっていないのはまずいので確認しようと考えました。 そこでどうせなら最近業務で触り始めたFlutterを使って理解度を確認するアプリを作ってみることにしました。 作ったもの 単純に0〜49までの数字をランダムで押してもらうというだけのアプリです。 ただし、数字の概念の理解と繋がりやすいように、数字

    iOS向けに作った子供向けのアプリをFlutter Webでpublishしてみたら思いの外良かった - エムスリーテックブログ
    invent
    invent 2021/04/08
  • Digdag + Embulkをクラウド転生させてデータ基盤運用を圧倒的に楽にした話 - エムスリーテックブログ

    こんにちは、エムスリー エンジニアリンググループ / 製薬企業向けプラットフォームチームの鳥山 (@to_lz1)です。 これは エムスリー Advent Calendar 2020 の19日目の記事です。 エムスリーでは現在、各システムのオンプレ環境からクラウドへの移行を急ピッチで進めているところです(勉強会の配信アーカイブをYouTubeでもご覧いただけます。公式テックチャンネルのご登録、ぜひお願いします!) www.youtube.com これに関連して私のチームでも最近「データ基盤(Digdag + Embulk)のクラウド移行」を行ったため、そのときに考えたことや移行して良かったことを共有したいと思います。 エムスリーのデータ基盤について それまでの構成 クラウド環境でのアーキテクチャ DigdagとEmbulkの分離 Digdag on AWSからBigQueryを操作する 併

    Digdag + Embulkをクラウド転生させてデータ基盤運用を圧倒的に楽にした話 - エムスリーテックブログ
    invent
    invent 2020/12/21
  • 世に蔓延るAndroidのWebViewでintentスキームを扱う実装の脆弱性 - エムスリーテックブログ

    エムスリーエンジニアリンググループ、マルチデバイスチームAndroidエンジニアの星川 (@oboenikui) です。セキュリティチームも兼任しています。 AndroidアプリでWebViewを扱うときに、http、https以外の様々なスキームのURIに対応する場合があります。中でもintentスキームのURIはWebサイトにとっては便利なURIであるため、実装を求められるケースも多いことと思います。しかし、このintentスキームのURIを扱う場合には注意が必要であるにも関わらず、世の中のサンプルコードではそのことに触れられていないケースが散見されます。 記事ではサンプルコードを交えて、どのような危険性があり、どう実装すべきかを解説していきます。 intentスキームのイメージ intentスキームURIとは よくある実装 問題となるケース intentスキームURIの罠 回避方法

    世に蔓延るAndroidのWebViewでintentスキームを扱う実装の脆弱性 - エムスリーテックブログ
    invent
    invent 2020/07/22
  • Kotlin Multiplatform Projectを使ってAndroidとiOSのログ送信部分を共通化した - エムスリーテックブログ

    エムスリーエンジニアリンググループ マルチデバイスチーム所属の荒谷(@_a_akira)です。 弊社では、昨年の12月に医師向けの新規アプリをAndroid, iOS向けにネイティブ実装しリリースしました。 今回は、その際Kotlin Multiplatform Projectを用いてユーザの行動ログ送信部分を共通化した話をしたいと思います。 Kotlin Multiplatform Projectとは Kotlin Multiplatform Project(以後MPP)とは、 Kotlinで書かれた単一のコードを Kotlin/JVM,(Android, Server等) Kotlin/Native(iOS, Windows, Linux等) Kotlin/JS の各プラットフォーム向けにトランスパイル可能なプロジェクトのことです もっと詳しく知りたい方は 公式ドキュメントだったり、私

    Kotlin Multiplatform Projectを使ってAndroidとiOSのログ送信部分を共通化した - エムスリーテックブログ
    invent
    invent 2020/06/04
  • 世界のシステムに令和が反映されるまで - エムスリーテックブログ

    こんにちは、Androidエンジニアの星川 (id:oboenikui) です。 いよいよあと5日で令和となりますね。幸いにもAndroidではアプリ側で扱おうとしない限り和暦は使用されないので安心して改元を迎えられそうです。 (iOSにはシステム設定で和暦表示に切り替える機能があるので若干無視できなかったりします) さて、この改元ですが、ほぼ日国内でしか使われていないものではあるものの、OSをはじめ世界中で使われているプロダクトにも影響を与えることは皆さまご存知の通りかと思います。今回はUnicode CLDR (Common Locale Data Repository) のチケットから、どのような流れでこの改元に対応したのか、また改元に合わせてどのような変更が行われたのかを見ていきたいと思います。 By 内閣官房内閣広報室 - 首相官邸ホームページ, CC 表示 4.0, Link

    世界のシステムに令和が反映されるまで - エムスリーテックブログ
    invent
    invent 2019/04/26
  • Vue.jsほぼ初心者だけのチームで既存サービスのリニューアルをやってみて得られた知見 - エムスリーテックブログ

    こんにちは、エンジニアリンググループの福林 (@fukubaya) です。 2019年3月に僕たちのチームが担当するスマートフォンサイトをリニューアルしました。 リニューアルに際して、せっかくなので新しい技術やフレームワークを採用したいということで、詳しいメンバーはいませんでしたがVue.jsでリニューアルすることにしました*1。 記事では、Vue.jsがほぼ初心者だけのチームでVue.js製プロジェクトをリリースするまでに得られた知見をまとめます。 すでにバリバリ使いこなしている方には物足りないと思いますが、これからVue.jsを始める方の参考になれば幸いです。 黒部宇奈月温泉駅は富山県黒部市にある北陸新幹線の駅。文には特に関係ありません。 サービスの概要 開発環境 プロジェクトの管理はVue CLIで Chromeの機能拡張 Vue.js devtoolsは必須 バンドルサイズの確

    Vue.jsほぼ初心者だけのチームで既存サービスのリニューアルをやってみて得られた知見 - エムスリーテックブログ
    invent
    invent 2019/04/23
  • 1