Elixir と Phoenix をしばらく触ってみて

新規のプロダクトを作るに際して Rails で開発するか、他のWAF, 言語に手を出すか で色々悩んでて、前々からちゃんと触りたいなーと思ってた Phoenix を使うのもありかなー と思い、ここ1週間ほど触ってみました。その雑感

背景

  • 前々から目をつけており、Phoenix, Elixirのtutorialのようなものは一通りこなしてた
  • Elixir に至っては公式ドキュメントを3周ほどしてる(毎回忘れてるため)
  • 普段仕事では Rails のみ
  • 関数型言語に関しては haskell 本を写経しただけでほぼ経験なし

Phoenix 雑感

pros

  • Rails だと models / controllers / views という 3 layers がメインだが, Phoenix は views が views / templatesと分かれており, logic を view に閉じ込めることができてよい
    • Rails だと view でしか使わないlogicは基本的にhelperもしくは適当なgemを導入する必要がある(と思ってる)
  • わかりやすい
    • 基本的に処理が明示的に書かれているため、初心者でもとっつきやすい(Railsに比べると)
  • rails g 相当のgeneratorコマンド他, rails に慣れている人は親しみのあるコマンドが用意されている

cons

基本慣れな気もします

  • models ( Ecto.Model ) に違和感
    • form に渡すオブジェクトは conn or changeset -> これがあまりわかっておらず struct を渡してハマったりしてた
    • struct にメソッドを生やすようなことができないので、どう書くのがbetterかよくわからず
    • DBから取得して実体化した struct を引数に渡してcheckするような関数がいいのか, DBから取得するところも関数に含むべきか
    • ここら辺はOOPな考え方が抜けてないせいかなーと思ったり
    • relation の書き方が実直(?)
    • Rails だと user.posts.create(params)Post.create(user: user, title: "title") みたいな感じで relation ( ここでは user_id ) を保存できるが Ecto.Model においては馬鹿正直に user_id: user.id などのようにしてあげる必要がある(と思ってますがもしかしたらいい書き方があるかも)
    • 毎回 strcut -> changeset -> save のような手順を踏まないといけないのが, ActiveRecord に慣れた身からすると手間に感じてしまう
  • rails(ruby) のエコシステムは強い
    • rails (ruby) だと黒魔術使い放題ですが、継承とかないので各機能を mix 使って実装するにしてもそこそこコード書く必要があって, rails ほど楽はできないかなーという感想
  • controller で受け取る params の key が string なのか atom なのかよくわからない。rails だと両方でアクセスしても取れたりしますがちゃんとわかった上でアクセスしないと死ぬ

Elixir 雑感

Phoenix と被ってる箇所も多いですが :pray:

pros

  • 楽しい!
  • パターンマッチ!
  • if 文書かない
  • doctest 最高!
  • mix 最高!

cons

特にないですがあえて言うなら

  • 綺麗な書き方がわからない

まとめ

もうちょい書く必要がある

Contents