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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

3回答

7721閲覧

JavaやASP.Net、PHP、Rubyのシステム上での違いについて

wieee

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2019/01/31 05:51

編集2019/02/02 05:08

WebシステムでJava、ASP.Net、PHP(Laravel)、Ruby(Rails)のシステムの違いについてお聞かせください。

JavaやASP.Net(MVCまたはCoreだが以降はASP.Netで書きます)はスレッドベース、PHPはプロセスベースだと聞きました。

質問1.

  1. ASP.Netは、サーバーの.NetFramework上でexeファイルを起動しずっと起動している、つまりstaticな変数の値を保持している
  2. PHPやRubyはWebからリクエストがあった段階でプログラムが起動し、処理が終了すると停止するのでstaticな変数でも破棄される

これは以下の出展からそう感じました。
https://www.slideshare.net/ssuser741a3c/phpjava-82696204
上記の41~44です。

引用しますと

Java(tomcat)はスレッドベースなので 自身のプログラム自体にキャッシュすることが出来た
static変数にキャッシュした
この結果「キャッシュサーバー」なしで運用も問題なく出来た

このスライド作成をした方のご意見なので正しくない可能性もありますが、JavaやASP.netではずっとstatic変数を保持しているものだと感じました。
これは合っているのでしょうか?

質問2.

そうすると、JavaやASP.Netはクライアントからリクエストがあったら即時に処理を返せる気がします。
また、変数に値を保持しているのでキャッシュのようにメモリから即レスポンスを返せる気がします。

「ずっと起動しているので処理が速い」「コンパイルしているのでそもそも速い」という感じでしょうか?
またそういう意味でPHPやRubyは大規模アプリにおいて動作が遅い感じでしょうか?

質問3.

JavaやASP.Netが一つ起動しているとして、そこに多くのクライアントから多くのリクエストが来た場合、一つのスレッドで処理するのでしょうか?
それともJavaやASP.Netはその処理分だけスレッドが起動する感じでしょうか?
変数に値を保持するといっても、クライアント毎に値が違うのでちょっとここがわかりません。

PHPやRubyでは、プロセスベースなのでクライアントからリクエストがあった段階でその都度プロセスが起動するのでクライアント毎(セッション毎)に
そもそもプロセスが違うのでセッション間で変数を共有することはないので問題ないのは理解しています。

質問4.

phpやRubyは基本的に処理が終わったら停止するのでWebサーバーの再起動くらいしか管理しなくていい気がしています。
しかしJavaやASP.Netでは実行ファイルがずっと起動しているのでメモリリークを起こしたりする心配があります。
そういう場合は実行ファイルを再起動することで対応するのでしょうか?

以上になりますが、質問内容に不備などありましたらご指摘いただけたらと思います。
どうぞよろしくお願い致します。

追記依頼の内容になります。

プログラムはコードの集まりであってコンピュータに対する命令(処理)を記述したもの、実行ファイルはコンパイルされた後のオブジェクトコードが記載されているファイル、またはコンピュータがプログラムとして解釈実行できるファイルのことです。

問題・課題

Webシステムを作る方法として、システムや基盤となるプログラム言語、フレームワークの選定をしたいと考えています。
まだ何もシステムを作っていなく計画段階なので具体的にコードでこの処理が困っているというわけではないのですが、インタプリタ言語とコンパイル言語で
それぞれ言語によって使うフレームワークも違うので一概にメリット・デメリットは難しいかもしれませんが、どのような仕組みの違いがあって、それがシステムにどのように影響がありメリットやデメリットがあるかを知りたいと考えています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/01/31 06:06 編集

プログラムが起動し、のプログラムって、なんだと思う? そのプログラムと、実行ファイルの違い、それぞれの起動しているものの正体ってわかる?
m.ts10806

2019/01/31 06:04

ご自身が「こういう認識だ」と仰っている部分が多々ありますが、その全ての出展を明記してください。
wieee

2019/01/31 06:15

m6u 様 プログラムはコードの集まりであってコンピュータに対する命令(処理)を記述したもの、実行ファイルはコンパイルされた後のオブジェクトコードが記載されているファイル、またはコンピュータがプログラムとして解釈実行できるファイルでしょうか? 理解不足で申し訳ございません。
wieee

2019/01/31 06:16

mts10806 様 出展はなく、自分の理解が間違っている可能性があるために質問させていただきました。
miyabi-sun

2019/01/31 06:18

>不備などありましたら 不備しか無い件、何故自分で動作を確認したり正しい情報を集めようとしないの? ブログ記事のネタを集めて侍なんとか塾みたいな所に売って小金を稼ぎたいですという欲が透けて見える。
m.ts10806

2019/01/31 06:20

でしたら「問題、課題が含まれていない」として非推奨にも思います。 何が問題、課題かを明記する必要があります。 例えば具体的なコードや記事を引用して疑問点を具体化するとか。
wieee

2019/01/31 06:23

miyabi-sun 様 正しい情報を集めるというのは、こちらのサイトで質問して皆様の正しい知識を伺うことは禁止ということでしょうか?普通の質問なのですが・・・。 また、ブログはやっていませんし侍エンジニアとは一切関係ございません。 小金の稼ぐ欲というのは質問内容のどこにそのような内容があるのでしょうか? まず、私の知識が乏しい件は大変申し訳なく思っています。 そのためこちらのサイトを利用させていただいていますが、こちらのサイトでは自力で正確な情報を集めて質問内容に記載しないといけない、というサイトなのですか? 質問なので間違いがあるのを承知で質問させていただいています。
wieee

2019/01/31 06:24

mts10806 様 なるほど。 問題、課題を書いてみます。
m.ts10806

2019/01/31 06:27

まあ「調べて実際に検証すればわかること」にはあまり積極回答はつかないですよね。 習うより慣れろと。 この手の質問は調べて出てくる以上の回答は中々得られません(以上の回答するくらいならQiitaなりなんなりで記事を書いた方が多くのためになるから) なので、もう少しテーマを絞った方が良いと思います
wieee

2019/01/31 06:34

mts10806 様 検証すればわかること、となると確かにどんな質問もNGになってしまいますね…。 「大規模システムを実際に複数開発して検証する」ということが現実問題として難しいため質問しましたが、おっしゃる通り私の努力不足でした。 助言ありがとうございます、今後の参考にさせていただきたいと思います。
m.ts10806

2019/01/31 06:41

ちょっと言葉が不味かったですかね。あくまで例で「このプログラムの結果は?」みたいなやつのことですね。「動かせばかわかるじゃん」 確かにすべての環境を揃えるのは難しいですがそれは回答者も同じです(単体でコード動かすだけならpaiza.ioとかはありますが) 私が気になったのは 「聞きました」「停止する」など、「どこで聞いたんだろう」「なぜ停止と言い切れるんだろう」というところですね。なので「出展を」とお願いしました。 ミニマムコードでも動かせばわかることもないわけではないでしょうし。 一番は「この質問をしてどうしたいか」です。
退会済みユーザー

退会済みユーザー

2019/01/31 06:48

用語集に則った回答程度では、たぶんうまく伝わらない気がしますね。teratailでは、自分でここまでやってみた調べてみたけど、この先がうまくいかないわからない、という「もう一息」っていう質問には暖かいですが、一つの質問に様々なプラットフォームの話題を持ち込んだり、「もう一息」どころではない、一言では説明が尽くせないような回答を求められても、回答者側のリソースが限定されているため冷遇されます。普段からそれだけ多くのプラットフォームに精通しているすごいエンジニアさんがいるといいですね(にっこり
wieee

2019/01/31 06:51

すみません、主観が入っていました。 もう一度質問内容を修正してわかりやすいようにする点と、この質問で何を聞きたいかやどうしたいかを整理してみます。 ありがとうございます。
miyabi-sun

2019/01/31 06:58

そもそも推測と憶測は違います。 裏付けを取らない推測は単なる憶測です。 今回の質問は「憶測に憶測を重ねた」ものが根拠であり、 これは憶測を重ねた結論の典型的な例で書いてある内容の大部分が誤りです。 質問文自体はYES/NO形式になっていますが、 仮に回答者がいくらYESやNOで制御したとしても一生正しい理解にはたどり着けないので無駄でしょう。 そして最終的に聴きたい内容がフレームワークの選定で「全然違うじゃん!」と突っ込みたいです。
guest

回答3

0

PHPはプロセスベースだと聞きました。

あくまでPHPのプログラム内から見れば、という限定付きです。リクエストのあるたびにプロセスを立ち上げているとレスポンスが遅くなるので、Apache組み込みのPHPやPHP-FPMにおいては、事前にロードを済ませて待機させることも可能なようになっています。

質問3の

PHPやRubyでは、プロセスベースなのでクライアントからリクエストがあった段階でその都度プロセスが起動するのでクライアント毎(セッション毎)に

そもそもプロセスが違うのでセッション間で変数を共有することはないので問題ないのは理解しています。

も、「PHPコード内から見ればそのように動作する」というだけで、リクエストを処理したスレッドなどはリクエスト以前に作られ、リクエスト後も使い回されていたりします。

質問4の

phpやRubyは基本的に処理が終わったら停止するのでWebサーバーの再起動くらいしか管理しなくていい気がしています。

も、プロセス・スレッドのストックがあるので、「待機させる数の管理」「一定数のリクエストをこなしたら再起動させる」、というような管理が必要です。

FastCGI Process Manager (FPM)

Rubyについても、サーバ組み込み型のPassengerと単体でアプリケーションサーバとなっているUnicorn/Pumaなどがありますが、事情はPHPとそんなに変わらないです。

投稿2019/01/31 06:18

maisumakun

総合スコア145184

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

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

wieee

2019/01/31 06:39

ありがとうございます。 PHPやRubyにおいてもプロセスやスレッドのストックがあるのですね。 FastCGIについて > 緩やかな (graceful) 停止/起動 機能を含む高度なプロセス管理 と書いてありますね。インタプリタといえどいろいろな仕組みで高速化を図っているのですね。 参考になりました。ありがとうございます!
guest

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

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

wieee

2019/02/02 05:09

ありがとうございます。 それらを見たり過去質問を見て解決を探そうと思います。 いろいろご助言に感謝いたします。
guest

0

NetFramework(C#)とPHPの経験で回答します(java/rubyは分かりません)

  • 1

質問3とも関連しますが、「変数の値を保持」といったときの変数の認識が根本的におかしいです。例えばC#ですが、クライアントアプリでさえ、スコープから抜けた変数は破棄されます。webのクライアントにリターンした後に、さっきリターンした変数を保持しているという想定ならそういう動きはしないです。

  • 2

PHPでも既に回答にあるPHP-FPMやOPcacheの仕組みがあるので、「ずっと起動しているので処理が速い」「コンパイルしているのでそもそも速い」というのは、全くあたりません。
「PHPやRubyは大規模アプリにおいて動作が遅い」という点については、プロジェクト規模が大きいからって、1処理で全部の機能を実行するなんてことはないので、規模と速度が比例関係にたつとは思いません。複雑な処理をすれば遅い、は一般に成りたつでしょうが、応答を速くするための対策はいくらでもあるので、具体的に状況を絞らないと、一つの言語に絞ってさえどっちがどうはやいかは言えません。

  • 3

別リクエストは別スレッドになるでしょうが、「多くのクライアントから多くのリクエストが来た場合」「変数に値を保持するといっても、クライアント毎に値が違う」のあたりからするとリクエストの粒度に誤解があるように思います。2台のPCから2ずつのリクエストがきた場合、論理的には4つのスレッドで処理されます。2スレッドじゃないです。クライアント(クライアントもPCなのかブラウザなのかブラウザのタブなのか)ごとに変数を保持しているなんて無理です。

  • 4

「Webサーバーの再起動くらいしか管理」との点、PHPがwebサーバのサービスの再起動を管理するシナリオは特殊だと思います。それによって何をしたいのか分かりません。
「実行ファイルがずっと起動しているのでメモリリーク」それは例えば、Wordをずっと開いていたらメモリリークするという意味でしょうか?コードが不正なら、PHPでもメモリリークしますし、コードが適切ならずっと起動しててもメモリリークしません。

  • 問題

「インタプリタ言語とコンパイル言語で」切り口が大きすぎて、何も言えません。そもそもPHPでもC#でもRubyでもJavaでも大規模ウェブアプリを最適した状態で設計・比較できる人なんて、そうそういないと思います。
設計時の比較って、PHPって決めてて、LaravelにするかCakeにするかみたいなそういう比較ですよね。挙げられた言語はどれもそれなりの規模のサービスで採用された実績が明らかなレベルの言語だと思うので、一つの言語に決めて深化したほうがいいと思います。

投稿2019/01/31 06:59

papinianus

総合スコア12705

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

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

wieee

2019/02/02 05:01

ありがとうございます。 - 1 スコープを抜けると確かに破棄されますね。ちょっと質問が曖昧でした。申し訳ございません。例えばグローバル変数やStatic Classに保持した変数は、JavaやASP.netでは保持していて、PHPやRubyなどでは破棄される気がするのです。 質問内容を訂正して出展を記します。 - 2 なるほどですね。確かに応答速度が速い遅いは言語だけで決まるものではないし、他にもネックになるところがありますしね。 - 3 各リクエスト毎にそれぞれスレッドが起動するのですね。 C#デスクトップアプリと同じようにASP.netではずっとスレッドが起動しっぱなしでセッション毎にスレッドが固定なのかと勘違いしておりました。 - 4 > 「実行ファイルがずっと起動しているのでメモリリーク」それは例えば、Wordをずっと開いていたらメモリリークするという意味でしょうか? 例えばPhotoshopをずっと起動して何日も使い続けるとメモリリークを起こすような感じを想像しておりました。実際、それでメモリ不足に陥ったことがありますので・・・。 - 問題 たしかに一概に比較などできないかもですね。 大規模Webアプリケーション開発というと、たいていJavaというをよく聞く(すみません、自己判断ですが)のでなぜそうなのかをお聞きしたかった感じです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問