284
217

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ExcelからElixir入門①:データ並替え/絞り込み

Last updated at Posted at 2018-04-27

【本コラムは、2分で読めて、10分くらいでお試しいただけます】
piacere です、ご覧いただいてありがとございます :bow:
image.png

Excel位カンタンな関数型プログラミング言語「Elixir」

「関数型言語」の習得が、なかなか進まない、といったことをよく聞きます

特に、「オブジェクト指向言語」に慣れ親しんだ方ほど、苦しんでいるようです

Elixirは、「ExcelやGoogleスプレッドシートを使う位、簡単」なので、「関数型言語」の習得が進まない方には、オススメの言語です

また、プログラミングが初めての方でも、Excel/Googleスプレッドシートでできることが、Elixirも同じようにできると分かれば、習得しやすいでしょう

この「Excelから関数型言語マスター」シリーズでは、Excel/Googleスプレッドシートと同じ機能を、Elixirでも実践するだけ … というカンタンなところからスタートし、その延長で、Elixir/Phoenixによる「Web+DB開発」や「Web+外部API開発」、「Web上でのグラフ描画」まで作れる、ということを実感いただくシリーズです

Elixirそのものが2022年段階でいったい何をできるのかや、どんな魅力があるのかを知りたい方は、下記コラムもご覧ください

このシリーズはどのように始まったか?

私は普段、福岡のスタートアップ企業のCTOとして、「ビッグデータ分析+AI・ML開発」を行うElixir/Phoenix/React/Kerasリードプログラマをしながら、福岡Elixirコミュニティ「fukuoka.ex」のMeetUp(偶数月定期開催)やプログラミング入門ハンズオン、もくもく会を主催しています
image.png

先日、「fukuoka.ex #8 ~2018年 春のElixir入学式~」というMeetUpを開催し、その中で、Elixir入門者向けのセッションの登壇したのですが、それをコラム化したのが、このシリーズの①~③にあたります

■「ExcelからElixir入門」シリーズの目次
①データ並替え/絞り込み
|> ②データ列抽出、Web表示
|> ③WebにDBデータ表示
|> ④Webに外部APIデータ表示
|> ⑤Webにグラフ表示
|> ⑥SPAからPhoenix製APIを呼び出す(表示編)【LiveView版】
|> ⑦SPAからPhoenix製APIを呼び出す(更新編)【LiveView版】
|> ⑧Gigalixirに本番リリース
|> ⑨ElixirサーバサイドのみでReactと同じSPA/リアルタイムUIが作れる「LiveView」
|> ⑩ElixirサーバサイドSPAをスマホで見るためにGigalixirリリース
|> ⑪Gigalixir上のLiveViewアプリに独自ドメイン名を付与して正式なアプリ公開
|> ⑫Elixir/PhoenixのCRUD Webアプリをリリース

:ocean::ocean::ocean: Elixir Advent Calendar: 言語カテゴリ1位 & 全カテゴリ2位! :ocean::ocean::ocean:

例年を遥かに超える盛り上がりを見せ、堂々のトップ獲得ッ! :qiita: :tada: :confetti_ball:

https://qiita.com/advent-calendar/2022/elixir
https://qiita.com/advent-calendar/2022/ranking/feedbacks
https://qiita.com/advent-calendar/2022/ranking/feedbacks/categories/programming_languages
image.png

事前準備:Elixirのインストール

Elixirを使い始めるのに4種類の方法がありますが、うち2種類をここでは紹介します … いずれかを実施すればOKです(≒全部をやらなければいけないと誤解される方が割と多いのでご注意)

①インストーラを使う              ※Windows/Mac/Ubuntuはこれがオススメ
②DockerでElixirイメージをインスト―ル (pull)  ※Ubuntu以外のLinuxやその他OSはこちらがオススメ

なお、複数バージョンのElixir/Erlangを使い分ける場合、asdfを使う手もありますが、入門向けでは無いため、ここでは割愛します(同様の理由で、ソースコードからのビルドも割愛します)

インストール方法①:インストーラを使う

インストール方法②:DockerでElixirイメージをpull

下記URLにアクセスすると、下図のような感じで、利用OS毎のDockerがダウンロードできます
https://www.docker.com/get-docker
image.png

Dockerインストール後、以下コマンドでElixirイメージを入れ、Elixirイメージのコンテナを4000番ポートフォワード(これはPhoenix用です)で起動します

sudo docker pull elixir
sudo docker run -p 4000:4000 -i -t elixir /bin/bash

なお、Windowsの場合は、下記の通り、sudo無しで実行してください

docker pull elixir
docker run -p 4000:4000 -i -t elixir /bin/bash

Excelの「並べ替え」をElixirで書いてみる

さて、Elixirのインストールが完了したので、Excelの「並べ替え」をElixirで書いてみましょう

シェルやコマンドプロントを起動し、その中で、Elixirのコードをインタラクティブに実行できる「iex」コマンドを起動します

iex

下記のように表示され、iexの入力待ちとなればiex起動は成功です(Ctrl+Cを2回で終了できます)

Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns]

Interactive Elixir (1.14.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

データの「並べ替え」は、Elixirでは、Enum.sort()を使います

iex内で、実際にコードを打って、試してみてください

image.png

パイプ「|>」により「データ→並べ替え」という流れの順で書くこともできます

image.png

Excelの「フィルタ」をElixirで書いてみる

次は、Excelの「フィルタ」をElixirで書いてみます

データの「フィルタ」は、Elixirでは、Enum.filter()を使います

image.png

Enum.filter()内のfn( n )は、データの1つ1つの値を変数n※として、後ろの処理 (青枠) に渡す、という意味で、青枠の処理では、1つ1つの値が「999」で無いことをチェックしています

※この「n」は、fn()で指定した変数と、後ろの処理で同一であれば、どんな変数名でも構いません

image.png

なお「fn」は、関数 (function) を意味しており、その後の「->」から「end」までの間が、関数の処理を意味しています

image.png

つまり、データの1つ1つの値が、「999で無いことをチェック」するという関数に順に渡され、 「999で無い値」だけが残るようフィルタされている、というのが、Enum.filter()で行われている処理です

なお、「999」以外の数字や、以下のような「!=」以外も使えるので、いろいろ試してみてください

「==」、「>=」、「>」、「<=」、「<」

あと、「n <= 323 && n >= 999」や「n == 323 || n == 54」みたいな書き方もできます

ElixirはExcel/Googleスプレッドシートと同じ位カンタン

Excelの「並べ替え」「フィルタ」と同じことをElixirで書いてみましたが、思ったよりカンタンだったのでは無いでしょうか?

「関数型言語」と聞くだけで、複雑そうだったり、これまで聞いたことが無い用語が飛び交う世界…というのが、一般的なイメージだったかと思いますが、そうでは無く、Excel/Googleスプレッドシートとやっていることは同じなんだ、ということをElixirから感じていただけたら幸いです

次回は、「列の抽出とWeb表示」 を行います

【参考】本コラムの検証環境

本コラムは、以下環境で検証しています(恐らくUbuntu実機やMacでも動きます)

  • Windows11
  • Windows 10
    • 実機+Elixir 1.14.2 (Erlang/OTP 25)
    • 実機+Elixir 1.14.0 (Erlang/OTP 25)
    • WSL2/Ubuntu 20.04+Elixir 1.14.2 (Erlang/OTP 25)
    • Docker/Debian 11.6+Elixir 1.14.2 (Erlang/OTP 25)
    • WSL2/Ubuntu 18.04+Elixir 1.13.0 (Erlang/OTP 24)
    • 実機+Elixir 1.11.3
    • 実機+Elixir 1.8.1
    • 実機+Elixir 1.6.x
    • Docker+Elixir 1.6.x

:stars::stars::stars::stars::stars: お知らせ :stars::stars::stars::stars::stars:
先日、fukuoka.exアドバイザーズ(コア運営メンバーのこと)のインタビュー記事を公開しました

昔やっていた、超大規模案件で苦しんでいたところから、Elixirを始めたきっかけが取材されています

image.png

284
217
3

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
284
217

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?