1980年代の喫茶店の多くにテーブルゲームが並んでいた。スペースインベーダーやパックマン、ドンキーコングにブロック崩しと、本来の目的である飲食"そっちのけ"でゲームに没頭してしいた幼少期。温泉旅館やデパートの屋上などいたるところに100円玉で完全没頭できる誘惑があった。世界的に見ても日本独自の文化だそうで、あの熱い好奇心がその後の日本のゲーム文化の多様性に繋がっていったように思う。
CLIでのWeb閲覧を行っていると当時の感覚が蘇る。これらタイトル画面の多くは黒背景に色文字で構成されていたが、現在のグラフィックに長けたゲームとはまた違ったシンプルな良さがあった。
CLIで動くゲームもたくさんありそうだな・・・・
GitHubは開発者御用達のオープンソースが大量に並んでいるが、探すのがなかなか難しいのも事実だ。コードの探し方は公式サイトに特設のWebページが設定されているが検索の方法も人気度を表すStar:やsize:、プログラミング言語を指定するlanguage:などなど多様な検索を試せる。
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件表示される。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だけで動く希少なテキストゲームを発見したので、インストール(ダウンロード/解凍/ps1ファイル実行)して実行してみる(psDrugWars)と、PowerShellだけで約6800行のpsDrugWars.ps1ファイルが解凍フォルダで作成されている。
現状ではPowerShellだけというのはとても少ないが、やはりPythonやJavaで検索すると圧倒的な★のgameが引っかかる。より多様なテキストゲームが潜んでいそうだということがわかる。






