apeescape2.com
  • メイン
  • ツールとチュートリアル
  • 設計プロセス
  • Kpiと分析
  • ライフスタイル
バックエンド

フェニックスに会う:Elixir上の最新のWebアプリのためのRailsのようなフレームワーク

フェニックスフレームワークは急速に人気が高まっており、Ruby on Railsのようなフレームワークの生産性を提供すると同時に、 最速のフレームワーク 利用可能です。生産性を上げるためにパフォーマンスを犠牲にしなければならないという神話を打ち破ります。

では、フェニックスとは正確には何ですか?

フェニックスは、Elixirプログラミング言語で構築されたWebフレームワークです。 Erlang VM上に構築されたElixirは、低遅延でフォールトトレラントな分散システムを構築するために使用されます。これは、現代のWebアプリケーションでますます必要とされる品質です。 Elixirについて詳しくは、 このブログ投稿 または彼らの 公式ガイド 。



あなたが Ruby onRails開発者 、フェニックスが約束するパフォーマンスの向上のために、間違いなくフェニックスに興味を持ってください。他のフレームワークの開発者も、PhoenixがWeb開発にどのようにアプローチしているかを確認できます。

ラズベリーパイ3Linuxサーバー

ElixirでPhoenixに会う:最新のWebアプリのためのRailsのようなフレームワーク

この記事では、Ruby on Railsの世界から来ている場合に、フェニックスで覚えておくべきいくつかのことを学びます。

Rubyとは異なり、Elixirは関数型プログラミング言語であり、おそらく対処しなければならない最大の違いです。ただし、これら2つのプラットフォームの間には、生産性を最大化するためにフェニックスを学ぶ人が知っておくべき重要な違いがいくつかあります。

命名規則はより単純です。

これは小さなものですが、Ruby onRailsから来ている場合は簡単に混乱します。

フェニックスでは、慣例はすべてを単数形で書くことです。したがって、Ruby onRailsのように「UsersController」ではなく「UserController」を使用することになります。これは、データベーステーブルに名前を付ける場合を除いて、どこにでも当てはまります。データベーステーブルには、複数形でテーブルに名前を付けるのが慣例です。

Ruby on Railsで複数形をいつどこで使用するかを学んだ後は、これは大したことではないように思われるかもしれませんが、Ruby on Railsの使用法を学んでいたとき、最初は少し混乱していました。他にも。フェニックスはあなたに心配することを1つ少なくします。

ルーティングは管理が簡単です。

PhoenixとRubyon Railsは、ルーティングに関しては非常に似ています。主な違いは、リクエストの処理方法を制御する方法にあります。

Ruby on Rails(およびその他のRackアプリケーション)では、これはミドルウェアを介して行われますが、Phoenixでは、これは「プラグ」と呼ばれるものを使用して行われます。

プラグは、接続を処理するために使用するものです。

たとえば、ミドルウェアRails::Rack::Logger Railsにリクエストを記録します。PhoenixではPlug.Loggerを使用して行われます。プラグ。基本的に、ラックミドルウェアで実行できることはすべてプラグを使用して実行できます。

フェニックスのルーターの例を次に示します。

defmodule HelloWorld.Router do use HelloWorld.Web, :router pipeline :browser do plug :accepts, ['html'] plug :fetch_session plug :fetch_flash plug :protect_from_forgery plug :put_secure_browser_headers end pipeline :api do plug :accepts, ['json'] end scope '/', HelloWorld do pipe_through :browser get '/', HelloController, :index end scope '/api', HelloWorld do pipe_through :api end end

まず、パイプラインを見てみましょう。

これらは、リクエストが通過するプラグのグループです。ミドルウェアスタックと考えてください。これらは、たとえば、リクエストがHTMLを予期していることを確認し、セッションをフェッチし、リクエストが安全であることを確認するために使用できます。これはすべて、コントローラーに到達する前に発生します。

複数のパイプラインを指定できるため、特定のルートに必要なプラグを選択できます。たとえば、ルーターには、ページ(HTML)リクエストとAPI(JSON)リクエスト用に異なるパイプラインがあります。

異なるタイプのリクエストにまったく同じパイプラインを使用することは必ずしも意味がありません。フェニックスは私たちにその柔軟性を与えます。

ビューとテンプレートは2つの異なるものです。

フェニックスのビューは、Ruby onRailsのビューと同じではありません。

フェニックスのビューは、テンプレートのレンダリングと、テンプレートが生データを使いやすくする機能の提供を担当しています。フェニックスのビューは、Ruby on Railsのヘルパーに最もよく似ていますが、テンプレートのレンダリングが追加されています。

「Hello、World!」を表示する例を書いてみましょう。ブラウザで。

Ruby on Rails:

app / controllers / hello_controller.rb:

プライベートエクイティファンドの設定方法
class HelloController

app / views / hello / index.html.erb:

') end end

テンプレートを削除して、新しいレンダリング機能を使用すると、同じ結果が得られます。これは、テキストまたはJSONを返したい場合に便利です。

モデルはまさにそれです:データモデル。

フェニックスでは、モデルは主にデータ検証、そのスキーマ、他のモデルとの関係、およびその表示方法を処理します。

モデルでスキーマを指定することは、最初は奇妙に聞こえるかもしれませんが、データベースに永続化されないフィールドである「仮想」フィールドを簡単に作成できます。例を見てみましょう:

defmodule HelloPhoenix.User do use HelloPhoenix.Web, :model schema 'users' do field :name, :string field :email, :string field :password, :string, virtual: true field :password_hash, :string end end

ここでは、「users」テーブルに、name、email、password、およびpassword_hashの4つのフィールドを定義します。

ここでは、「仮想」として設定されている「パスワード」フィールドを除いて、あまり興味深いものはありません。

これにより、データベースへの変更を保存せずに、このフィールドを設定および取得できます。そのパスワードをハッシュに変換するロジックがあり、それを「password_hash」フィールドに保存してからデータベースに保存するので便利です。

それでも移行を作成する必要があります。 Ruby on Railsのようにフィールドがモデルに自動的にロードされないため、モデルのスキーマが必要です。

PhoenixとRubyon Railsの違いは、モデルがデータベースへの永続性を処理しないことです。これは、以下の例に示すように、データベース情報で構成された「Repo」と呼ばれるモジュールによって処理されます。

config :my_app, Repo, adapter: Ecto.Adapters.Postgres, database: 'ecto_simple', username: 'postgres', password: 'postgres', hostname: 'localhost'

このコードは、config/dev.exsなどの環境固有の構成ファイルに含まれています。またはconfig/test.exs。これにより、Repoを使用して、作成や更新などのデータベース操作を実行できます。

Repo.insert(%User{name: 'John Smith', example: ' [email protected] '}) do {:ok, user} -> # Insertion was successful {:error, changeset} -> # Insertion failed end

これは、Phoenixのコントローラーの一般的な例です。

残高2020でハッキングされたクレジットカード

ユーザーに名前と電子メールを提供すると、Repoはデータベースに新しいレコードを作成しようとします。次に、オプションで、例に示すように、成功または失敗した試行を処理できます。

このコードをよりよく理解するには、Elixirのパターンマッチングを理解する必要があります。関数によって返される値はタプルです。この関数は、2つの値のタプル、ステータス、そしてモデルまたはチェンジセットのいずれかを返します。チェンジセットは、変更を追跡し、モデルを検証する方法です(変更セットについては次のセクションで説明します)。

ユーザーをデータベースに挿入しようとした関数によって返されるタプルのパターンに一致する、上から下への最初のタプルは、定義された関数を実行します。

アトム(基本的にはRubyのシンボル)の代わりにステータスの変数を設定することもできますが、成功した試行と失敗した試行の両方を照合し、両方の状況で同じ関数を使用します。一致させるアトムを指定して、そのステータス専用の関数を定義します。

Ruby on Railsには、ActiveRecordを介してモデルに組み込まれた永続性機能があります。これにより、モデルの責任が増し、結果としてモデルのテストがより複雑になる場合があります。フェニックスでは、これは意味のある方法で分離されており、永続ロジックですべてのモデルが肥大化するのを防ぎます。

チェンジセットにより、明確な検証と変換のルールが可能になります。

Ruby on Railsでは、データの検証と変換がバグを見つけるのが難しい原因になる可能性があります。これは、「before_create」や検証などのコールバックによってデータが変換されているかどうかがすぐにはわからないためです。

フェニックスでは、チェンジセットを使用してこれらの検証と変換を明示的に行います。これは、フェニックスで私のお気に入りの機能の1つです。

前のモデルにチェンジセットを追加して、チェンジセットを見てみましょう。

defmodule HelloPhoenix.User do use HelloPhoenix.Web, :model schema 'users' do field :name, :string field :email, :string field :password, :string, virtual: true field :password_hash, :string end def changeset(struct, params \ %{}) do struct |> cast(params, [:name, :email, :password]) |> validate_required([:email, :password]) end end

ここで、チェンジセットは2つのことを行います。

まず、Ruby on Railsの「strong_parameters」と同様に、許可されたフィールドのホワイトリストである「cast」関数を呼び出し、次に「email」フィールドと「password」フィールドが含まれていることを検証して、「name」フィールドを作成します。オプション。このように、許可したフィールドのみをユーザーが変更できます。

このアプローチの良いところは、1つのチェンジセットに限定されないことです。複数のチェンジセットを作成できます。登録用のチェンジセットとユーザーの更新用のチェンジセットが一般的です。たぶん、登録時にパスワードフィールドだけを要求し、ユーザーを更新するときには要求したくないでしょう。

このアプローチをRubyon Railsで一般的に行われているアプローチと比較すると、検証を「作成」でのみ実行するように指定する必要があります。これにより、複雑なモデルを作成した後、Railsでコードが何をしているのかを理解するのが難しくなることがあります。

機能のインポートは簡単ですが、柔軟性があります。

「Ecto」と呼ばれるライブラリの機能の多くは、モデルにインポートされます。モデルには通常、上部近くに次の線があります。

オンライン決済システムをハッキングする方法
use HelloPhoenix.Web, :model

「HelloPhoenix.Web」モジュールは「web / web.ex」にあります。モジュールには、次のような「モデル」と呼ばれる関数が含まれている必要があります。

def model do quote do use Ecto.Schema import Ecto import Ecto.Changeset import Ecto.Query end end

ここでは、Ectoからインポートしているモジュールを確認できます。ここで必要な他のモジュールを削除または追加すると、すべてのモデルにインポートされます。

「ビュー」や「コントローラー」など、それぞれビューとコントローラーに対して同じ目的を果たす同様の機能もあります。

quoteおよびuseキーワードは紛らわしいように見えるかもしれません。この例では、引用符は、その関数を呼び出しているモジュールのコンテキストでそのコードを直接実行していると考えることができます。したがって、モジュールの引用符の中にコードを記述したのと同じことになります。

useキーワードを使用すると、呼び出された場所のコンテキストでコードを実行することもできます。基本的に、指定されたモジュールが必要です。次に、__using__を呼び出します。呼び出された場所のコンテキストでそれを実行しているモジュールのマクロ。あなたはについてもっと読むことができます 見積もり そして 使用する 公式ガイドで。

これは、特定の関数がフレームワークのどこにあるかを理解するのに役立ち、フレームワークが多くの「魔法」を実行しているという感覚を減らすのに役立ちます。

並行性が中核です。

フェニックスでは、Elixirの主な機能であるため、同時実行は無料で提供されます。スレッドの安全性と信頼性を心配することなく、複数のプロセスを生成して複数のコアで実行できるアプリケーションを入手できます。

Elixirで新しいプロセスを簡単に作成できます。

spawn fn -> 1 + 2 end

spawn以降のすべておよびその前end新しいプロセスで実行されます。

実際、Phoenixのすべてのリクエストは、独自のプロセスで処理されます。 ElixirはErlangVMのパワーを使用して、信頼性が高く効率的な同時実行性を「無料」で提供します。

これにより、PhoenixはWebSocketを使用するサービスを実行するための優れた選択肢になります。これは、WebSocketがクライアントとサーバー間のオープン接続を維持する必要があるためです(つまり、数千の同時接続を処理できるようにアプリケーションを構築する必要があります)。

これらの要件は、Ruby on Railsで構築されたプロジェクトに多くの複雑さを追加しますが、PhoenixはElixirを介してこれらの要件を無料で満たすことができます。

PhoenixアプリケーションでWebSocketを使用する場合は、次を使用する必要があります。 チャンネル 。 ActionCableと同等ですRuby on Railsで動作しますが、別のサーバーを実行する必要がないため、セットアップはそれほど複雑ではありません。

フェニックスは、最新のWebアプリの構築を簡単にします。

私たちは主に違いに焦点を当ててきましたが、PhoenixにはRuby onRailsと共通する点がいくつかあります。

c法人vss法人とは

フェニックスはRubyon Railsとほぼ同じMVCパターンに従うので、主な違いがわかったので、どのコードがどこに行くのかを理解するのは難しいことではありません。フェニックスには、モデル、コントローラー、移行などを作成するためのRuby onRailsと同様のジェネレーターもあります。

Elixirを学んだ後、Phoenixに慣れたら、Ruby onRailsレベルの生産性にゆっくりと近づきます。

Rubyのgemによって解決された問題が発生し、Elixirの同様のライブラリが見つからない場合は、生産性が低下すると感じることがあります。幸いなことに、これらのギャップは、成長するElixirコミュニティによって徐々に埋められています。

フェニックスの違いは、複雑なRuby onRailsプロジェクトの管理に伴う多くの問題を解決するのに役立ちます。すべての問題を解決するわけではありませんが、正しい方向に進むのに役立ちます。生産性が必要なために遅いフレームワークを選択することはもはや正当な言い訳ではありません。Phoenixでは両方を使用できます。

Reactテスト駆動開発:ユーザーストーリーから本番まで

Webフロントエンド

Reactテスト駆動開発:ユーザーストーリーから本番まで
言語サーバープロトコルチュートリアル:VSCodeからVimへ

言語サーバープロトコルチュートリアル:VSCodeからVimへ

バックエンド

人気の投稿
Pythonでのモックの概要
Pythonでのモックの概要
ミッション主導の開発
ミッション主導の開発
テクノロジープラクティスリード
テクノロジープラクティスリード
Cordovaフレームワーク:IonicとFramework7
Cordovaフレームワーク:IonicとFramework7
ツリーカーネル:ツリー構造化データ間の類似性の定量化
ツリーカーネル:ツリー構造化データ間の類似性の定量化
 
React、Redux、およびImmutable.js:効率的なWebアプリケーションの要素
React、Redux、およびImmutable.js:効率的なWebアプリケーションの要素
開発者のリモートチームを管理しない方法
開発者のリモートチームを管理しない方法
偉大なフリーランス開発者を雇うための重要なガイド
偉大なフリーランス開発者を雇うための重要なガイド
大衆向けのUXテスト:シンプルで費用対効果の高いものに保つ
大衆向けのUXテスト:シンプルで費用対効果の高いものに保つ
AngularJSからReactに切り替えた理由
AngularJSからReactに切り替えた理由
人気の投稿
  • awsソリューションアーキテクトアソシエイトスタディガイド
  • AWSソリューションアーキテクト試験に合格する方法
  • Javaでテストケースを書く
  • レコメンデーションエンジンの構築方法
  • バイオテクノロジー企業はどのようにお金を稼ぐのですか
  • c / c ++プログラミング
  • Windowsは何でプログラムされていますか
カテゴリー
ライフスタイル デザイナーライフ バックエンド ブランドデザイン Uiデザイン リモートの台頭 ツールとチュートリアル Kpiと分析 分散チーム トレンド

© 2021 | 全著作権所有

apeescape2.com