Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@torifukukaiou

Elixir: A great first programming language

はじめに

  • Elixir 楽しんでいますか:bangbang:
  • Microsoft Igniteの下記のセッションをみました
  • これらからインスパイアされて、Elixirを紹介したいとおもったわけです
  • この記事のタイトルは、「Python: A great first programming language」のPythonElixirに置き換えてみました
    • $\huge{I use Elixir.}$
    • $\huge{I like it!!!}$
  • 私はElixirが好きです
  • こんなタイトルをつけておきながら最初に学ぶとよい言語なのかどうかは私にはわかりません
  • How to become a software developer」の中で言われていたのだとおもうのですが、あなたの心の赴くままに最初のプログラミング言語を選べばいいとおもいます
    • (I am not good at English... なので、聞き間違えしているかも :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:)
    • 以下、私の意見もまぜて書いています
      • あなたがなにをやりたいのかで最適な言語は決まってきます
        • Pythonかもしれませんし、この記事で紹介するElixirかもしれません
      • ある意味ではあなたはすでに答えをもっているともいえます
        • あなたが本当にやりたいことをもう一度自分自身に聞いてみましょう
        • 自分の声を聞きましょう
      • まわりに聞ける人がいるのかどうかーーこれは大きいとおもいます
      • Elixirをはじめるにあたって、前提知識としてあれが必要、これが必要とはいいません
      • 本当に必要とするものであればあとから必ず身についてきます
      • あえていえば、ヤル気だけは必要だとおもいます
      • $\huge{楽しむ気持ち}$
      • と言ったほうがいいのかもしれませんという気持ちです
      • Happy coding!!!

  • この記事はこちら:point_up::point_up_tone1::point_up_tone2::point_up_tone3::point_up_tone4::point_up_tone5:のイベントに参加しています
  • また2021/3/21(月)開催予定のとにかく純粋な純度100%のもくもく会autoracex #18の成果であり〼
    • そしてこの記事はautoracexというグループの初心者向けコンテンツとします

自己紹介

  • 名乗るほどのものではございません

私がどのくらいElixirをわかっているのか

Agenda

What is Elixir?

Elixir is a dynamic, functional language for building scalable and maintainable applications.

  • Elixir の公式ページの先頭に書いてあります
  • ごめんなさい:pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:、いきなりですが、Elixirとは? を私はちゃんと説明できません
  • 第一、ここにでてきているキーワードはどれも舌をかんでしまいそうです
  • ちゃんと説明できませんが、以下、私の感じ方です
    • 美しいです
    • Elixirと出会ってからプログラミングってこんなに楽しかったっけ? と改めて気づかせてくれました
    • |> パイプ演算子というものをよく使います

Big 2(, 3!?)

  • Web applications 作りたいなら、Phoenix
  • IoT やりたいなら、Nerves
  • (AIでいいのかな? Nx)
    • 最近でてきました
    • 私はよくわかっていません

How to install Elixir

Windows

  • 公式のインストールページにあるインストーラーを利用してください

macOS

Linux

  • 本格派のみなさまに私から申し上げることはございません
  • お任せします
  • 私は、Ubuntu 18.04に公式のインストールページに書いてあるやり方でインストールしたことがあります

Docker + Visual Studio Code

.devcontainer

  • インストールが無事にすんだら適当なディレクトリ配下に以下のようなファイルを置いてください
projects
└── .devcontainer
    ├── Dockerfile
    └── devcontainer.json
projects/.devcontainer/devcontainer.json
{
    "name": "Elixir v1.11.4",
    "dockerFile": "Dockerfile",
    "settings": {
      "terminal.integrated.shell.linux": "/bin/bash"
    },
    "extensions": [
      "elixir-lsp.elixir-ls",
    ]
}
projects/.devcontainer/Dockerfile
FROM elixir:1.11.4

使い方

  • Visual Studio Codeの左下のほうの ><感じのやつを押して、Remote Containers: Open folder in Container...
  • ファイルダイアログがでてくるので、.devcontainerフォルダがあるところを選択する
    • 上記の例ではprojectsフォルダを選択
    • 初回はイメージのダウンロードなどで時間がかかるので :coffee: でも飲みながら気長に待ちましょう
  • 左下がこんな表示になっていれば完了!

スクリーンショット 2021-03-21 0.10.17.png

# elixir -v
Erlang/OTP 23 [erts-11.1.8] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Elixir 1.11.4 (compiled with Erlang/OTP 23)

Visual Studio Code Elixir extension

  • ElixirLS
  • Visual Studio Codeをお使いの方は、リンク先からインストールをすすめてください
    • ないならないでもかまいませんが、Visual Studio Codeをお使いの場合はインストールしておくことをオススメします

IEx (Elixir's interactive shell)

  • まずはIEx (Elixir's interactive shell)でElixirを楽しむことにします
  • ターミナルにiexと打ち込んでください
# iex
Erlang/OTP 23 [erts-11.1.8] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Interactive Elixir (1.11.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 
  • 以下、iex(1) 等の(1)は省略します
iex> "Hello World!"
"Hello World!"

iex> 1..10 |> Enum.map(fn i -> i * i end) |> Enum.sum()
385

iex> System.halt
  • Great! :tada::tada::tada:
  • System.haltIExから抜けられます
    • 他には Ctl + C を2回押す

mix new

  • プロジェクトを作ってみましょう
  • ファイルにプログラムを書きたい場合に必ずしもプロジェクトを作る必要はありませんが、今後本格的になにかをやりはじめたらきっとつくるはずのものですで、最初っからプロジェクトをつくること(mix new)をご紹介します
  • いっぱいファイルがつくられたようにみえるかもしれませんが、慣れると景色です
    • いい眺めです
  • まずはここで編集しているあたりのファイルを触るのだと覚えておけばよいでしょう
# mix new hello_ignite
mix.exs
  defp deps do
    [
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
      {:httpoison, "~> 1.8"}, # add
      {:jason, "~> 1.2"} # add
    ]
  end
lib/hello_ignite.ex
defmodule HelloIgnite do
  @moduledoc """
  Documentation for `HelloIgnite`.
  """

  def run do
    greeting = "Learning Elixir is fun!"
    IO.puts(greeting)

    "https://qiita.com/api/v2/items?query=azure"
    |> HTTPoison.get!()
    |> Map.get(:body)
    |> Jason.decode!()
    |> Enum.map(& &1["title"])
    |> Enum.join("\n")
    |> IO.puts()
  end
end
  • greetingを表示して、Qiitaの記事一覧をazureで検索して最新の20件のタイトルを表示しています
    • とりあえず今回はElixirを使ってみましょう! ということで1つの関数の中に全部おしこんで書いていることをご容赦ください :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:
    • あまりこういうことはオススメしません
  • 元から書いてあるHelloIgnite.hello/0関数はそのまま残しておいてもかまいません
    • /のうしろの数は関数の引数の数を表しています
# cd hello_ignite
# mix deps.get
# iex -S mix

output.gif

mix format

    def run do
greeting = "Learning Elixir is fun!"
      IO.puts(greeting)

  "https://qiita.com/api/v2/items?query=azure"
|> HTTPoison.get!()
    |> Map.get(:body)
    |> Jason.decode!()
    |> Enum.map(& &1["title"])
    |> Enum.join("\n")
    |> IO.puts()
  end
  • へんてこりんなインデントになっていてもmix formatできれいに整形してくれます

output.gif

シングルクォーテーション'とダブルクォーテーション"の違い

  • Python: A great first programming languageのビデオ内で質問がでていた件です
  • 同じく説明してみたいとおもいます
  • ダブルクォーテーション"で囲まれたものは文字列です
  • シングルクォーテーション'CharListです
  • Elixirにおいてはもうまるで違います
    • まずは全然別物であるとご認識ください
      • RubyPythonでは文字列であることにはかわりはなくて、式展開できるかできないかといった違いがあるというものだとおもいます
    • Elixirではそういう違いではなくて全然別のものなのです

iex> ?a
97
iex> ?b
98
iex> ?c
99
iex> 'abc' === [97, 98, 99]
true
iex> 'abc' === "abc"
false
iex> "abc" === <<97, 98, 99>>
true
  • 以下述べることは私の経験則であり、そんないい加減な理解の仕方はよくないとおもいますが、乱暴にいいますと、
    • ダブルクォーテーション"で囲まれたものは文字列は、Elixirでよく使います
      • たとえばさきほどでてきたHTTPoisonに指定するurlはダブルクォーテーション"で囲まれたものは文字列でした
    • シングルクォーテーション'CharListはErlangのモジュールを使う際によく使います
      • :os.cmd('ls')
  • 上記以外の使い方もありますし、繰り返しますがこの理解は正確ではありません
  • 乱暴だと自分でも自覚していますが、まずはざっくりこんなふうに私は最初に理解したというご紹介です
    • (いまはもう少し理解は進んでいるつもりですが、ここも舌をかみそうなのでこの記事ではこのくらいでやめておきます)

Resources

オンライン

:books::books:

オススメの勉強法

  • 私が2年前に戻れるなら
  • 上記のオンラインリソースや本で基礎を身に着けます
  • 特に、Enumとモジュール仲良くなっておくとよいです
    • Enumモジュールは、Elixirでなにかを作ろうとすると必ずといっていいほど使う頻度がたかいモジュールです
    • ざざーっとExamplesを中心に眺めておくとよいです
  • AtCoderのやさしめの問題(ABCコンテスト等)をやってみるのはよいとおもいます

Communities

EsvA7uQU0AEoTuX.jpeg

(@piacerex さん作 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:)

Wrapping Up :lgtm::lgtm::lgtm::lgtm::lgtm:

  • Happy coding with Elixir :rocket::rocket::rocket:
  • We are the Alchemists, my friends!1
    • Elixir: 不老不死の霊薬
    • Elixirの使い手のことをアルケミスト(錬金術師)と呼ばれます
    • あなたがアルケミストだとおもったその瞬間から、もうあなたはアルケミストなのです
6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
fukuokaex
エンジニア/企業向けにElixirプロダクト開発・SI案件開発を支援する福岡のコミュニティ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?