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

Materia.pdf

 Materia.pdf

E4064268abb8254bc0fb2ace062bd348?s=128

TakutoYoshimura

January 25, 2019
Tweet

Transcript

  1. サービスバックエンドOSS Materia Takuto Yoshimura tcr.yoshimura@karabiner.tech

  2. 自己紹介 本名 吉村 拓人 カラビナテクノロジー株式会社 社内のあだ名は つちろー 元はJava の金融系SIer 昨年より顧問エンジニアとしてElixir

    でWeb システ ム開発はじめました
  3. 顧問エンジニアとは 月額定額で0 からのシステム開発をサポート Web サービス立ち上げのビジネスモデル構築など からお供いたします 数名の担当で複数のお客様のサービスを開発

  4. 2018 年の私

  5. 複数のお客様へ向けてWeb システム 開発を平行で行う日々

  6. Phoenix が標準で担保しない、業務 システムでの必須機能 ユーザー認証機構(guardian) トランザクションスコープ 楽観/ 悲観排他ロジック etc

  7. 毎回実装するのがめんどくさ・・・

  8. もとい、もっと開発生産性あげたい

  9. 共通機能作って再利用しよう

  10. どうせならOSS として公開しよう

  11. Materia とは 弊社カラビナテクノロジーで開発中の Elixir/Phoenix 製サービスバックエンドライブラリ SPA(Single Page Application) での開発を想定した バックエンドAPI

    を提供 サービスとして特色のないユーザー管理や認証と いった部分のバックエンド機能を個別開発せず に、本来実装したいサービスの特色となる機能の 開発に注力 Qiita 記事: Web サービスバックエンドライブラリー Materia
  12. Materia ファイミリー構成 MateriaUtils: 日付変換、Ector ラッパー実装など各 種ユーティリティ Materia: アカウント管理、JWT 認証、権限管理 MateriaCommerce:

    商品・価格・税情報、購入契 約管理 他追加開発中
  13. サービス構築時の構成 OriginalService = MateriaUtils + Materia + MateriaHogeHoge + OriginalElixirCode

  14. 導入のステップ |> deps.get |> config 設定 |> migration ファイル生成 |>

    router.ex で必要な認証機構とAPI を定義 materia README
  15. deps.get mix.exs defp deps do [ {:phoenix, "~> 1.3.2"}, ~

    中略 ~ {:cowboy, "~> 1.0"}, {:materia, "~> 0.1.2"} # add here ] > mix deps.get
  16. con g 設定 jwt 認証(guardian) の設定 Repo の設定 参考 materia

    README Materia を導入してログイン認証してみる
  17. migration ファイル作成 > mix guardian.db.gen.migration > mix materia.gen.migration > mix

    ecto.create > mix ecto.migrate > mix run priv/repo/seeds.exs
  18. ルーティング設定 pipeline で認証ロジックの設定 pipeline :user_auth do plug Materia.UserAuthPipeline end pipe_through

    でAPI 毎にパイプラインを指定 scope "/api", MateriaWeb do pipe_through [ :api, :user_auth] get "/user", UserController, :show_me post "/grant", GrantController, :get_by_role end
  19. ログインAPI リクエスト POST http://localhost:4000/api/sign-in HTTP/1.1 Content-Type: application/json { "email": "hogehoge@example.com",

    "password": "hogehoge" }
  20. ログインAPI レスポンス HTTP/1.1 201 Created server: Cowboy date: Fri, 14

    Dec 2018 08:16:32 GMT content-length: 740 content-type: application/json; charset=utf-8 cache-control: max-age=0, private, must-revalidate { "refresh_token": "hogehoge", "id": 1, "access_token": "fugafuga" }