Projectz from Discogs

## はじめに

いろんなフレームワークなどを触り始めるとき、まず公式ドキュメントを見てコマンドを叩いて、じゃあ勝手にディレクトリがいろいろ作られて、って流れが最近多いと思うんですが、そのときのルートディレクトリの名前、みなさん何にしてますか？要はプロジェクト名のことです。

公式ドキュメント通りにやってると、blog だったり todo だったりしますよね。自分で考えた場合 foo だったり demo だったり。特定のフレームワークの名前を前に付けて、rails-blog としたり laravel-todo としたり react-demo としたりしますよね。...しますよね？

ただ、ちょちょいと触って削除するならなんでもいいんですが、最近この**「プロジェクト名にかっこいい名前を付けるとモチベーションが上がる」**ことに気づいたんです (それがデモアプリだったとしても)。プロジェクト名がかっこいいと、中身が薄っぺらくても、せめてコードだけでもちゃんと書こうっていう気になるんですよね。不思議なもんです。

だって見てください、左上。ここが Qiita じゃなく Test とか書かれてたら、記事を書く気なんか起こらないですよね。そういうことです。

ということで、かっこいいプロジェクト名を考えていきましょう、ってのが今回の記事の主題になります。

## 最近のぼくの流行り

さっき「かっこいいプロジェクト名を考えていきましょう」とさらっと書きましたけど、実際問題、この「かっこいいプロジェクト名」を考えるのってけっこう難しいと思うんです。なぜなら何か考え出しても、もうすでに使われていることが多かったりするからです。もうすでに使われているとドメインを取るとき大変だし、ググラビリティも低くなるだろうし、それがちっちゃなライブラリだったとしても、GitHub にリポジトリを作るときに、他の有名なリポジトリ名と被ってなんか嫌だなぁってことが起こるかもしれない。

(そういう意味では note.com ってほんとすごい。これは信念を感じますね)

だからできるだけユニークな名前が良いわけなんですが、ぼくはバカなので全然思いつかないんですよね。とくに信念みたいなものもないし。もう全然思いつかない。

で、どうしたか？というわけなんですが、ぼくは音楽が好きなんです。例えば Toots and The Maytals が好きなんです。じゃあプロジェクト名は「Maytals」でいいかってなったんです。で他と被ってないかなぁってググると、まぁ当たり前ですが Toots and The Maytals の情報がわんさか出てくるんですね＾＾。これではいけない。じゃあどうしよっかなぁ...めんどくさいなぁとか思いながら最後に適当に思いついたのが s を z にする方法です。 

Maytals -> Maytalz

うーん...悪くない。ググってみても、なんかそれらしい有名なブランド名にも使われていない。よし採用となったわけです。これは所謂 B'z 方式ですね。Gorillaz 方式ともいう。知らんけど。

ということで、ぼくは何かしら作るときにこの方法を使ってプロジェクト名にしている最近です。ただ毎回好きなバンド名でかっこいいのないかなーなんかあるかなー最後に s 付いてるやつでー、って考えるのめんどくさいですよね。...めんどくさいですよね？

ということで簡単なコマンドを作っていきましょう。

## Projectz from Discogs

Discogs ってサイト知ってますか？いろいろ音楽探してあーだこーだする感じのサイトなんですが、ありがたいことに API があるのでこれを使います。言語は自分の使い慣れてるものならなんでもいいです。

で、今回作るのは API から The の付いているアーティストを検索して表示するだけのコマンドです:

```/path/to/project/_.php
$queries = http_build_query([
    'q' => 'the',
    'type' => 'artist',
    'page' => $argv[1] ?? 1,
    'token' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
], '', '&');

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TCP_FASTOPEN => true,
    CURLOPT_ENCODING => 'gzip',
    CURLOPT_URL => 'https://api.discogs.com/database/search?'.$queries,
    CURLOPT_USERAGENT => 'ProjectzFromDiscogs/0.1',
]);
$response = curl_exec($ch);
curl_close($ch);

if (false === $response) {
    exit('Request failure.'.PHP_EOL);
}

$response = json_decode($response);

if (isset($response->message)) {
    exit($response->message.PHP_EOL);
}

foreach ($response->results as $data) {
    echo preg_replace('/\([0-9]+\)\z/', '', $data->title).PHP_EOL;
}

printf('[page %s/%s]'.PHP_EOL,
    $response->pagination->page,
    $response->pagination->pages
);
```

いろいろレスポンスを見ながら書いていくとこんなのができました。search 系はアクセストークンが必要みたいなのでユーザ登録してゲットしておきましょう。

コマンドラインから以下を実行します:

```
cd /path/to/project
php _.php
```

すると以下のような結果が返ってきます:

```
The Beatles
The The
The Cure
The Doors
The Clash
The Smiths
The Edge
The Who
The Kinks
The Mamas & The Papas
The Prodigy
The Jordanaires
The Temptations
The-Dream
The Rolling Stones
The Supremes
The Stooges
The Police
The Neptunes
The Band
The Orb
The Fall
The Byrds
The Damned
The Stranglers
The Wailers
The Mothers
The Designers Republic
The Upsetters
The Cars
...
[page 1/200]
```

引数を追加するとページネーションができます:

```
php _.php 2
```

結果は以下です:

```
The Velvet Underground
The Genius
The Jackson 5
The Monkees
Kool & The Gang
The Offspring
The Heptones
The Grateful Dead
The Yardbirds
The Crusaders
The Pogues
The Unknown
The Cramps
...
[page 2/200]
```

あとはこの中から適当に単語を引っ張ってきて最後に z を足したり、最後の s を z に置き換えたりすると、簡単にかっこいいプロジェクト名になるわけです。しかもだいたいがユニークで(そんなことはない)、ググラビリティも高いものが多い(そんなことはない)んですよね。最高ですね。

Velvetz, Monkeez, Poguez。うーん...悪くない。

## まとめ

いかがだったでしょうか＾＾？

今回は B'z 方式を採用してますが、他には Apple 方式みたいに最初に i を付けるやり方もありますよね。皆さんもいろいろな発想からいろいろなかっこいいプロジェクト名を作ってみてください。名前が気に入ると中身が薄っぺらくてもなでなでしたくなりますよ。

## 備考

今回の B'z 方式には一個欠点があります。それは、プロジェクト名からなんのプロジェクトかさっぱりわからない、ということです。そういう意味では note.com ってほんとすごい。これは信念を感じますね。いやマジで。

## リンク

[Discogs API Documentation](https://www.discogs.com/developers/)
[駆動開発 - Google 検索](https://www.google.com/search?q=%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA)