none
Linux資産の移植について RRS feed

  • 質問

  • こんにちは。
    Linux環境で開発したクライアントアプリケーションを、再構築し製品化する企画のシステム設計を担当することになりました。大雑把に、次のような要件を満たす必要がありますが、プラットフォームやフレームワーク、開発言語についてお伺いさせてください。システムの性格上MSDNで質問するべき内容ではないかもしれません。その場合、おすすめのフォーラムがありましたら教えて頂けたらと思います。

    ビジネス的要件

    • なるべく早期に製品化を行うこと
    • Linuxベースの開発はメンテナンスの際に技術者の確保が難しいため、システムのWindows化を行うこと

    また、次のようなことがわかっています。

    • クライアントアプリケーションとしてLinuxで開発されてきた資産が膨大でCやFortran,Linuxのシェルを使った処理などもあり、これらをWindows化するには相当な時間が掛かること
    • Webサービス化しても構わない

    早期製品化する必要があり、Webサービス化しても構わないということから、短期的には次のような方針で行こうと考えています。

    • 現状開発された機能を切り出しWeb APIで呼び出せるようにする
    • サーバサイドはLinux環境とする
    • クライアントサイドはWindowsアプリケーションとする

    サーバサイドをまずはLinuxベースとすることで、現状資産をなるべくそのまま再利用することを狙いつつ、ゆくゆくはサーバサイドもWindowに移行できる設計にしておきたいと考えています。

    この辺から質問へと移らさせて頂きます。
    移行過渡期においては、サーバサイドのアプリケーションにLinuxとWindowsが混在することが考えられます。それぞれの連携はRest API経由とすれば実現可能かと思われますが、当然、処理速度を考えると従来なかったオーバヘッドが相当かかりそうだということは予想されます。
    では、近年.NET COREなる技術が発表されましたが、Linux上のWebアプリが.netやwindwos native dllと連携する方法はありませんでしょうか?
    逆に、ASP.NETからLinuxの関数ライブラリを呼び出すような方法はあるのでしょうか?

    どなたかご教示頂けますと幸いです。よろしくお願いします。

    2016年3月2日 1:04

回答

  • システム設計を担当することになりました。

    案件内容を考えると、フォーラムよりはコンサル業者等に相談した方がよいかも。
    私は Linux 界隈のことは浅学で、今回の移行計画が適切かどうかを判断できませんし、以下もすべて未確認ですが:

    では、近年.NET COREなる技術が発表されましたが、

    DNX/XRE を用いる場合、CoreCLR を使う手法と Mono を使う手法があるようです。
    (業務で使えるレベルに育っているのかは未確認)
    http://www.atmarkit.co.jp/ait/articles/1502/20/news074.html

    > 逆に、ASP.NETからLinuxの関数ライブラリを呼び出すような方法はあるのでしょうか?

    言語仕様的には、P/Invoke を使って

    // Linux
    [DllImport("libc.so")]
    private static extern int getpid();

    // OS X
    [DllImport("libSystem.dylib")]
    private static extern int getpid();

    といった記述が可能なようです。※ASP.NET Core から呼べるかどうかは、当方未確認です。

    もっとも POSIX getpid() ぐらいなら、DllImport せずとも Mono の Mono.Unix.Native.Syscall.getpid メソッドで済みそうですけれどね。

    • 回答としてマーク 星 睦美 2016年3月9日 5:29
    2016年3月3日 1:12
  • MonoのWCF互換スタックとP/Invokeを使ってラップしたうえでLinux上にWCFサービスを構築し、Windows側のWCFクライアントからアクセスするという手もあると思います。既存コード資産の内容や性質にもよるので、Monoを使わずにWeb API化する場合と比べて具体的なメリット・デメリットは推察しかねますが。

    http://www.mono-project.com/docs/web/wcf/

    ちなみに.NET CoreのWCF互換スタックは現時点で一部のライブラリ(クライアントサイド)しか実装されていないようです。

    https://github.com/dotnet/wcf

    • 編集済み sygh 2016年3月3日 16:28
    • 回答としてマーク 星 睦美 2016年3月9日 5:29
    2016年3月3日 15:45

すべての返信

  • システム設計を担当することになりました。

    案件内容を考えると、フォーラムよりはコンサル業者等に相談した方がよいかも。
    私は Linux 界隈のことは浅学で、今回の移行計画が適切かどうかを判断できませんし、以下もすべて未確認ですが:

    では、近年.NET COREなる技術が発表されましたが、

    DNX/XRE を用いる場合、CoreCLR を使う手法と Mono を使う手法があるようです。
    (業務で使えるレベルに育っているのかは未確認)
    http://www.atmarkit.co.jp/ait/articles/1502/20/news074.html

    > 逆に、ASP.NETからLinuxの関数ライブラリを呼び出すような方法はあるのでしょうか?

    言語仕様的には、P/Invoke を使って

    // Linux
    [DllImport("libc.so")]
    private static extern int getpid();

    // OS X
    [DllImport("libSystem.dylib")]
    private static extern int getpid();

    といった記述が可能なようです。※ASP.NET Core から呼べるかどうかは、当方未確認です。

    もっとも POSIX getpid() ぐらいなら、DllImport せずとも Mono の Mono.Unix.Native.Syscall.getpid メソッドで済みそうですけれどね。

    • 回答としてマーク 星 睦美 2016年3月9日 5:29
    2016年3月3日 1:12
  • MonoのWCF互換スタックとP/Invokeを使ってラップしたうえでLinux上にWCFサービスを構築し、Windows側のWCFクライアントからアクセスするという手もあると思います。既存コード資産の内容や性質にもよるので、Monoを使わずにWeb API化する場合と比べて具体的なメリット・デメリットは推察しかねますが。

    http://www.mono-project.com/docs/web/wcf/

    ちなみに.NET CoreのWCF互換スタックは現時点で一部のライブラリ(クライアントサイド)しか実装されていないようです。

    https://github.com/dotnet/wcf

    • 編集済み sygh 2016年3月3日 16:28
    • 回答としてマーク 星 睦美 2016年3月9日 5:29
    2016年3月3日 15:45
  • 貴重なご意見、ありがとうございます。
    CoreCLRやMomoについては実績が気になりますが、検証しみる価値はありそうですね。
    また、Linux上にWCFサービスを構築するというアイデアは考えていませんでした
    。なるほどこういう手もあるのですね。

    ありがとうございます。

    2016年3月4日 8:36