Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaのプログラム開発で、絶対に重複しない値が必要な場合「UUID」を利用することが可能です。

本記事では、UUIDとは何なのかといった基本的な概要から実際の生成方法までご紹介していきます。

UUIDとは


UUIDは、ソフトウェア上でオブジェクトを一意に識別するための識別子です。

「Universally Unique Identifier」の略称で、世界中で唯一の値(ユニークな値)となります。

概要

UUIDの概要については、Wikipediaに下記のように記述されています。

UUIDは128ビットの数値だが、16進法による550e8400-e29b-41d4-a716-446655440000というような文字列による表現が使われることが多い。元来は分散システム上で統制なしに作成できる識別子として設計されており、したがって将来にわたって重複や偶然の一致が起こらないという前提で用いることができる。

Wikipedia

「重複や偶然の一致が起こらない前提」と記述されていますが、天文学的な数値でしか重複は起こり得ないため、一般的な利用用途では完全な一意の値が生成出来るとの認識で問題ないでしょう。

使い方

UUIDは、必ず一意の値として定義したい場合に利用することが可能です。

例えば、同一パスに大量の一時ファイルを吐き出し利用する場合などが挙げられます。

JavaでUUIDを生成する方法


Javaのプログラム開発でUUIDを利用したい場合には「randomUUID」メソッドを利用することが可能です。

「java.util.UUID」クラスより提供されているメソッドです。

基本構文

randomUUIDの利用方法は非常に簡単で、下記のように記述します。

UUID.randomUUID();

実行すると下記のような値が出力されます。

b783d64f-a16c-4928-a718-94f027c35fe1

randomUUIDメソッドの返却値

randomUUIDメソッドの返却値はUUID型として返却されます。

UUID uuid = UUID.randomUUID();

文字列として扱いたい場合には、「toString」メソッドを使用して文字列変換を行います。

String uuid = UUID.randomUUID().toString();

JavaでUUIDを生成する具体的なサンプル


ここまででUUIDの生成方法を確認出来たので、具体的なサンプルでも確認してみましょう。

今回は同一パスに対して生成したファイル名を、UUIDで生成した値を使って指定するサンプルです。

サンプルコード

100件分のランダムなファイル名を付与して、「tmp」フォルダにテキストファイルを生成するサンプルです。

ポテパンダの一言メモ

サンプルプログラムのため、ファイルへの書き込み処理は行っていません。

import java.io.File;
import java.io.IOException;
import java.util.UUID;

public class Main {

	public static void main(String[] args) {
        	for (int i = 0; i < 100; i++ ) {
        		File file = new File("./tmp/" + UUID.randomUUID() + ".txt");
        		try {
        			file.createNewFile();
        		} catch(IOException e) {
        			e.printStackTrace();
        		}
        	}
	}

}

実行結果

$ ls
$ ls
02f27438-5463-461f-b7b1-81ff21fe8b5b.txt
0430d5d9-0e56-4471-b84f-286117ec2223.txt
0605815a-eb8d-4c0b-8457-234499a0ecd9.txt
07912de8-f1cb-445c-ac8d-76a5a69372c2.txt
0bf188d0-630c-4d14-899a-7f81e5ac6cdf.txt
0d272112-4496-4cfa-9c42-9d9a446e78c7.txt
0d2c45e8-099f-4f10-bfd6-d7430386c6df.txt
0e5a6b03-7d82-4234-b69d-e2a2ab7cc51f.txt
0ea4e14b-90b3-4dca-ab85-875ae00e5fb1.txt
0ed2415e-cd5e-4e85-8470-834a990de7ed.txt
中略
fc99846a-93ca-4c1c-b7f0-e1c9f8005ea4.txt
fcc2975c-920a-4a98-a4a2-f0d5f1655fff.txt
fd17221d-9c5d-4219-aaae-c9a8965a52fe.txt
fdeff7d1-5d2c-4ee7-a879-da1d6d6ee2ce.txt
fe3e70f2-7b4d-4537-9a1f-03fe151bffc3.txt
$ 

上記結果のように、ファイル名が重複することはなく、1,000件でも10,000件でもそれ以上でも重複することはありません。

Javaで重複しない値を生成したいならUUIDを利用するのが確実


プログラム開発では、一意のデータとして判別させたいというケースが頻繁に起こります。

よく利用される方法に「日時(timestamp)」や「Math.random」メソッドを利用するケースが挙げられます。

これらの方法でも重複する確率はかなり低いのですが、UUIDと比較すると確率は高くなってしまいます。

日時(timestamp)の利用

timestampを利用して、日時で一意の値として扱っているプログラムもたくさんありますが、日時の場合は重複する確率があります。

他の誰かが同一日時で同じ処理を実行することも考えられなくはないですよね。

ミリ秒単位で設定している場合、発生率はかなり低いですが、実際に起こり得るくらいには高い確率で発生します。

Math.randomメソッドの利用

JavaのMathクラスで「random」メソッドを利用することでも不規則な数値を生成することが出来ます。

Main.java

public class Main {

	public static void main(String[] args) {
		System.out.println(Math.random());
	}

}

実行結果

0.2627025405863418

このような出力結果となり、ほとんど重複する可能性はありません。

一般的なプログラムであれば要件を満たせるとも考えられますが、一意の値を担保するような利用用途として提供されているわけではないため、 UUIDを利用した方が確実ということです。

さいごに: JavaのrandomUUIDメソッドを活用して一意な値を生成しよう


本記事では、UUIDの基本情報からJavaで利用可能なrandomUUIDメソッドの使い方についてご紹介してきました。

一意の値を生成する方法には、厳密さにもよりますが記事内でも紹介したように様々な方法が用いられます。

ただ厳密に重複させたくない場合には、一意の値を生成することを目的として提供されている「ramdomUUID」の利用をぜひ検討してみましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。