GitLabに触ってみて、GitHubと比較した

会社でのローカル環境で利用していたGitLab, てっきりGitHubのローカライズ版かと思っていましたが、GitHubのマイクロソフト買収話をきっかけに公開webサイトもあると知りました。
知ったのは結構前ですが、なぜか今日急にwebサイト版のGitLabを試してみたくなったので、触ってみた感想を記載します。

## 感想の前に: ざっくり導入の説明

### アカウント作成

1. [GitLabページ](https://gitlab.com/users/sign_in)からサインイン。新しくアカウントを作るもよし、SNSやGitHubのアカウントを使ってログインも可能です。
2. アカウントの設定。右上のアイコン⇒Settingsでアカウントの設定が出来ます。
真ん中の画面はTOPのようなもので、各設定項目は左側に一覧が出てきます。(個人的にはちょっとわかりにくい）

### リポジトリ作成

GitHubを使っている人としては、リポジトリの作成は凄く楽だと思います。

1. リポジトリを作成。左上の狐みたいな狸のアイコン(あれ好き)でTOPに飛ぶと、New Projectのボタンがあります。そこからproject(=リポジトリ)を作成してください。
2. コードをコミットすればOK。特に元々GitHubのリポジトリがある人は以下でOKなので楽ちんです。

```
#リポジトリのclone
git clone GitLabのリポジトリ
cd GitLabのリポジトリ

#GitHubのURLリンクしてpull
git remote add github GitHubのURL
git pull github

#GitHubコードのブランチを作成
git branch github github/master 

#GitHubマージ
git merge  github

#push
git push -u origin master
```

空でのマージが出来ない場合は、一旦空コミットをしてrebaseしてからマージしてください。

```
#空コミット作成
git commit --allow-empty  -m"1st commit"

#rebase
git checkout master
git rebase master github

#GitHubマージ
git checkout master
git merge  github
```

これでリポジトリの移行も完了！

2019/10/03追記

hiroponzさんコメントより、GitHubからの移行なら、以下で丸っとインポートできます。

>GitHubを使用している場合は、「New Project」→「Import Project」→「GitHub」で、リポジトリ以外にも「Issue」と「Pull Request」と「Wiki」も一緒にインポートできて便利です。

コマンドベースの操作だと、自前のローカルリポジトリを移植する際に使えるのが良いです。また、本記事の記載方法だとmasterブランチのみなので、[全ブランチ、タグを取り込む方法](https://qiita.com/developer-kikikaikai/items/b9e4fe4337bae3eab01b)もまとめました。

## GitLabを少し触ってみた感想

### とりあえずGitHubで普段使う機能は大抵ある

GitHubで便利だなと思った機能は大体あります。
ただUIが大分小洒落た感じでいいですが、操作感はあっちこっちにタブが飛ぶのがちょっと苦手。好みの問題ですが、若干設定・機能を探しにくい感はあるかなと

### 各種SNSアカウントでのログイン可能

**GitHubも含め**、各種アカウントでのログインが利用できます。GitHubが使えるのはでかいですね。

### リポジトリ

#### グルーピングが出来るのがいい

GitLabは自分でグループの作成が出来るので、リポジトリをまとめやすい分管理がしやすい気がします。
こんな感じ。
https://gitlab.com/design_pattern

もしかしたらGitHubでも似たようなことが出来るのかもしれませんが、グルーピングの仕方がわかりやすいのでここが一番GitLabいいな～と思った点です。

#### 無料版でもプライベートリポジトリを作ることが出来る

2018/08/28追記
本記事を作成した時には気付いていなかったのですが、GitLabはプライベートリポジトリの作成が出来るんですね。リポジトリ作成の際に公開範囲としてプライベート、内部(GitLabユーザーへ公開)、パブリックの3種類が指定できます。
<img width="1000" alt="private_repos.png" src="https://qiita-image-store.s3.amazonaws.com/0/252277/726a3249-4ecc-3d85-4618-7f96b4b28a82.png">

~~GitHubは無条件全体公開なので、この機能はデカい！~~
2019/02/12追記
ちょっと前からGitHubもプライベートリポジトリが制限つきで出来るようになりましたね！
個人で使う分には遜色なし。wikiが使えないといった機能制限がちょっと悲しいですが
[GitHubが無料でプライベートリポジトリを無制限に作れるようになったぞ☆](https://qiita.com/wagase/items/4ed3e9998848cfa733be)

#### そもそものプロジェクト・リポジトリに対する考え方が違う

2018/09/01 追記
GitHub, GitLabどちらもプロジェクトを作成して、その中でissueによるタスク管理が出来るのは共通していますが、このプロジェクトに対する考え方が違います。

GitHub⇒**gitリポジトリ管理が第一**、プロジェクト作成はリポジトリ管理の為の1機能です。
GitLab⇒**プロジェクトの作成が第一**、プロジェクト管理の為のメイン機能としてgitリポジトリが利用出来る
という感じ。なので、GitLabには例えばスニペット(コードのパーツを貼り付けて使いまわせるようにすること)のようなリポジトリ管理とは関係ないけどプロジェクトとして有用な機能がついていたりします。

[GitLab大好きな方のブログ](http://blog.chaspy.me/entry/2018/02/17/120000)にGitLabの考え方等が載っているので、興味のある方は参照ください。

この思想の違いに関しては優劣はないとは思います。目的によって合う合わないがあるので。
ずっと同じコードを成長させていくプロジェクト⇒GitHubのプロジェクトが使いやすいだろうし、
逆にハードの違いに合わせてコードも変えるようなプロジェクト⇒GitLabのプロジェクトが使いやすいと思います。

### 実行スクリプトを定義できるのが凄い

触っていて一番気になったところ。リポジトリの**CI/CD**という項目は、何やらjob実行のようなことが出来るようなことを書いています。
てことはコミット後の自動テストなんてのも勝手にやってくれるの？すげーな

実際にDockerイメージを作成⇒ビルドやテストの自動化を実施している人がいました。
https://qiita.com/bremen/items/f47f383b9931a840a25c

また、github.ioのようなGitLabドメインを取得する方法も、こちらを利用しています。
https://about.gitlab.com/features/pages/

参考はこちら。既存のdomainページ作成用リポジトリをforkしてきて、pipeline機能を利用してページ作成処理を走らせています。
https://www.youtube.com/watch?v=TWqh9MtT4Bg

なにこれかっこいい！

### wiki

#### すっきりとした表示

見せ方がすっきりしているので、文章は読みやすく、張り付けたコードはちょっと見にくいです。(個人の感想です。

#### なんかやたら重い

GitHubだとサクッと開くのに、なんか重い気がします。(個人の感想です。


## GitLab vs GitHub 感想

|項目|比較|感想|
|:---|:--------------|:---|
|機能|GitLab > GitHub|GitLabはGitHubの機能は踏襲しつつ、Dockerとの連携など追加機能が力強い印象です。|
|リポジトリ|GitLab >>> GitHub|GitLabはグループ・プライベートリポジトリが作れるし、リポジトリの見せ方もすっきりしているので「これいいな」ってなります。|
|UI|GitLab < GitHub|GitLabの見た目はいいけど、目があっちこっち行くので苦手。|
|Wiki|GitLab < GitHub|見た目は一長一短ありますがGitLabは重かったので。うちの回線が貧弱すぎるだけかもですが。|
|総合|GitLab > GitHub |リポジトリの扱いへの自由度がGitLabの方が大きいです。一から使う && 普通の回線ならGitLabの方が触ってて楽しいと思います。|

自分はというと、会社で結構な期間使っているのにまだUIに慣れないので、本格移行するとしてもGitHubで一通りやりたいことをやってからかな。
プライベートリポジトリを使いたい時はガンガン使っていきます。

## 参考

[「GitLab実践ガイド」を読んだ](http://blog.chaspy.me/entry/2018/02/17/120000)