- 株式会社シロク
- エンジニア
- 鈴木 朝子
ベンチャー企業の業務効率化に コードレビューを仕組み化できるOSS「GitLab」とは
今回のソリューション:【GitLab/ギットラボ】
「GitLab」は、GitHubのようなリポジトリ管理ツールを、自社サーバーなどのクローズドな環境下に構築できるオープンソースだ。GitHubに近い構造を持ち、バージョン管理、コードレビュー、IssueやWikiといった機能を備えている。
無料で使うことができるので、ベンチャー企業などシステムにコストをかけられない企業にとってはひとつの有効な選択肢となる。
サイバーエージェントに新卒エンジニアとして入社した1年後に、グロースハック支援ツールを提供する株式会社シロクに異動した鈴木 朝子さん。鈴木さんがシロクに入社してまず驚いたのは、同社にはサイバーエージェントのようなコードレビューの仕組みがなかったことだ。
そこで鈴木さんはGitLabの社内導入を行い、その結果、エンジニア同士でレビューをし合う社内体制を整えることができたのだという。「GitLabは、『お金はかけられないけれどコードレビューを仕組み化したい』という企業には一番いい選択肢なのでは」と語る鈴木さんに、詳しいお話を伺った。
▼GitHubライクなバージョン管理システムを構築できる「GitLab」とは…?
サイバーエージェントに新卒エンジニアとして入社
2014年にサイバーエージェントに入社して、コミュニティサービスのサーバーサイドエンジニアを務めた後、2015年の4月にシロクに異動しました。現在は 「Growth Message」というアプリ内のメッセージ配信・解析サービスのエンジニアをしています。
元々学生時代からWebサービスに関心があって、趣味でWordPressを使ってフロントエンジニアのような実装作業をしていました。その延長でインターンシップなどに参加する中で、せっかくならサーバーサイドもやりたいな、と。それがエンジニアとして就職しよう、と思った理由です。
スタートアップのチームへ 「コードレビュー」の仕組みがない!
新卒入社して最初に配属になったのは、Amebaのコミュニティサービスでした。サーバーサイドのエンジニアが5名ほどいる、比較的大きなチームでしたね。開発周りのシステムも整っていましたし、リポジトリ管理にはGitHub Enterpriseを使い、お互いにコードレビューをし合うことが当たり前の環境でした。
シロクはまだ、スタートアップフェーズでベンチャー感に溢れていることもあり(笑)、私がシロクに異動した時は前のチームのようなコードレビューの仕組みはなかったんです。
Gitサーバーはあったのですが、コードレビューに関してはSourceTreeを使って差分を確認して、口頭ベースで「ここは直した方がいいよ」というようなコミュニケーションを取ることに留まっていました。
GitHubを使ってレビューをし合うことに慣れていたので、最初は少し戸惑いました(笑)。レビューがあった方がクオリティもあがると思っていたので。
そこで「GitHubのようなコードレビューの仕組みを入ませんか?」と提案したところ、そのような話は何度か出ているものの、導入のための時間を作ることがなかなか難しかった背景があったと。そこで私が中心となって、導入プロジェクトを進めていくことになりました。
コストをかけずにリポジトリ管理ができるGitLabを選択
シロクはスタートアップ企業のため、高額なサービスを簡単に採用することができません。そこでOSSとして提供されているリポジトリ管理ツール、GitLabを導入することにしました。
GitLabを自社サーバーにインストールし、管理したいリポジトリを指定するだけで、GitHubライクなシステムを構築することが可能です。
GitLabを使うと、機能的にはGitHubとかなり近い仕組みをつくることができます。リポジトリ管理やPull Requestのようなコードレビュー、IsuueやWikiといった機能がありますね。今ではシロクのエンジニアは全員が使っています。
UIは少し違いますが構造的にはGitHubと変わらないので、元々GitHubに慣れている人でも問題なく使いこなすことができています。
▼「Merge Request」の機能を使うことでコードレビューも可能
既存のサーバー構成をできるだけ変えずに、新しい仕組みを導入
GitLabを導入することを決めてから実際に稼働させるまでには、通常業務と並行で作業をして1ヶ月ほどかかりました。最初は自分のローカル環境で動かしてみたり、AWSにテストサーバーを立てて、そこで既存のリポジトリが正常に動くかをテストしていきました。
一番大変だったのは、リポジトリの参照先の変更です。元々の構成として、ソースコードを管理するベアリポジトリはサービスが稼働しているサーバーとは別の場所にありました。
デプロイ時には、ベアリポジトリにコミットされた内容を、本番環境のノンベアリポジトリにPullすることで変更を反映しています。
ただ、GitLabの制約として、管理するリポジトリはすべてGitLabが動いているサーバー下に配置する必要がありました。でも本番環境がペアリポジトリを参照している構成だと、ベアリポジトリの場所の変更が難しいという点が問題になります。
例えばデプロイに使っているJenkinsがベアリポジトリを参照しているので、その部分も含めて色々な場所で設定を書きかえなければならないんですね。
そこで、既存の設定を書きかえる手間を省くために、今までのリポジトリからGitLabのリポジトリへのシンボリックリンクを設定することで対応しました。
ただ、シンボリックリンクだとPullのようなReadの操作はできるのですが、PushなどのWriteの操作ができないという問題があります。
GitLabの仕様として、GitLabに登録しているユーザにのみWriteの権限が与えられるのですが、シンボリックリンクによる参照ではその権限が与えられません。
JenkinsのようなサービスならRead操作のみなのでシンボリックリンクで対応できるのですが、エンジニアがコーディングしたものをPushすることができなかったんです。
そこで、最終的には各エンジニアのローカルリポジトリの参照先を、GitLabを直接見るように変更してもらうことにしました。こればっかりはしょうがない、ということで、ある日の定時後に移行をはじめて、次の日に全員の参照先一気に変えてもらいました。
今後も業務の整理・効率化を行っていきたい
GitLabは、弊社のようなスタートアップフェーズの企業で「お金はかけられないけれどコードレビューを仕組み化したい」という企業には一番いい選択肢なのかなと思います。
リポジトリ管理だけなら他のプロジェクト管理ツールもありますが、GitLabを使うとコードをレビューする仕組みもできるので、コード品質の向上にもつながります。
実際に導入したことで、後からバグが発見されるといったことも減りましたね。そして何より、レビューがきちんと行われるようになったことで安心感が倍増しました(笑)。
今後はGitLabをもっと活用して、Issueを使ったり、Slackと連携させるなど、より使いやすく整えていきたいと思っています。 そしてコードレビュー以外にも、社内で仕組み化されていないフローや仕組みをどんどん整備していきたいですね。
ドキュメントが様々な場所に点在していたり、プロジェクト管理ツールも導入後使いこなせていなかったりするので…(笑)。
社内の体制を少しずつ整えて、開発しやすい環境を作り、サービス品質の向上に貢献できればと思っています。(了)