エストニアでの一年半のエンジニア業務まとめ
こんにちは。先日までエストニアの現地企業で働いていたエンジニアの島田です。
およそ一年半前、電子国家で注目されているエストニアという国に移住し、現地の企業でエンジニアとして働き始めました。
ちょうど仕事に一区切り着いたので、どのようなことをしていたのかをまとめます。
所属していた会社と業務内容
私が所属していたのはエストニアのIT企業大手のNortalという会社です。
従業員は1,000人ほどで、国や自治体といった大口のクライアントから依頼を受けてソフトウェアの開発することを主な業務にしています。エストニア政府のシステムの一部開発を手掛けたり、そこで培ったノウハウを元に他国の電子行政システムを構築する、といった案件を請け負うことが多いです。
実際エストニアの政府が運営するサイトを見てみると、「エストニアのような電子国家を築きたければ是非この会社にご相談を!」といった風に紹介されていたりします。
https://e-estoniax.com/companies/nortal/
一年半の間、この会社でBliggitというアプリのフロントエンド開発を主に行っていました。
これはドイツの地方都市Wuppertalに住む人が、ローカルなニュースを収集したり、イベントのチケットを購入したりすることを可能にするアプリです。都市在住者向けのお役立ちSNS、のようなアプリと言ってもいいかもしれません。
Nortalからも先日プレスリリースが出されましたので、より詳しくはこちらをご覧ください。
https://nortal.com/news/news-library/innovating_wuppertal/
グローバルな開発体制で (ほぼ) リモートワーク
Nortalはヨーロッパ各国やアメリカに拠点を構える大きな組織です。
Bliggitはそもそもドイツの地方自治体がクライアントという事もあり、現地で対応するスタッフとは常にビデオ通話やチャットツールを通してコミュニケーションを取っていました。
さらに開発者もエストニア国内に全員が集まっている訳ではなく、ドイツを始めリトアニアやフィンランドにいるメンバーともやりとりをする必要があったので、業務連絡はほぼ全てオンライン上で行われていました。
(エストニアに移住して、リトアニアやフィンランドのメンバーと開発をしながらドイツの地方都市のアプリケーションを作る日本人... と今振り返ると、自分は中々レアな存在になっていたなと思います)
会社のオフィスは広々としていてコーヒーも飲み放題だったので、私は好んでよく出社する方でした。
一方で、同じオフィスにいるメンバーも子育ての都合で一週間来なかったりといったことが普通にあり、6人程が入る執務室で一人作業するという事が頻繁にあったので、ある意味リモートワークしている感が常にあったなと思います。
フロントエンド開発専任になる
当時会社の仕事とは別にウェブアプリケーションの開発を行っていたのですが、そこでFirebaseを導入し、「今はBaasを使えばフロントエンド開発をするだけで、ある程度の規模までのアプリなら完成させてしまえるのか...」と衝撃を受けました。
フロントエンド開発の能力を高めればクオリティの高いアプリを一人でも作れるようになる事を知ったので、スキルアップのためにどうにか仕事でもフロントエンドを担当させて貰えないかな、とその頃ぼんやり考え始めていました。
そんな入社して数ヶ月経った頃、上司から
「今フロントエンドの方が人足りてないんだけど、文平確か趣味で開発経験あるよね?前職でも専任ではないにしろやってたみたいだし... どうかな、良いチャレンジにもなると思うし、ちょっとフロントエンドやってみない?😉」
とそこはかとなく圧を感じる笑顔で提案されました。
こんな都合の良いことがあるのかと自分の運の良さに感謝しつつすぐにOKし、以降1年以上ずっとフロントエンド開発に携わることになりました。
バックエンドチームとのコミュニケーション整理
フロントエンドの開発を始めた当初、サーバーサイドもフロントエンドも両方触ったことがあるのは自分だけ、という状況でした。
そんな中、人員配置の都合で開発者間のコミュニケーションに問題が生じていました。例えば、あるAPIの設計が変更された際、フロントエンドにはその詳細が伝えられておらず、いざ実行してみると予想外のエラーが発生してしまうといったような事が少なからぬ頻度で起こっていました。
私はフロントとサーバー両方の事情がわかっていたので、それぞれどのツールを主に参照していたのかを勘案し、Swagger, Confluence, JIRA と各所に散らばっていた設計や仕様を整理し、
「困った時に迷わず正確な参照先を見つけられるように、どのツールを常に最新にアップデートするべきか?」
「そもそも各ツールではどういった情報が書かれるべき、または書かれるべきでないのか?」
「通知メールは数が多すぎて埋もれるので、他のエンジニアに知らせる必要がある修正を行った際にはどのように連絡するか?」
といった所の取り決めを行いました。
本来あまりチームに貢献が出来ない、参加したてのキャッチアップ期間にもこのように貢献することが出来ました。この問題があったお陰で... と言うのも変ですが、参加初期からメンバーの信用を得る良いきっかけになったように思います。
統計情報ページの設計
そんな事をしながらフロントエンド開発に参加して数ヶ月、特に開発において困るような事も無くなってくると、数ページ分の実装が必要な割と大きい機能を設計から任されるようになってきました。
特に印象に残っているのは、Google Analyticsのような統計情報ページの実装です。
以下のような画面です (実際はもっと簡素です)。
そもそも非常に多機能であるのと、実際に手を付けてみないと分からないような箇所が複数あったため、実装中は想定外の事象に何度も遭遇せざるを得ない、PMやデザイナーとの密な連携が必要な仕事でした。
ですが、設計から実装まで自分で行える状況でコミュニケーションコストが少なく済んだのもあってか、 作業開始時点の想定の約6割ほどの時間で実装が完了しました。
中々良い成果だと思って貰えたようで、ご褒美にエストニアでも数少ない日本食料理屋に連れてって貰えました😋純和風ではないですが、これはこれでアリな味です。
これは今までで最も難易度の仕事で非常にエキサイティングだったのですが、以降これほどまでにはハードな仕事にありつけることはほとんど無く、少しマンネリを感じ始めていました。
上司にも一対一の面談で「もっと難しい仕事したいから、なんかあったら割り当ててくださいね!」とリクエストしたのを覚えています。
テスティングルールの策定
とはいえ頼んでばかりで面白い仕事にありつける訳でもないので、何か良さそうなものを自分で探していました。
そこで、アーキテクトたちがテスティングルールの策定に関して
「今すぐに必要ではないがどこかのタイミングで... というかもうそろそろ取り組まないと😩」
と頭を悩ませていたのを見つけたので、それに取り組むことにしました。
まずは、どのテストがどれだけ書かれているべきなのかの案を作成しました。例えばある関数を作った場合、(非常に重要度が高い場合はその限りではないが) 基本的にはテストケースが合計で3つ以上ある場合に単体テストを作成するようにする、といったようなものです。
単体テスト、結合テスト、E2Eテストそれぞれに対し、上記のような細かいものから、どのツールをどのように運用するのか、ローカルの開発マシンとCI上それぞれでどのテストの実行を行うようにするのかといった所も含め、包括的な提案書を作成しました。
それにフィードバックを貰いながら改善し、実際に共有する仕様書を書き終えたところで、各ツールごとに最も優先度の高いテストを作成しました。
その目的は、以降実装するメンバー達に実際に稼働している実装例を残すのと、誰でもすぐにテストの実装が出来るように開発環境を整える事でした。
もう私は会社を離れてしまいましたが、上記実装までやり切れたので、残すべきものは残していけたのかなと考えています。
(まさかこれが最後の仕事になるとは考えていませんでしたが... 世の中どうなるか分からないものです。)
最後に: 執筆のきっかけ
最近コロナの影響で日本に帰って来ました。
幸いエストニアはコロナの影響も少なく、会社の業績も好調で特に問題なく過ごせていました。ですが当時、ヨーロッパから日本行きの便がどんどん無くなっていっており、
「仮に日本の家族がコロナに罹ったりした場合、すぐに帰れないような状況になっていたらまずいな...🤨」
と考え、エストニアでの仕事を辞めて帰国することを決めました。
帰国時に寄ったフランクフルト空港は平日の昼過ぎでもガラガラでした。こんな光景を目にする日がくるとは。
さて、帰国してからのここ一ヶ月ほどは休暇期間として自分が作りたかったアプリを作ったり、趣味で物理や数学の勉強をしていました。
今はアプリの開発や勉強も一段落し、就職活動を始めるところですので、その準備も含めてこれまでの仕事を振り返ることにし、この記事を書きました。
こちらは最終出社日に寄った職場近くで撮影。諸々落ち着いたらまた訪れたいです。
振り返ると本当に、同僚始め多くの人々や運に恵まれた一年半でした。
しばらくエストニアに住むような事は無さそうですが、またいつか戻りたいなとこの記事を書いていて寂しい気持ちになってきました...。
また彼らと働ける時が来た時にもっと面白い事が出来るよう、今日も仕事に励んで行きたいと思います。