GUID、シーケンシャル ID、カスタム IDを使いこなす .NET 開発者向けガイド
.NET で生成される人間可読/使用可能で、短くても一意な ID
このガイドでは、.NET で生成される人間可読/使用可能で、短くても一意な ID に関する一般的な概念と、それらを生成するためのいくつかの一般的な方法について説明します。
GUID
GUID (Globally Unique Identifier) は、128 ビットのランダム値に基づいて生成される 36 文字の文字列です。 GUID は、分散システム内でエンティティを一意に識別するために広く使用されています。
GUID を生成するには、System.Guid
クラスを使用できます。
Guid guid = Guid.NewGuid();
Console.WriteLine(guid);
シーケンシャル ID
シーケンシャル ID は、インクリメントされるカウンターに基づいて生成される整数の ID です。シーケンシャル ID は、データベース内のレコードを識別するために一般的に使用されます。
シーケンシャル ID を生成するには、System.Data.SqlClient
クラスを使用できます。
using (SqlConnection connection = new SqlConnection("connection string"))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT SCOPE_IDENTITY()", connection))
{
int id = (int)command.ExecuteScalar();
Console.WriteLine(id);
}
}
カスタム ID
カスタム ID は、独自の規則に基づいて生成される ID です。カスタム ID は、エンティティに関する情報をエンコードするために使用できます。
カスタム ID を生成するには、独自のコードを使用する必要があります。
string id = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(id);
考慮事項
ID を生成する際には、次の事項を考慮する必要があります。
- 一意性: ID は、システム内で一意である必要があります。
- 短さ: ID は短く、読みやすく、記憶しやすい必要があります。
- 人間可読性: ID は人間が読める形式である必要があります。
- 使用可能性: ID は、さまざまなシステムで使用できる必要があります。
using System;
class Program
{
static void Main(string[] args)
{
// GUID を生成する
Guid guid = Guid.NewGuid();
Console.WriteLine("GUID: {0}", guid);
// GUID から文字列を取得する
string guidString = guid.ToString();
Console.WriteLine("GUID String: {0}", guidString);
// GUID からバイト配列を取得する
byte[] guidBytes = guid.ToByteArray();
Console.WriteLine("GUID Bytes: {0}", guidBytes);
}
}
using System;
using System.Data.SqlClient;
class Program
{
static void Main(string[] args)
{
// データベース接続を開く
using (SqlConnection connection = new SqlConnection("connection string"))
{
connection.Open();
// シーケンシャル ID を取得する
using (SqlCommand command = new SqlCommand("SELECT SCOPE_IDENTITY()", connection))
{
int id = (int)command.ExecuteScalar();
Console.WriteLine("シーケンシャル ID: {0}", id);
}
}
}
}
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// 現在時刻とスレッド ID を使用してカスタム ID を生成する
string id = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("カスタム ID: {0}", id);
}
}
実行方法
- コードサンプルをテキストエディタにコピーします。
- ファイルを
.cs
拡張子で保存します。 - Visual Studio でファイルをを開きます。
F5
キーを押して、コードを実行します。
注意
Base64 エンコーディング
Base64 エンコーディングを使用して、ランダムなバイト配列を ID に変換できます。この方法は、ID をより短く、人間が読みやすくすることができます。
using System;
using System.Text;
class Program
{
static void Main(string[] args)
{
// ランダムなバイト配列を生成する
byte[] bytes = new byte[16];
Random random = new Random();
random.NextBytes(bytes);
// バイト配列を Base64 エンコーディングする
string id = Convert.ToBase64String(bytes);
Console.WriteLine("Base64 エンコーディング ID: {0}", id);
}
}
ハッシュ関数
ハッシュ関数を使用して、エンティティを表す文字列を ID に変換できます。この方法は、ID を一意で短くすることができます。
using System;
using System.Security.Cryptography;
class Program
{
static void Main(string[] args)
{
// エンティティを表す文字列
string entity = "This is an entity";
// SHA256 ハッシュ関数を使用してハッシュを計算する
using (SHA256 sha256 = SHA256.Create())
{
byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(entity));
// ハッシュを Base64 エンコーディングする
string id = Convert.ToBase64String(hash);
Console.WriteLine("SHA256 ハッシュ ID: {0}", id);
}
}
}
サードパーティのライブラリ
ID を生成するために、さまざまなサードパーティのライブラリを使用できます。これらのライブラリは、さまざまな機能とオプションを提供できます。
考慮事項
- セキュリティ: ID は、セキュリティ要件を満たす必要があります。
.net database identity