LoginSignup
6
1

More than 3 years have passed since last update.

この記事は、「プログラミング技術の変化で得られた知見・苦労話【PR】パソナテック Advent Calendar 2020」 5日目です。
あいていたので埋めました。
後述の通り、Qiita Advent Calendar 2020に記事を投稿することは私の趣味です。

関数型言語というもの自体の歴史は古いとおもっています。
ここ2年くらいElixirを「私が」接するようになって、「公式ドキュメントを読みましょう」というごくごく当たり前のことの大切さにようやく「私が」気づいたということを書いています。


結論

  • 公式ドキュメントを読むのが一番いい

Elixir

  • Elixir (エリクサー) は並行処理の機能や関数型といった特徴を持つ、Erlangの仮想マシン (BEAM) 上で動作するコンピュータプログラミング言語である。ElixirはErlangで実装されているため、分散システム、耐障害性、ソフトリアルタイムシステム等の機能を使用することができるが、拡張機能として、マクロを使ったメタプログラミング、そしてポリモーフィズムなどのプログラミング・パラダイムもプロトコルを介して実装されている。1

現在の「私の」位置

得られた知見

  • 公式ドキュメントを読むのが一番いい
    • Elixirに限らず、最終的には公式ドキュメントを読むクセがついた
    • Elixirは、最初から公式ドキュメントをあたるのが最短で正解にたどりつく方法 :rocket::rocket::rocket:
  • プログラミングElixir:book:は、Elixirを学ぶ上で最高の教材・傑作
  • Elixirのコミュニティーには優しく教えてくれる人が多い(優しく教えてくれる人しかいない:bangbang:)

なれそめ

  • 2016年ごろに大学生から$\huge{「これからは関数型です! 副作用がないのです!」}$と言っているのを聞きました2
  • ひょんなことから参加した 2019/01/25 kokura.ex#1:小倉Elixirコミュニティ発足【セッション/LTと懇親会】が私とElixirの出会いです
    • 関数型ときいて、難しいんだろうなあという妙な先入観があったのですが、その会では関数型というのを必要以上には強調されなかったです
    • なんとなくRubyに書き味が似ていたことも親しみやすかったポイントで、また関数型言語をやってみようかなあという気になりました
    • @piacerex さんが楽しそうにされていたこともよく覚えています
  • 昔から再帰プログラムは書けなかった(いまでも苦手ではある)のですが、不思議とElixirでは書けました
  • その後、いろいろありますがとにかくQiitaでElixirタグをつけて記事を投稿しました
  • 記事を書くにあたり、できるだけ公式のドキュメントを確認し、そのリンクを貼ることを心がけています
    • だって、公式ドキュメントが一番正しいのですもの

Elixirプログラム例

"https://icanhazdadjoke.com/"
|> HTTPoison.get!(["Accept": "application/json"])
|> Map.get(:body)
|> Jason.decode!()
|> Map.get("joke")
  • 1. APIのアクセスポイントがあります
  • 2. HTTP Getします
  • 3. レスポンスから:bodyキーの値を取り出します
  • 4. :bodyキーの値をJSONとしてデコードします
  • 5. JSONの中から"joke"キーの値を取り出します
  • パイプ演算子 |>で言葉に書いた通りにキレイに書けます
  • どうでしょうか、とても美しいですよね
実行結果の例
"If you’re struggling to think of what to get someone for Christmas. Get them a fridge and watch their face light up when they open it."
  • 美しい」と言っているのはなにも私一人だけではありません
  • たとえば
    • プログラミングElixir 第2版:book:
      • 私は、このプログラミングモデルの力と美しさについての思想を贈りたい。(はじめに(正当化のむなしい試み、再び))
    • Programming Phoenix 1.4
      • Simply put, Phoenix is about productive, concurrent, beautiful, interactive, and reliable applications.(Chapter 1. page 2)4
    • ほんの一例です

Webアプリケーションやるなら

IoTやるなら

Wrapping up :christmas_tree::santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5::christmas_tree:

  • 公式ドキュメントを読むのが一番いい
    • Elixirにおいては特にそうだし
    • たいていの他のことも公式ドキュメントを確認することは良いこと
  • 特にElixirは例も豊富で、言語自体の公式ドキュメントと各種ライブラリのドキュメント形式が同じなので読みやすいです
  • I was born to love Elixir.
  • We are the Alchemists, my friends.
  • Enjoy Elixir !!! :rocket::rocket::rocket:

おまけ

日にち タイトル カレンダー
2020/12/01 「クラウドネイティブの ASP.NET Core マイクロサービスを作成してデプロイする」 をやってみる 求ム!Cloud Nativeアプリケーション開発のTips!【PR】日本マイクロソフト
2020/12/01 [87, 101, 32, 97, 114, 101, 32, 116, 104, 101, 32, 65, 108, 99, 104, 101, 109, 105, 115, 116, 115, 44, 32, 109, 121, 32, 102, 114, 105, 101, 110, 100, 115, 33] Elixir その2
2020/12/02 LiveView uploadsを動かす 🎉🎉🎉(Elixir/Phoenix) Elixir その2
2020/12/03 【毎日自動更新】QiitaのElixir LGTMランキング! Elixir
2020/12/03 ElixirでAtCoderのABC123を解いてみる! fukuoka.ex Elixir/Phoenix
2020/12/03 Surfaceをつかってみる(Elixir/Phoenix) Elixir その2
2020/12/03 Nervesで湯婆婆を実装してみる #NervesJP
2020/12/03 Phoenixで実装した湯婆婆をAzureで動かす。Azure Virtual Machinesを使うとEC2やVPSでやったことがあることとなんらの変わり無しになりそうで、せっかくDockerと仲良くなりはじめたのでAzureコンテナーで動かしてみる。もちろんHTTPS緑にしたいのでアプリケーションゲートウェイも使ってみる。 湯婆婆
2020/12/04 とあるサイトでのみ%HTTPoison.Error{id: nil, reason: :closed}が発生 (Elixir) Elixir その2
2020/12/05 二次元リストの操作(Elixir) Elixir その2
2020/12/05 I was born to love Elixir プログラミング技術の変化で得られた知見・苦労話【PR】パソナテック
2020/12/06 次の関数の第二引数なんだよなー(Elixir) Elixir その2
2020/12/07 WindowsでIExで日本語を使う(iex --werl) (Elixir) Elixir その2
2020/12/07 Azure Container InstancesでNervesアプリを開発する Docker
2020/12/08 CircleCIでmix testする、Gigalixirへデプロイする(Elixir/Phoenix) Elixir その2
2020/12/09 Nervesで書き込める場所 (Elixir) #NervesJP
2020/12/09 HEX_HTTP_CONCURRENCY=1 HEX_HTTP_TIMEOUT=120 mix deps.get (Elixir) Elixir その2
2020/12/10 1 = a (プログラミングElixir 第2版) Elixir その2
2020/12/10 Raspberry Pi 4 + Grove Base HAT for Raspberry Pi + Grove Buzzer + Grove ButtonでつくるNervesアラーム Raspberry Pi
2020/12/11 NimbleCSVのご紹介(Elixir) Elixir その2
2020/12/11 Nervesならできるもん! |> 本当にできんのか! (Elixir) Raspberry Pi
2020/12/12 String.replace/3 (Elixir) Elixir その2
2020/12/12 「kentaro/mix_tasks_upload_hotswap」を試してみる! ご本人が参加していらっしゃるカレンダーにて #NervesJP
2020/12/13 GigalixirでPORTを4000以外の値にするのはだめよ (Elixir) Elixir その2
2020/12/13 Grove Base HAT for RasPiは真っ直ぐグイっとさす Seeed UG
2020/12/14 Grove - Buzzer をNervesで鳴らす Seeed UG
2020/12/15 グラフうねうね (動かし方 編) (Elixir/Phoenix) #NervesJP
2020/12/16 Macro.camelize/1 (Elixir) 何でもOKなカレンダー
2020/12/17 AtCoderをElixirでやってみる 競技プログラミング
2020/12/18 GrovePi+ Starter Kit for Raspberry Pi A+,B,B+&2,3,4 (CE certified) 〜Nervesならできるもん!〜 Seeed UG
2020/12/19 0埋め (Elixir) 何でもOKなカレンダー
2020/12/20 [Elixir]Qiitaの自分の記事をエクスポートする 何でもOKなカレンダー
2020/12/21 1260 (Elixir 1.11.2-otp-23) Elixir その2 Advent Calendar 2020
2020/12/21 ここがへんだよ GET /api/v2/items (Elixir) 何でもOKなカレンダー
2020/12/22 String.jaro_distance/2 (Elixir) Elixir その2 Advent Calendar 2020
2020/12/23 「動的計画法を使う問題をElixirで関数型っぽく解いてみる」のFibonacci3をガード節を使って書き直してみる Elixir その2 Advent Calendar 2020
2020/12/24 @tamanugiさんのex_at_coderを使ってみる (Elixir) Elixir その2
2020/12/25 @g_kenkunさんのg-kenkun/kyopuroを使ってみる (Elixir) Elixir その2
2020/12/25 グラフうねうね (作り方 編) (Elixir/Phoenix) 名前は聞いたことあるけど使ったことないやつをせっかくだから使ってみる

https://qiita.com/advent-calendar/2020/my-calendar
で参加中のカレンダーがみえるでありますよ。

私の場合

スクリーンショット 2020-12-21 23.00.51.png


  1. https://ja.wikipedia.org/wiki/Elixir_(プログラミング言語) 

  2. だから何:interrobang: っておもった方、大丈夫です。私はいまだによくわかっていません。簡単に「わかりました」なんて言えない領域だと思っています。並列? だか並行? だかその区別も意識していませんが、ただ私から言えることは、Flowって書くと速くなる:rocket::rocket::rocket: のです。副作用がないというのはそのへんにつながるのですが、とにかくFlowって書くと速くなるとおぼえておけば大丈夫です。それだけ覚えておけば、海外でもLTできます。Amazing!!! Unbelievable!!!, Oh, my お釈迦様ness って叫んでおけばOKです。(注釈なのに言葉足らずですが)  

  3. @zacky1972 先生にはそんなつもりは全くなく、私の勝手な思い込み:rocket:なのかも :sweat_smile:  

  4. PhoenixElixirあってのWebアプリケーションフレームワークですから、Elixirbeautifulだと言っているのだと私は解釈しています 

6
1
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
1