エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

StepFunctionsでDynamoDBからS3にexportする

【マルチデバイスチーム ブログリレー6日目】

こんにちは、エンジニアリンググループ マルチデバイスチームの大和です。 弊チームではAPIサーバを動かす基盤としてAWSを活用しており、ネイティブアプリから実行されるAPIサーバやDB等についてもAWS上で動作しています。 普段はこのAWS上で動いているAPIサーバの開発・運用を主に行っています。

運用業務のひとつにDBのデータを分析できる状態にすることがあります。 例えば、ユーザの行動の結果をBigQuery上で集計できるといったことが挙げられます。 今回はそれを実現する方法の一部分として、DynamoDB上のデータを日次でS3に出力する方法について解説します。

続きを読む

iOSのプロジェクト管理をXcodeGenからSwift Package Managerに移行する

【マルチデバイスチーム ブログリレー5日目】

こんにちは、エムスリーエンジニアリンググループ マルチデバイスチームの渡辺です。 スマホアプリの開発(iOS/Androidネイティブがメイン、たまにFlutter)を担当しています。

マルチデバイスチームの開発するm3.comアプリ(iOS)ではプロジェクトとマルチモジュールの管理にXcodeGenを利用しているのですが、後述する課題を感じていました。そんな中、昨年@d_dateさんによりSwift Package Managerを利用したプロジェクト管理する記事が公開されました。

www.notion.so

この記事を参考に、1日目の記事でも触れていますが現在 脱XcodeGen を進めています。

プロジェクトごとに構成が違うため、必要なステップは変わってくるのですが、m3.comアプリの構成における進め方を紹介します。

m3.com アプリ

続きを読む

図解でわかる競技プログラミングレーティングシステム

【マルチデバイスチーム ブログリレー4日目】

こんにちは、エムスリーエンジニアリンググループ マルチデバイスチームの藤原です。
業務ではiOS/Androidのネイティブアプリ、またはそれに関係するサーバサイドアプリケーションの開発をしたり、たまにインフラを触ったりしています。

今回は私の趣味である競技プログラミングに関する話をします。 競技プログラミングの話といっても焦点を当てるのは問題を解くためのアルゴリズムの話ではなく、タイトルにある通りレーティングシステムの話です。 マルチデバイスチームのブログリレーの記事ですが、チームの活動とは無関係です。また、弊社採用プロセスで行なっているコーディングテストとも全く関係ありません。完全趣味の話です。

競技プログラミングのコンテストを開催している各サービスではユーザの強さを数値で表すレーティングシステムを採用していることが多いです。 その数値はコンテストの結果が良いと上がり悪いと下がるという性質は同じですが、アルゴリズムの細かいところは実はサービスごとに違っています。

では、どのような違いがあるのか 図解 して比較してみましょう!

図でざっくり理解することを目的としているため、この記事では細かい数式は扱いません。 また、コンテスト初参加となる場合の初期値や例外的な微調整のための計算についても触れません。あくまでざっくり理解して比較してみるのが目的です。

本題に入る前に余談ですが、ブログリレー4日目の1月19日が私の誕生日ということで、本日が私の担当になるようチーム内で調整していただきました。 もしよろしければブクマやシェアなどしていただけると嬉しいです(笑。

今年は卯年。広島県にある大久野島は別名「ウサギの島」としても知られ、多数のウサギが生息している。(本文には関係ありません)

(zamojojo [CC BY-SA 2.0], ウィキメディア・コモンズより

続きを読む

Tesla API を使って Flutter アプリを作ってみた

【マルチデバイスチーム ブログリレー3日目】

イントロダクション

コーヒーと日本酒が大好きなエンジニアリンググループ・マルチデバイスチームの田根です。
昨年飲んだ日本酒で一番美味しかったのは「みむろ杉 純米大吟醸 酒未来」でした。
チーム内では iOS/Android アプリのフロントエンドの開発からバックエンドのサーバーサイドの開発まで行っています。

今回新たに Flutter で実装されている AskDoctors のスマホアプリの開発に参加することになりました。
Swift や Kotlin でのアプリ開発経験はあるのですが、Flutterアプリは初めてということもあり、Flutter/Dart を理解するために趣味と実益を兼ねて Tesla API を使って指定時間に車両の充電を停止する Flutter アプリを作ってみました。
また AskDoctors は一般の患者さんが気軽にお医者さんに相談できるサービスですので、ぜひみなさんもご利用ください。

作成するアプリの内容

プライベートでTesla Model 3 という電気自動車(BEV)に乗っており、充電の管理はTeslaから提供されている公式アプリで行えます。
私の契約している電力会社では午前1時~午前5時の間は充電し放題となっており、午前5時に充電を停止させたいのですがTesla公式アプリには指定した充電容量で止める機能しかありません。 さらに公式アプリでの「充電制限」の下限容量が50 %となっているため、午前1時に充電を始めても午前5時の時点で50%に届かないと見込まれる場合は、わざわざ午前5時に目覚ましをかけて手動で停止していました。 その運用はさすがにつらいので指定した時間に Tesla の充電停止APIを叩いて充電を止めるアプリを作成することにしました。

納車待ちのModel3の様子

続きを読む

2022年のm3.com Androidアプリ開発を振り返る

【マルチデバイスチーム ブログリレー2日目】

こんにちは、エンジニアリンググループ・マルチデバイスチームの小林です。 新卒3年目で、普段はAndroidアプリの開発をメインにしつつFlutterやiOSアプリの開発も行っています。

新年ということもあり、2022年の弊チームの主力アプリである「m3.comアプリ」の開発を振り返ってみようと思います。

m3.comアプリ

続きを読む

スマホアプリ開発で採用している技術

【マルチデバイスチーム ブログリレー1日目】

イントロダクション

こんにちは、エンジニアリンググループ・マルチデバイスチーム(以下「マルデバ」)の星野です。

エムスリーのエンジニアリンググループは、サービス開発を行う「事業チーム」と、各事業チームを横断してサポート/開発する「横断チーム」とに分かれております。私が所属するマルデバは「横断チーム」に位置し、各サービスの iOS / Android アプリ(およびそのBFF)の開発を専門に行なっており、私は主にこの後に紹介する m3.com アプリ、Web 講演会アプリ、m3.com CAREER アプリの開発を行っています。

今日から6日間「マルチデバイスチーム ブログリレー」と題し、マルデバメンバーでリレー形式でテックブログを執筆し、マルデバがどのような開発をしているのか・どんなチームなのか・どんなメンバーがいるのかなど、ご紹介できればと思います。

続きを読む

GitLab CIテンプレートを作って色んなチームに布教した話

これはエムスリー Advent Calendar 2022の32日目の記事です。 前日は@po3rinによる、ただのソフトウェアエンジニアが検索エンジニアになるまで でした。

あけましておめでとうございます。エムスリーエンジニアリンググループでScalaとマミさんが好きな安江です。アドカレを購読しているみなさま、またお目に掛かりましたね。素敵な出会いはたくさんあって欲しいですが、プログラマなら似たコードとの出会いは少なくしたいものです。今年度のAI・機械学習のベストMR第1位に輝いたのもGitLab CIテンプレート用リポジトリの作成という、GitLab CIのテンプレートに関するものでした。本記事では、私が布教したGitLab CIのテンプレートの実例を3つ紹介したいと思います。

  • 1. レビュー依頼ジョブ
  • 2. 古いブランチの通知
  • 3. renovate, scala stewardのテンプレート
    • renovate
  • We're hiring !!!
続きを読む