スキルセットを活用したい。リーダーシップを磨きたい。
近未来の目標はフルスタックのスキルを活用して革新的なプロジェクトに携わることです。技術の最新動向に常にアンテナを張り、開発からデプロイまでの全フェーズにおいて自らのスキルを磨き上げ、成長を遂げたいと考えています。また、これまでのチームリーダーとしての経験を活かし、協力して目標達成に向けてチームを鼓舞し、促進することにも情熱を傾けたいと考えています。チームの一員としてだけでなく、リーダーシップを発揮して組織全体を前進させることで、企業の成長と成功に貢献したいと強く願っています。どんな状況においても挑戦を恐れず、柔軟に対応しながら、チームをリードし成果を生み出すことを目指しています。
Human Capital (リモート)
主に英国、ニュージーランド、オーストラリアからのスタートアップクライアントに対し、最新のWebテクノロジーを用いて技術サポートやエンジニアリング人材を提供することを担当しています。
私の役割はエンジニアリングマネージャーおよびテックリードであり、日々の業務では内部の技術チームを管理し、外部クライアントと技術的なコミュニケーションを行い、CEOに直接報告しています。
以下は、Human Capitalで関わっているいくつかのプロジェクトです。
初期のコードベース構築や開発チームの監督、機能の提供、コードレビューなどを担当しました。このゲームでは、合計9999匹の柴犬が存在し、それぞれがユニークなNFTとして機能し、ユーザーアカウントとして存在しています。プロジェクトは主に3つのコンポーネントで構成されており、Solidityで作成されたERC721スマートコントラクト、Node.js/Express.js/Postgresで構築されたバックエンド、ReactとPhaser.jsで構築されたフロントエンドが含まれています。
プロジェクト中に遭遇した技術的課題の1つはパフォーマンスの問題でした。ユーザーベースが急速に成長するにつれて、ゲームのアクセス速度が低下し、ある時点で30秒以上かかることがありました。そのため、私はRedisを導入したキャッシング、Webpackによるコード分割、およびReactの再レンダリングを減らすためのメモ化など、パフォーマンス最適化の提案をしました。チーム全体でこれらの解決策に取り組み、起動時間を4秒未満に短縮することに成功しました。
また、私が行った具体的な技術的貢献の1つは、スプライト生成システムでした。9999枚のユニークなNFT画像を構成するためには、7つの異なるボディパーツが必要で、それぞれが4から10のバリエーションを持ち、プロジェクトのタイトなロードマップのため、非常に短い時間枠でAWS S3にアップロードされ、データベースに登録される必要がありました。私は、Node.js向けのImageMagickを使用したカスタムバッチジェネレータを並列で実行し、同じPostgresインスタンスに書き込む10個の独立したHerokuノードで構成された臨時のソリューションを考案しました。このアプローチを利用して、開発/保守コストをあまりかけることなく、すべてのNFTアセットを時間通りに準備することに成功しました。
ウェブフロントエンドチームをリードする責任を担当しました。アプリはReactで構築されたウェブフロントエンド、React Nativeで構築されたモバイルクライアント、およびPHP/Laravelで構築されたバックエンドを持っています。Human Capitalはウェブとモバイルの両面でサポートを提供しました。私の職務は、新しい要件が入った際にクライアントとコミュニケーションを取り、バックエンドチームと協力して全チームが必要なAPIやデータ形式について同じページにいることを確認しながら、ウェブチームをリードして機能の実装を行うことでした。
技術的な課題の1つは、プロジェクトに参加する人数が増えるにつれてコンポーネントスタイルに不整合が生じたことでした。私は、デザイナーと協力してデザインシステムを構築し、希望のスタイルを持つコンポーネントを集約するための中心的な場所としてStorybookを導入し、モバイルチームとウェブチームの両方がStorybookを視覚的な真実の情報源として参照することを提案しました。これにより、UIの一貫性が大幅に向上しました。
個人的に構築した他の機能には以下があります:
Woork.io (ニュージーランド・リモート)
※同社はStartmate 2020に優勝(ニュージーランドからの5社のうちの1社)
不動産業者向けのスマートアシスタントを開発するスタートアップ企業です。フロントエンドではReact、バックエンドではServerless Framework、データベースではDynamoDBを使用しました。特筆すべきは、当時としては革新的な技術であるGraphQLを採用したことです。製品の主な機能は以下の通りです。
・不動産業者向けのリアルタイムカレンダー・スケジューラー
・お客様と収録物件のオートマッチング
・お客様との有効なフォローアップを自動的に提案し、スケジュールに追加
・検索しやすいデータベース
・これらの全ての機能を自然言語で処理できるチャットボット
最初はフルスタック開発者として働き、フロントエンドとバックエンドの両方で新機能の実装を担当しました。後にテックリードとして働くようになり、具体的なコードの貢献に加えて、アジャイルコーチング、コードレビュー、新メンバーの指導も担当しました。チームと一緒に、フロントエンドにはReact、バックエンドにはServerless Framework、データベースにはDynamoDBを使用しました。
個人的に達成した主なコーディング貢献の1つは、チャットボットのスムーズなアニメーション化でした。CSS Transition Groupとasync/awaitを導入して60fpsの滑らかなUIアニメーションを実装することで、元々原始的で不格好なチャットUXをSiriのレベルに近いUXに変えることができました。
【会社名】
合同会社LIVED (日本・福岡)
【概要】
中国からの観光客を対象とした日本観光サイトです。2018年7月にプロトタイプを作成し、福岡市でスタートアップビザを取得しました。その後、6ヶ月後に正式に会社を設立しました。私は創立者兼代表社員であり、製品の設計と開発を一人で担当しました。フロントエンドではReact、バックエンドではExpress.js、データベースではMongoDBを使用しました。製品の主な機能は以下の通りです:
・旅行目的地(スポット)を収録するウィキ
・スポットのブックマーク(行きたい・行ったことがある・滞在中)
・クチコミ機能
・ゲーム感覚でひとり旅を楽しむクエストシステム
UIデザインからバックエンドまでをゼロから作り上げた経験は初めてでした。
【会社名】
Coconut Island Games (上海)
【概要】
中国の大手インディーゲームパブリッシャー。私はウェブ開発担当として、公式ウェブサイトの設計・構築を行い、個々のゲーム開発チームの要望にも対応し、ゲームプロモーション用のウェブコンテンツや社内管理ツールを開発しました。ウェブサイトはコンテンツを簡単に管理できるように、WordPressを採用しましたが、テーマは既存のものではなく完全にカスタムしたものです。プロモーションページでは、インタラクティブさを重視して主にVue.jsを活用しました。また、管理ツールではVueとExpressなど、さまざまな技術を組み合わせて開発しました。
【会社名】
Strikingly (上海)
【概要】
YC(Y Combinator)に支援されたウェブサイトビルダースタートアップ企業です。当社の製品は一般ユーザー向けのウェブサイト作成ツールです。フロントエンドではAngularとReactを、バックエンドではRuby on Railsを使用しています。私はフロントエンドエンジニアとして、現在も広く使用されているさまざまな製品機能の構築に携わり、多くの基本的なスキルを身につけました。また、直接デザイン作業に携わることはありませんでしたが、UIデザインのセンスを磨く機会をたっぷりと得ることができました。
Human Capitalでは、開発チーム全体(最大15名)をマネージメントしていました。
いくつかのプロジェクトを並行して進行させるために、チームをサブチームに分割し、各サブチームの進捗状況を把握し、納品を監督しました。それぞれのチームメンバーに適切な役割を割り当て、チーム全体が最良の状態で作業できるように常に努めました。
・適材適所を尊重
メンバーそれぞれに長所や好みがあり、それを尊重することを第一に考えています。時と場合によっては通常と異なる仕事を担当させることもありますが、本人が納得しない状態では良い結果を生み出しにくくなります。
・各自の責任を明確にする
タスクの分担からコードの管理まで、チーム全体で決め、問題が発生した際に迅速に対応すべき責任者を明確にします。これにより、無駄なやりとりや対応の遅れを最小限に抑えます。
・定期的な振り返りミーティングを実施
直近の1週間や2週間での「良かった点」「改善すべき点」「疑問に感じた点」「即座に中止すべき点」について全員で議論し、それを方針に新たな1週間や2週間を始めます。これによりチーム全体で一体感を持ち、前向きな雰囲気を醸成します。
・個別の1対1ミーティングを実施
定期的または不定期にチームメンバーと個別に話し合い、公の場では言いづらい問題や個人的な課題を聞き、適切な対策と配慮を提供します。これにより潜在的な問題を早い段階で発見し、大きなトラブルを回避し、円滑に進めます。
総じて言うと、チームをヒューマンリソースではなく、生身の人間として扱い、人間味のある接し方が一番良い結果につながると考えています。