Slide 1

Slide 1 text

piyopiyo.ex 春のElixir入学式 ようこそElixirへ! 2023/4/1 ver0.1 nako

Slide 2

Slide 2 text

Elixirは どんな言語?

Slide 3

Slide 3 text

Elixirはどんな言語? ● 関数型に影響を受けた動的なプログラミング言語。 ● シンプルな構文で、文法はRubyから大きく影響を受けています。 ○ Elixirの作者のJosé(ジョゼ)はRuby on Railsのコミッター ● 拡張性や保守性に優れたアプリケーションを構築するために設計されています。 ○ 拡張性とは、機器やソフトウェア、システムなどの使用を開始した後に、その中核部分に大きな変 更や交換、影響を伴わずに、機能追加や性能向上を行えること。 ○ 保守性とは、機器やソフトウェア、システムなどが備える特性の一つで、所定の条件で修理や交換 などの保守作業を実施することで、機能や状態が維持される性質。また、その容易さ。

Slide 4

Slide 4 text

Elixirはどんな言語? ● Elixirは、低遅延、分散、耐障害性があるシステムの構築で知られるErlang VM上で 実行されます。 ○ スウェーデンの大手通信機器メーカー、エリクソン( Ericsson)によって開発され、電話交換機の制 御システムなどの通信アプリケーションの開発に使用されています。 ○ Erlang VM(Virtual Machine)は、Erlangプログラムを実行するための仮想マシンです。 Erlang VM は、Erlang言語で書かれたプログラムを実行するためのランタイム環境を提供します。 ○ オープンソースとして 1998年に公開されました。公開されてから 25年経過 ● これらの機能とElixirのツールにより、開発者はWeb開発、組込みソフトウェア、 データパイプライン、マルチメディア処理など、幅広い産業分野で生産性を向上させ ることができます。

Slide 5

Slide 5 text

Elixirはどんな言語? ● 海外サービスでは、SlackやSpotify、Discord、WhatsAppなどに使われています。 ○ どれも大量ユーザーを抱えるネットワークサービス

Slide 6

Slide 6 text

Elixirは 書いて面白い

Slide 7

Slide 7 text

素晴らしき |>(パイプ)演算子 |>演算子は、左の項の式の結果をとって、右の関数呼び出しの第一パラメータとして渡 すことができる。 people = DB.find_customers orders = Orders.for_customers(people) tax = sales_tax(others, 2022) filing = prepare_filing(tax) filing = DB.find_customers |> Orders.for_customers |> sales_tax(2022) |> prepare_filing

Slide 8

Slide 8 text

パターンマッチ① 値(右辺)がパターン(左辺)と同じ構造を持ち、パターンのそれぞれの項が値の中の対 応する項とマッチするとき、パターンマッチと呼びます。 iex(1)> list = [1, 2, [3, 4, 5]] [1, 2, [3, 4, 5]] iex(2)> [a,b,c] = list [1, 2, [3, 4, 5]] iex(3)> a 1 iex(4)> b 2 iex(5)> c [3, 4, 5]

Slide 9

Slide 9 text

パターンマッチ② FizzBazzを例に defmodule FizzBazz do def upto(n) when n > 0 do 1..n |> Enum.map(&fizzbazz/1) end defp fizzbazz(n) do cond do rem(n, 3) == 0 and rem(n, 5) == 0 -> “FizzBazz” rem(n, 3) == 0 -> “Fizz” rem(n, 5) == 0 -> “Bazz” true -> n end end end iex(5)> FizzBazz.upto(16) [1, 2, "Fizz", 4, "Bazz", "Fizz", 7, 8, "Fizz", "Bazz", 11, "Fizz", 13, 14, "FizzBazz", 16]

Slide 10

Slide 10 text

パターンマッチ② FizzBazzを例に defmodule FizzBazz do def upto(n) when n > 0, do: 1..n |> Enum.map(&fizzbazz/1) defp fizzbazz(n), do: _fizzword(n, rem(n, 3), rem(n, 5)) defp _fizzword(_n, 0, 0), do: “FizzBazz” defp _fizzword(_n, 0, _), do: “Fizz” defp _fizzword(_n, _, 0), do: “Bazz” defp _fizzword( n, _, _), do: n end 関数呼び出しで パターンマッチが使える!

Slide 11

Slide 11 text

Elixirで なんでも出来る?!

Slide 12

Slide 12 text

Elixirはなんでも出来る! ● Phoenix ○ ElixirのデファクトスタンダードなWebフレームワーク ● LiveView ○ サーバサイドだけでReact/Vue.jsと同じリアルタイムフロント(SPA) ● ElixirDesktop ○ FlutterやReactNative同様、Android/iOS両ネイティブアプリ開発 ● Axon ○ Keras/PyTorch相当のスマートなディープラーニング開発が可能に ● Livebook/Kino/VegaLite ○ JupyterNotebook/Colaboratoryを超えるWeb上開発UX ● Explorer ○ Pandas以上の直感的なデータ操作/処理性能、 Nx行列もシームレスに操作 ● Bumblebee ○ ElixirでStable DiffusionやBERT等の様々な先端ディープラーニング ● Nerves ○ IoTフレームワーク まだまだ他にもあるよ!!!

Slide 13

Slide 13 text

Elixirはなんでも出来る! ● Phoenix ○ ElixirのデファクトスタンダードなWebフレームワーク ● LiveView ○ サーバサイドだけでReact/Vue.jsと同じリアルタイムフロント(SPA) ● ElixirDesktop ○ FlutterやReactNative同様、Android/iOS両ネイティブアプリ開発 ● Axon ○ Keras/PyTorch相当のスマートなディープラーニング開発が可能に ● Livebook/Kino/VegaLite ○ JupyterNotebook/Colaboratoryを超えるWeb上開発UX ● Explorer ○ Pandas以上の直感的なデータ操作/処理性能、 Nx行列もシームレスに操作 ● Bumblebee ○ ElixirでStable DiffusionやBERT等の様々な先端ディープラーニング ● Nerves ○ IoTフレームワーク まだまだ他にもあるよ!!! Webサービス以外にも IoTやAI・ML、データ分析、 デスクトップアプリなど Elixirで様々なジャンルの技術を 扱うことができます!

Slide 14

Slide 14 text

エンジョイElixir!