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

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

Avatar for shozo koga shozo koga
October 30, 2019

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

Avatar for shozo koga

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