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

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

ただいまの
回答率

87.90%

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 4,438

score 25

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

結合や連携したときのデータの「互換性」と言うことでしょうか。表現があまり厳密ではありませんが、直接と間接という表現を使って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などなど、データのフォーマット(テキストとは限りません、バイナリも可能です)を予め決めておき、それらを読み書きできるように各言語で実装しておきます(これも、多くの場合でライブラリがすでにあるでしょう)。それらのフォーマットでは数値とは何か、文字列とは何かが細かく決められていますので、プログラミング言語側のデータをそれにあわせて変換することで、同じデータを扱うことができるようになります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.90%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る