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

More Related Content

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

What's hot

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

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

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

More from fukuoka.ex

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

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


[8]ページ先頭

©2009-2025 Movatter.jp