ワークエリアのネットワーク環境のボトルネックがひどい。ネットワークに接続できない時間帯がここしばらく常態化している。統制の取れたAI活用は重要であろうが、日々更新される新しい技術の導入にインフラが間に合っていないのでは?木を見て森を見ずになっていないだろうか?と急増するAI活用の影響を邪推する。

そんな中でも、コマンドラインでのネットワークアクセスはこの影響を受けにくいようだ。APIのJSONファイルだけとの通信では、多くの情報を必要とするブラウザでのアクセスより影響を受けにくいのかもしれない。混雑をよそに、スイスイとPowerShellで情報収集していると心地よい。

GitHub検索コマンドをカスタマイズする

さて、前回、GitHubのリポジトリをPowerShell単体で検索するコマンドを作成したが筆者(記事)。g2 cliでCLIをキーワードに検索するとスター(★)順にCLIトピックスがならぶ。

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
}
  • g2 cliでCLIをキーワードに検索したところ

    g2 cliでCLIをキーワードに検索したところ

最新のオープンソースがならぶGithubのリポジトリ数は公式サイトによれば現在8億以上、2億2,500 万人以上の開発者の成果が集う巨大な場所である。スター(★)順だけでは、GitHub検索コマンドの利点を活かせないのでSort-Object pushed_at -Descendingとして更新日時順にソートを変えてみる。

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 pushed_at -Descending |
        Select-Object name,
                      language,
                      stargazers_count,
                      html_url,
                      description,
                      pushed_at

}
  • 更新日時順にソート

    更新日時順にソート

これだけで、随分と使い勝手が上がりそうなことがわかる。取得できるオブジェクトは、Get-Memberでメンバを表示させることができるので、

$r.items | Get-Member

を追加してやると、使えるメンバを表示してくれる。

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 pushed_at -Descending |
        Select-Object name,
                      language,
                      stargazers_count,
                      html_url,
                      description,
                      pushed_at

    Write-Host "-----------------r.itemsのGet-Member------------------------"
    $r.items | Get-Member

}
  • $r.itemsのGet-Memberが大量に表示される

    $r.itemsのGet-Memberが大量に表示される

これらのメンバ情報から表示させるオブジェクトを追加するだけで動作するものも多いので、簡単にカスタマイズできる。筆者は改造や派生版の多さを見るためにforks_count、タグの広がりを把握するためにtopicsを加えてみた。

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 pushed_at -Descending |
        Select-Object name,
                      language,
                      stargazers_count,
                      html_url,
                      description,
                      pushed_at,
                      forks_count,
                      topics

}
  • forks\_countとtopicを入れただけで、情報量が違ってくる

    forks\_countとtopicを入れただけで、情報量が違ってくる

本格的につかうのであれば、公式のGitHub CLIがレート制限緩和やコマンドの充実など利点も多いが、アカウント認証を前提とすることやインストールが必要になるので環境によっては使えない。PowerShellで直接読み込めば環境に応じた使い分けもできる。