ロゴテキスト ロゴ

    gitリポジトリのサマリを表示する! onefetch

    gitリポジトリのサマリを表示する! onefetch

    Rust製のGitリポジトリのサマリを表示するライブラリ、onefetch。



    例えばfzfというライブラリで実施すると

    fzfのリポジトリでonefetchを実施した場合
    • リポジトリの作成日
    • バージョン
    • 言語の割合

    などなど、GitHubで見るような内容がローカルで確認出来ます!


    ゴーファーくんが可愛いですね ☺️笑




    開発が捗る!といったライブラリではないものの

    「どういうリポジトリだったっけ?」というのがローカルで手軽に確認出来る便利ライブラリです。




    更に、ghq + fzfと組み合わせると以下のような面白技も実現出来ます!


    ↑は「ローカル内のリポジトリを検索しながらリポジトリの情報を表示する」というものです😃

    本題とはそれるため最後におまけとして記載します。

    検証した環境

    1 onefetch 2.15.1

    インストール方法

    Macを使っている場合はHomebrewで手軽にインストール可能

    $ brew install onefetch


    その他のインストールは以下公式ページを参考に

    https://github.com/o2sh/onefetch/wiki/Installation


    使い方

    基本的な使い方

    基本の使い方はシンプル


    • パスを指定しなかった場合、現在のディレクトリに対してonefetchを実行
    • パスを指定した場合、該当パスのディレクトリに対してonefetchを実行
    # 現在のディレクトリで onefetch を実行
    $ onefetch
     
    # 指定したパスのディレクトリに対し onefetch を実行
    # 例えば下記の場合 Alamofire というSwiftのライブラリに対して実行します
    $ onefetch ~/src/github.com/Alamofire/Alamofire


    オプション

    複雑なことは出来ないものの使えそうなものをいくつか


    デフォルトだとlogoが表示されますが「非表示にする」といった設定が出来ます

    # auto, never(非表示), always(常に表示) が設定可能
    $ onefetch --show-logo never

    ロゴを非表示にする


    —output

    表示を↑のようなキレイなUIではなく json・yaml で出力出来ます。

    $ onefetch --output json ~/src/github.com/junegunn/fzf
    {
      "title": {
        "gitUsername": "yuki-takara",
        "gitVersion": "git version 2.39.1"
      },
      "infoFields": [
        {
          "ProjectInfo": {
            "repoName": "fzf",
            "numberOfBranches": 2,
            "numberOfTags": 116
          }
        },
        {
          "DescriptionInfo": {
            "description": null
          }
        },
        ・・・
    }

    他ライブラリ等に渡したい時などに使えそう!



    GitHubと比較して

    使用している言語の割合部分をGitHub上の表示と比較してみます。

    fzf

    https://github.com/junegunn/fzf



    GitHubで表示される使用言語の割合

    fzfのGitHubの情報

    onefetchで表示される使用言語の割合

    fzfのonefetchの情報

    だいたい一緒ですね!


    Alamofire

    https://github.com/Alamofire/Alamofire



    GitHubで表示される使用言語の割合

    AlamofireのGitHubの情報

    onefetchで表示される使用言語の割合

    Alamofireのonefetchの情報

    ・・ん?

    全然違う😂w



    以下の辺りで差が出ているのかな🤔

    • GitHubは言語の割合に github-linguist というライブラリを使用している
    • github-linguistは .gitattributes を用いる事でフォルダ・ファイルを計測からignore出来る

    github-linguistのリポジトリ



    axios

    https://github.com/axios/axios



    GitHubで表示される使用言語の割合

    axiosのGitHubの情報

    onefetchで表示される使用言語の割合

    axiosのonefetchの情報

    こちらもだいたい一緒!



    大きな差が出る場合もあるものの計測方法の差、と思えば良さそうです。



    ghq + fzfと組み合わせる(おまけ)

    冒頭に記載した以下の内容の実現方法です



    ~/.zshrc
    # fzfのデフォルト設定
    export FZF_DEFAULT_OPTS="--height 50% --layout=reverse --border \
    --preview-window 'right:50%' \
    --bind 'ctrl-/:change-preview-window(80%|hidden|)' \
    --bind 'ctrl-u:preview-half-page-up,ctrl-d:preview-half-page-down'"
     
     
    function change-git-directory-with-incremental-search () {
      local WORKDIR=$(ghq list -p | fzf --preview "onefetch --show-logo never {}" --preview-window=right,50% --height 70%)
      [ -z "$WORKDIR" ] && return
      cd $WORKDIR
    }
     
    alias gr='change-git-directory-with-incremental-search'

    change-git-directory-with-incremental-searchで行っている事をザックリ書くと

    • ghqでローカル管理しているリポジトリの一覧を表示
    • fzfでインクリメンタルサーチを行う
    • その際に表示するプレビューウィンドウに onefetch を用いてリポジトリ情報を表示する
    • インクリメンタルサーチで選択したリポジトリのフォルダにcdで移動

    となります。




    詳細は↓の記事に記載してますので、気になる方はぜひ見てやって下さい!

    プロフィールの背景画像 プロフィール画像
    Yuki Takara
    都内でフリーランスのエンジニアをやってます。フロントとアプリ開発メインに幅広くやってます。