Ich habe hunger

あふりかエンジニア、アフリカ向けのB2BのSaaSを開発する

ウガンダな環境で働くエンジニアも少し増えた

sugi511.hatenablog.com

以前、この記事を書いたおかげで何人も、と書くと大げさだけども色んな方からお声かけいただいたり、こっちが声かけたりして少しエンジニアが増えました。本当にありがとうございます。

まだまだ、僕自身が未熟なのもあって恩返しをきちんと出来るかは分かりませんが、一緒に手伝ってくれる人には気持ちよく働いてもらえるように頑張りたいです₍⁽⁽(ી(*´ω`*)ʃ)₎₎⁾⁾

人が増えた分見ないといけない部分が増えたりして、前より適当にながせる部分が少なくなってしまったのですが、その分実装の分担も出来るし、相談もできるし、めちゃ心強く感じているここ2ヶ月です。まだまだノリノリではないですが踏ん張りどころだと思って頑張っていきたいです。

そ・し・て!!

前回の記事を書いてからも、しばらく予防接種を受けてなかったんですが、

「てか、いつウガンダ来るんすか?」

って2月末に代表に予防接種さぼってたことを察知されたので、そっこーで行ってきました(っ・ω・)っ

ぽんぽん打てるもんじゃなくて1ヶ月待たないといけない・・・とか10日後じゃないとこのカードは生きない、とか色々あるんだなーって感じでした(そして予防接種高くない?いや、身体を守ると思うと安いんだけど)


そんな感じでウガンダに5月末ぐらいに行けたらいいなー。あー、航空券取らないと。

時間が出来た訳ではないが

最近やっと、Railsのプロジェクトでテスト書き始めた。

テスト書くために、メソッド見直してるとリファクタリングできそうなのがたくさん・・・(っ・ω・)っ

データが増えてくると遅くなるものもあるだろうし、複雑なロジックのは一旦後回しにして、シンプルなやつからこなしてテスト書く習慣をつけよう。

「社長と経営者は違う。その差はなにか」

diamond.jp

社長ではなく経営者にならなければ株主や従業員、あまたのステークホルダーへの責任を果たせない。

 その弱い会社の経営者の最大の任務は、「見切り」だ。見切りこそが、結果責任だけの社長を経営者に変えると言ってもよいほどだ。

 だから基本的には出たとこ勝負だ。それを猛烈なスピードで繰り返す。そしてダメだと思ったら即座に見切る。それを促す覚悟に満ちた経営者の力こそが、小さな企業が大きな企業に負けない力だ。

自分の認知の範囲での情報に基づいた結論付けをするのが判断だと思っているけど、ここで出てくる「見切り」というのは自分の認知外も含めたものに対して覚悟を決めた上で行う決断なんだと思う。

決断というのは、どうしても論理的に正しくなかったり、先が見えづらいものであるけども、自身の責任においてその選択を実行するというのが決断。この決断は失敗することもあるけど、その失敗した時に何が失敗したのか兆しは見えていなかったのか、など集中し振り返ることを繰り返すことで研ぎ澄まされてある種の超能力のように見える第六感のようなものが身に付くのだと思う。超能力欲しい。

rubyで初心者が間違いそうな間違いしてしまった(まぁ、初心者みたいなもんだけど)

あるあるなのかもしれないけどやってしまった。

RailsでUserモデルがあって、そこにenumでrolesみたいなのを定義している。
しかし、roles内にあるadmin権限は我々スーパー管理者しか触れないようにしたい。
なので、一般ユーザーには目に触れもしないようにしたいため、こうしていた。

    %tr
      - User.roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, User.roles.map{|r| [r[0], r[0]]}

が、しかしこれをするとUserモデルのrolesから:adminから消し去ってしまって、二度と出て来ない。
つまり、スーパー管理者の編集画面ですら:adminの設定が見えなくなってしまって、admin権限を持つユーザーを作成することができなくなってしまった。


さすがにこれはまずい、と以下のように修正した。

    %tr
      - roles = User.roles
      - roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, roles.map{|r| [r[0], r[0]]}


が、問題は解決されない。
で、なんだろうと思ったがこれにも問題があった。

User.roles.object_id
roles.object_id


と調べてみると同じobject_idを保有している。ので、deleteをrolesにかけたところでUser.rolesから:adminが消え去る現象は改善されない。
つまり同じオブジェクトに操作していることになっているので、cloneする必要があるので以下のようにした。

    %tr
      - roles = User.roles.dup
      - roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, roles.map{|r| [r[0], r[0]]}


が、実はこれにも問題(以下略

結論から言うと、今回はこれでOKなんだけども、

User.roles[:admin].object_id
roles[:admin].object_id

は同じなので、実はまだヤバい。
rolesの中から(インデックスとして)消し去るだけなら良いんだけど、:adminの持つ値を自体を変えるとUser.rolesの中の:adminの値まで変わってしまうことになるっぽい。

    %tr
      - roles = Marshal.load(Marshal.dump(User.roles))
      - roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, roles.map{|r| [r[0], r[0]]}

じゃあ、どうすんだよ!って話なんだけど、こうすると良いっぽい。


参考はこちら

qiita.com

SMSデータテックに遊びに行ってきました₍₍⁽⁽(ી(*゚▽゚*)ʃ)₎₎⁾⁾

株式会社SMSデータテック | SMS Data Tech Corporation.

友人の職場訪問って面白いですねw

開発室の一つを見せてもらったのですが、5人ぐらいの部屋できちんと区切られていて静かだしめちゃめちゃ仕事しやすそうでした!ああいうのうちの会社にも欲しーーーと思ったけど、ウガンダだし、東京に居るメンバーはリモートなのでそもそも不必要でした(´・_・`)

Pepperのブログも書いてるし、社内にPepperが居るのは知ってたんだけども、見せてもらった開発の部屋に2体も居るとは思いませんでしたw

dev-pepper.blogspot.jp



まともにPepperで遊ぶの初めてだったんですが、とりあえず年齢を測ってもらいました!

f:id:sugi511:20160209170755j:plain


見た目30歳超えてる僕としては最高の結果が出ました₍⁽⁽(ી(*´ω`*)ʃ)₎₎⁾⁾

ウガンダな環境(@日本)で働きたいエンジニア募集中です!(フルタイムじゃなくても良いよ!)

友人に「エンジニア足りないんだよねー」という話をしたら「昔みたいにアフリカの事業のブログ記事を書けば?」とのアドバイスを頂きました。しゅんすけありがとう。





もう忘れ去っていたんだけども、むかーし、むかしにこんな記事を書きました。
これはもう2社も前の話なんですが、この記事のおかげさまで2人から応募が来まして2人とも採用しました。本当にありがとうございます。

sugi511.hatenablog.com

最近の話と今やってること

2015年6月からフリーランスをやっています(一応継続中)。成長中ベンチャー企業のバックオフィスとかにエンジニアとかで入り込んで、業務フローの改善提案とかそれに伴う社内システムの改修・開発なんてところをやっていて、人の工数を激減できるところが面白くて、その辺を業務委託でやったりしています。

その一方で、7月から株式会社アフリカインキュベーター(以下Afri-inc)という会社にジョインしました。当時は、まだ登記もされてなかったんですが、学生時代の先輩から代表を紹介され、あれよあれよと開発メンバーとしてジョインして、今はCTOという肩書きで開発をしています(特に開発には変わりない)。書いてて、なんだかんだでもう半年近くになるのかぁ、と思うとしんみりします。




Afri-incは何をしているのか

タイトル、上述の通り、まずアフリカのウガンダ(アフリカの東の方)で事業をしています。現在は、東アフリカの流通市場で、現地メーカー・卸 ⇄ 小売店の間で使用されるB2Bのアプリを開発しています。ざっくり言うと、自社(現地メーカー)のプロダクトと顧客をWebとかAndroidで登録しておいて、営業先で売ったものもAndroidで登録し、その場で領収書をプリントアウトしたり、在庫管理できたりするツールです。Webは管理者向け、Androidは営業向けという風に分けてますがこんな感じです。

今まで全くなかった、ということはないんですが、それでも紙で配ったり、手書きだったり、記録がアナログだったりというものをデジタルにすることで、もっともっと便利にしていこうぜ!ということです。

しかも、流通周りって人の暮らしに直結していて、めちゃ面白いんですよね。都市部での配送がより効率化されて、同じ人員の数でも、都市部から遠いところへの配送ペースが1ヶ月に1回だったのが3週間に1回になって、品切れ状態が軽減されたりするとすごくないですか?しかも、同じ人数で多分売上も上がってるんですよね。じゃあ、もしかしてもしかすると、きちんと物が届く状態を整えることと売上が伸びて、人が足らなくなって、さらに雇用を生み出すことになるとかになると、それを引き起こす基盤となっているのが僕らの開発しているツールですってカッコ良すぎでしょ。(と、僕は思っていつもワクワクしてます。)


開発って何するの?

まず、安心してください。日本で働いてますよ。
これ、よく聞かれるんですが「今って一時帰国中なんですか?」ってやつ。今のところ開発メンバーは全員日本に居ます。
ちなみに、ウガンダで開発したいんだけど・・・みたいなのは全然OKというか大歓迎な感じです。マジ、現場の声をズレなく聞きたい。




で、開発って何するのか?ってとこなんですが、上述のツールの開発がメインです。というか、今はそれが全てです。
具体的には、Web側(APIサーバー含む)はRuby on Railsでゴリゴリしてて、Androidは営業さん向けにゴリゴリ作ってます。

■Afri-incで用いている言語・ツール
Ruby on Rails 4.2, Android Studio, Git, GitHub, Slack, Heroku, Deploygate

Ruby on Railsで作っているWeb側は、顧客情報や製品情報の管理と取引情報の管理などで、ほとんどがAndroidアプリを通じて登録されるものなので、本当に管理画面を作っている感じです。難しい技術が必要というよりかは、それを誰がどのタイミングでどういう意図で見るのか、っていうことに基づいてよくある管理画面を作ったり、そのデータを元にヴィジュアル化したグラフなどを提供するようになっています。

Androidアプリでは、Webで登録された情報を元に、お客さんのところで行った営業活動の登録(主に取引)や自分の業績を閲覧できたりと、こちらも(機能としては)シンプルになっています。とはいえ、まだまだスマホの普及率も高くない中、どういう風に見せたり遷移すると初見でも使いやすいか、などは考えることがたくさんありますし、実際の現場からの声からも必要部分はともかく、十分にはまだまだ届いていないな、という感じです。



開発の現状

今のところ、ウガンダでどんどん営業をかけていて、使ってくれてるお客さんからのフィードバックを元に機能改善をしまくっているのですが、手が足らないので本当に誰か手伝ってー状態です(´・_・`)というのも、開発メンバーが現状4人でフルタイム(週5)というコミットが出来ないのでなかなかやりたいことまで手が回らない、というところです。

結構早いスパンでリリースを繰り返していて、その度に解決する問題と、新たに出て来る要望(つまりは期待)などを早く早く収束させれるように、今どんどんと機能改善をしています。ちなみに、Web側もアプリ側も足りてませんので「あれ?週2ぐらいでもいいなら興味あるかも」みたいに思った方は僕まで連絡ください。マジ嬉しす。



開発体制というか、今はオフィスに集まって開発〜とかではなく、みんなリモートで仕事してます。
Google Spreadsheetで現地で出た要望等を取りまとめて、開発が必要ならgithub issueに登録、pull request出してマージ、というよくある感じになっています。コミュニケーションはSlackでとっていて、SkypeMTGをしたりしています(たまにウガンダ側にノイズ乗り過ぎて何言ってるか聞こえないときある)。


会社のメンバーとかとか


現在居る主要メンバーは、なかなかピカピカのレールあったのに突然外れたアウトローみたいな人が多い感じがしてカオス感あっていいです。代表とか、ウガンダでドラム缶風呂とかしてるしマジ謎。僕を誘ってくれた先輩は昔は味噌売ってたし、アフリカで米育ててたのはFBで見た。アフリカでも味噌作ってるのかな?ちなみに開発チーム以外は基本ウガンダに居ます。開発メンバーは偶然にも全員が日本ですが、別にどこでもいいです。アメリカでも、イタリアでも、ナイジェリアでも、グリーンランドでもグンマーでも。


これはWantedlyで募集してた当時の話はこちらです。
www.wantedly.com

早く予防接種受けないといけないんですが、僕も今年前半には初ウガンダ行ってきます。アフリカとか行ったことねーし、まじ想像つかねーーってところから、ちゃんと実感値を一段階アップさせます(笑)(実はまだウガンダ行ったことないんです・・・早く行けよって話ですよね、マジで。)

ここからはちゃんとした話


タイトルの通りなんですが、一緒に働いてくれるエンジニア、募集してます。Web側もアプリ側もどちらも足りてないし、パートタイム(週末とか終業後とか)での受け入れももちろんありなので、興味があればご連絡いただけると嬉しいです。
開発の話のところに書いた通り、開発内容としては割と普通というか技術的チャレンジというのは、DMPとかブロックチェーンとかAIだとかっていうのは未だ出て来てないしまだ見えないので、スーパーマッチョマンが欲しいっていうよりかは、普通に普通の開発が出来る人が良いのかもしれないです(あまりに好奇心旺盛だとそういう点では物足りないかも)。
とはいえ、お恥ずかしい話ですが僕はまだまだ技術力や経験が足りないばかりに、うまくいかないこと、苦労をおかけすることはたくさんあると思うんですが、「ちょっとぐらい手伝っても良いかな?」とか「こういう事できるけど、役立つ?」とか「仕方ねーなー、オレがサーバーサイドちょっと手伝ってやるよ」とか思っていただけたなら、働くかどうかはともかくとして、TwitterアカウントにDMでも飛ばしてもらえるとおうちで小躍りします₍⁽⁽(ી(*´ω`*)ʃ)₎₎⁾⁾

twitterhttps://twitter.com/sugi511



正直、僕はこの時期にアフリカというかこの事業に関われていることは幸運だと思っていて、なおかつインターネッツが大好きなので、僕が作るもの、やってることを通してアフリカの人(というと主語がでかいけど)が僕らとは違うフェーズのインターネットを通じてどうなっていくのか興味津々で溜まらないです。



まだまだ会社としても小さいしスタートしたばかりです。この後、100%の確率で大変なことが待ち受けてるのは分かっては居るんだけども、それでもなお「止められないな」とも思うし、「止まってはいけない」とも思うし、「止めてもいけない」とも思ったりします。大変だけど、面白い。人にオススメできるチームや事業ドメインだと思うので、ぜひ一緒にお仕事しませんか?というか、お手伝いでも大歓迎ですのでぜひご連絡をお待ちしております(っ・ω・)っ


よろしくお願いします!!!!