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

最近のElixir開発で得た知見を語る

shozo koga
October 30, 2019

 最近のElixir開発で得た知見を語る

shozo koga

October 30, 2019
Tweet

More Decks by shozo koga

Other Decks in Programming

Transcript

  1. 自己紹介 • 古賀 祥造(こが しょうぞう) • 株式会社ベガコーポレーション • fukuoka.exビルダー /

    もくもく会リーダー • Elixir/PhoenixでAPIを日々書いています • twitter: @koga1020_
  2. 思うところ • メリット ◦ ロジック書きやすい最高 ☺ ◦ テストがサクサク書ける ☺ ◦

    デプロイも一度mix release用のDockerfileを組んでしまえば楽☺ • デメリット ◦ エラーメッセージ分からない ◦ Ectoクセが強い ◦ ex_awsでCloudFront操作できない
  3. 思うところ • メリット ◦ ロジック書きやすい最高 ☺ ◦ テストがサクサク書ける ☺ ◦

    デプロイも一度mix release用のDockerfileを組んでしまえば楽☺ • デメリット ◦ エラーメッセージ分からない ◦ Ectoクセが強い ◦ ex_awsでCloudFront操作できない
  4. Ectoクセが強い • Ecto: DB Wrapper ◦ RailsでいうActive Record ◦ LaravelでいうEloquent

    • オブジェクトでないので、ORMではない • これがなかなかクセがすごい
  5. 慣れれば怖くない! • Ecto.Multi • cast_assoc, put_assoc ◦ 「Ectoのassoc関数を整理してみる」という記事書いてます ◦ https://www.koga1020.com/posts/ecto-assoc-functions

    • dynamic query この辺りを理解してからは基本的な処理は書けるようになった この辺りのキーワードをまずは拾ってみる
  6. 思うところ • メリット ◦ ロジック書きやすい最高 ☺ ◦ テストがサクサク書ける ☺ ◦

    デプロイも一度mix release用のDockerfileを組んでしまえば楽☺ • デメリット ◦ エラーメッセージ分からない ◦ Ectoクセが強い ◦ ex_awsでCloudFront操作できない
  7. Enumを使いこなす • fukuoka.exでもよく言われているが、これはガチ • map, reduce, filter, reject, group_by あたりは鉄板

    ◦ そのあとは組み合わせたflat_mapやmap_joinなど • Enumerable protocolが実装されたdata typeなら動作するので、MapもOK
  8. credoで秩序を保つ • https://github.com/rrrene/credo • Elixirの静的コード解析ツール • 以下の観点でコードの改善点を指摘してくれる ◦ consistency /

    design / readability / refactor / warning • pre-commitでcredoでエラーが出たらcommitできないようにしている ◦ ついでに mix format も自動実行にしている
  9. 便利なライブラリ達 • Power Assert ◦ テスト結果をみやすくしてくれるライブラリ ◦ https://github.com/ma2gedev/power_assert_ex • ExMachina

    ◦ rubyでいうfactory_bot(おそらく) / LaravelでいうFactory ◦ https://github.com/thoughtbot/ex_machina
  10. • mix release を利用 • Dockerfileのマルチステージビルド ◦ mix releaseの成果物をalpineのベースイメージにCOPY •

    GitHub → Travis CI → ECR → ECS のデプロイパイプライン デプロイ Amazon ECR Amazon ECS GitHub Travis CI
  11. デプロイ(個人開発) • Gigalixir × Github Actions • 特定のブランチにmergeされたら、git push gigalixir

    master を実行する • ブログにも書いたので、よければ是非 ◦ https://www.koga1020.com/posts/gigalixir-deploy-from-github-action