自衛官からエンジニアへ Elixirから始める Web開発 Part27（Phoenix編）

この記事は「Elixir Advent Calendar 2023」のvol27の記事です
東京にいるけどfukuokaexのYOSUKEです。

普段は 合同会社TheWaggle で教材開発・システム開発・研修講師などマルチに活動してます。

このシリーズでは、文系ですらない、体育会系でも始められるプログラミング学習　というテーマで元自衛官だった僕が
自衛官からエンジニアになってもらいたいという気持ちを込めて、普段は大人しいですが、このコラムシリーズでは、あえて、体育会系のノリで、貴様ら理屈で覚えるなら体で覚えろ！というノリで書いてみたいと思います。

なので、初学者向けですが、理論は後回し、まずは動かして体感しろってノリの第27回目です。

それでは、いくぞ！

## 環境を作るのは、不死鳥のごとく
いいか、貴様ら、今日からいよいよ、Web開発に入ってく！だが、しかし貴様らには教えなければならない基礎はまだまだ多い！

だが、完璧に基礎を理解してからなどゆとりがあると思うな！戦場においても人は大勢死に常に人手不足が当たり前！
昨日入った新兵が３ヶ月生き残っただけで、部隊を任されるくらい人手不足だ！

そうだ、Livebookを使って関数を作ってきたが、それは訓練の中の生ぬるい環境の中でやってきたことに過ぎん！
これからが本番だ！

そうと決まれば、早速 Web開発の準備をする。

まずは、貴様らのMacに開発環境をインストールする。


https://www.phoenixframework.org/


今回はElixirのインストールだけではなく、Phoenixframeworkもインストールする。

何？ frameworkとは何か？だと、貴様らがこれを理解するには早すぎる。今のところは、frameworkとは特殊部隊のようなものだと思え、専門分野に特化して訓練を積んだ手だれの集団だ、今回のPhoenixframeworkはElixir部隊におけるWebを攻略するための特殊部隊

Phoenix部隊だ！

Phoenix部隊の特徴は大まかに言えば、以下の通りだ

高性能: 高い並列処理能力と耐障害性を備えたErlang部隊による下支えがあり。多くのユーザーに同時にサービスを提供できる能力を意味する。

リアルタイム通信: PhoenixはWebSocketsを使ったリアルタイム通信を簡単に実装できる。これにより、チャットアプリやライブアップデートなど、リアルタイムのインタラクションが求められるアプリケーションに適している。

生産性: Elixir言語の機能を活用し、開発者が効率的にコードを書くことを可能にする。また、MVC（モデル-ビュー-コントローラー）アーキテクチャを採用しており、ウェブアプリケーションの開発を構造的に行える。

これらの特徴を備えた特殊部隊が支援してくれる為、貴様のような新兵でも、高度な作戦の一端を担えるようになるわけだ。

### インストールは公式リファレンスの以下のページにある。上から順に読んだまま実行すれば完了だ。

https://hexdocs.pm/phoenix/installation.html


公式リファレンスでもわからないだと！ 貴様の目は節穴か！ いいだろう、そんな奴はfukuoka.exのコミュニティやpiyopiyo.exに参加してわからない所を手取り足取り教えてもらうといい！


無事にインストールできたかどうかは、次のコマンドをターミナルを実行して叩いてみろ！

```bash
iex
Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit] [dtrace]

Interactive Elixir (1.15.7) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 
```
上記が表示されたら、 `Ctr` + `C`を2回で終了
続いて、 以下のコマンドを叩いてみろ！

```elixir
mix help

mix                   # Runs the default task (current: "mix run")
mix app.config        # Configures all registered apps
mix app.start         # Starts all registered apps
mix app.tree          # Prints the application tree
mix archive           # Lists installed archives
mix archive.build     # Archives this project into a .ez file
mix archive.install   # Installs an archive locally
mix archive.uninstall # Uninstalls archives
mix clean             # Deletes generated application files
mix cmd               # Executes the given command
mix compile           # Compiles source files
mix deps              # Lists dependencies and their status
mix deps.clean        # Deletes the given dependencies' files
mix deps.compile      # Compiles dependencies
mix deps.get          # Gets all out of date dependencies
mix deps.tree         # Prints the dependency tree
mix deps.unlock       # Unlocks the given dependencies
mix deps.update       # Updates the given dependencies
mix do                # Executes the tasks separated by plus
mix escript           # Lists installed escripts
mix escript.build     # Builds an escript for the project
mix escript.install   # Installs an escript locally
mix escript.uninstall # Uninstalls escripts
mix eval              # Evaluates the given code
mix format            # Formats the given files/patterns
mix help              # Prints help information for tasks
mix hex               # Prints Hex help information
mix hex.audit         # Shows retired Hex deps for the current project
mix hex.build         # Builds a new package version locally
mix hex.config        # Reads, updates or deletes local Hex config
mix hex.docs          # Fetches or opens documentation of a package
mix hex.info          # Prints Hex information
mix hex.organization  # Manages Hex.pm organizations
mix hex.outdated      # Shows outdated Hex deps for the current project
mix hex.owner         # Manages Hex package ownership
mix hex.package       # Fetches or diffs packages
mix hex.publish       # Publishes a new package version
mix hex.registry      # Manages local Hex registries
mix hex.repo          # Manages Hex repositories
mix hex.retire        # Retires a package version
mix hex.search        # Searches for package names
mix hex.sponsor       # Show Hex packages accepting sponsorships
mix hex.user          # Manages your Hex user account
mix loadconfig        # Loads and persists the given configuration
mix local             # Lists tasks installed locally via archives
mix local.hex         # Installs Hex locally
mix local.phx         # Updates the Phoenix project generator locally
mix local.public_keys # Manages public keys
mix local.rebar       # Installs Rebar locally
mix new               # Creates a new Elixir project
mix phx.new           # Creates a new Phoenix v1.7.10 application
mix phx.new.ecto      # Creates a new Ecto project within an umbrella project
mix phx.new.web       # Creates a new Phoenix web project within an umbrella project
mix profile.cprof     # Profiles the given file or expression with cprof
mix profile.eprof     # Profiles the given file or expression with eprof
mix profile.fprof     # Profiles the given file or expression with fprof
mix release           # Assembles a self-contained release
mix release.init      # Generates sample files for releases
mix run               # Runs the current application
mix test              # Runs a project's tests
mix test.coverage     # Build report from exported test coverage
mix xref              # Prints cross reference information
iex -S mix            # Starts IEx and runs the default task
```

このように `mix`から始まる号令集が見られる

この状態までできたら一旦は、準備完了だ。

いいか、貴様ら次回からはPhoenix部隊と合同演習に入る！ その際に下手な詮索は禁物だ！
貴様らに理解するにはまだ早い。こうしたらこうなると言うルールベースでまずは覚えろ！

わかったな！

今日はここまで、それでは次回 Part28でまた会おう！