LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

Organization

mix_install_examplesからex_doc.exsの紹介です(Elixir)

あまの原ふりさけ見ればかすがなるみ笠の山にいでし月かも

Advent Calendar 2022 56日目1の記事です。
I'm looking forward to 12/25,2022 :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5:
私のAdvent Calendar 2022 一覧


はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:

Mix.install/2のサンプル集であるmix_install_examplesからex_docを紹介します。

What's Mix.install/2 ?

Mix.install/2は、Elixir 1.12から追加されました。
Elixirでライブラリ(Hex)を追加するのは、1.11まではmix newでプロジェクトを作らないといけないなど、ひと手間必要でした。
Mix.install/2を使うことで、ちょっとした1ファイルで収まるようなスクリプトを書く際に.exsのみで完遂できるようになりました。

具体例

具体例です。
私がよく使ういつものサンプルです。

Qiita APIを使わせていただいて、Elixirタグがついた最新の記事を20件取得しています

Mix.install [{:req, "~> 0.2.1"}]

"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))

Qiitaさん、いつもありがとうございます!!!

ex_doc.exs

おもしろそうなサンプルってことで、今日はExDocを楽しんでみます。
朗報です。

What's ExDoc ?

ExDoc is a tool to generate documentation for your Elixir projects. To see an example, you can access Elixir's official docs.

要はドキュメントをいい感じに作ってくれます。

Elixirは、プログラミング言語としてはヤングで後発の部類に入ります。
2022/05/24でようやく10年です。
後発の強みというものもありまして、Elixirのドキュメントは、本体から各種ライブラリまで、すべてExDocで書かれています。
どのドキュメントも見方が同じなので、調べ物がしやすいです。
ドキュメント中で、gキーを押すと他のライブラリのドキュメントに飛べたりします。

ためしにやってみましょう。
まず

にアクセスしてみてください。
そうして、つぎにgキーをおしてください。
そうするとポップアップがでます。
今回は、ex_docとでも打ち込んでみてください。
一文字ずつ、「e」「x」「_」と打ち込んでみてください。
次の「d」「o」くらいでそろそろex_docで候補がでてくるとおもいます。
一文字ずつ打ち込むことで候補が絞り込まれていく様子をみるとことができるとおもいます。

スクリーンショット 2022-02-25 8.23.07.png

ただし、少し古い形式で書かれていると、gによるジャンプができない場合があります。

Run

それでは、ex_doc.exsを動かしてみます。

以下、そのまま掲載します。

ex_doc.exs
Mix.install(
  [
    {:ex_doc, "~> 0.28.0"}
  ],
  elixir: "~> 1.13"
)

{:module, module, beam, _} =
  defmodule Foo do
    @moduledoc """
    A module.
    """

    @doc """
    A function.
    """
    def foo do
    end
  end

tmp_dir = Path.join(System.tmp_dir!(), "mix_install_ex_doc")
beam_path = "#{tmp_dir}/_build/dev/lib/example/ebin/#{module}.beam"
File.mkdir_p!(Path.dirname(beam_path))
File.write!(beam_path, beam)

Hex.start()

defmodule Example.MixProject do
  use Mix.Project

  def project do
    [
      app: :example,
      version: "1.0.0",
      build_path: "#{unquote(tmp_dir)}/_build",
      lockfile: "#{unquote(tmp_dir)}/mix.lock",
      deps_path: "#{unquote(tmp_dir)}/deps"
    ]
  end
end

Mix.Task.run("docs", ~w(--formatter html --main Foo --output #{tmp_dir}/doc --open))

今回のプログラムは少し複雑に見えるかもしれません。

Mix.install/2でやってみよう! シリーズの一種のお遊びだとおもいます。
安心してください。
実際にあなたのプロジェクトにExDocを導入するのはもっと簡単です。

簡単だと言っている導入方法については、誌面の都合でこの記事では説明をしません。
別の記事で書きます。(書いたことあるかも?、ないかも?)

実行

git clone https://github.com/wojtekmach/mix_install_examples.git
cd mix_install_examples
elixir ex_doc.exs

結果

ドキュメントが出来上がって、な〜んとブラウザでドキュメンを開いてくれました。
私はmacOS Catalinaを使っています。

スクリーンショット 2022-02-25 8.34.09.png


Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

Enjoy Elixir:bangbang::bangbang::bangbang:
$\huge{Enjoy\ Elixir🚀}$

今回は、mix_install_examplesの中から、ex_doc.exsをご紹介をしました。

あなたがみているElixirのドキュメント、それ、ExDoc形式で書かれています!

今後も他のサンプルをご紹介していきます。
また、シンプルでいい例をおもいついたら、プルリクを送ってみるのはいいかもしれません。
私は、おもいついた場合には、プルリクを送ってみる気でいます :rocket::rocket::rocket:

以上です。


付録

以下、付録です。

Elixirの誕生日は、2012年5月24日です。
そのため、今年の2022年5月24日は10周年を迎えます。

iex> Date.diff(~D[2022-05-24], ~D[2022-02-25])
88

そうそう!
2月24日発売予定のWEB+DB PRESSで、ElixirPhoenixの特集がでますよ〜

ElixirPhoenixをはじめられたばかりの方も、腕におぼえがある方も、どんなものなのかなあと様子見をきめこんでいる方も、
つまりは
$\huge{全人類のみなみなさま!!!}$
お手にとって、お楽しみください!!!


Elixir

最後の最後に、Elixirについて紹介します。

  • |>でスイスイ、プログラミングしていくことができる素敵なプログラミング言語です
  • さっそくプログラムの例を示します
  • Qiita APIを使わせていただいて、Elixirタグがついた最新の記事を20件取得しています
  • ここでは雰囲気をつかんでいただければ大丈夫です
Mix.install [{:req, "~> 0.2.1"}]

"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))

Webアプリケーションを楽しむなら

IoTを楽しむなら

AIを楽しむなら

もっとElixirのことを知りたい方へオススメの書籍 :books:

コミュニティ

  • elixir.jp Slack workspaceに参加してみてください
    • マヂ、やさしい人ばっかりのコミュニティ
    • あなたの困ったをきっと解決してくれるでしょう
  • NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します :tada:
  • たくさんのコミュニティがあります
    FCOvBkAUYAE6mL8.jpeg
    (EDI/fukuoka.ex/kokura.exLiveView JP@piacerex さん作 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:)

Elixirコミュニティに初めて接する方は下記がオススメです

Elixirコミュニティ の歩き方 -国内オンライン編-

https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
image.png
(piyopiyo.exエリジョ の nakoさん(@kn339264) 作、素敵な資料:clap::clap_tone1::clap_tone2::clap_tone3::clap_tone4::clap_tone5:)

Elixirのイベント情報

@koga1020 さんが作成されたイベントカレンダーがあります。
https://elixir-jp-calendar.fly.dev/

気になるイベントにはぜひ参加してみましょう!!!

上記サイトの解説記事はこちらです。


I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.

We Are The Alchemists, my friends!

  1. @kaizen_nagoya さんの「「@e99h2121 アドベントカレンダーではありますまいか Advent Calendar 2020」の改訂版ではありますまいか Advent Calendar 2022 1日目 Most Breakthrough Generator」から着想を得て、模倣いたしました。

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
What you can do with signing up
1