Upgrade to Pro — share decks privately, control downloads, hide ads and more …

事業とRubyとアプリ開発/Business and Ruby and App development

事業とRubyとアプリ開発/Business and Ruby and App development

Gotanda.rb #43の登壇資料です
https://gotanda-rb.connpass.com/event/178017/

Teruhisa Fukumoto

June 24, 2020
Tweet

More Decks by Teruhisa Fukumoto

Other Decks in Programming

Transcript

  1. 事業とRubyとアプリ開発
    2020/06/24
    Gotanda.rb #43
    @terry_i_
    MedPeer, inc. - Engineer

    View Slide

  2. Agenda
    自己紹介
    事業ドメイン
    Railsバックエンドとgem
    アプリ開発におけるRuby
    まとめ

    View Slide

  3. 自己紹介

    View Slide

  4. 福本 晃之
    Teruhisa Fukumoto
    MedPeer, inc.
    Web Developer
    Gotanda.rb / .js Organizer
    f-teruhisa @terry_i_

    View Slide

  5. 出したばかりのこちらの記事をベースに、もう少しRuby側の
    事例やコミュニティについて踏み込んで話します
    今日話すことは...
    URL: https://tech.medpeer.co.jp/entry/2020/06/22/121153

    View Slide

  6. Rubyでお金を稼ぐ仕組み
    事業ドメイン

    View Slide

  7. ● 定期検診で引っかかった方が対象
    ● 主に食事面から生活習慣の改善をサポート
    ● 食のtoBサービスみたいなイメージ
    特定保健指導事業

    View Slide

  8. 健康保険加入者
    お金の流れ
    健康保険組合
    健康保険料
    特定保健指導の
    委託
    特定保健指導
    特定保険診査と
    特定保険指導を依頼

    View Slide

  9. View Slide

  10. ● 予防医療の領域を食の観点からケア
    ● 医療費削減などの背景で重要視される
    ● 労働者の健康を守る
    社会的意義

    View Slide

  11. 作られたのがこちら

    View Slide

  12. 今回話すのは
    ここ
    (Rails)
    ここ
    (Swift)

    View Slide

  13. DietPlus
    dietplus-server
    (管理画面/バックエンド)

    View Slide

  14. ● アプリもWebも両方ともカバー
    ● 必要なライブラリが充実
    ● ソフトウェアを継続的に発展していける
    受けているRubyの恩恵について話します

    View Slide

  15. 使用技術と工夫
    Railsバックエンドとgem

    View Slide

  16. さきにこちらを話します
    ここ
    (Rails)

    View Slide

  17. ● 管理画面
    ● アプリのAPI
    ● その他バッチ処理など
    Railsバックエンドの役割

    View Slide

  18. 複数のアプリを同じ管理画面で管理
    DietPlus
    DietPlusPro

    View Slide

  19. 関連ライブラリやgem(一部)

    View Slide

  20. 認証 / 認可まわり
    Banken
    Sorcery
    ユーザーの認証
    (アプリ/管理画面)
    ユーザーの権限管理
    (管理画面)

    View Slide

  21. ● 画面ごとに権限を管理したいので便利
    (Controllerベースで管理できるため)
    ● アプリ間をmoduleで切っており、ひとつの
    Modelに複数のControllerがアクセスする可
    能性
    Banken

    View Slide

  22. Bankenでテスト

    View Slide

  23. ● 権限管理が複雑に...
    ○ 権限が複数あるアプリが複数ある
    ○ コンテキストをコードで残しづらい
    懸念
    権限はビジネスにつきものなので、
    うまくやる方法を模索したい

    View Slide

  24. Sorcery
    ● Admin::UserとUserで共通で使っている
    ● 基本的にはメールでの認証
    ● 特定保健指導の画面はPINコードを使用

    View Slide

  25. ● 自分たちでコードを書く量が多い
    ○ 自チームの責任で保守できる
    ○ gemのお作法に気を使いすぎなくて良い
    ○ コードに合ったテストを書きやすい
    Sorcery(vs devise??)
    (※前職でdeviseを使ってました)

    View Slide

  26. ちょっとメンテナンスが...??
    ● 最近Rails6対応されましたが...
    ● Rails3のテスト記法が残ってるそう

    View Slide

  27. houston
    iOSまわり
    venice
    iOSアプリでの
    サブスクリプション課金
    アプリへのPush通知を
    設定、送信

    View Slide

  28. 欲しいものがだいたい
    Rubyコミュニティにある

    View Slide

  29. ● iOS最新バージョンへの追随が少し遅い
    ● 例: houstonがiOS 13のheader未対応
    ○ gitオプションでチートしてケア
    懸念

    View Slide

  30. ● 代替手段があるので個人的にはOKの範疇
    とはいえ...
    サブスクリプション課金 Push通知

    View Slide

  31. アプリ開発でのRubyの存在感
    アプリ開発におけるRuby

    View Slide

  32. 次はこちら
    ここ
    (Swift)

    View Slide

  33. DietPlus

    View Slide

  34. ● アプリを通じて、食生活の改善を行う
    ● 管理栄養士から食事にコメントが来る
    ● イメージ的にはFiN●の人力版
    DietPlus

    View Slide

  35. 主要ツール

    View Slide

  36. えっ、SwiftのコードベースでRubyの話を?
    (※MobiRubyとかの話ではないです...)

    View Slide

  37. 1. bundlerやgemの存在感
    2. Clean Architecture(VIPER)
    DietPlus開発でのRubyみポイント
    (前提: これまでiOS開発には触れたことがない)

    View Slide

  38. ①bundlerやgemの存在感

    View Slide

  39. DietPlusでcloc

    View Slide

  40. 環境構築時

    View Slide

  41. Rubyみの例
    fastlane
    (CI/CDツール)
    CocoaPods
    (Xcodeの依存管理)
    bundler
    (割愛)

    View Slide

  42. ● Ruby製のbundlerやgemを多く使う
    ● bundlerの使用感はRailsと変わらない
    日本の開発者コミュニティはRubyが活発なの
    で、Ruby発信で色々OSSが盛り上がると◎
    意外とRubyが使われている

    View Slide

  43. 他の言語やフレームワークで
    使われているのを見ると嬉しい
    感じたこと①

    View Slide

  44. ②Clean Architecture(VIPER)

    View Slide

  45. DietPlusはVIPERで設計

    View Slide

  46. ● Clean Architectureの一種
    ● 単一責任の原則に忠実
    ● Entityにドメインロジックを閉じ込め、アプリの
    依存関係を外に切り出していく
    VIPER(諸説あり)
    『iOS Project Architecture : Using VIPER [和訳]』
    https://qiita.com/YKEI_mrn/items/67735d8ebc9a83fffd29

    View Slide

  47. ● 実際Entityはかなり薄い
    ○ 設計できてる前提
    ● 適切にPresenterとかに
    処理を切り出せてる
    ○ ControllerはFatになりづらい
    DietPlusのEntity(例)

    View Slide

  48. RubyだとHanamiっぽいなと
    ※個人的にHanamiをDocker上で動かして遊んだりしてましたhttps://github.com/f-teruhisa/hanami-tutorial_with_docker

    View Slide

  49. ● moduleたくさん切って責務分けたり
    ● ActionClass切って1画面≒1Controllerな所
    ● RepositoryパターンでDBとアプリを分離
    ふたつのArchitectureに触れて設計の学びに
    HanamiとClean Architecture
    HanamiがそもそもClean Architectureに影響を受けている
    https://techracho.bpsinc.jp/hachi8833/2018_03_28/54381

    View Slide

  50. 他の言語を触っていても
    参考になりそうな色々な発見がある
    感じたこと②

    View Slide

  51. まとめ

    View Slide

  52. ● Rubyコミュニティの充実度はやはり良い
    ● 他の言語やFWに思わぬ関連や学びが
    まとめ
    この恩恵を受けて、事業とソフトウェアを継続して
    作っていけるのはすごく良い体験

    View Slide

  53. Thank you!!
    @terry_i_
    MedPeer, inc. - Engineer

    View Slide