プログラミング初心者です。
システム開発におけるjavaやrailsなど他言語どうしの 互換性について。
「広告システムの開発を行っていただきます。 配信サーバはGolang、管理系サーバはRuby on Rails、 バッチ部分はScalaを用いて構築されています。 ・今回はGo言語を使用して…」
という案件があるとしたら、結合(互換性)どうやってるのでしょうか。
てっきり、互換性のため、一つの言語で統一してシステム開発をしなければいけないと
思っていましたが・・・。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。