6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 23

Elixirのチートシートを作ろう #17 mixその1

Last updated at Posted at 2024-12-22

1.OverView

さて、mixです。
ポエム全開で、主語デカく決めつけます。

MixはElixirのビルドツールであり、プロジェクトの作成、依存関係の管理、テストの実行、ドキュメントの生成など、さまざまなタスクを簡単に実行するためのツールです。

ビルドツールこそが、僕の愛する古き良き時代のプログラミング言語と、今の言語を分ける点だと思ってます。
言い換えれば、BASICで、BAKAとかループで回してはしゃいでた僕には、REPLはすごくわかりやすく、ビルドツールを理解しないと
コンパイルすら出来ないモダンな言語は、ものすっごい大変ですw

と言うわけで、何度も書き直すから、今日は勉強の成果を見てやる、くらいにしてくれると嬉しいです。

今回、ステップバイステップでやりますね。
今回、テストを抜いた、プロジェクト作成、コンパイル、実行の流れをやります。

2. まずは解説

2.1 作業の流れ

プログラムを書くとはなにか?みたいなお説教はおいておいて。

「プログラムを書いて、実行する」

くらいのイメージはロートルの僕にも、みなさんにもありますね。

ここで「プログラムを書いて」の部分が、今の言語はちょっと違う。
プログラムを動かすための、いろんなファイルを作ってくれるのです。

流れは以下の通り

  1. プロジェクトを作成する。
  2. プロジェクトに、ファイルを更新・作成する
  3. コンパイルする
  4. 実行する。

ほおら、話がややっこしくなってきた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|
6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?