 
  
  この文章はIlija Eftimovさんの2015年11月27日付のブログ記事Writing command line apps with Elixirの翻訳です。 Elixirを日常的に使用する簡易なツールを作るための言語としても利用できたらなと思っていたところこの記事を見つけました。 誤訳や関連記事などがあればコメント欄にお願いいたします。 Elixirはとてもクールな言語だ。まだ十分な経験があるわけではないが、私はいつもこれで興味深いものを作り、ビルトインツールを学んでいる。この記事ではescriptを使ってコマンドラインアプリケーションの作り方をお見せしようと思う。 Escript ErlangとElixirはescriptというクールなツールを持っている。これは基本的にはElixirのアプリケーションをコマンドラインアプリケーションにコンパイルするものだ。 Elixirのescr
![[翻訳]Elixirでコマンドラインアプリケーションを書く - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/b5f9a4025408e3deebc913fd2be4e7ced221a296/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMjQ5JTJGcHJvZmlsZS1pbWFnZXMlMkYxNTQxMDYzOTQzP2l4bGliPXJiLTQuMC4wJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZmbT1wbmczMiZzPTQzMDI5YzlkYjg4OGZjZDgyNjhiNTI1ZGJkNWVlZDM2%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D4c899213a21007d1cd108fa80d490f62%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JTVCJUU3JUJGJUJCJUU4JUE4JUIzJTVERWxpeGlyJUUzJTgxJUE3JUUzJTgyJUIzJUUzJTgzJTlFJUUzJTgzJUIzJUUzJTgzJTg5JUUzJTgzJUE5JUUzJTgyJUE0JUUzJTgzJUIzJUUzJTgyJUEyJUUzJTgzJTk3JUUzJTgzJUFBJUUzJTgyJUIxJUUzJTgzJUJDJUUzJTgyJUI3JUUzJTgzJUE3JUUzJTgzJUIzJUUzJTgyJTkyJUU2JTlCJUI4JUUzJTgxJThGJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9MDYwYjhiMzE5ZTI3MDkzNmY4ZmMzOTZjMDhhMGExNDI%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBoaWRlc2hpJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9YzE2MzkzZmEyZDAxNDg4MmM0Y2ZlMzM5NTg4ZjM2MTc%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D07d53685b540e4c53f2a0013f2e76360) 
      
  起動と終了 iex は interactive shell です。ruby でいうところの irb、Haskell でいうところの ghci です。 $ iex で起動して、Ctrl+C 二回押しで終了します。 iex helper iex では helper 関数があって、h とタイプすることで以下のようにリストが見れます。ちなみに実際はもっとカラフルに表示されます。 リスト中の c/2 とか cd/1 の /2 とかは /1 は引数の数を表しています(これ調べるの難しかったです、なんと検索すればいいやら)。 iex(1)> h IEx.Helpers Welcome to Interactive Elixir. You are currently seeing the documentation for the module IEx.Helpers which provides man
 
      
  When 2017/04/01 At Elixir Conf Japan 2017 LT Self Introduction ちきさん (Tomohiro Noguchi) Twitter/GitHub/Qiita: @ovrmrw I've started to learn Elixir 1 month ago. What I talk about Reading a JSON file and doing MapReduce. (JSONファイルを読み込んでMapReduceしたい。) Differences between Eager, Lazy and Flow(Concurrent). (Eager, Lazy, Flow(Concurrent)の違いについて。) Flow & GenStage is extremely fast. (Flowめちゃくちゃ速い。) === Git
 
      
  はじめに の翻訳です。これまでみんな大好き pipeline 演算子は後味の悪いシンタックスシュガーに思えててあまり使ってなかったのですが、このGenStage(正確にはGenStage.Flow)は、後味の悪さを解消してくれそうです。 GenStageは、現在 https://github.com/elixir-lang/gen_stage にあります。 本当にElixir(というかBeam)の良さを引き出すためには必須となるフレームワークだと思い、勢いで翻訳しました。 Announcing GenStage layout: post title: Announcing GenStage author: José Valim category: Announcements excerpt: GenStage is a new Elixir behaviour for exchanging
![[翻訳]Announcing GenStage - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/215a0ccd18f32de7fe286ecdfe47d015c2cb9e68/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMzE1NzglMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2ODU3MjY_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9MjdmMzAzMWQ2NDZlYTViMmM5NmQxNWFlZWE4MjEwZmE%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D0b9fe1ebee1e2ee14bfb7648160ca172%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JTVCJUU3JUJGJUJCJUU4JUE4JUIzJTVEQW5ub3VuY2luZyUyMEdlblN0YWdlJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9ZmZmNjRkMzJkNGUyODAyZDBlOThmNTZkNzJhOGUwMDY%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBrMWNvbXBsZXRlJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9MzhmMmM3NDUzY2MwOGVlMGY3NzMwZDFmYmEzODllOTc%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D983b05689dd533253781b1a6dff170a1) 
      
  phoenixとは、elixirで実装されたWeb framework Getting Startedを進めていくと、いろいろと学べるはず Adding pagesで新しくページを追加するところまでを学んでいるうちに、Postリクエストを処理する内容に寄り道したのでメモを残しておく ルーティング 基本はmethod "path", Controller, :action_nameをweb/router.exに設定していく resourcesを使うと、GET / POST / PUT / DELETEをまとめてルーティングしてくれたりする defmodule HelloPhoenix.Router do use HelloPhoenix.Web, :router pipeline :browser do plug :accepts, ["html"] plug :fetch_session
 
      
  defmodule OnDefinition do def on_definition(env, _kind, _name, _args, _guards, _body) do Module.put_attribute(env.module, :my_func_attr, nil) end end defmodule Foo do # Foo モジュール内で関数を定義したタイミングで呼ばれるフックを指定する。 @on_definition {OnDefinition, :on_definition} # これをモジュール定義の最初のほうで実行すると、 # 以降このモジュール内に出現した `@my_func_attr expr` が記録されていく。 # このモジュールのコンパイルフェーズ中に限り、 # `Module.get_attribute(Foo, :my_func_attr)` マク
 
      
  前回 からの続きで、スーパーバイザ(以下SVと省略)経由の大量GenServer起動における負荷を確認します なお、検証に使ったマシンのスペックは、CPUがIntel Core i5-2540M 2.60GHz、メモリ8GByteと、3Dゲームがギリギリ遊べるかどうかのロースペックな旧型PCを使っています SVからの複数GenServer起動 SVから、任意のプロセス数のGenServerを起動できるよう、以下のような変更を入れます(起動にかかる時間も測定できるようにしておきます) import Supervisor.Spec defmodule PassMultipleSupervisor do def start_link( processes ) do start = Timex.now() servers = 1..processes |> Enum.map( &( worker(
 
      
  はじめに 前回、簡単なアクションを追加してみました。 今回も、Phoenix公式ドキュメントに沿って見ていきます。 なお、次回は、ガイドラインのPlugです。 航路を決めている router.ex Routerは、HTTPリクエストとActionとのマッチング、Channelの制御、Pipelineの定義、RouteへのPipelineセットなどを行います。 Phoenixが生成する初期状態のweb/router.exは、以下の通りです。 defmodule HelloPhoenix.Router do use HelloPhoenix.Web, :router pipeline :browser do plug :accepts, ["html"] plug :fetch_session plug :fetch_flash plug :protect_from_forgery plug
 
      
  package-install可能なmodeの調査 M-x package-list-package でElixir関係のmodeをしらべてみると elixir-mode alchemist flymake-elixir elixir-mix ob-elixir などが見つかる。 elixir-modeはElixir用のメジャモード。 alchemistはemacs上でコード補完を行ったり、指定したリージョンを実行したりする機能を追加するモード。 flymake-elixirは、名前からしておそらく構文チェッカー。 elixir-mixとob-elixirは, それぞれmixとiexをemacsから呼び出すためのラッパーのようである。 alchemistが多機能で便利らしいので、とりあえずelixir-modeとalchemistをインストールすることにする。 elixir-mode M-
 
      
  Phoenix 1.3のrc-2が先月リリースされそろそろPhoenix 1.3にアプデも考えだしてきた今日この頃、まだアップデートはしないけど1.3正式版がリリースされることに備えてディレクトリ構造とか学んでおきたい ということでざっと慣れるためにPhoenix 1.3を触ってみます What's changed in Phoenix 1.3 Phoenix 1.3での主な変更点は以下です webディレクトリがlib/<project>/web以下になった デフォルトのジェネレータにContextという概念が追加されアプリケーション境界を分割出来るようになった Fallback Action Plugが追加された Controllerの構成がシンプルに出来るようになった ディレクトリ構造 まず大きく変わった点としてデフォルトのディレクトリ構造が変わったということもあるので、phoenix
 
      
  のような関数がある場合このadd関数の引数を2つとってそれぞれを足してその結果を返すという性質(特性)をPropertyと呼びます Propertyとは 以上のことからPropertyとは一言で言えばプログラムの特性と言えます なのでProperty-Based Testingは特性に基づいてテストすることといえます Example-Based Testingがプログラマが期待する入力値と出力値を元にテストすることと比較して、プログラムの特性に基づいてテストするというところが違います この特性をテストするためにProperty-Based Testingでは大量のサンプルデータを自動的に生成してテストをします Example-Based Testingがたった一つの正しい答えに基づいてプログラムの正当性を保障するのに対して、Property-Based Testingは一度の正しさを保障す
 
      
  リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く
