はじめに
- Elixir 楽しんでいますか
- Microsoft Igniteの下記のセッションをみました
- これらからインスパイアされて、Elixirを紹介したいとおもったわけです
- だって、 https://myignite.microsoft.com/sessions で、 Elixirって検索しても何もでてこないのですもの
- じゃあ、自分で書くしかないとおもいました
- この記事のタイトルは、「Python: A great first programming language」のPythonをElixirに置き換えてみました
- $\huge{I use Elixir.}$
- $\huge{I like it!!!}$
- 私はElixirが好きです
- こんなタイトルをつけておきながら最初に学ぶとよい言語なのかどうかは私にはわかりません
- 「How to become a software developer」の中で言われていたのだとおもうのですが、あなたの心の赴くままに最初のプログラミング言語を選べばいいとおもいます
- (
I am not good at English...
なので、聞き間違えしているかも ) - 以下、私の意見もまぜて書いています
- あなたがなにをやりたいのかで最適な言語は決まってきます
- Pythonかもしれませんし、この記事で紹介するElixirかもしれません
- ある意味ではあなたはすでに答えをもっているともいえます
- あなたが本当にやりたいことをもう一度自分自身に聞いてみましょう
- 自分の声を聞きましょう
- まわりに聞ける人がいるのかどうかーーこれは大きいとおもいます
- Elixirをはじめるにあたって、前提知識としてあれが必要、これが必要とはいいません
- 本当に必要とするものであればあとから必ず身についてきます
- あえていえば、ヤル気だけは必要だとおもいます
- $\huge{楽しむ気持ち}$
- と言ったほうがいいのかもしれませんという気持ちです
- Happy coding!!!
- (
- この記事はこちらのイベントに参加しています
- また2021/3/21(月)開催予定のとにかく純粋な純度100%のもくもく会autoracex #18の成果であり〼
- そしてこの記事はautoracexというグループの初心者向けコンテンツとします
自己紹介
- 名乗るほどのものではございません
私がどのくらいElixirをわかっているのか
- Interface 2021年1月号 -- IoT向きモダン言語Elixirの研究 第7回 IoTシステム開発にトライ!
- @takasehideki 先生のおかげで雑誌に記事を載せていただきました
-
Qiitaアドベントカレンダー2020 日本マイクロソフト賞 ④ 受賞
- 受賞の原動力となったのは
- $\huge{I use Elixir.}$
- $\huge{I like it!!!}$
- です
- 受賞の原動力となったのは
Agenda
- What is Elixir?
- How to install Elixir
- Visual Studio Code Elixir extension
- IEx (Elixir's interactive shell) & mix new
- Resources
What is Elixir?
Elixir is a dynamic, functional language for building scalable and maintainable applications.
- Elixir の公式ページの先頭に書いてあります
- ごめんなさい、いきなりですが、Elixirとは? を私はちゃんと説明できません
- 第一、ここにでてきているキーワードはどれも舌をかんでしまいそうです
- ちゃんと説明できませんが、以下、私の感じ方です
- 美しいです
- Elixirと出会ってからプログラミングってこんなに楽しかったっけ? と改めて気づかせてくれました
-
|> パイプ演算子というものをよく使います
- これを使うのが気持ちいい
- 詳しくは、 @zacky1972 先生の「大学でElixirを教えた話」をご参照ください
Big 2(, 3!?)
How to install Elixir
Windows
- 公式のインストールページにあるインストーラーを利用してください
macOS
- a. asdf
- @nishiuchikazuma さんの「Elixirのバージョン管理環境をasdfを使って作った」を参考にしてください
- b. Homebrew
Linux
- 本格派のみなさまに私から申し上げることはございません
- お任せします
- 私は、Ubuntu 18.04に公式のインストールページに書いてあるやり方でインストールしたことがあります
Docker + Visual Studio Code
- Developing inside a Container
- マシンに直接インストールするのは嫌だという方にオススメです
- @takasehideki先生の「ALGYAN x Seeed x NervesJPハンズオン!に向けた開発環境の準備方法 → これからの開発環境についても追記」の記事が詳しいです
- こちらの記事を参考に以下のインストールをすすめてください
.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
フォルダを選択 - 初回はイメージのダウンロードなどで時間がかかるので でも飲みながら気長に待ちましょう
- 上記の例では
- 左下がこんな表示になっていれば完了!
- Elixirを楽しめます
- Visual Studio Code上で、[Terminal] -> [New Terminal]とやりまして
# 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)
- 以下、本記事では、Docker + Visual Studio Code な環境で説明します
Visual Studio Code Elixir extension
- ElixirLS
-
Visual Studio Codeをお使いの方は、リンク先からインストールをすすめてください
- ないならないでもかまいませんが、Visual Studio Codeをお使いの場合はインストールしておくことをオススメします
IEx (Elixir's interactive shell)
# 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!
-
System.halt
でIExから抜けられます- 他には
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つの関数の中に全部おしこんで書いていることをご容赦ください
- あまりこういうことはオススメしません
- 元から書いてある
HelloIgnite.hello/0
関数はそのまま残しておいてもかまいません-
/
のうしろの数は関数の引数の数を表しています
-
# cd hello_ignite
# mix deps.get
# iex -S mix
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
できれいに整形してくれます
シングルクォーテーション'
とダブルクォーテーション"
の違い
- Python: A great first programming languageのビデオ内で質問がでていた件です
- 同じく説明してみたいとおもいます
- ダブルクォーテーション
"
で囲まれたものは文字列です - シングルクォーテーション
'
はCharListです - 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
- 以下述べることは私の経験則であり、そんないい加減な理解の仕方はよくないとおもいますが、乱暴にいいますと、
- 上記以外の使い方もありますし、繰り返しますがこの理解は正確ではありません
- 乱暴だと自分でも自覚していますが、まずはざっくりこんなふうに私は最初に理解したというご紹介です
- (いまはもう少し理解は進んでいるつもりですが、ここも舌をかみそうなのでこの記事ではこのくらいでやめておきます)
Resources
オンライン
- Elixir 公式ページ
- Elixir School
- AHT20で温度湿度を取得して全世界に惜しげもなくあたい(値)を公開する(Elixir/Nerves/Phoenix)
本
オススメの勉強法
- 私が2年前に戻れるなら
- 上記のオンラインリソースや本で基礎を身に着けます
- 特に、Enumとモジュール仲良くなっておくとよいです
-
AtCoderのやさしめの問題(ABCコンテスト等)をやってみるのはよいとおもいます
- 手前味噌ですが「AtCoderをElixirでやってみる」に入力の読み取り方などをまとめておりますのでご参照ください
Communities
- マジやさしくって いい人ばっかりだから
- ウェルカムです
- connpassで探してみてください
-
勉強会が頻繁に行われています
- 私がよく参加している勉強会です
- autoracex 【毎週月曜】 主催
- Sapporo.beam 【毎週水曜】
- OkazaKirin.beam 【毎週木曜】
- fukuoka.ex/kokura.ex 【毎月2~3回】
- NervesJP 【毎月1回】
(@piacerex さん作 )