Golang Petnameを使って覚えやすいランダムな名前を生成する

はじめに

システム開発において、コンテナやホスト、一時的なリソースに対して一意な名前を付けることがある。
単純なUUIDや数字の羅列は機械的には扱いやすいが、人間にとっては覚えにくく、コミュニケーションの際に不便である。

この問題を解決するために、「golang-petname」ライブラリを使ってみる。
このライブラリは人間が読みやすく、発音しやすい「ペット名」をランダムに生成することができる。
本記事では、golang-petnameの使い方と活用シーンについて記載する。

golang-petnameとは

golang-petnameは、RFC1178に準拠した「ペット名」を生成するためのGolangライブラリである。生成される名前は、副詞、形容詞、動物名のランダムな組み合わせで構成され、以下の特徴を持つ

  • 人間にとって意味のある名前
  • 分散化された名前空間
  • セキュアな名前生成

例えば、「wiggly-yellowtail」や「primly-lasting-toucan」のような名前が生成される。
これらは覚えやすく、発音しやすい特徴を持っている。

環境

Windows 11 Professional
WSL2 Ubuntu 24.04 LTS

インストール

コマンドラインツールとしてのインストール

Ubuntuでは以下のコマンドでインストールできる

sudo apt-get install golang-petname
ログ
 ~  sudo apt-get install golang-petname                                                       ✔ │ 19:36:58
[sudo] password for kbushi:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  crack-common libdouble-conversion3 libgl1-amber-dri libglapi-mesa libllvm17t64 libmd4c0 libpcre2-16-0
  libqt5core5t64 libqt5dbus5t64 libqt5gui5t64 libqt5network5t64 libqt5qml5 libqt5qmlmodels5 libqt5quick5
  libqt5svg5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5widgets5t64 libqt5x11extras5
  libxcb-damage0 libxcb-xinerama0 libxcb-xinput0 mesa-utils-bin qt5-gtk-platformtheme qttranslations5-l10n
  qtwayland5 xbitmaps
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  golang-petname
0 upgraded, 1 newly installed, 0 to remove and 40 not upgraded.
Need to get 580 kB of archives.
After this operation, 1461 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 golang-petname amd64 2.11-1ubuntu0.24.04.2 [580 kB]
Fetched 580 kB in 1s (409 kB/s)
Selecting previously unselected package golang-petname.
(Reading database ... 127612 files and directories currently installed.)
Preparing to unpack .../golang-petname_2.11-1ubuntu0.24.04.2_amd64.deb ...
Unpacking golang-petname (2.11-1ubuntu0.24.04.2) ...
Setting up golang-petname (2.11-1ubuntu0.24.04.2) ...
Processing triggers for man-db (2.12.0-4build2) ...

補足: ライブラリとしてのインストール

Goのプロジェクトでライブラリとして使用する場合

go get github.com/dustinkirkland/golang-petname

基本的な使い方

コマンドラインツールとして

インストール後、以下のようにコマンドラインから使用できる:

# デフォルトでは2単語の名前を生成
golang-petname
# 例: wiggly-yellowtail

# 単語数を指定
golang-petname --words 1
# 例: robin

# 3単語の名前を生成
golang-petname --words 3
# 例: primly-lasting-toucan

# 4単語の名前を生成
golang-petname --words 4
# 例: angrily-impatiently-sage-longhorn

# 区切り文字の変更
golang-petname --separator ":"
# 例: cool:gobbler

# 区切り文字なし
golang-petname --separator "" --words 3
# 例: comparablyheartylionfish

Goコードでの使用例

package main

import (
    "fmt"
    "math/rand"
    "time"
    
    "github.com/dustinkirkland/golang-petname"
)

func main() {
    // 乱数シードの初期化
    rand.Seed(time.Now().UTC().UnixNano())
    
    // 2単語のペット名を生成(ハイフン区切り)
    fmt.Println(petname.Generate(2, "-"))
    
    // 1単語のペット名を生成
    fmt.Println(petname.Generate(1, ""))
    
    // 3単語のペット名を生成(アンダースコア区切り)
    fmt.Println(petname.Generate(3, "_"))
}

活用シーン

golang-petnameは以下のようなシーンで特に有用と思われる。

  1. テスト環境の識別: 複数のテスト環境を区別するための命名
  2. 一時的なリソースの命名: クラウド上の一時的なサーバーやリソースに名前をつける
  3. デモ用のユーザー名やID: デモ環境での識別しやすいユーザー名の生成

オプション詳細

petnameのオプションには以下のものがある

  • -w|--words: 名前に含める単語数(デフォルト: 2)
  • -l|--letters: 各単語の最大文字数(デフォルト: 無制限)
  • -s|--separator: 単語間の区切り文字(デフォルト: “-")
  • -c|--complexity: 単語の複雑さ(0=簡単, 1=標準, 2=複雑, デフォルト: 1)

参考

おわりに

golang-petnameは単純ながらも実用的で、開発環境やプロダクション環境の両方で役立つツールである。
人間にとって意味のある名前を自動生成することで、システム管理やデバッグ作業の効率化が期待できそうだ。

適当に名前を付けても覚えにくいので、こういうツールを使ってみるのも面白そう。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。