メディア
鬯ッ�ッ�ス�ゥ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�「鬯ョ�ォ�ス�エ鬮ョ諛カ�ス�」�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ゥ隰ウ�セ�ス�ス�ス�オ�ス�ス�ス�ス�ス�ス�ス�コ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ケ鬯ョ�ォ�ス�エ髯キ�ソ鬮「ツ€�ス�セ隴会スヲ�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ケ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ッ�ッ�ス�ゥ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ク

Windows Compatibility Pack for .NET CoreDev Basics/Keyword

Windows Compatibility Packにより、.NET Standardではサポートされていない、.NET FrameworkのAPIが.NET Coreでも使えるようになる。

» 2017年11月21日 05時00分 公開
[かわさきしんじInsider.NET編集部]
「Dev Basics/Keyword」のインデックス

連載目次

 Windows Compatibility Pack for .NET Core(以下、Compatibility Pack)は、.NET Standard 2.0では規定されていない.NET FrameworkベースのAPIを.NET Coreプロジェクトで利用できるようにするNuGetパッケージ。ただし、Windows FormsやWPFなどはサポートされていない。また、本稿執筆時点(2017年11月20日)では、プレビュー段階のプロジェクトとなっている。

Compatibility Packとは

 .NET Coreはクロスプラットフォームで動作する.NET実装であり、それがサポートするAPIは基本的には.NET Standardに準拠している。例えば、.NET Core 2.0は.NET Standard 2.0で規定されているAPIをサポートしている。.NET Standard 2.0ではサポートされるAPIが大きく増えているが、それでも.NET Frameworkにあるが.NET CoreにはないAPIは多い(特にWindowsに依存するもの)。このため、既存の.NET Frameworkプロジェクトを.NET Coreに移行するのは困難な場合がある。Compatibility Packは、.NET Frameworkから.NET Coreへの移行が楽になるように追加で約2万個のAPIを提供するものだ。

 Compatibility Packでどのようなコンポーネントを利用できるようになるかは、MSDNブログの記事「Announcing the Windows Compatibility Pack for .NET Core」を参照してほしいが、Microsoft.Win32.Registryなど、.NET CoreプロジェクトであってもWindows上で動作するアプリでなければ使用できないものと、Windows/macOS/Linuxで使用できるものが存在する点には注意が必要だ(前述の記事で「Windows-Only」が「Yes」になっているもの)。Windowsのみで利用できるAPIを、Windows以外のプラットフォームで呼び出すとPlatformNotSupportedException例外が発生する(後述)。

 例えば、.NET Frameworkベースのコンソールアプリで以下のようにレジストリから情報(ここではWindows 10のアクセントカラー)を取得するコードを書いたとする。

using System;
using Microsoft.Win32;

namespace CompatibilityPackSampleNetfx
{
  class Program
  {
    static void Main(string[] args)
    {
      var key = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM";
      var value = "AccentColor";
      var defaultvalue = "not found";
      var rgb = Registry.GetValue(key, value, defaultvalue);
      switch (rgb)
      {
        case string s:
          Console.WriteLine(s);
          break;
        case int n:
          int mask = 0x0000FF;
          int[] rgbs = new int[4];
          for (int i = 0; i < 4; i++)
          {
            rgbs[i] = n & mask;
            n >>= 8;
          }
          Console.WriteLine(
            $"Accent Color: {rgbs[0]:X} {rgbs[1]:X} {rgbs[2]:X} {rgbs[3]:X}");
          break;
        default:
          Console.WriteLine(defaultvalue);
          break;
      }
      Console.ReadKey();
    }
  }
}

Microsoft.Win32.Registryクラスを使用するプログラム例

 これはもちろん.NET Frameworkでは動作するが、.NET Coreをプラットフォームとした場合、通常はMicrosoft.Win32.Registryクラスはサポートされていないので動作しない。実際に、.NET Coreベースのコンソールアプリプロジェクトを作成して、Mainメソッドの内容(と「using Microsoft.Win32;」宣言)を丸ごとコピー&ペーストすると、Visual Studio 2017では次のようにRegistryクラスを使用している箇所でエラーとなることが分かる。

.NET CoreプロジェクトではMicrosoft.Win32.Registryクラスは使えない .NET CoreプロジェクトではMicrosoft.Win32.Registryクラスは使えない

 ここでプロジェクトにCompatibility Packパッケージをインストールする。パッケージ名は「Microsoft.Windows.Compatibility」となっているので、NuGetパッケージの管理ウィンドウでは「Windows.Compatibility」などと入力して検索するとよいだろう。

Compatibility Packパッケージのインストール Compatibility Packパッケージのインストール

 これにより、先ほど見たエラーがなくなり、.NET CoreベースのアプリでもWindows上で実行する分にはレジストリから情報を取得できるようになる。

.NET Coreベースのアプリの実行画面(タイトルバーに「dotnet.exe」が含まれていることからこれが.NET Coreプロジェクトであることが分かる) .NET Coreベースのアプリの実行画面(タイトルバーに「dotnet.exe」が含まれていることからこれが.NET Coreプロジェクトであることが分かる)

 もう1つ注意する点としては、先にも述べたがCompatibility Packに含まれるAPIの中には「Windowsだけで動作がサポートされているものがある」ことだ。そして、macOSやLinuxからそれらのAPIを呼び出すと、PlatformNotSupportedException例外が発生する点だ。例えば、先ほどのコードをmacOS上で実行すると、以下のように実行時に例外が発生する。

macOS上ではMicrosoft.Win32.Registry.GetValueメソッド呼び出しでPlatformNotSupportedException例外が発生した macOS上ではMicrosoft.Win32.Registry.GetValueメソッド呼び出しでPlatformNotSupportedException例外が発生した

 このようにWindowsに依存するコードを含む場合には、IsOSPlatformメソッドを使用して、Windowsとそれ以外の環境で動作を切り分けることができる(「using System.Runtime.InteropServices;」宣言が必要)。

using System;
using Microsoft.Win32;
using System.Runtime.InteropServices;

namespace CompatibilityPackSampleMacOS
{
  class Program
  {
    static void Main(string[] args)
    {
      if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) {
        // Windowsに依存した処理を記述
        var rgb = Registry.GetValue(key, value, defaultvalue);
        // …… 省略 ……
      } else {
        // それ以外のプラットフォームでの処理を記述
      }
      Console.ReadKey();
    }
  }
}

IsOSPlatformメソッドで処理を切り分ける

 PlatformNotSupportedException例外が発生することにはメリットもある。それは、Platform Compatibility Analyzerで、クロスプラットフォームでの互換性がないAPIを使用しているかどうかのチェックを行えることだ。Platform Compatibility Analyzerは今述べた「PlatformNotSupportedException例外を発生するAPI」などを動的にチェックしてくれるNuGetパッケージだ。これを.NET Coreプロジェクトにインストールすると、次のように互換性がない部分(Microsoft.Win32.Registry.GetValueメソッド呼び出し)に波線が表示されるとともに、[エラー一覧]ウィンドウにもそのことが報告される。

Platform Compatibility Analyzerによる互換性チェック Platform Compatibility Analyzerによる互換性チェック
ポップアップが左右に長いためカットしている。

 こうしたことから、Compatibility Packを使用する際には、Platform Compatibility Analyzerを併用するのがお勧めだ。そうすることで、既存の.NET Frameworkアプリの.NET Coreへの移行において使用できるAPIが大きく増えるとともに、互換性のないAPIの使用が常に監視されるようになる。


 Compatibility Packを使用することで、.NET Coreベースのアプリで使用できるAPIが大幅に増え、既存の.NET Frameworkアプリの.NET Coreへの移行が容易になる(可能性がある)。ただし、何でもかんでも.NET Coreに移行するのがよいわけではない。例えば、Windowsのデスクトップアプリであれば、これまで通りに.NET Frameworkをプラットフォームとすることが推奨されることには注意しよう。

参考資料

「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ォ�ー�ス�ウ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ッ�ス�ッ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ョ鬯ッ�ョ�ス�ッ�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ鬯ッ�ョ�ス�」鬮ョ蜈キ�ス�サ�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�・�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ッ�ョ�ス�ッ髫イ蟷「�ス�カ�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�、�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ク�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�イ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ貊ゑスソ�ス霑ケ�ウ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬩搾スオ�ス�コ�ス�ス�ス�、�ス�ス邵コ�、�つ€�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ譎「�ス�カ髯橸ス「�ス�ス髫エ�ッ�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ッ�ス�ョ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ィ鬯ッ�ッ�ス�ョ�ス�ス�ス�ッ鬮ッ蜈キ�ス�ケ�ス�ス�ス�コ�ス�ス�ス�ス�ス�ス�ス�サ鬩幢ス「�ス�ァ髫ー�ス竏橸ソス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ッ�ス�ョ�ス�ス�ス�」鬮ッ蜈キ�ス�ケ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮ォ�ー�ス�ォ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス鬯ョ�ォ�ス�カ鬯ョ�ョ�ス�」�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス髯橸スウ髣鯉スィ�ス�ス�ス�「髫ー�ス竏橸ソス�ス�ス�ス�ス�ス�ス�ュ鬯ョ�ョ隲幢スカ�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ譎「�ス�キ�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬯ョ�ョ隲幢スカ�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�シ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ッ譎「�ス�キ�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�「鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮」蛹�スス�ウ�ス�ス�ス�サ�ス�ス�ス�ス�ス�ス�ス�ス鬯ョ�ォ�ス�カ髫ー謦ー�ス�コ�ス�ス�ス�サ驛「�ァ隰�∞�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス鬯ゥ謳セ�ス�オ�ス�ス�ス�コ�ス�ス�ス�ス�ス�ス�ス�、�ス�ス�ス�ス驍オ�コ�ス�、�ス縺、ツ€鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ェ鬯ッ�ッ�ス�ゥ髯具スケ�ス�ス�ス�ス�ス�ス�ス�ス�ス�カ鬯ョ�」髮具スサ�ス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ヲ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�エ�ス�ス�ス�ス�ス�ス�ス�ス鬩搾スオ�ス�コ�ス�ス�ス�、�ス�ス邵コ�、�つ€鬯ッ�ョ�ス�ッ�ス�ス�ス�キ鬯ョ�」鬲�シ夲スス�ス�ス�ィ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ッ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ェ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�イ鬯ッ�ッ�ス�ッ�ス�ス�ス�ゥ鬮ォ�ー�ス�ウ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ッ�ス�ョ�ス�ス�ス�ッ�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス New

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

鬯ッ�ッ�ス�ゥ髫ー�ウ�ス�セ�ス�ス�ス�ス�ス�ス�ス�ア鬯ョ�」陋ケ�ス�ス�ス�ス�ウ鬮ォ�カ隰撰スコ隲キ�」�ス�ス�ス�ス�ス�ス�ス�イ�ス�ス�ス�ス�ス�ス�ス�ス 鬯ッ�ッ�ス�ョ�ス�ス�ス�ォ�ス�ス�ス�ス�ス�ス�ス�ェ鬯ョ�ッ陋ケ�コ�ス�サ郢ァ謇假スス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ョ�」陋ケ�ス�ス�ス�ス�オ鬮ォ�エ遶擾スオ�ス�コ�ス�キ�ス�ス�ス�ク�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ケ鬮ォ�エ髮懶ス」�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ゥ陝キ�「�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ゥ陝キ�「�ス�ス�ス�「鬮ォ�エ髮懶ス」�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ゥ陝キ�「�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ー

鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮ッ譎「�ス�キ�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ャ鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬯ッ�イ�ス�ス�ス�シ陞滂スイ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�・鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮ッ譎「�ス�カ�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ッ鬯ョ�」陷エ�ス�ス�ス�ス�ォ�ス�ス�ス�ス�ス�ス�ス�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。