GitHub勉強会を開催するので,git/GitHubについて書きました

本記事は,ICT Advent Calendar 2016 16日目の記事です.
昨日はホワイトハッカーズの一員ブロンズ (id:blazblack0066) でした

ホワイトハッカーズ、わたしも大好きです
老害s とは違った良さがあると思います

blazblack.hatenablog.com


タイトルだけを回収したい人はこちら

お前誰よ

老害のひとりです!!!!!!

だけで終わっても良かったかもしれないんですけど,もう少し書きますね

「まだ就職しちゃだめ.もっと精神的に大人になってから(とりあえず大学行ってから)就職しなさい」
by m教授(id:m_kyoujyu

と言われて,進学したタイプの人間です
わたしみたいなことを言われた人って今の ICT 部員にいるんですかね
そんなアホな先輩にはなってはいけませんよ〜

あとは,ICT委員会委員長に就任したりし(id:dk010riri)のいとこです
りしの小さい時の話とか聞きたかったら,いつでもきいてください


思い出しましょう,プロジェクトについて

プロコン・・・それは本当に大変でした

  • 迫りくる納期
  • 意志疎通がしづらくなる
  • ドキュメントがバラバラになる
  • やらなきゃいけないことの見える化ができない
  • 自分の環境では動くのに相手の環境では動かない
  • イライラしていくチームメンバー
  • 結合しようとしたらなぜかうまくいかない・・・

一瞬でこんだけのことが出てきたので,たぶんみんな色々と辛い思いでありますよね(PCK含めその他の大会も同様)

はるか昔,わたしが高専生の時は,チームのソースコード一式を Dropbox で管理していました
Dropbox って勝手に同期してくれるし便利ですよね!ソースコード管理じゃなければ


『にゃおちゃー,最新版あげたよ.TxgaTxga_013』
「はい,了解です」

〜数分後〜

「これ,動きませんよ」

みたいなことがあって,その動かない原因と言うのは

  • 相手と自分の環境の差
  • 最新版を上げそびれている
  • バグを仕込んだまま上げた
  • 相手がDropbox に接続できていなくて旧バージョンと勘違いしている

など,色々ありえます.
色々ありえすぎて,それを一つ一つ確かめるのは地獄です

こういう経験をしたことのあるICT委員会の学生はいるんじゃないんですかね(よくないことなんだけどね)


良くないとわかっていたけど解決できなかった

別に Dropbox が悪いわけじゃないけど,声を大にして言えることはDropbox はチームのソースコードを管理することには向いていない」です
ソースコードではなく適切な使い方をすれば Dropbox は,個人/チームでは有意義に使えると思います

高専生の時のわたしも GitHub という単語を知っていて,それを利用するとチーム内でのプロジェクトを管理がしやすいみたいな認識はありました
漠然と「GitHub すごい!(何をするものなのかよくわからない)」みたいな人でした
GitHub にまったくチャレンジしなかったわけではないのですが,当時のわたしは

  • git と GitHub が混ざってよくわからない概念のものに見えた
  • add / commit / push などいろんなコマンドが多くてわからない
  • そして git 入門に失敗
  • まあ別に git を覚えなくても,別にプログラムは書けるじゃんと思った
  • git を覚えるコストよりも,他のことしたくなった
  • GitHub が沖縄高専のネットワーク環境で繋がらなかった*1

という感じでした
git と GitHub の違いがわからなかったの普通に恥ずかしいですね…
一番下の理由とかも結構致命的ですね,沖縄高専のネットワーク事情厳しすぎる…

そういうわけで,毎年Dropbox でプロジェクト炎上させながら,つらいつらいって言ってました
本当アホだと思います


小休憩

git とか GitHub って何?という人向けなので,オッケーだぜって人は次の章へどうぞ
注意:すごくざっくりした説明をするので,なんとなくそんな感じなんだで受け取ってください

git

gitは、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。

git - Wikipedia

と書いていますが,簡単な例を出します

たとえば,hello.c ファイルを作成し(めんどくさいので一部だけ書いてます)

printf("Hello, World\n");

という内容のファイルを保存し,ファイルの変更を git で記録します
この状態を [v1] と呼ぶことにしましょう

そして,その後にビックリマークをつけたいな〜とか思ったときに hello.c を

printf("Hello, World!!!!!!!!\n");

に変更します

けど,なんだか気に入らないなあと思ったときに,git を知らない人は hello.c を編集してビックリマークを消すと思います.
git を使う人だと,前のバージョンに戻すと考えます!
hello.c ファイルを [v1] の状態に戻すことで,

printf("Hello, World\n");

を得ることができます

ちゃんと動いていた前のバージョンに戻せることって本当に大事で,例えば hello.c を編集する際に間違えて

printf("Hello, Worldn");

だったら,元のプログラムと変わってしまいましたよね(改行コードが消えた
そういう心配をせずに,ちゃんと動いていた前のバージョンに戻せることって大事なんです

これは git の変更履歴を記録することができる機能の一部を使っただけで,他の人とのソースを結合する(merge)ことや,自分の書いたソースをみんなに届ける(リモートリポジトリにpushする)仕組みなど,いろいろあります
いろんな機能を使っていって,古いソースコードと新しいバージョンのソースコードが入り交じる*2みたいなことが絶対に起こらないようにするのがgit です


GitHub

GitHubはソフトウェア開発プロジェクトのための共有ウェブサービスであり、Gitバージョン管理システムを使用する。

git - Wikipedia

git を一人開発でモクモク使うには困らないけど,複数人で開発しようと思ったらリモートリポジトリというのが必要です
これまたざっくりした説明になるんだけど,ICT の開発で言うと,リモートリポジトリというのは,誰かが頑張って手動でくっつけたソースコードたち(プロジェクト)って言えばいいかな
各々が書いたソースコードを集めるところです

このリモートリポジトリをホスティング(提供)してくれるサービスが GitHub です
みんなのソースコードをまとめたり,ソースコードの遍歴をいい感じに見れるだけではなく,いろんな機能がプロジェクト管理をアシストしてくれます

例えばプロジェクトごとに Wiki があるので,ドキュメントもそこで管理できます
もちろんWiki の変更履歴も全て残ってくれます(誰が・どこを改変したかわかるし,もちろん過去の内容に簡単に戻せる)
あとは,Issues というのがあって,この仕事はあなたの仕事ですと押し付ける(明示する)ことができます
どれもとても大事で,GitHub 上のコミュニケーションはとてもしやすいので,その点でもとても恩恵を受けています(下で実際の例を書いてます)

というわけで,ざっくり git と GitHub について紹介しました


git・GitHub をどうして使えるようになったか

5年生の頃に,老害組でちょっと開発したことがあって,まるさおぢさん(id:maruuusa83)に怒られながらGitHub を使ったのがはじめてです.
あのときは本当にいっぱいいっぱいで,コマンドの指示を受けつつといった感じで開発をしてました

そして進学後,インターン先でプロジェクトを一人で開発しないといけないことになり,そのときにまるさに鍛えられたことを思い出しながら GitHub を使いました
GitHub の恩恵が最大限に受けれるのは,チーム開発だと思いますが,初心者のわたしは一人で黙々とソースコードを管理することからスタートしたので,少しずつ使い方を覚えることができました

大きく仕様を変更したいときでも,commit しておけば安心です
過去のわたしは,プロジェクト一式をコピーして「project 2」を作って〜ということをしていたけど,もうそんなのとはおさらばしました


git・GitHub を使えるようになって思うこと

進研ゼミではありませんが,GitHub をもっと昔から使えておけばよかった」と思います

プロジェクトではないけど,今まで書いた競プロのソースも全部 GitLab にあげました*3
今まではローカルにだけ置いていたのですが,バックアップの気持ちも兼ねて
もちろん競プロのコードを書いているとき*4にも便利で,思いっきり方針変えたいと思ったときに,とりあえず動いているバージョンを保存しておいて,迷走したら戻れるみたいなことができます.便利〜

インターンの後,バイト先でも GitHub を使っていて基礎は覚えていてよかったと思いました
GitHub ではなくても,GitLab などの類似するサービスを使う会社は多いので,GitHub を覚えておくのは全然悪いことじゃないと思います


バイトを辞めてからは,研究でずっと使っています
GitHub を使うタイプのイケてる(?)研究室だったので,先生にプログラムを見せる時とか,あとは進捗報告で使う資料も全部GitHub にあげています

「オレ,進学予定でまだまだ就職しねーしwwww」
と思っている人も,もしかしたら進学先の研究室で使うことになるかもしれないですよ

たぶん一番恩恵を受けているのは,TeX で論文を書いてるときですね
先生からたくさん降ってくる修正の嵐の中で,たまに「やっぱり前のバージョンがいい」と言われることもあり,そういうときは完全にgit が生きてきますよね
git がないと論文かけません!


あと,kosenconf100 や kosen10s でもGitHub は使っています

GitHub - kosenconf-2015-tokyo/kosenconf: 高専カンファレンス2015東京
kosenconf100 は,主にWiki で使用しました
あとは,たまにIssue と 高専カンファWiki の更新内容をどうしようかという感じで相談してました

10s でも同様に,別にソースコードが必ずあるわけではなく,Wiki やIssue などをメインとしてイベントの管理をしています
GitHub はコミュニケーションがしやすいです

f:id:marin72_com:20161215195614p:plain

本当に楽に意志が伝えられられますね


沖縄高専GitHub 講習会を開催します

やっとここでタイトル回収です
きっとここまで読んだ人は「GitHub やってみたい!」と思ったかもしれません
そして,沖縄高専生はラッキーチャンス!
沖縄高専GitHub について勉強することができます(´灬`)

はいはいただの GitHub 講習会でしょ〜(笑)ではなくて,
GitHub の中の人(@diceさん)が沖縄高専生に教えてくれます!!!

ちなみに,ICT委員会だけではなく,誰でも参加できます!!!
こんな機会,めったに無いと思います
本当にやったぜって感じですね


重要なお願い

スムーズなGitHub 講習会のために,環境構築は事前にやってきてください

Windows

  1. GitHub デスクトップをダウンロードしてインストール(GitHub Desktop - Simple collaboration from your desktop
  2. git-itをダウンロードしてインストール(Release Updated Dependencies · jlord/git-it-electron · GitHub
  3. GitHub アカウントの取得

mac

  1. GitHub デスクトップをダウンロードしてインストール(GitHub Desktop - Simple collaboration from your desktop
  2. Command Line tools 入れる(ググってできなかったらおりさの大先生(id:orisano)に聞く)
  3. git-itをダウンロードしてインストール(Release Updated Dependencies · jlord/git-it-electron · GitHub
  4. GitHub アカウントの取得

他のOS の人たちは各自でできるとおもいます
基本的に,わからなかったら,成功したICT委員会の人に聞いたり,環境構築の神(id:orisano)に聞きましょう
がんばってください


場所と時間

詳細
日付 12/22(木) 学校最終日
時間 16:30 - 18:30
場所 2階プログラミング演習
持ち物 git をインストールしたパソコン
GitHubアカウント(持ち物なのか…)
連絡 申込みとかは特にないです
そのた やってみたい気持ちが大事!

基本的に4限が終わったら,演習室に来るという感じで大丈夫です
もし環境構築成功したか心配な人とかいたら,講習会の前に確認します


最後に

git / GitHub の使い方を覚えるのは,プロジェクトを管理する上で重要なことです
プロジェクトの管理って,別にプログラミングのレベルとかって関係ないんですよね
1年生だからやめておこうかなとか,ICT委員会の人じゃないしなーと思わずに,誰でも参加できるのでぜひ来てください!!

あ,あと,一応勘違いされないように書いておくと...
GitHub はプロジェクトを管理する便利なサービスだけど,これを使えば炎上しないのかってのは別の話で,結局みんなで頑張って開発することが炎上しない一番の解決方法で,チーム開発の上でのヘイトを減らせられるってものだからね
炎上しないように開発がんばってね!!!!!!!!


はい長い記事もこれで最後〜
卒業してから一度も沖縄高専に帰ってなかったのですが,GitHub講習会に行きたいので沖縄帰ります
12/22,ぜひいろんな後輩ちゃんとお話できればな〜と思います(お土産だけ食べに来ても良いよ
よろしくおねがいしまーす!!!!!

*1:沖縄高専のネットワーク環境はとても厳しいので,いろいろと自分で設定できるぐらいの知識が必要だった

*2:2011年の競技プロコン辛かったね

*3:GitHubに近いインターフェースで使いやすく,自分のサーバ上にGitLabを構築して使用する.全リポジトリプライベートにできるのが嬉しい

*4:大学入学した頃にまたちょっとやったけど,最近はめっきりですね