見出し画像

アフリカ系スタートアップのリモート開発環境

カナダはバンクーバーのエンジニア系留学エージェント、Frogのアドベントカレンダーの21日目の記事を書くよー!(説明口調)
Frogについてはこちら、他の方のカレンダーはFrog Advent Calendar 2018からどうぞ!

目次

・はじめに
・自己紹介
・会社
・リモート開発
 ・コミュニケーション
 ・ミーティング
 ・Slackでの禁止事項
 ・その他コミュニケーションの工夫
・開発環境(Slack)
・開発環境(Android)
 ・Kotlin
 ・Orma
 ・Retrofit
 ・Stetho
 ・Crashlytics
 ・Leakcanary
 ・CircleCI
・おまけ

はじめに

この記事では主にAndroidの開発環境について書きます。
Slackを用いたリモートワークについても少し触れます。

自己紹介

日本で組み込み系AndroidのSIerとして5年勤め、カナダへ留学し、カナダスタートアップ企業で数ヶ月経験しました。
アフリカ系スタートアップを天秤にかけた結果、いまは日本でアフリカ系スタートアップ企業のAndroidDeveloperとして活動しています。

あと念願の猫を飼い始めて、毎日ハッピーにリモートワークしています。
おかげさまでSNSが猫まみれなんですが、これ以上書くと記事の9割が猫の話になるので割愛します。

会社

まずどんなところで仕事をしているのかを紹介させてください。
弊社Afri-inc(株式会社アフリカインキュベーター)は2015年の8月に設立されたアフリカ系のスタートアップ企業です。
SENRIというSaaS系WebアプリケーションおよびAndroidアプリを提供しており、売上管理や在庫管理、営業スタッフのレポート管理などを行うことができます。

ケニア、ウガンダに展開していましたが、ナイジェリアへ参入し、順調に規模拡大を続けています。

日本人の社長や営業スタッフはアフリカに常駐しており、十数名におよぶ現地営業スタッフを抱えて活動しています。
日本はエンジニアのみで常勤は3名、お手伝いさんを合わせると10人弱のメンバーで日々リモート開発を行なっています。

ちなみに私は2016年10月からAndroidアプリの開発をお手伝いしています。

リモート開発

弊社はアフリカ、日本間のリモートワークを行なっています。
日本の中でも東京、大阪、静岡と離れた人たちでリモートワークしています。

いまは日本とアフリカ間のみですが、一時はシンガポールやカナダの人も交えて仕事をしていました。

コミュニケーション

基本的にはSlackを使ってテキストコミュニケーションを行なっています。
もちろんコールの方が捗るので、急を要する場面やサクっと話したいときはSlackやSkypeでコールしています。

ミーティング

週に1度、日本人スタッフ同士で進捗ミーティングを行なっています。ここでは開発進捗だけではなく、営業や現地スタッフの状況などを簡単に報告しあっています。
ようは情報のシェアですね、なにせリモートなので、テキストだけだとお互いの状況がわからないので。

年1くらいで現地のスタッフとも顔合わせしています。
今年は行けていないのですが、去年はアフリカに社員一同が集結する合宿なるものがありました。

(トップ絵はそのときのサファリ)

Slackでの禁止事項

Slackはスレッド機能やDM機能がありますが、この機能は一部プライベートなやりとりを除いて禁止しています。
理由は状況のシェアがCloseなメンバーでのみ行われてしまい、全体へ共有されずに現場の対応に混乱を招いたりするからです。

その他コミュニケーションの工夫

各個人に分報チャンネルを設けたりして、Twitterのようにどうでもいいことや進捗状況などを呟いたりすることで、リモートでもメンバー間の繋がりを持たせています。

また、スタンプやSlackのBotを作ったりすることで、テキストベースで遊びながらコミュニケーションをとれるようにしています。

スタンプは非常に便利なので、あまり活用していない方はどんどん作ると良いと思います。
ワンタップでリアクションできたり、意思表示できたりと非常に有用です。

開発環境(Slack)

Slackは単なるチャットツールだけではなく、いろんなサービスと連携しており、うまくエンジニア間、エンジニアと営業スタッフ間で連携がとれるようにしています。
GAS(Google Apps Script)や、Webhookを利用することで、リアルタイムに状況がSlackへ通知されるようになっています。

・クレーム報告
・お客様からのフィードバック報告
・Githubへのコミットやコメント通知
・アプリクラッシュ時の通知(Crashlytics
・Webのエラー通知
・CircleCIのテスト結果通知

開発環境(Android)

いろいろ使っているんですが、ここからは便利だなと思うツールを晒します

・Kotlin(利用方法リンクはこちら
・Orma(利用方法リンクはこちら
・Retrofit(利用方法リンクはこちら
・Stetho
・Crashlytics
・Leakcanary
・CircleCI

Kotlin

Javaを簡単かつ安全に書けるプログラム言語。
去年2017年の5月にAndroidの公式開発言語として発表されたのも記憶に新しいですね。

発表から翌年のGoogleI/O 2018では以下のように話されており、もはやAndroidDeveloper必須といえるでしょう。
私はKotlin使ってないプロジェクトには関わりたくないレベルです。笑
・35%のproの開発者がKotlinを使っている
・95%の開発者がKotlinで幸せだと言っている

少し古いですが、昔Kotlinの使い方をさらっと書きましたので参照ください。

Orma

Android用のORMライブラリで、SQLベースで簡単にAndroidにDBを実装することができます。
利用方法はQiitaのこちらにまとめているのでみてください。

ORMライブラリらしくDB操作を簡単に実装できる上に、RawQueryもかけるため、細かいパフォーマンスチューニングも可能でおすすめです。
例えば、画面表示時間を10秒以上から数十msまで落とす、といったことが可能です。

Retrofit

APIコールなどを簡単に実装可能なライブラリです。
もはや説明不要の便利ライブラリなんですが、利用方法はこちらのQiitaに書いているので一度みてみてください。

Stetho

端末をPCへ繋ぐだけで、DBの中身や通信内容をみれたりする便利デバッグツールです。
バグ解析や再現させるためにこれを使うことが多いです。OrmaはSQLベースなのでこのツールを使ってデータをみたりいじったりすることが可能です。

生のSQLを打って結果をみたりもできるので、Query文があってるかなどの検証に使ったりもしています。

Crashlytics

Androidアプリがクラッシュしたときに自動的にクラッシュ内容を通知してくれるWebサービスです。
閲覧はWebサービスから可能で、弊社の場合はクラッシュ通知がきたらSlackへ通知されるようにしているので、すぐに対応できるようにしています。

お客さんに逃げられないようにするためにも、いちプロダクトとして必須なライブラリかと思います。

Leakcanary

メモリリークがわかるライブラリです。
このライブラリを導入して機能をONにするようにコードを書くと、apkインストールと同時にLeakcanaryがインストールされ、メモリリークが発生するとこのLeakcanaryアプリ経由で見ることができます。

特にアフリカというフィールドではスマホスペックが何世代も昔なので、メモリの枯渇はサービスの死亡を意味するので、それを検知することは非常に重要です。
弊社の場合はflavorとしてdemo版とproduction版を用意しているので、demo版(内部向け)のときのみ有効にするようにしています。

CircleCI

有名な基本無料のCIツールで、例えばGitHubでコミットしたら自動的にユニットテストやUIテストをかけて結果を教えてくれます。
もちろんSlackにも連携可能で、結果をSlackに通知してくれたりもします。

ちなみにまだ弊社はこれから導入するので、あまり知見はありません!
(要約:たすけて)

おまけ

会社の様子と自宅作業の様子をここで。
弊社オフィスは大岡山にあり、リモートだけども近くに住むエンジニアはたまにこのオフィスに出没します。
私も週2〜3で行くようにしています。

これはオフィス風景と私の作業デスク

そしてスタートアップ感あふれるダンボール扉。
この奥には1畳の寝室(笑)があり、お昼寝できます。

そして私の自宅の作業机と、誘惑してくる猫で〆


この記事が気に入ったらサポートをしてみませんか?