Gotanda.rb #43の登壇資料です https://gotanda-rb.connpass.com/event/178017/
事業とRubyとアプリ開発2020/06/24Gotanda.rb #43@terry_i_MedPeer, inc. - Engineer
View Slide
Agenda自己紹介事業ドメインRailsバックエンドとgemアプリ開発におけるRubyまとめ
自己紹介
福本 晃之Teruhisa FukumotoMedPeer, inc.Web DeveloperGotanda.rb / .js Organizerf-teruhisa @terry_i_
出したばかりのこちらの記事をベースに、もう少しRuby側の事例やコミュニティについて踏み込んで話します今日話すことは...URL: https://tech.medpeer.co.jp/entry/2020/06/22/121153
Rubyでお金を稼ぐ仕組み事業ドメイン
● 定期検診で引っかかった方が対象● 主に食事面から生活習慣の改善をサポート● 食のtoBサービスみたいなイメージ特定保健指導事業
健康保険加入者お金の流れ健康保険組合健康保険料特定保健指導の委託特定保健指導特定保険診査と特定保険指導を依頼
● 予防医療の領域を食の観点からケア● 医療費削減などの背景で重要視される● 労働者の健康を守る社会的意義
作られたのがこちら
今回話すのはここ(Rails)ここ(Swift)
DietPlusdietplus-server(管理画面/バックエンド)
● アプリもWebも両方ともカバー● 必要なライブラリが充実● ソフトウェアを継続的に発展していける受けているRubyの恩恵について話します
使用技術と工夫Railsバックエンドとgem
さきにこちらを話しますここ(Rails)
● 管理画面● アプリのAPI● その他バッチ処理などRailsバックエンドの役割
複数のアプリを同じ管理画面で管理DietPlusDietPlusPro
関連ライブラリやgem(一部)
認証 / 認可まわりBankenSorceryユーザーの認証(アプリ/管理画面)ユーザーの権限管理(管理画面)
● 画面ごとに権限を管理したいので便利(Controllerベースで管理できるため)● アプリ間をmoduleで切っており、ひとつのModelに複数のControllerがアクセスする可能性Banken
Bankenでテスト
● 権限管理が複雑に...○ 権限が複数あるアプリが複数ある○ コンテキストをコードで残しづらい懸念権限はビジネスにつきものなので、うまくやる方法を模索したい
Sorcery● Admin::UserとUserで共通で使っている● 基本的にはメールでの認証● 特定保健指導の画面はPINコードを使用
● 自分たちでコードを書く量が多い○ 自チームの責任で保守できる○ gemのお作法に気を使いすぎなくて良い○ コードに合ったテストを書きやすいSorcery(vs devise??)(※前職でdeviseを使ってました)
ちょっとメンテナンスが...??● 最近Rails6対応されましたが...● Rails3のテスト記法が残ってるそう
houstoniOSまわりveniceiOSアプリでのサブスクリプション課金アプリへのPush通知を設定、送信
欲しいものがだいたいRubyコミュニティにある
● iOS最新バージョンへの追随が少し遅い● 例: houstonがiOS 13のheader未対応○ gitオプションでチートしてケア懸念
● 代替手段があるので個人的にはOKの範疇とはいえ...サブスクリプション課金 Push通知
アプリ開発でのRubyの存在感アプリ開発におけるRuby
次はこちらここ(Swift)
DietPlus
● アプリを通じて、食生活の改善を行う● 管理栄養士から食事にコメントが来る● イメージ的にはFiN●の人力版DietPlus
主要ツール
えっ、SwiftのコードベースでRubyの話を?(※MobiRubyとかの話ではないです...)
1. bundlerやgemの存在感2. Clean Architecture(VIPER)DietPlus開発でのRubyみポイント(前提: これまでiOS開発には触れたことがない)
①bundlerやgemの存在感
DietPlusでcloc
環境構築時
Rubyみの例fastlane(CI/CDツール)CocoaPods(Xcodeの依存管理)bundler(割愛)
● Ruby製のbundlerやgemを多く使う● bundlerの使用感はRailsと変わらない日本の開発者コミュニティはRubyが活発なので、Ruby発信で色々OSSが盛り上がると◎意外とRubyが使われている
他の言語やフレームワークで使われているのを見ると嬉しい感じたこと①
②Clean Architecture(VIPER)
DietPlusはVIPERで設計
● Clean Architectureの一種● 単一責任の原則に忠実● Entityにドメインロジックを閉じ込め、アプリの依存関係を外に切り出していくVIPER(諸説あり)『iOS Project Architecture : Using VIPER [和訳]』https://qiita.com/YKEI_mrn/items/67735d8ebc9a83fffd29
● 実際Entityはかなり薄い○ 設計できてる前提● 適切にPresenterとかに処理を切り出せてる○ ControllerはFatになりづらいDietPlusのEntity(例)
RubyだとHanamiっぽいなと※個人的にHanamiをDocker上で動かして遊んだりしてましたhttps://github.com/f-teruhisa/hanami-tutorial_with_docker
● moduleたくさん切って責務分けたり● ActionClass切って1画面≒1Controllerな所● RepositoryパターンでDBとアプリを分離ふたつのArchitectureに触れて設計の学びにHanamiとClean ArchitectureHanamiがそもそもClean Architectureに影響を受けているhttps://techracho.bpsinc.jp/hachi8833/2018_03_28/54381
他の言語を触っていても参考になりそうな色々な発見がある感じたこと②
まとめ
● Rubyコミュニティの充実度はやはり良い● 他の言語やFWに思わぬ関連や学びがまとめこの恩恵を受けて、事業とソフトウェアを継続して作っていけるのはすごく良い体験
Thank you!!@terry_i_MedPeer, inc. - Engineer