Milkのメモ帳

日々の思いつきを忘れないようにのメモ用です。

Milkのメモ帳

【初心者向け】githubって何?仕組みを分かって使える環境を整えよう!【解説】


f:id:maxminkun:20160629055443p:plain

皆さんは、上のようなgithub星人を見たことはありませんか?

私は、恥ずかしながら名前は知っていても、そもそもgithubとは何なのかが分かっていませんでした;

ということで、今回は私もgithub星人になろう!と思ったのです。

決意した理由は、また他にあるんだけどね;


gitが必要だ!

f:id:maxminkun:20160629061422p:plain:w350

さて、このgithubですが、そもそもはgitと連携することが前提となっているサービスです。

一般の人にとってgit?なんなんだぜ?と思う方は多いと思います。(逆に、お前その業界にいてgitも知らねーのかよって、ツッコミも多数あるかと・・・)

いやぁ・・・言い訳すると、gitは知ってたんですよ!知ってはね!

でも、自分のプロジェクトは基本的にWindows のアプリ開発だったんで、Team Foundation Server(通称:TFS)を使ってたんです。

あとは、使うとしてもSubversionね。なので、gitは経験したことがありませんでした。

構成管理ツール

TFSとかSubversionとか、gitと言ったツールは、構成管理ツールと呼ばれるものです。

プログラムのソースは、プログラムを試行錯誤して書くことは多いものです。また、試験工程に入った場合には、バグを潰すために行った修正のはずが他のバグを引き起こす要因になってしまった!ということもあるのです。

そういう時に活躍するのが、この構成管理ツール。あるコンピュータにこれを入れておくと、それにネットワークでつながったユーザはプログラムソースをそこに保管します。そして、修正を加えると、その加えた差分をバージョンごとに管理してくれるツールです。

これは、プロジェクトの規模が大きくなればなるほど必要になります。

例えば、ある人はVer5.0のプログラムソースに加筆したとします。でも、他の人は手元にVer4.0を持っていて、それに一生懸命修正を加えていました。

すると・・・あれ?Ver5.0の更新されたVer6.0と、Ver4.0に変更が加えられた別のVer5.0が存在する?一体全体、どれが最新のプログラムだ??という自体が発生します。

これを避けるためにも、「プログラムのバージョンをしっかりと管理しましょうね。そして、必要なバージョンに戻せる機能もありますよ。」というのが構成管理ツールです。ですから、現在のソフトウェア開発には、構成管理ツールというものは絶対に必要な存在なのです。

こういった、構成管理ツールにも種類があって、Windows だとVisual Studioというプログラムを開発するツールに密接に連携しているTFSが利用しやすかったり、Subversionと呼ばれるフリーの構成管理ツールなどがあります。

最近では、gitと呼ばれる構成管理ツールが流行りで、これもフリーのツールです。複数人同時にプログラムが触れる等の利点があるのですが、使い込んでいないので、そこまで特徴は私は分かっていません;

ですが、github星人になるためには、先ずはgitを入れる必要があります。

githubとはなんだ!

自分もこれは最大の謎だったのですが、調べていると要はサーバーを貸し出しているサービスということらしいです。

構成管理ツールは、殆どは自前で構成管理ツール専用のコンピュータを用意したり、自分のパソコンに構成管理ツールを入れたりします。

こういったツールは常駐して動くので、結構負荷がかかるんですよね。後、バージョンを保存するということは、差分ではありますがプログラムソースをどんどん貯めこむことになります。すると、容量も食われていくのです。

このgithub は、会員登録すると、プログラムのバージョン管理する場所を貸し出してくれるサービスです。

ただし条件はあって、無料会員だとプログラムの中身は一般公開された状態で管理されます。つまり、他人のプログラムソースを見ることや、DLすることが出来ます。

しかし、個人でソフトウェア開発を行っていて、オープンソース(プログラムソースを公開する)で開発したり、自分のプログラミングスキルを証明するためにgithub にプログラムを公開したりといった使い方で利用するらしいのです。

公開状態になることで他人からアドバイスがもらえたり、サイバーエージェントやドワンゴではgithubに公開されたプログラムを見て人材採用のスキル判定に利用したりと、使い方は様々ですがプログラムの巨大な保管庫として利用されるようになりました。

これがgithub の魅力であり、流行っている理由なのです。

github星人になろう

さて、長くなりましたが先ずは、github に連携を行うためには、自分のパソコンにgit を入れておかないといけませんので、それを行いましょう。

現在私はUbuntuを使っていますから、Ubuntuでの導入方法で解説させていただきます!(Windows だともっと簡単なのかな?)

gitのインストール

以下を参考にしました。(ありがとうございます。) http://okuzawats.com/install-git-on-ubuntu-20150615okuzawats.com

ターミナルを開いて、以下のコマンドを入力します。先ずは、パッケージを最新状態にします。

$ sudo apt-get update

次に、gitのインストールです。

$ sudo apt-get install git

今の状態でgitのコマンドは使える状態になっているはずですが、一旦はここまで。

github の会員になる

以下を参考にしました。(ありがとうございます。) tontotakumi.com

では、github に登録を行います。以下にアクセスします。

github.com

必要な情報を入力しましょう。

f:id:maxminkun:20160629064540p:plain

無料会員なので、以下の設定で「Continue」です。

f:id:maxminkun:20160629065025p:plain

これは、会員情報をより詳しく設定するためのアンケートみたいなものなので、そのまま「Submit」で大丈夫です。

f:id:maxminkun:20160629065337p:plain

ここまでくれば、一応はgithub の登録は終わりです。

f:id:maxminkun:20160629065509p:plain

自分のパソコンのgit に対して初期情報を設定する

さて、ターミナルに戻って、git の初期設定を行いましょう。

$ sudo git config --global user.name "登録したユーザー名"
$ sudo git config --global user.email "登録したメールアドレス"

git と github 間で通信が出来るようにする

githubで登録した場所に対し、特定の人だけがアクセス出来るように設定出来なければ、誰でもが貴方のgithub の内容を更新できてしまうことになります。

なので、暗号鍵を生成しgithub 側に登録させることで、貴方のPCだけが貴方のgithub のアカウントに接続出来るようにするという仕組みがあります。

そのためには、まず貴方のPC内で鍵を生成する必要があります。

以下を参考にしました。(ありがとうございます。) monsat.hatenablog.com

では、ターミナルから鍵の生成を行いましょう。

$ ssh-keygen -t rsa -C "登録したメールアドレス"

途中で操作を聞かれますが、Enterで続行します。

すると、~/.ssh のディレクトリ内に、「id_rsa.pub」というファイルが出来ています。

この内容を全てコピーして、github 側に登録を行います。

githubの自分のアカウントに移動して、自分のアイコンから「Settings」を選択します。

すると以下のような画面が開くはずです。

f:id:maxminkun:20160629071530p:plain

「SSH and GPG keys」の項で、「SSH keys」がありますので、コピーした内容をここに登録します。

ここまで来れば、gitのコマンド操作でgithub上の内容を更新することが出来るようになります。

gitの操作をGUIで操作する(SmartGit)

さて、gitコマンドを使って操作するのが基本なのですが、初心者にとっては少々難しい。

もっと視覚的に分かりやすいのはないのか?と探していました。

すると、gitクライアントというツールがあるらしい・・・

今回はUbuntuでも使用できる、「SmartGit」を使ってみることにしました。

以下を参考にしました。(ありがとうございます。) ry0.github.io

さて、先ずはJavaで動いているらしいので、Javaを入れていない人はインストールを行います。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

次に、SmartGitのインストールです。

$ sudo add-apt-repository ppa:eugenesan/ppa
$ sudo apt-get update
$ sudo apt-get install smartgit

github上に管理対象のリポジトリ(ディレクトリだと思って下さい)を作成しておきましょうか。

github のサイトで「New repository」を選択します。すると以下の画面になると思います。

f:id:maxminkun:20160629090430p:plain

「Repository name」に任意の名前を入れて下さい。私は試しに「testproject」としました。

さて、github 上にもリポジトリを作成しましたので、後はSmartGit からこのリポジトリの操作ができると万々歳です。

先ほどのコマンド入力で、SmartGit はインストールされているはずなので、Dashから検索して起動しましょう。

非商用利用かどうかを聞いてきます。個人で使用するので、以下の設定で「Next」を押しましょう。

f:id:maxminkun:20160629073530p:plain

非商用利用時のラインセンス内容です。同意して「OK」を押します。

f:id:maxminkun:20160629073701p:plain

gitへのログイン情報を聞いてきます。先ほどコマンドでgit の初期設定で入力した内容を入れましょう。

f:id:maxminkun:20160629073839p:plain

先ほど設定したSSH通信についてです。これは以下を設定して「Next」を押します。

f:id:maxminkun:20160629074017p:plain

今回は設定せずに「Next」です。

f:id:maxminkun:20160629074152p:plain

今回は設定せずに「Finish」です。

f:id:maxminkun:20160629074312p:plain

一旦は「close」を選択します。

f:id:maxminkun:20160629074503p:plain

これが「SmartGit」の画面になります。

f:id:maxminkun:20160629075344p:plain

SmartGit で github のリポジトリを管理する

SmartGit の「Repository」-「clone」を選択します。

すると以下の画面が表示されます。

f:id:maxminkun:20160629075602p:plain

この「RepositoryURL」にgithub のリポジトリを設定する訳ですが、github の以下の場所にURLが記載されています。

f:id:maxminkun:20160629090523p:plain

この内容を入力して「Next」を押します。

するとgithub とのSSHで利用する鍵のファイル指定と、github にログインするためのパスワードを求められます。

f:id:maxminkun:20160629075848p:plain

管理対象について尋ねられます。一応、そのままで「Next」を押します。

f:id:maxminkun:20160629080151p:plain

最後に手元のPCで同期する場所を聞かれます。今後は、この中にあるファイルの内容が変更されると、それが差分の管理対象となります。

f:id:maxminkun:20160629080203p:plain

お疲れ様でした。これでgithub をGUIで操作可能となりました。

f:id:maxminkun:20160629080444p:plain

最新状態を手元に持ってくる場合は、「Pull」を選択します。

変更内容をgithub に反映させるには「Commit」を選択します。

この場合、以下の画面が出てきます。(Commit Messageを入力しないと、「Commit」と「Commit & Push」は活性化しません。)

f:id:maxminkun:20160629081119p:plain

この、CommitとPushですが違いがよく分からなかった・・・

ということで調べてみると、以下のサイトに説明がありました。(ありがとうございます。) qiita.com

つまり、簡単に言うと、

Commit:内部でバージョンを確定させた状態。リポジトリにはまだ反映していない。 Push:リポジトリへ内容を反映させる。

という違いでしょうか?(間違ってたりして・・・;)

これはgit 特有の考え方ですね;

まぁ・・・こういう風に、構成管理ツールは各々で特徴があるので、使いながら覚えるしかなさそうです。


最後に

今回はここまで!

ちょいと長くなりましたが、これで貴方もgithub星人ですね!!

それでは、adios!!