概要

USBで開発環境を一式移動させることができれば便利だなと思い、まずはGit、GitHubをUSBで持ち運べるようにしました。環境はWindowsを想定しています。
この記事では、以下の項目を達成します。

  • USBにインストールしたブラウザからGitHubのサイトのログイン状態を維持
  • GitからGitHubへプッシュやプルする時に必要な認証情報をUSBに保持
  • GitHub CLI(ghコマンド)を使用可能

Portable Gitのインストール

まずはポータブル版のGitをダウンロードインストールします。

  1. 公式ホームページからPortable版をダウンロードする
  2. USBの直下にインストールする
  3. 正しくインストールされたか確認する。USB直下にある、git-bash.exeをダブルクリックし、そのシェルにgit --versionと入力し、バージョンが表示されればよい。

Gitの設定

次にGitの初期設定を行います。

  1. /home/<username>ディレクトリを作成する。/home/<username/の部分は適宜読み替えてもらって大丈夫です
  2. 下のように、/etc/profileの末尾にHOME=/home/<username>を追記する。こうすることで~/.config/ディレクトリに設定ファイルを保存するソフトであっても、設定ファルごとUSBに入れて持ち運ぶことができます。
    ~~~ 省略 ~~~
    unset MAYBE_FIRST_START
    
    HOME=/home/<username>/
    
  3. gitの初期設定を行う
    1. git config --global user.name "<name>":ユーザ名を設定する
    2. git config --global user.email "<email>":Eメールを設定する
    3. git config --global safe.directory '*':信頼するディレクトリを指定。USB内のディレクトリはデフォルトでは信頼されていないディレクトリとして扱われる。*とするとすべてのディレクトリを信用するとこになるので、適宜ディレクトリを指定するほうがよいかと思う
  4. 初期設定が適切に行われているか、確認する。~/.gitconfigファイルの中に先程設定した3項目が存在することを確認する。
    $ cat .gitconfig
    [user]
            name = KashiuchiSotaro
            email = XXXXX@gmail.com
    [safe]
            directory = *
    

Browserのインストール

ブラウザをダウンロード、インストールします。ブラウザは主にGitHubのサイトを閲覧するために使用することを想定しています。そのため、GitHubへ毎回ログインしなくて良いように、USB内にcookieや認証情報が残っていてほしい。それらにデフォルトで対応しているブラウザはFireFoxしか確認できませんでした。(GoogleChrome, Operaも調べてみたのですが、デフォルトではセッション状態をパソコンをまたいで保持できませんでした。)そのため今回はFireFoxのポータブル版をインストールします。

  1. PortableAppsからダウンロードする
  2. USB配下の好きなところにインストールする
  3. インストールしたFireFoxのブラウザを使用し、GitHubのアカウントにログインする

GitHub CLIのインストール&コピー

  1. GitHub CLIの公式ホームページに行き、Windowsのコマンドプロンプトでwinget install --id GitHub.cliを実行する
  2. C:/ProgramFile/Github CLI/gh.exeをUSBの/usr/bin/ディレクトリ配下にコピーする

GitHub CLIの設定

GitHub CLIの設定ファイルを作成する

  • ~/.config/ghディレクトリを作成する
  • ghコマンド(GitHub CLI)が先程作成したディレクトリから、設定ファイルを読み込むように、/etc/profileの末尾にexport GH_CONFIG_DIR=/home/<username>/.config/gh/と環境変数を追記する
  • ghコマンドから呼び出されるブラウザを指定するために、次のコマンドを実行する。gh config set browser "<Path>/FireFoxPortable.exe" このコマンドの<Path>部分にFireFoxをインストールした場所を指定する

アクセストークを生成

Gitはリモートリポジトリの認証システムを外部のソフトに任せている。それらの話はこちらや、こちらで解説されている。その外部の認証システムとして今回はGitHub CLIを使用する。

  1. gh auth login --insecure-storageとコマンドを入力することで、認証に必要なプロンプトが表示される。--insecure-storageオプションをつけると、認証情報を平文で保存するらしい(Save authentication credentials in plain text instead of credential store)。この平文の認証情報は~/config/gh/ディレクトリの中に保存されるため、USBで認証情報を持ち運ぶことができる。しかし平文で認証情報を持ち歩くことになることを理解しておかなければ行けない。デフォルトではOSのセキュアストレージに保存するようです(参考, 参考)
  2. 以下の写真のようにプロンプトに沿って認証を行う。 image
  3. アクセストークンが正常に生成され、USB内に保存されているかを確認する。gh auth statusコマンドで確認することができる。
  4. またGitがgithub.comに操作する時に、GitHub CLIが呼び出されるようになっているかを確認する。~/.gitconfigファイルを開き下のようになっていればよい。credential.helperの!はシェルとして呼び出すらしい
    [user]
            name = KashiuchiSotaro
            email = XXXXX@gmail.com
    [safe]
            directory = *
    [credential "https://github.com"]
            helper =
            helper = !'F:\\usr\\bin\\gh.exe' auth git-credential
    [credential "https://gist.github.com"]
            helper =
            helper = !'F:\\usr\\bin\\gh.exe' auth git-credential
    

まとめ

これで、USBにインストールしたFireFox上でGitHubのサイトを開くことで、ログインし直さずに閲覧することができる。また、GitHubへの認証も毎度しなくてよく、ghコマンドが使用も使用できるようになった。
問題としてはとんでもなくブラウザが遅いこと。これは私のUSBの速度が遅いのかもしれませんが、ブラウザを立ち上げて操作をすると、USBへのアクセスが集中しカクつきました。またできればGoogle Chromeを使いたいなと思っています。最終的には、USBにcookieなどの認証情報のプロファイルだけ保存されており、ブラウザの本体はパソコンにインストールされているのを使うという状態にできれば良いなと思っています。(現在考え中