概要
USBで開発環境を一式移動させることができれば便利だなと思い、まずはGit、GitHubをUSBで持ち運べるようにしました。環境はWindowsを想定しています。
この記事では、以下の項目を達成します。
- USBにインストールしたブラウザからGitHubのサイトのログイン状態を維持
- GitからGitHubへプッシュやプルする時に必要な認証情報をUSBに保持
- GitHub CLI(ghコマンド)を使用可能
Portable Gitのインストール
まずはポータブル版のGitをダウンロードインストールします。
- 公式ホームページからPortable版をダウンロードする
- USBの直下にインストールする
- 正しくインストールされたか確認する。USB直下にある、git-bash.exeをダブルクリックし、そのシェルに
git --version
と入力し、バージョンが表示されればよい。
Gitの設定
次にGitの初期設定を行います。
- /home/<username>ディレクトリを作成する。/home/<username/の部分は適宜読み替えてもらって大丈夫です
- 下のように、/etc/profileの末尾に
HOME=/home/<username>
を追記する。こうすることで~/.config/
ディレクトリに設定ファイルを保存するソフトであっても、設定ファルごとUSBに入れて持ち運ぶことができます。~~~ 省略 ~~~ unset MAYBE_FIRST_START HOME=/home/<username>/
- gitの初期設定を行う
git config --global user.name "<name>"
:ユーザ名を設定するgit config --global user.email "<email>"
:Eメールを設定するgit config --global safe.directory '*'
:信頼するディレクトリを指定。USB内のディレクトリはデフォルトでは信頼されていないディレクトリとして扱われる。*
とするとすべてのディレクトリを信用するとこになるので、適宜ディレクトリを指定するほうがよいかと思う
- 初期設定が適切に行われているか、確認する。~/.gitconfigファイルの中に先程設定した3項目が存在することを確認する。
$ cat .gitconfig [user] name = KashiuchiSotaro email = XXXXX@gmail.com [safe] directory = *
Browserのインストール
ブラウザをダウンロード、インストールします。ブラウザは主にGitHubのサイトを閲覧するために使用することを想定しています。そのため、GitHubへ毎回ログインしなくて良いように、USB内にcookieや認証情報が残っていてほしい。それらにデフォルトで対応しているブラウザはFireFoxしか確認できませんでした。(GoogleChrome, Operaも調べてみたのですが、デフォルトではセッション状態をパソコンをまたいで保持できませんでした。)そのため今回はFireFoxのポータブル版をインストールします。
- PortableAppsからダウンロードする
- USB配下の好きなところにインストールする
- インストールしたFireFoxのブラウザを使用し、GitHubのアカウントにログインする
GitHub CLIのインストール&コピー
- GitHub CLIの公式ホームページに行き、Windowsのコマンドプロンプトで
winget install --id GitHub.cli
を実行する - 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を使用する。
gh auth login --insecure-storage
とコマンドを入力することで、認証に必要なプロンプトが表示される。--insecure-storage
オプションをつけると、認証情報を平文で保存するらしい(Save authentication credentials in plain text instead of credential store)。この平文の認証情報は~/config/gh/ディレクトリの中に保存されるため、USBで認証情報を持ち運ぶことができる。しかし平文で認証情報を持ち歩くことになることを理解しておかなければ行けない。デフォルトではOSのセキュアストレージに保存するようです(参考, 参考)- 以下の写真のようにプロンプトに沿って認証を行う。
- アクセストークンが正常に生成され、USB内に保存されているかを確認する。
gh auth status
コマンドで確認することができる。 - また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などの認証情報のプロファイルだけ保存されており、ブラウザの本体はパソコンにインストールされているのを使うという状態にできれば良いなと思っています。(現在考え中