質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

6628閲覧

AngularJSとサーバーサイドフレームワークの関係

argius

総合スコア9388

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

2グッド

1クリップ

投稿2016/06/11 01:01

AngularJSに限ったことでは無いかも知れませんが。

こういうJavaScriptのフレームワークを使った場合、
サーバーサイドはAPIを提供するだけで済むので、たとえば、後から
サーバーサイドのフレームワークを変えたり
全く異なる言語のフレームワークにしたり
することは可能ということでしょうか?

極端なことを言うと、サーバーサイドは複数のフレームワーク(言語も複数)が交ざっていても
良い、ということになりますか?

よろしくお願いします。

kei344, maisumakun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

その通りです。
フロント側はAngularJSにかぎらず全てのフレームワーク共通で、
Ajax通信を飛ばして値を受け取ってViewに展開したり編集して別のAjax通信を投げて更新という仕組みです。

サーバー側はそのAjax通信を捌ければ言語やフレームワークは問いません。
単純Restfulの概念でURLやメソッドで求められる仕事が異なりますので、
特定のリクエストだけを抽出して、合致するWebサーバーに振り分ける仕組みさえ構築出来れば良いです。

うちの職場でもSPAのWebサービスを公開しており、昔はCakePHPでやってましたが、Node.js+Expressに乗り換えてます。
特に速度が必要になる箇所ではScalaやC#を利用しています。

長くなった割に沢山の箇所がargiusさんの想定通りかと思いますが、
新しい発見のお役に立てると信じて記載します。

例題

開発速度を優先するために、今までCakePHPを利用して開発してきた。
しかし、パフォーマンスが悪いのでScala+PlayFrameworkで置き換えようというプロジェクトが発足しました。

でも、既存のシステムの不具合や要望があるので改修もする必要がある。
いきなり新しい言語とフレームワークで開発速度が出るわけない。
とてもじゃないがイチから作るリソースなんて確保出来ない。

今回は既存システムでアクセスが多くボトルネックの原因であった
http://example.com/questions」だけをPlayで置き換えることに決定しました。

はい、ここまでで障害となりうる箇所が2つ出てきます。

  • ルーティングをどうするのか
  • ログインが必要な情報はどうするか

ログインはどちらかがどちらかのラッパーでも作って対処するしかありません。
両方のシステムが参照出来る箇所にユーザーのログイン情報を格納しておき、両者が同じ実装のロジックで確認する必要があります。

ルーティングを解決

上記の例は全てのアクセスをCakePHPで捌く事が前提だったのでApacheに全てアクセスを集めて、
そこから全てのアクセスをCakePHPのウェブルート内のindex.phpに集めるという設計でした。

しかし、80番ポートを受け取れるのは1台のサーバーにつき1つのアプリケーションのみ。
「あれ?これCakePHPとPlayが共存するのは無理じゃね?」
この問題を解決してくれるのがリバースプロキシです。

リバースプロキシとは、自身がWebサーバーとしてアクセスを受け、
URLや負荷状況等の情報を元に、アクセスを別のプロセスやサーバーに振り分けるサーバーを指します。

例えばCakePHPとPlayはそれぞれ8080、8081ポートで待ち構えておき、
http://example.com/questions」が来た時だけ8081ポート(Play)へ流す。
他のアクセスは全て8080ポート(CakePHP)へ流すという仕組みを構築すれば解決です。

これは沢山ある解決方法の1つで、他にも状況に応じて様々な実装があります。
列挙出来る程詳しくはないので割愛します。

ソースコードやサーバーの依存モジュールが煩雑になる事が想定されるので、
サーバー自体の分割や、Dockerによる仮想マシン化が次なる課題への解決策となりそうです。

投稿2016/06/11 04:43

編集2016/06/11 04:48
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/06/12 06:27

回答ありがとうございます! JavaScriptやAjaxの基礎はいちおう分かりますが、 JavaScriptフレームワークの詳細をほとんど理解していないので、 きっと上手くできているのだろうな、という推測からこの質問になりました。 ですが、やはり実際の導入例を知らないと納得できない部分も多いので、 実際に運用されているお話を語っていただけるのはとてもありがたいです。 開発速度やコストを度外視すれば、ほぼフロント側は変えることなく、 サーバーサイドだけ全とっかえができるということですね。 ログインのところは特に考えてなかったので、 実際に使うときに気を付けたいと思います。 リバプロで複数のフレームワークというのは実際に運用していますので、 そこはイメージ通りでした。 実際に構築する際に必要な細かい点については完全には理解していませんが、 仕組み自体は把握できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問