Movatterモバイル変換


[0]ホーム

URL:


fukuoka.ex, profile picture
Uploaded byfukuoka.ex
3,006 views

Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります

※本スライド、旧版(Phoenix 1.2)のため、下記最新版をご覧くださいhttps://www.slideshare.net/piacere_ex/elixir3phoenix-13web-rest-api-81219622Elixirの上で動くWebアプリケーションサーバ「Phoenix」を使って、高速なWebアプリやREST APIをサクっと書いてみます

Embed presentation

Elixir入門 第3回「Phoenixで高速Webアプリ &REST APIをサクッと書いてみる」with Docker2017/04/14 ver0.5作成2017/04/26 ver0.9作成2017/04/28 ver1.0作成
11. C10K問題を解決する高速Web2. Phoenixのインストール3. HTMLテンプレートを変更する4. WebアプリからDB操作する5. JSON APIを作ってみる6. Dockerイメージを保存する7. 高速なWeb&APIを気軽に開発目次
21.C10K問題を解決する高速Web
31.C10K問題を解決する高速Web「C10K問題」をご存知でしょうか?10,000以上のクライアントがサーバに同時接続すると、ハードウェア性能が充分でも、ソフトウェアの処理方式や性能が不充分で処理できない、という、昨今のネット利用増大に伴う問題ですこの問題に対し、膨大なリクエストを、同時並行で効率良く処理するサーバソフトウェアが求められていますElixirは、電話交換機の開発で生まれたErlangをベースとしているため、膨大な同時並行のリクエストを効率良く処理できますそのElixirの上に構築されたWebアプリケーションフレームワークであるPhoenixも、高速に同時並行リクエストを処理できます
42.Phoenixのインストール
52.PhoenixのインストールElixirイメージをDockerで起動します (-pが追加されています)PhoenixをインストールしますPhoenixプロジェクトを作成します (要ネット接続)作成したプロジェクトでPhoenixサーバーを起動します> docker run --rm -v /c/piacere/code:/code -p 4000:4000 -i -ttrenpixster/elixir /bin/bash# mix archive.install ¥https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez# mix phoenix.new web_nodb --no-brunch --no-ecto# cd web_nodb# iex -S mix phoenix.server
62.Phoenixのインストールブラウザで「http://localhost:4000」にアクセスすると、Phoenixで作られたWebページが見れます
73.HTMLテンプレートを変更する
83.HTMLテンプレートを変更するトップページ本文のHTMLテンプレートは下記フォルダにあります「index.html.eex」をお好きなエディタで開き、以下の内容に変更してくださいブラウザをリロードすると、以下のように変更されます※なお、Dockerでは無く、ローカルPCでPhoenixサーバを起動すると、リロードしなくてもリアルタイムで反映されます# cd web/templates/page/ここが本文です。<br>
93.HTMLテンプレートを変更する「index.html.eex」には、ただのHTMLだけで無く、Elixirのコードを「<%~%>」や「<%=~%>」で埋め込むことができます上記変更後、リロードすると、以下のように変更されますここが本文です。<br><%= [ "hoge", "foo" ] |> List.to_string %>
104.WebアプリからDB操作する
114.WebアプリからDB操作するDBとして、PostgreSQLをインストールしますDockerイメージ「trenpixster/elixir」は、Debian系であるUbuntu利用のため、aptを使いますが、お使いのOSに応じて、yum/RPM/Homebrew/HPからのDLで対応してくださいインストールが完了したら、PostgreSQLサーバを起動し、psqlからの接続確認を行ってください# apt-get update# apt-get install postgresql# /etc/init.d/postgresql start* Starting PostgreSQL 9.3 database server [ OK ]# sudo -u postgres psqlpsql (9.3.16)Type "help" for help.postgres=# ¥q
124.WebアプリからDB操作するNode.jsとnpmをインストールしますDB利用するためのPhoenixプロジェクトを作成します (要ネット接続)# git clone https://github.com/creationix/nvm.git ~/.nvm# source ~/.nvm/nvm.sh# nvm install v4.2.6# apt-get install npm# mix phoenix.new web --no-brunch# cd web
134.WebアプリからDB操作するPostgreSQLユーザのパスワードを初期化しますモデルを格納するDBを作成しますDBが追加されていることを確認します# sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"# sudo service postgresql restart# mix ecto.create# sudo -u postgres psql -lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges-------------+----------+----------+-------------+-------------+-----------------------postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgresweb_dev | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |(4 rows)
144.WebアプリからDB操作するWebアプリ用のモデル生成を行います今回は、titleとbodyの2項目を持ったモデルを作ります終盤に指示されている通り、web/router.exへのパス追加と、モデルのマイグレーションが必要です# mix phoenix.gen.html Post posts title:string body:text…Add the resource to your browser scope in web/router.ex:resources "/posts", PostControllerRemember to update your repository by running migrations:$ mix ecto.migrate
154.WebアプリからDB操作するweb/router.exへのパス追加を行いますモデルのマイグレーションを行います# mix ecto.migratedefmodule Web.Router douse Web.Web, :router…scope "/", Web dopipe_through :browser # Use the default browser stackget "/", PageController, :indexresources "/posts", PostControllerend…end
164.WebアプリからDB操作するマイグレーションの結果、テーブル追加されるので、確認します# sudo -u postgres psqlpsql (9.3.16)Type "help" for help.postgres=# ¥c web_devYou are now connected to database "web_dev" as user "postgres".web_dev=# ¥d postsTable "public.posts"Column | Type | Modifiers-------------+-----------------------------+----------------------------------------------------id | integer | not null default nextval('posts_id_seq'::regclass)title | character varying(255) |body | text |inserted_at | timestamp without time zone | not nullupdated_at | timestamp without time zone | not nullIndexes:"posts_pkey" PRIMARY KEY, btree (id)
174.WebアプリからDB操作するPhoenixサーバを起動しますブラウザで「http://localhost:4000/posts」を表示すると、「Title」「Body」がリストされるページが表示されます# iex -S mix phoenix.server
184.WebアプリからDB操作する「New post」から、新たなアイテムを追加できます
194.WebアプリからDB操作する追加後は以下の通りです「Show」「Edit」「Delete」で追加されたアイテムを編集できます
205.JSON APIを作ってみる
215.JSON APIを作ってみるJSON APIも、前述したWebアプリとほぼ同じ手順で作れますまずJSON API用のPhoenixプロジェクトを作成しますモデルを格納するDBを作成しますJSON API用のモデル生成を行います (違いはjson指定のみ)前述のWeb用のモデルと全く同じモデルで作ってみます# mix phoenix.new api --no-brunch# cd api# mix phoenix.gen.json Post posts title:string body:text…Add the resource to your api scope in web/router.ex:resources "/posts", PostController, except: [:new, :edit]Remember to update your repository by running migrations:$ mix ecto.migrate# mix ecto.create
225.JSON APIを作ってみるweb/router.exへのパス追加を行います同時に、CSRFを防止する部分も解除しておきますモデルのマイグレーションを行います# mix ecto.migratedefmodule Api.Router douse Api.Web, :routerpipeline :browser do…plug :fetch_flash# plug :protect_from_forgeryplug :put_secure_browser_headers…scope "/", Api dopipe_through :browser # Use the default browser stackget "/", PageController, :indexresources "/posts", PostController, except: [:new, :edit]end…endCSRF(cross-site request forgeries)の防止が行われると、CSRFトークン(csrf_token)を渡さないとアクセスできなくなるため解除する※ステートレスなREST APIでの本CSRF対策は実装が難しい
235.JSON APIを作ってみるマイグレーションの結果、テーブル追加されるので、確認します# sudo -u postgres psqlpsql (9.3.16)Type "help" for help.postgres=# ¥c api_devYou are now connected to database “api_dev" as user "postgres".web_dev=# ¥d postsTable "public.posts"Column | Type | Modifiers-------------+-----------------------------+----------------------------------------------------id | integer | not null default nextval('posts_id_seq'::regclass)title | character varying(255) |body | text |inserted_at | timestamp without time zone | not nullupdated_at | timestamp without time zone | not nullIndexes:"posts_pkey" PRIMARY KEY, btree (id)
245.JSON APIを作ってみるJSON API用のコマンドとして、どのようなものが用意されたかは、以下で確認できます一覧取得 (index)は、/postsへのGETで行いますアイテム登録 (create)は、/postsへのPOSTで行います各アイテム取得 (show)は、/posts/1、/posts/2等のID指定でのGETで取得でき、アイテム更新 (update)はID指定のPUTもしくはPATCH、アイテム削除 (delete)はID指定でのDELETEで行います# mix phoenix.routespage_path GET / Api.PageController :indexpost_path GET /posts Api.PostController :indexpost_path GET /posts/:id Api.PostController :showpost_path POST /posts Api.PostController :createpost_path PATCH /posts/:id Api.PostController :updatePUT /posts/:id Api.PostController :updatepost_path DELETE /posts/:id Api.PostController :delete
255.JSON APIを作ってみるPhoenixサーバを起動しますJSONクライアントで「http://localhost:4000/posts」をGETリクエストすると、アイテムが空のJSONが返ってきます# iex -S mix phoenix.server
265.JSON APIを作ってみる「http://localhost:4000/posts」へのPOSTリクエストにてtitleとbodyを下記JSONのように指定すると、新たなアイテムを追加できます
275.JSON APIを作ってみる再度、「http://localhost:4000/posts」をGETすると、追加されたアイテムを確認できます
286.Dockerイメージを保存する
296.Dockerイメージを保存するここまでにインストールしたPhoenix/PostgreSQL/node.jsは、Dockerイメージとして保存しておかないと消えてしまいます保存するため、まず、以下手順でDockerを抜け、保存対象となるDockerプロセスを確認しますDockerプロセスを、Dockerイメージとして保存します#【Ctrlキーを押下し続けたまま、pキー → qキーと打鍵するとDockerを抜けます】> docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUSPORTS NAMES5e05bff83fe6 trenpixster/elixir "/bin/bash" 2 minutes ago Up 2minutes 0.0.0.0:4000->4000/tcp blissful_wozniak> docker commit -m "Phoenix/PostgreSQL/node.js installed" blissful_wozniaklocal/phoenixsha256:84b71bd343938a4eb482fce3f295b44c4c5872ac32d883aa900c6e6092c26bcd
306.Dockerイメージを保存するDockerイメージが保存されていることを確認します元となったDockerプロセスは停止しておきます今後、Phoenixを使う際は、保存したDockerイメージを以下の通り起動するようにします> docker imagesREPOSITORY TAG IMAGE ID CREATED SIZElocal/phoenix latest 4c81c5756057 1 second ago 684MBtrenpixster/elixir latest 760616f3ebe6 2 months ago 684MB> docker run --rm -v /c/piacere/code:/code -p 4000:4000 -i -t local/phoenix/bin/bash> docker stop blissful_wozniak
317.高速なWeb&APIを気軽に開発
327.高速なWeb&APIを気軽に開発今回は、Phoenixを使った、Webアプリ & REST APIの開発の基本的な手順についてご説明しましたPhoenixによるWebアプリやREST APIの構築が「そこまで難しく無いかも?」と思っていただけたら、この入門としては大成功ですPhoenixは、WebアプリおよびJSON APIの気軽な構築を実現しつつ、高速・並行処理も両立できる、革新的なWebアプリケーションフレームワークのため、今後、多用されることが想定されます今回は、高負荷な処理について言及しませんでしたが、別途、他のフレームワークとの性能比較を行う回も設けたいと思います仕事でも趣味でも、プログラミングライフをエンジョイしてください!

Recommended

PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
PPTX
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
PPTX
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
PDF
Embulk 20150411
PPTX
Step by stepで学ぶTerraformによる監視付きAWS構築
PDF
Terraform
PPT
about Thrift
PDF
AWS SDK for Haskell開発
PDF
ES6 in Practice
PPT
Titanium Mobile
PDF
Real world android akka
PPTX
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
PDF
WebAssemblyのWeb以外のことぜんぶ話す
PPT
Scripting Layer for Android + Perl
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PPTX
ansible 社内お勉強会資料
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
PPT
20150219 初めての「embulk」
PPT
081108huge_data.ppt
PDF
Ansible troubleshooting 101_2021
PDF
ECS for Docker Meetup #4
PDF
初めてのPerl
PDF
Ansible quickstart
PDF
Reading Anorm 2.0
PDF
Tottoruby 20110903
PPTX
Tech fun rails_workshop
PDF
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)

More Related Content

PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
PPTX
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
PPTX
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
PDF
Embulk 20150411
PPTX
Step by stepで学ぶTerraformによる監視付きAWS構築
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
やや関数型を意識した風Elixir/Phoenixご紹介
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Embulk 20150411
Step by stepで学ぶTerraformによる監視付きAWS構築

What's hot

PDF
Terraform
PPT
about Thrift
PDF
AWS SDK for Haskell開発
PDF
ES6 in Practice
PPT
Titanium Mobile
PDF
Real world android akka
PPTX
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
PDF
WebAssemblyのWeb以外のことぜんぶ話す
PPT
Scripting Layer for Android + Perl
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PPTX
ansible 社内お勉強会資料
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
PPT
20150219 初めての「embulk」
PPT
081108huge_data.ppt
PDF
Ansible troubleshooting 101_2021
PDF
ECS for Docker Meetup #4
PDF
初めてのPerl
PDF
Ansible quickstart
PDF
Reading Anorm 2.0
PDF
Tottoruby 20110903
Terraform
about Thrift
AWS SDK for Haskell開発
ES6 in Practice
Titanium Mobile
Real world android akka
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
WebAssemblyのWeb以外のことぜんぶ話す
Scripting Layer for Android + Perl
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
ansible 社内お勉強会資料
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
20150219 初めての「embulk」
081108huge_data.ppt
Ansible troubleshooting 101_2021
ECS for Docker Meetup #4
初めてのPerl
Ansible quickstart
Reading Anorm 2.0
Tottoruby 20110903

Similar to Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります

PPTX
Tech fun rails_workshop
PDF
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
PDF
PDF
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PDF
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
PDF
汎用apiサーバの構築
PPTX
Phoenixでblog作った
PDF
RESTful Web アプリの設計レビューの話
PDF
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
PPTX
hello waf, hello phoenix
PDF
Elixirだ 第6回
PPTX
running-elixir-in-production
PDF
【18-C-4】Google App Engine - 無限の彼方へ
PPTX
2023-10-10_ElixirConf US 2023に参加してきました(レポート)
PPTX
UnicastWS vol.2
PDF
Next-L Enju 開発WS #03 Ruby on Railsの使い方
PDF
Djangoのススメ
PDF
超高速アプリ開発法
PDF
CloudSpiral 2014年度 Webアプリ講義(2日目)
PDF
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
 
Tech fun rails_workshop
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
汎用apiサーバの構築
Phoenixでblog作った
RESTful Web アプリの設計レビューの話
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
hello waf, hello phoenix
Elixirだ 第6回
running-elixir-in-production
【18-C-4】Google App Engine - 無限の彼方へ
2023-10-10_ElixirConf US 2023に参加してきました(レポート)
UnicastWS vol.2
Next-L Enju 開発WS #03 Ruby on Railsの使い方
Djangoのススメ
超高速アプリ開発法
CloudSpiral 2014年度 Webアプリ講義(2日目)
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
 

More from fukuoka.ex

PPTX
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
PPTX
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
PPTX
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
PPTX
Elixir入門「第5回:Visualixirで見るマルチプロセス」
PPTX
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
PDF
重力プログラミング入門「第1回:地球の重力下で人工衛星を公転軌道に乗せる」
PPTX
AI入門「第1回:AIの歴史とTensorFlow」
PPTX
AI入門「第2回:Scala/Spark/Mahoutでレコメンドエンジンを作る」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
Elixir入門「第5回:Visualixirで見るマルチプロセス」
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
重力プログラミング入門「第1回:地球の重力下で人工衛星を公転軌道に乗せる」
AI入門「第1回:AIの歴史とTensorFlow」
AI入門「第2回:Scala/Spark/Mahoutでレコメンドエンジンを作る」

Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります


[8]ページ先頭

©2009-2025 Movatter.jp