オールアバウトTech Blog

株式会社オールアバウトのエンジニアブログです。

オフショア開発の現地に行って作業・振り返りをしてきました!

こんにちは!オールアバウトでアプリケーションエンジニアをやっている @y_hideshi(ひでし)です。

オールアバウトではオフショア開発を行なっており、私は今年の5月にベトナムハノイ)で作業をしてきました。 そのため、今回は現地での作業内容や作業の振り返り話を書いていきたいと思います🤗

  • 現地での稼働日数:6日間
    • 2019/05/14(火) ~ 2019/05/21(火)

目次

作業内容

werckerからCircleCIへCIツールの変更を行ってきました!

オールアバウトではこれまでwerckerでGoogle Kuberenets EngineCompute EngineContainer Registoryソースコードやイメージのデプロイやテストを行なってきました。

allabout-tech.hatenablog.com

しかし、今年度からデプロイツールをCircleCIにするようになったため、CircleCIに対して知見を持っている自分が知見を広げる & 交流を図るためにベトナムで作業を行うことになりました。 どうしてCIツールを変更するようになったのか、なぜCircleCIを選んだのかはまた別の機会にお話しできればと思います!

f:id:allabout-techblog:20190902201049j:plain
CircleCIでGCP環境にデプロイ

現地での作業振り返り

今後のオフショア開発のためにも振り返りを行ってきました!💪

振り返り方法:ファン・ダン・ラーン(FDL) https://qiita.com/yattom/items/90ac533d993d3a2d2d0f

振り返りの方法として有名なものとしてKPTなどがありますが、今回はProblemよりも「何が楽しかったか」「どんなことに関心があるのか」「自分たちができたこと」を深掘りしていきたかったのでファン・ダン・ラーンを採用しました!

参加メンバー

  • ひでし
  • 一緒に行った先輩
  • オフショアメンバー:4人
  • コミュニケータ

振り返りの流れ

  1. 振り返り方法の説明
  2. タイムライン作成
  3. FUN/DONE/LEARNにカテゴライズ
  4. 感じている問題の洗い出し & 次へのTryを作成

タイムラインの作成

f:id:allabout-techblog:20190905143613p:plain
曜日ごとにあったことを書き出し、タイムラインを作成

曜日ごとにやったことや出来事を色々書き出しました!(書き出す際、業務外のチームビルディング的な内容も入れるようにしました) 画像だとわかりづらいので簡単に補足を入れます。

  • 火曜日(2019/05/14)
    • GCR・GKEの学習
    • CircleCIの学習
    • AAのGCPの構成理解
    • ペアプロ
  • 水曜日(2019/05/15)
    • Kubernetesの学習!
    • 初!CircleCIのyaml作成!
    • 初!飲み会!
  • 木曜日(2019/05/16)
    • stg環境にデプロイテスト
    • GCPKubernetesの学習が深まった
    • デプロイフローを知った
    • コーディング時、日本人が使う単語を知った
    • CircleCIの使い方 & Kuberenetsの再学習
  • 金曜日(2019/05/17)
    • 2つのアプリをstg環境にデプロイした!
    • 一緒にスムージー食べに行った!
    • 一緒にランチ食べた!
  • 月曜日(2019/05/20)
    • バッチアプリ用のCircleCIのyamlを書いた!
    • スパに行ってきた!
    • オールアバウト の日本人エンジニアの進め方や気にしているところを知った
  • 火曜日(2019/05/21)
    • gitでコミットをmergeさせる方法を学んだ!(git rebase -i とかですね)
    • ハノイで初デプロイ!

FUN/DONE/LEARNにカテゴライズ

f:id:allabout-techblog:20190905143706p:plain
FUN/DONE/LEARNに分類

真ん中の部分がFUN/DONE/LEARNが全て重なっている部分です!

CIツールをWerkcerからCircleCIに移行するにあたり、GCPKubernetesなどの知識が必要となったため、とても学びが多い週となりました!

内容の振り返り

FUN/DONE/LEARN

画像だとわかりづらいので一部紹介します!

  • GCPのプロジェクトやdocker・Kubernetesなどについて知ることができた
  • 実際にstg・本番環境にデプロイするためのCircleCIのyamlを書けた
  • git rebaseなどcommitをマージする方法について知れた
  • 他のメンバーがデプロイフローを知る・体験することができた
    • オフショア開発ではこれまでデプロイを行ったことがなかったので、この機会にデプロイを行ってきました

などなど学びが多くありました!また、上がった項目はFUN・LEARNに分類されるものが多く、現地のメンバーが楽しかったことや何に興味があるのか知ることができました!

今後、オフショア開発を進めていくにあたりデプロイフロー・方法を共有したり、デプロイしたという実績を作っておくことはとても大切だと思っていたので、無事に成功してよかったです。

また、業務内容とは別に下記のような声も上がりました。

  • みんなでスパにいこう!
  • みんなで遊びに行きたいね!

Problem & Try

学びもたくさん出てきましたが、課題に感じていることも出てきました。

  • GCP関連のパーミッションの設定で、権限が足りずクラスター情報などが見れなかった!
    • CircleCI移行などをしていくにあたり不便なのでなんとかしたい!
  • slackでチャンネル(ひでしが作成したチャンネルなど)に招待できない
  • CircleCIを移行するにあたり、簡単なガイドラインなどが欲しい
    • 具体的な作業はペアでやるので、ざっくり全体像を知るためにガイドラインがほしい...
    • 英語ですごく簡単なもので良いので、ガイドラインがあると新しいメンバーが入ってきた時にも説明するのが楽で助かる
  • お互いもっと英語を勉強してコミュニケーションを取って行きたい!
  • 自分の口で伝えたいことがある!
    • 現地のメンバーからひでしに伝えたいことがあったが、うまく伝えきれなかった
  • ハノイメンバーで新しい機能をどんどん開発して行きたい!

振り返りに対する所感

今回、ハノイで作業を行うにあたり準備が足りてなかったととても感じました。。。 特にCircleCIへの移行に関する資料に関しては圧倒的に準備が足りていませんでした😥

日本語の資料はあれど英語の資料などがなく、今後新しくメンバーが増えたことを考慮すると簡単なガイドラインを作る必要がありますね。

また、権限周りは今後オフショアを進めて行く上でとても重要なことですね。 例えば、デプロイ先のクラスター情報などが見れないとデプロイに失敗した際なども調査が行いづらくなります。 オフショア開発で作業を進めて行くにあたりどの権限が必要なのか、これらは相談しながら良い方向に進めていけたらなと感じています!

振り返りの振り返り

よかったところ😃

  • 何が楽しかったのか、どんな学びがあったのかを知れてよかった!
  • 各メンバーが課題と感じていることが共有できてよかったと思います!
    • コミュニケーションや進め方など、コミュニケータを通じてしかできない状況をなんとかしたいなど

よくなかったところ😓

  • 人数が多く、洗い出したカードをFUN/DONE/LEARNに分類するときにかなり時間がかかりグダった
  • もっとテキパキと進行できるように進めて行きたいですね
    • 付箋の剥がし方などもっとしっかり共有しておけばよかった...
    • 始める前に共有したけど、しっかりと伝わっていなかったのですぐに付箋が剥がれたりした
  • もっと英語能力を磨かなければならない...
    • ひでしは基本英語能力が低く、コミュニケータに頼りっぱなしだった
    • ファシリテートに限らず、コミュニケーションを円滑にしていくためにももっと英語で話せるようになるべき
    • ベトナムと日本で単語の発音が異なり混乱する
      • e.g.:CircleCI
        • ひでし→サークルシーアイ
        • 現地のメンバー→サィクルシーアイ

1週間:個人振り返り🤗

ざっくり下記の内容で振り返ります! 業務時間だけでなく、滞在期間も合わせると10日ほどハノイにいたので、全てまとめて振り返ります!

よかったところ😃

  • ホワイトボードを用いながらコミュニケーションを積極的に取りに行った
  • オールアバウトのCircleCIのyamlファイル、完全に理解した💪
  • 祝:ベトナムで初リリース😍
  • 予定していたアプリのCirlceCiのconfig.yml作成完了
  • 仕事や飲み会を通じ、現地の人たちと親睦を深められた!!🍻
  • GCPKubernetes、CircleCI周りの知見を伝えられた
    • 伝える上で自分の認識が甘かった部分を認識した
      • 特にservice account周りの知識が不足していたことがわかった
  • 同じようにベトナムで働いている日本人エンジニアと交流をすることができた!
  • ベトナム文化に触れることができた
  • 出不精で環境が変わることが嫌いな自分が、海外という離れた環境で働くというふうなチャレンジができた

イマイチだったところ・もっと改善できるところ😓

  • 圧倒的資料の不足😟
  • 権限の割り当て
    • slackのチャンネル設定
      • ひでしが新しくつくったチャンネルにオフショア開発 メンバーを招待できない...
        • ひでしのアカウントでは権限が足りず、作成したチャンネルにベトナムメンバーはジョインできなかった
  • GKEクラスターの情報などが閲覧できなかった
  • 自分の英語能力が低い...
    • 伝えたいことをあまり伝えられなかった...
    • コミュニケータ頼りはなんとかしないといけない
      • コミュニケータが体調不良で休むと詰むのでもっと喋れるようになっておくべき
  • CircleCI移行を進めていくにあたり、そもそもの前提条件を勘違いしていた...
    • Docker Imageの格納先など

ハノイに行ってみての所感

ハノイでの作業内容について

ハノイに行くにあたり目標の1つにおいていた「アプリのCircleCI移行(本番リリースまでやる)」が達成できました! ただ、yamlファイルを作成することはできたが、本番リリースまで行うことができないアプリもありました。

原因としては、準備不足と考慮漏れです。もっとCircleCIやKubernetes, GCPの構成に関する資料や今回の作業方針などを用意できていれば移行はできたのではないかと感じています。 また、実際に起こった権限問題などは日本にいる間にも考えて対策を取れたはずです。そのため、現地での作業内容などをもっと具体的にイメージし準備する必要がありました。

現地メンバーとペアプロをやってみて

CIツール移行作業を進めるにあたり、現地ではペアプロでタスクを進めてみました!ペアで色々話していると一緒に作業していないメンバーも話に入ってきたりなど好評でした!

しかし、ペアで進めたことによる弊害として、私が別のメンバーとペアを組むときに同じことを何度も共有するということがありました。そのため、モブプロを導入しようと試みましたが、うまく導入することができず結局ペアになってしまいました。。。

うまく導入できなかった理由としては、モブプロの進め方や目的などをうまく伝えられなかったこと・ひでしがやり方などをずっと話していたせいで、ドライバー以外の他のメンバーも手を動かしたいのに手を動かすことができず暇になってしまったからだと考えています。

もっとよくしていけること

今後改善していきたいポイントとして、オフショア開発メンバーのコミットの粒度やコミットメッセージ、プルリクエストの書き方なども変えて行きたいと思いました! 現在だとコミットメッセージが下記のようなものが多いので、もっとわかりやすいもの(やった作業の概要など)にしていこう!ということをメンバーに広げていけたらと思います!

実際にあったコミットメッセージ例

ブランチ名:update

その他

今回ハノイに行ったことで知らない文化に触れることができました!また、同じようにハノイで開発を行っている日本企業の方と交流することができ、オフショアの大変さや面白さなどを体験することができたのはとても良い経験になりました!

最後に

みなさん、ホワイトボードはとても素晴らしいアイテムです!

現地でコミュニケーションを図る時にとても活躍しました!GCPのプロジェクト相関図やKubernetesの構成は図に起こすととてもわかりやすくなります! また、他のメンバーも聞きたいことや伝えたいこと、コマンドなどをボードに英語や図で書いてくれたりするのでコミュニケーションが取りやすかったです!

ホワイトボードは日本人同士のコミュニケーションでも活躍するので、ぜひ使ってみてください!

f:id:allabout-techblog:20190902202124p:plain
ホワイトボードで伝えている姿