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

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

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

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Java

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

7790閲覧

初心者です。システム開発における他言語どうしの互換性について。

hi123

総合スコア61

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Java

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/07/29 19:29

プログラミング初心者です。
システム開発におけるjavaやrailsなど他言語どうしの 互換性について。

「広告システムの開発を行っていただきます。 配信サーバはGolang、管理系サーバはRuby on Rails、 バッチ部分はScalaを用いて構築されています。 ・今回はGo言語を使用して…」
という案件があるとしたら、結合(互換性)どうやってるのでしょうか。
てっきり、互換性のため、一つの言語で統一してシステム開発をしなければいけないと
思っていましたが・・・。
よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

結合や連携したときのデータの「互換性」と言うことでしょうか。表現があまり厳密ではありませんが、直接と間接という表現を使って2つパターンについて説明します。

###直接連携する

A言語で書かれているプログラム(ライブラリ)の特定部分を、B言語で書かれているプログラムから直接呼び出す方法です。例えば、次のようなモノです。

  • ある部分はC、ある部分はC++で作成し、最後にリンカでまとめる。
  • Rubyで、Cで書かれたライブラリを読み込み、ライブラリの関数を直接使う。
  • Goで、Cで書かれたライブラリを読み込み、ライブラリの関数を直接使う。
  • Scalaで、Javaで書かれたライブラリを読み込み、ライブラリの関数を直接使う。
  • Rubyで、Javaで書かれたライブラリを読み込み、ライブラリの関数を直接使う。(ただし、JRubyを使用)

これは、各言語に別の言語で書かれたライブラリ等を使うための機能が備わっているからです。各言語間でオブジェクトを表現する型が異なる場合がありますが、それらはそれぞれでどのように表現され、どのように自動変換(時には手動変換)されるのかも定められています。たとえば、Rubyの整数な変数をCの関数のdouble部分に渡そうとする場合は、整数を浮動小数点数にしたあとに、Cでのdoubleとして渡すなどの動作をします。また、JavaのintとScalaのIntのように交互に意味が変わること無く自動変換されると言う場合もあります。

###間接連携する

A言語で書かれており独立して動くプログラムを、B言語で書かれているプログラムから、何かしらの仕組みを介して、間接的にアクセスし使用する方法です。関節部分に使われる方法をいくつか列挙します。

  • パイプ(内部で実行を含む)
  • UNIXドメインソケット
  • ネットワーク経由(HTTP/HTTPSなど)

これらはそのやり取りの方法が別途規格等で決めています(規格は国際標準化してなければならない訳ではありません。個人が考えた規格や、ベンダーの独自規格もあります)。一番わかりやすいのはHTTP/HTTPSでしょう。HTTP/HTTPSは別に各言語で定めたモノでは無く、規格化されたプロトコルです。どのように通信を始め、どのようにデータを求め、どのようにデータを与え、どのように終わるのかは決まっているため、各言語はそれにあわせて実装します。実際はすでにライブラリとして用意されていますので、そちらを使うことになるでしょう。

では、HTTP/HTTPSでデータをやり取りするのはいいとして、そのデータはどのようなモノにすべきなのでしょうか?そう、これも、規格化された形式を使います。XML、JSON、BSON、CSON、YAML、OOXMLなどなど、データのフォーマット(テキストとは限りません、バイナリも可能です)を予め決めておき、それらを読み書きできるように各言語で実装しておきます(これも、多くの場合でライブラリがすでにあるでしょう)。それらのフォーマットでは数値とは何か、文字列とは何かが細かく決められていますので、プログラミング言語側のデータをそれにあわせて変換することで、同じデータを扱うことができるようになります。

投稿2016/07/29 22:14

raccy

総合スコア21735

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

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

0

「一つの言語で統一してシステム開発をしなければいけない」という考え方自体は、正しい発想だと思います。
ただし、言語毎に可能なこと、不可能なことがどうしてもあり、多くの場合1つの言語ではシステム全体の開発は行われません。

例えば、Web系の開発だった場合、javaやRubyは主言語ではありますが、実際にはそれ以外にもHTML、css、Javascript等の言語を組み合わせて開発を行います。
これは、仕様として連携できるようになっていたり、ファイルやソケット、パイプにより言語間で連携されます。
Webの例の中で考えると、
・Ruby(Rails)の中にHTMLやcss、Javascriptを書いて動作させられるのは、Ruby(Rails)で出力したテキストを、ブラウザに転送するソケット通信によるもの(httpプロトコルやWebサーバーのおかげ)
・HTMLに対して、cssでデザインを適用したり、Javascriptで動きがつけられるのはブラウザの仕様によるもの
・Ruby(Rails)からバッチ処理が連携できるのは、ファイルやDBとのソケット通信によるもの
といった形になるかと思います。
これは言語が同じ場合でも同様ですね。

ただし、多くの言語スキルを持ったエンジニアは貴重です。
極力少ない言語数でシステムを実現することを考えなければいけないケースは、少なくないのが現実ですね。

投稿2016/07/29 22:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

システムの間ではデータだけがやりとりされるので、開発言語が異なっても問題ありません。
データがその言語独自のバイナリ形式であれば言語に依存することになりますが、現在ではテキストデータでやりとりすることが多いため、どの言語でも問題ありません。
また、バイナリ形式であっても、受け取る側の異なる言語のプログラムで読み取りがちょっと面倒なだけで、読み取れないわけではありません。

投稿2016/07/29 21:17

otn

総合スコア84555

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問