1.OverView
さて、mixです。
ポエム全開で、主語デカく決めつけます。
MixはElixirのビルドツールであり、プロジェクトの作成、依存関係の管理、テストの実行、ドキュメントの生成など、さまざまなタスクを簡単に実行するためのツールです。
ビルドツールこそが、僕の愛する古き良き時代のプログラミング言語と、今の言語を分ける点だと思ってます。
言い換えれば、BASICで、BAKAとかループで回してはしゃいでた僕には、REPLはすごくわかりやすく、ビルドツールを理解しないと
コンパイルすら出来ないモダンな言語は、ものすっごい大変ですw
と言うわけで、何度も書き直すから、今日は勉強の成果を見てやる、くらいにしてくれると嬉しいです。
今回、ステップバイステップでやりますね。
今回、テストを抜いた、プロジェクト作成、コンパイル、実行の流れをやります。
2. まずは解説
2.1 作業の流れ
プログラムを書くとはなにか?みたいなお説教はおいておいて。
「プログラムを書いて、実行する」
くらいのイメージはロートルの僕にも、みなさんにもありますね。
ここで「プログラムを書いて」の部分が、今の言語はちょっと違う。
プログラムを動かすための、いろんなファイルを作ってくれるのです。
流れは以下の通り
- プロジェクトを作成する。
- プロジェクトに、ファイルを更新・作成する
- コンパイルする
- 実行する。
ほおら、話がややっこしくなってきたw
なお、ここらへん、全部mixコマンドがやってくれるので、わしらがやることはそれに従う事です。
2.2 プロジェクトを作成する。/mix newコマンド
When we’re ready to create a new Elixir project,
かっこいいねぇ、日本語訳もかっこいいぜ
https://elixirschool.com/ja/lessons/basics/mix#%E6%96%B0%E3%81%97%E3%81%84%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88-0
じゃ、実行してみようか?
mix new プロジェクト名
です。
プロジェクト名は後々使うので、 勉強中は覚えやすい名前にしてね。ニュルンベルクのマイスタージンガー作戦とか言っても困るよ。
(base) C:\Users\nanbu>mix new example
* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/example.ex
* creating test
* creating test/test_helper.exs
* creating test/example_test.exs
Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:
cd example
mix test
Run "mix help" for more commands.
さて、いろんなファイルが出来ましたね。
あとで、creating testとか、解説しようと思いますが、今は、どんなファイルが出来たか、見てみましょう。
(base) C:\Users\nanbu\example>dir /R /S
Volume in drive C has no label.
Volume Serial Number is 6680-2753
Directory of C:\Users\nanbu\example
2024/12/20 21:24 <DIR> .
2024/12/20 21:24 <DIR> ..
2024/12/20 21:24 97 .formatter.exs
2024/12/20 21:24 629 .gitignore
2024/12/20 21:24 <DIR> lib
2024/12/20 21:24 572 mix.exs
2024/12/20 21:24 469 README.md
2024/12/20 21:24 <DIR> test
4 File(s) 1,767 bytes
Directory of C:\Users\nanbu\example\lib
2024/12/20 21:24 <DIR> .
2024/12/20 21:24 <DIR> ..
2024/12/20 21:24 201 example.ex
1 File(s) 201 bytes
Directory of C:\Users\nanbu\example\test
2024/12/20 21:24 <DIR> .
2024/12/20 21:24 <DIR> ..
2024/12/20 21:24 138 example_test.exs
2024/12/20 21:24 15 test_helper.exs
2 File(s) 153 bytes
Total Files Listed:
7 File(s) 2,121 bytes
8 Dir(s) 31,588,274,176 bytes free
これらのファイルを弄って、準備を進めていきます。
まずは、「たくさんファイルが出来たなー」って思ってくれます?
## 2.3 依存関係を設定する。
タイトルにいきなり、変な言葉を使って申し訳ない。後で思い知るので、ここはスキップ。
一言覚えて。
「プロジェクトが使うライブラリなどの依存関係はmix.exsで編集する」
…それじゃ、次のセクションで。
…見てる?うん、こっから解説の次回予告なのだ。
最初に見える項目は project です。ここでアプリケーションの名前(app)を定義し、そのバージョン(version)と用いるElixirのバージョン(elixir)と、最後に依存関係(deps)を記述します。
application の項は、次項で扱うアプリケーションファイルの生成時に使用します。
def project do
[
app: :example,
version: "0.1.0",
elixir: "~> 1.15",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end
ここで、依存関係が提起されております。
いろんなライブラリを使う時、ここで依存関係を定義します。
今回は、あえてスキップしましょう。次回、「依存関係を管理する」と一緒にやります。
https://elixirschool.com/ja/lessons/basics/mix#%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%82%92%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B-3
## 2.3 ソースを編集
まずは、プログラムを更新しましょう。
前回、プロジェクトのファイルは、以下のディレクトリに出来ました。
C:\Users\nanbu\example
この下のlibディレクトリにある、example.exを弄っていきます。
(base) C:\Users\nanbu>tree /F example
Folder PATH listing
Volume serial number is 6680-2753
C:\USERS\NANBU\EXAMPLE
│ .formatter.exs
│ .gitignore
│ mix.exs
│ README.md
│
├───lib
│ example.ex <-ここを弄るよー
│
└───test
example_test.exs
test_helper.exs
何をやってるんだかわからん?
Windowsだしなぁ。Mac版とかLinux版とかの解説が欲しい人は、延々と書くぞw
example.exを弄ります。.\lib\example.exを開いてください。
…defmodule Example doとかあるけど、Example.hello/0って関数があることだけ、今は確認しましょう。
defmodule Example do
@moduledoc """
Documentation for Example
.
"""
@doc """
Hello world.
Examples
iex> Example.hello()
:world
"""
def hello do
:world
end
end
# 2.4 コンパイル
まだコンパイルかよ!コンパイルなんだよ!
mix compileコマンドを使用します。
(base) C:\Users\nanbu\example>mix compile
(base) C:\Users\nanbu\example>
そりゃ、サンプルなんだから、コンパイル出来なきゃ困るよねぇ。
# 2.5 実行してみようか?
(base) C:\Users\nanbu\example>mix run
何も表示されないですね?しめしめ。
そりゃそうだよね、def moduleしかしてないですもん、僕ら
上記の.\lib\example.exの末尾に、一行足してみましょう。
Example.hello()
では、再実行。
(base) C:\Users\nanbu\example>mix run
Compiling 1 file (.ex)
world
`Compiling 1 file (.ex)`と表示されてるのがわかるでしょうか?
mixコマンドは.\lib\example.exの変更を検知し、compileしてから実行してくれているわけですね。
いやぁ、すげぇな。
では、本日はこの辺で。
# 3. 本日のチートシート
|項目|説明|例|
|:--------|:----------------------------------------|:------------------------------------------------------------------|
|プロジェクトの作成|mixで、プロジェクトを作成する|mix new example|
|依存関係の設定| mixが作成したプロジェクトの中のmix.exsファイルを編集し、依存関係を設定する|T.B.S|
|コンパイル|プロジェクトのファイルをコンパイルし、実行形式を生成する|mix compile|
|プログラムの実行|mixを使ってプロジェクトの実行形式を実行する|mix rum|