Githubの使い方

日付;2024/04/27(土)

今日、さすがにGithubを使い出した。セットアップが結構勉強になったので、そのときの日記。

Githubの必要性を感じる

最近自分はつくづく医学系の基礎研究者だなぁ(つまり、コンピューター解析の研究者や開発者ではなく)と思う。だからこそ、これまで大規模なコードなんか書かずに、すなわち、Gitを使ってログなんかを取らずに必要性だけでコンピューター解析を行ってきたのだろう。しかし、Single cell RNA sequenceとかの解析を始めてから、どうしてもコードが長くなったり、多くなったりすることが多々あった。シングルセルRNAシークエンス(scRNA-seq)を行っていると、いろいろなライブラリやパッケージを使い、それぞれの目的、例えば、QCや次元削減、RNA velocity、DEG(Differential Expressed Gene)解析、細胞間相互作用の解析などに合わせて仮想環境を切り替えたり、ファイルを変えたりして解析を進めていくわけである。そんなときにはやっぱりGitなどでログを取ったほうが良いのだろう、という考えになってきた。さらに、バルクのRNAシークエンスなどではそんなことはなかったのだが、それでもデータのN数が多いためにいろいろな解析を行ったりすると、いよいよ管理が大変になってくると思う。とにかく、いつでもどこでも、再現性良く管理する必要性が絶対に出てくるし、そうしたいと思うようになる。

でも、医学生物学の基礎研究で使う統計なんて、それこそエクセルに毛が生えた程度であり、それこそ開発なんて言うレベルではない。だから、Gitなんて、git cloneとか、そんなもんしか使ったことなんかない。そういうことなので、ここに来てようやくGitを覚えようかということになったわけである。

Githubに関する本はクXったれわかりにくい

まず、定石通りに本を使って勉強してみる。しかし、どの本も「バから始まってカで終わる言葉;B」の一つ覚えのように「クから始まってソで終わるフレーズ:A」のように役にも立たない間抜けなテキストとかを、BでしかないAなビチグ*WindowsのGUIを使って、実践からは程遠い説明をしている。これを書いている著者は本当に間抜けだと思う。LINUXを使って解析のコードのバージョン管理や編集のログを取ろうとしている人間のだれがGUIのみで解析すると思っているのだろうか。実践的に手順を踏めよ。もっともっとストレートにまとめることが出来るだろう。

言っておくが、こんな本は買うだけ金の無駄だから、絶対におすすめ出来ない。無駄無駄無駄無駄!!!!

ちなみに、不運にも買ってしまった本は以下である。

上記の本、本気で使えないので、絶対に買っては行けない。本当にゴミク*同然だった。GitHubポケットリファレンスは本のサイズが小さいだけ分があるかなって感じである。

結局おすすめの本

上記、あまりにも醜く罵ってしまったが、実はこれは自分の無知によるものだったと後日に気がついた。自分のようにTerminalに慣れきってしまい、あれやったらGuiより快適みたいな人間にとっては、Githubではなく、Gitの本を読むべきだった。とても良かったのが、ベタに独習GitやGitポケットリファレンスだった。以下にリンクを貼っておく。

これらはGitの流れ、というか、Gitが何かを理解するのには良かった。実用的か、と聞かれば、おそらくそれは実践を通じてのみ身につくわけなので、そうではないような気がしている。個人的には。

ChatGPTに使い方を聞く

Githubでアカウントを作って見ても、どうしたらTerminalから同期したらいいのか、全然わからん。だからといって上記の本は全部*ミ。

じゃあ、どうするかと言えば、これはもうChatGPTの力を借りるのが一番良い。特に、コンピューターサイエンスやコードに関してはChatGPTは最強だろう。ということで、色々と教えてもらう。以下、やり取りである。ちなみに、ChatGPTには日本語ではなく英語で聞いた方が、より直接的に教えてくれる。

https://chat.openai.com/share/60b556f1-c5d8-4b69-b0b9-58e1a73f890d

これでとっかかりはOKかなって思う。なんか個人のレポジトリーみたいになってしまった。これだったらDropboxとかとあんまり変わらん気もするが…

個人用途における使い方のメモ

ということで、以下に手順をまとめようと思う。ちなみに、すでにGithubのアカウントを作成しているっていうのを前提とする。これはもうhttps://github.co.jp/にアクセスして、サインアップのところからアカウントを作ればOKなので、あえて何も言うまい。で、まずはとりあえずウェブブラウザー上で新しくRepository(ディレクトリ・フォルダー)を作ってみる。ここではPreparationというRepositoryを作った。もちろん、Privateで。

次に、local computer(自分のパソコン。local repositoryというのかな?良く知らんけど、とにかくGithubじゃなくて自分のパソコン。)のターミナルからGithubにアクセスするためにSigning Keyを作成する必要がある。。

Bash
# set up ssh key

ssh-keygen -t ed25519 -C "XXXXXXXXX@gmail.com"

次に右上のアカウントのアイコンのSettingsからSSH and GPC keyに行って、ssh-keygenを流す。ここで入力するパスワードは、後々に使うので忘れないようにする。次に、以下の画像のようにssh keyをSigning Keyとして入れる。

入力すると以下の画像のようになる。これでOKっぽい。

アップロードする

次に、uploadするのだが、それは以下の手順。まず、Githubに上げたい自分のコンピューター内のdirectoryに行って(cd “/go/to/directory/you want to add code/”)、git initする。これは最初だけっぽい。次に、git addでディレクトリ内のファイルを全部、もしくは上げたいファイルをステージング(予備保存)し、次に、それらをコメントをつけてcommit(確定)する。そして、事前にweb browserで作っておいたPreparationというRepositoryに、git remote add …で繋ぐ。このときに、ssh keyを作ったときに入力したパスワードを聞かれた気がする(確か。あまり覚えていない。)。で最後にgit push(まぁ、ブチ込むって意味だろう。百歩譲って送信って意味だろうか。でも、ブチ込むってほうがしっくりくるよなぁ….!!!)。これで、アップロードが完了って感じである。

Bash
# initial upload

cd "/go/to/directory/you want to add code/"
echo "# Preparation" >> README.md
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:XXXXXXXXXXXXXXX/Preparation.git
git push -u origin main

変更の保存

何かファイルを編集したときに、改めてpush(ブチ込む)したい場合は、以下のようにする。これをやっているときに、git add(予備保存)とgit commit(コメントを入れて確定する)は、なかなかに合理的であることがわかった。

Bash
# update code
git add "2024 04 27 github.md"ed25519
git commit -m "2024 04 27 17:18 correct 2024 04 27 github.md"
git push -u origin main

local repository(自分のパソコンのディレクトリ)から新しくremote repository (Github内のディレクトリ)を作る

正直、いちいちWeb Browserから新しくremote repositoryを作るとか、かなり面倒くさい。こういうことを平気で書いてしまう上記の本は本当に間抜けだと思う。

なので、自分のコンピューターから直接Github内にディレクトリを作成したいと思う。そのためには、まず、ghをインストールする必要があるらしい。https://github.com/cli/cli/blob/trunk/docs/install_linux.mdにインストール方法が載っているので、それに従う。

Bash
# make new repository from local computer
# install gh
# At first, run the blow to install gh

(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] ed25519https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y

インストールが終わったら、ログインしてみる。

Bash
gh auth login

ここでブラウザ立ち上げて表示されたパスワードを入れたり、なんか色々やる。

無事にログインできたら、新しくRemote repositoryを作ってみる。

Bash
# then, stainig (git add) and commit (upload) to new repository (RNAseq).
git init
git add .
git commit -m "Initial commit"
gh repo create RNAseq --private --source=. --remote=origin
git push -u origin master

出来たら、あとはgit add, git commit -m, git pushでアップロードすればOK。

local repository(自分のパソコンのディレクトリ)から既存のremote repository (Github内のディレクトリ)を消す

これは随分としっかり制御されているようで、場合に依ったらいちいちログインしなければならない。確かに、大きなプロジェクトを消すとか、いまいわからん。ただし、個人でやっている場合は消す場合だってあるだろうと思う。

Bash

# Delete repository from local computer

gh repo delete XXXXXXXXXXXXXXX/RNAseq --yes
# Following is error.

# HTTP 403: Must have admin rights to Repository. (https://api.github.com/repos/XXXXXXXXXXXXXXX/RNAseq)
# This API operation needs the "delete_repo" scope. To request it, run:  gh auth refresh -h github.com -s delete_repo

# If it happened, run below.
gh auth refresh -h github.com -s delete_repo

# and then run follow again
gh repo delete XXXXXXXXXXXXXXX/RNAseq --yes

この場合でも、もう一回パスワードいれなくてはならなかった。

これで、無事に不要なRemote repositoryを自分のパソコンから消すことができた。

まとめ

複雑なことをやるわけではないので、これで当面の間は大丈夫なんじゃあないだろうか。というか、ここまでやるのにせっかく買った本を一回も使っていないという。上記の本は、本当に無駄だった。「はじめて」だったらなおさら出来ないし、「人気講師」が「いちばんやさしく」教えてくれてもゴ*は*ミである。これらの本を読んでいて「ポイントレスとはこのことである」と思った。

コンピューター関係については、最初は絶対にChatGPTを使ったほうがうまく行くのではないかと思う。このステップは全部ChatGPTの通りに進めていったから。しかも、エラーが出たらその都度解決方法を聞いて、それを解決しながら、そしてわからないこと質問しながら設定できた。日本の本のゴ*さ加減はすごいものである。というか、なんでこんなに頭に入ってこないんだろう。なんか、つくづく適応能力の無さにがっかりする。