1980年代の喫茶店の多くにテーブルゲームが並んでいた。スペースインベーダーやパックマン、ドンキーコングにブロック崩しと、本来の目的である飲食"そっちのけ"でゲームに没頭してしいた幼少期。温泉旅館やデパートの屋上などいたるところに100円玉で完全没頭できる誘惑があった。世界的に見ても日本独自の文化だそうで、あの熱い好奇心がその後の日本のゲーム文化の多様性に繋がっていったように思う。

CLIでのWeb閲覧を行っていると当時の感覚が蘇る。これらタイトル画面の多くは黒背景に色文字で構成されていたが、現在のグラフィックに長けたゲームとはまた違ったシンプルな良さがあった。

CLIで動くゲームもたくさんありそうだな・・・・

GitHubは開発者御用達のオープンソースが大量に並んでいるが、探すのがなかなか難しいのも事実だ。コードの探し方は公式サイトに特設のWebページが設定されているが検索の方法も人気度を表すStar:やsize:、プログラミング言語を指定するlanguage:などなど多様な検索を試せる。

  • "game language:PowerShell"で検索

    "game language:PowerShell"で検索

PowerShellと検索クエリーを用いてエンドポイント(https://api.github.com/search/)から取得することも可能であるためInvoke-RestMethodを使って検索してみよう。

function g

function g {
    $r = Invoke-RestMethod "https://api.github.com/search/repositories?q=stars:>10000&sort=stars"
    $r.items | Select-Object name, stargazers_count, html_url, description, updated_at
}
  • ★10000以上のリポジトリが30件表示

    ★10000以上のリポジトリが30件表示

これを実行すると、★10000以上のリポジトリが30件表示される。GitHub Search APIが返すitemプロパティから、名称、★の数、URL、アップデート日付を抽出している。認証が無いGitHub Search APIでは、5リクエスト/分、1ページ最大件数100、1検索につき最大1000件などの制限があるので、デフォルトで十分だがページの部分のクエリーは以下のように変えることで表示件数を変えることも可能だ。

?q=stars:>10000&sort=stars&per_page=100&page=2

また、クエリーに特殊文字や日本語が入る場合に備えてuriクラスを被せておくとより汎用性が広がる。

 https://api.github.com/search/repositories?q=$([uri]::EscapeDataString($q))&sort=stars

パラメーターにキーワードと★の数で検索する

引数をパラメーターを使って項目を連結させる方法を使えば、より柔軟な使い方が可能になる。以下のようにキーワードを変数Keyword、星の数を変数Stars、$Languageにプログラミング言語を設定し、クエリーURLに設定する部分を追加。Sort-Object stargazers_count -Descendingで★の順番で並べ替えて表示する。

function g2

function g2 {
    param(
        [string]$Keyword = "",
        [int]$Stars = 10000,
        [string]$Language = ""
    )

    $q = if ($Keyword) {
        "$Keyword stars:>$Stars"
    }
    else {
        "stars:>$Stars"
    }

    if ($Language) {
        $q += " language:$Language"
    }

    $url = "https://api.github.com/search/repositories?q=$q&sort=stars"

    $r = Invoke-RestMethod $url

    $r.items |
        Sort-Object stargazers_count -Descending |
        Select-Object name,
                      language,
                      stargazers_count,
                      html_url,
                      description,
                      pushed_at
}

これを実行すると図のようにPowerShellのゲームに関連する項目が表示される。

  • PowerShellとgameに関連する項目を検索したところ

    PowerShellとgameに関連する項目を検索したところ

PowerShellだけで動く希少なテキストゲームを発見したので、インストール(ダウンロード/解凍/ps1ファイル実行)して実行してみる(psDrugWars)と、PowerShellだけで約6800行のpsDrugWars.ps1ファイルが解凍フォルダで作成されている。

  • タイトルは、昔のゲームを彷彿とさせる"Drug Wars"

    タイトルは、昔のゲームを彷彿とさせる"Drug Wars"

  • 部下に指令を出して資金を増やすマフィアゲーム

    部下に指令を出して資金を増やすマフィアゲーム

現状ではPowerShellだけというのはとても少ないが、やはりPythonやJavaで検索すると圧倒的な★のgameが引っかかる。より多様なテキストゲームが潜んでいそうだということがわかる。

  • g2 game 10 java

    g2 game 10 java

  • g2 game 10 python

    g2 game 10 python