はじめまして、川口(@kazu_pon)です。私はソフトウェアエンジニアとして現在株式会社プレイドで働いています。OSS活動としては、Vue.jsコアチームメンバー、Nuxtエコシステムメンバーであり、Vue.js 日本ユーザグループ、そしてVue Fes Japanというカンファレンスのオーガナイザーをしています。
この記事では、日々の仕事をこなしつつOSSとどう出会い、どのようなOSS活動をしているか、これらの両立をどうやって築いていったのかなど、私のこれまでのソフトウェアエンジニアとしてのキャリアを振り返りつつ紹介します。
プロのソフトウェアエンジニアとして働くということ
始まりはゲームを作ってみたいという想いから
私がソフトウェアやIT業界に興味を持ったのは、幼少期に遊んでいたテレビゲームがきっかけでした。小学校の頃はファミリーコンピュータが全盛期で、ゲームがどうやって作られているのかも知らずに遊んでいました。そんな頃に、友人宅で友人がパソコン上でN88-BASICを使って文字を動かす簡単なデモで、ゲームがどう作られているのか見せてくれたのがプログラミングを知った最初の瞬間でした。当時は文字を打ち込むだけでゲームを作れることに感動したのを覚えています。
本当にゲームを作りたいと思うようになったのは、高校時代に進路の選択を迫られたときです。友人宅でのプログラミングのデモ体験が頭の中に沸々と湧いてきて、プログラミングを学べる情報系学科がある大学への進学を決意しました。
大学進学後、講義でC言語とアルゴリズムを学び、テトリスに似たパズルゲームを作りました。その経験でプログラミングを通してソフトウェアを作る楽しさを覚え、もっとソフトウェアに関する知識を身に付けたいと思うようになりました。その後、学部の講義でCPU、オペレーティングシステム、コンパイラといったコンピュータサイエンスに関する基礎を一通り学び、さらに深く学ぶために大学院に進学してプログラミングと研究に没頭しました。
システム開発を通じて得たプロの心構え
大学院を修了した後、ソフトウェア開発に興味があったのでソフトウェアエンジニアとして働ける会社に入社しました。その会社では、自社で培ってきたPBX(Private Branch Exchange:電話交換機)システムを発展させたコールセンターシステムをコールセンター市場に提供していました。自分が入社したときは、IPネットワーク網を使ったコールセンターシステムを新バージョンでリリースした直後でした。
自分が配属されてからプロジェクトとして初めに取り掛かったのは、従来のアーキテクチャベースだったSDKのExampleを新しくリリースしたバージョンに移植するというものでした。このプロジェクトでは、要件定義、外部・詳細設計、開発、そしてテストという開発工程の一連の流れを経験することができました。
特にテスト工程の経験は印象に残っています。システムテストは単体テストとは異なりテストするための環境が必要で、クライアントとサーバーだけでなく、IP電話やルーターといった専用IPネットワーク網の環境構築もしなければなりませんでした。システムテストの環境構築を通して、ソフトウェア開発だけでなく、呼制御プロトコルも学べましたし、ルーターの設定を通してネットワークに関する業務知識を得ることができました。そして、システムの機能だけではなく、パフォーマンス測定といった非機能要件に関するテストも経験しました。こうした経験によって、自分はプロのソフトウェアエンジニアとしての心構えを得ることができたと思っています。
花形な開発経験をする同期に対する焦りと状況打開
入社最初のプロジェクトが終わった後、旧コールセンターシステムのコアを開発しているチームに配属されましたが、新システムからの機能バックポート、カスタマーサポート経由で来る不具合の修正や機能改善、そして障害対応といったメンテナンス業務に日々追われていました。その私に対して同期は、新バージョンのコールセンターシステムの設定管理コンソールの開発チームに配属され、新しい技術を使って楽しみながら開発業務をしていました。そうした同期の状況を知るたびに、自分自身のモチベーションが落ちているというのが明らかになり、何とかしなければならないという気持ちが日に日に強くなっていきました。
そんな状況を打開するため、チームで課題となっていたソフトウェア品質について着目し、その頃日本のJava界隈の和田(@t_wada)さんを中心に話題になっていたテスト駆動開発に興味を持つようになりました。
提唱者であるKent Beck氏の書籍『テスト駆動開発入門』を読んだときに衝撃を受けたのを覚えています。そのソフトウェア開発知識獲得体験がきっかけで、GoFのデザインパターンやドメイン駆動設計といったアプリケーションアーキテクチャ設計に関するもの、そしてプログラミングに関するさまざまな技術書籍を読みあさるようになりました。中でも書籍『達人プログラマー』との出会いは大きかったです。その書籍を通じて、普段業務で使っていない技術やプログラミング言語に興味を持つようになり、GitやRuby、Ruby on Railsといった技術やプログラミング言語を学ぶようになりました。
こうして状況を打開していったわけですが、これができたのはソフトウェアエンジニアは基本的に知的好奇心を満たすことが好きな職種だからというのがあるのではないかと思っています。日々開発業務に追われていても、書籍やインターネット上で技術情報を得ることは大事だと感じています。
シリコンバレーツアーという転機
旧コールセンターシステムの障害対応やバックポートといったメンテナンス開発に日々明け暮れていた頃、自分は会社の中堅的な立場になっており、会社からはマネジメントスキルが要求されるようになりました。実際コードを書いてソフトウェア開発するのが好きなのに、マネジメントにシフトしても本当によいのだろうか。ただ、将来、アーキテクトやCTOのようなソフトウェア開発のリードや統括することもやってみたい、と悩んでいた時期でした。
この頃、GoogleのWeb検索技術を筆頭に今後のWebの可能性、そして世界のITビッグカンパニーがたくさん生まれるシリコンバレーについて強く興味を抱いていました。そんなさなかJTPAがシリコンバレーカンファレンスを開催するという情報をSNSを通じて知りました。

同時に、現地シリコンバレーカンファレンス参加有志メンバーと一緒に、Googleといった巨大IT企業や、まさにスタートしたばかりのDropBoxのようなスタートアップ企業などを見学訪問し、たくさんの刺激を得ました。そして、カンファレンスでシリコンバレー現地で働く日本人のセッションやパネルディスカッションに参加し、いろいろと話を聞きました。
ツアー経験で得たのは、自分を変える価値観への転換が大事ということでした。シリコンバレーではコードをバリバリ書くソフトウェアエンジニアで事業が成り立っており、スタートアップのようなところでは、CTOのような役職者でもコードを実際に書いていることを知りました。このツアー経験が、ソフトウェアエンジニアとして今後も続けていこうという自信となり、現状の環境を変えることで自分自身を変えてしまおうという決心がつきました。そしてツアーから戻ってきた後、toC向けのインパクトがあるWebサービスのソフトウェア開発をできるスタートアップ企業に転職しました。
興味を持ったWeb業界に思い切って飛び込む
OSSを使った大規模トラフィックを持つWebサービス開発の経験
転職したのは、ブログ記事に対する反応を見ることができるWebサービスのシステム開発をしている会社で、システムの技術スタックはOSSで構成されていました。ブログというメディア的な事業ドメインの性質上、月間PV数億単位のWebアクセスリクエストをさばく必要があるため、データベースはNoSQL、WebサーバーやWebアプリケーションフレームワークはC10K問題を回避するノンブロッキングI/Oを採用した技術スタックを使用していました。
業務では実際に初めてのOSSを使ったシステム開発、初めて知る技術スタック、そして慣れない開発プロセスだったので順応するまで時間がかかりましたが、前職で身に付けたソフトウェア開発スキルやノウハウを現状に転用させる形で、開発プロジェクトになじんでいきました。その後、フロントエンドからバックエンドまでフルスタックで担当するようになり、Webサービスのシステム開発を1人で行えるようになりました。
転職してからは使っているOSSのコードを読む機会が圧倒的に増えたため、コードを読むスキルが身に付いたと思っています。OSSはソースコードが公開されているので、わからない部分があればすぐにそれを読むことで理解できます。バグがあればパッチを送ることができます。こうしたOSSの素晴らしさを開発業務で経験すると同時に、OSSに対して一層コミットメントしていきたいと思うようになりました。
Node.jsとの出会い、そしてOSSコミュニティへの関わり
OSSに対して一層興味を持つようになってから、会社のGitHubレポジトリでコードを読みあさっているうちに、Node.jsに出会いました。JavaScriptでHTTPサーバーが実装されているコードを読んで、そのコードが動いたときは興奮したのを今でも覚えています。Node.jsについて調べていくと当時はC10K問題を回避できる別のソリューションとして話題になっていました。
日本でも、Node.jsは注目されつつあり、コミュニティの勉強会イベントで技術的な話がされるようになっていました。自分がNode.js関連で最初に参加した勉強会は「JJUG CCC 2011 Spring」というカンファレンスのNode.js 日本ユーザグループによるLT(Lightning Talk)大会でした。LT大会でさまざまなNode.jsに関する技術的な話があり、当時自分はそれほど知識を持っていなかったので勉強になりましたが、それよりも登壇されているNode.jsコミュニティの人が楽しんで技術発表している姿には大変刺激を受けました。その刺激から、自分もコミュニティに関わってみたいと思うようになり、Node.js 日本ユーザグループ(後にJapan Node.js Association)が開催する勉強会に定期的に参加するようになりました。
初めて日本で開催されたNode.jsのカンファレンス「東京Node学園祭」をスタッフとして手伝いましたが、技術コミュニティに貢献したのもこれが初めてでした。
このカンファレンスでのスタッフ活動はとても楽しいものでした。なんといってもスタッフのみなさんがNode.jsについて常にエッジが効いた話題を持っていて、カンファレンスに向けた定期的なミーティングの休憩とか終わった後とかにいろいろと熱く語り合っていたのは自分にとって刺激的でした。
こうして、Node.jsとの出会い以降、業務で使えるところでは、サーバーサイドでも積極にNode.jsを使うようになりました。そしてNode.jsの成熟とともにWebフロントエンドのフレームワークやバンドラなど新しいツールチェインが出現し、Webフロントエンドの開発環境としてNode.jsは必然と使われるようになっていき、自分の興味もWebフロントエンドへ移っていくことになりました。
テックリードのときに出会ったVue.js
その後、フリーランスとなっていくつかのシステム開発のサポート、受託開発を経て、再びスタートアップでソフトウェアエンジニアとしてキャリアをスタートしました。新たに活動を開始した会社のプロダクトで使っている技術スタックは、インフラはAWS、データベースはMySQL、WebサーバーはNginx、WebアプリケーションフレームワークはRuby on Rails、そしてWebフロントエンドはjQueryでした。
新たな会社ではフロントエンド、バックエンド両方開発するフルスタックなソフトウェア開発者でしたが、テックリードとして開発プロジェクトをリードする立場でした。テックリードとして最初に与えられた自分の役割には、jQueryでスパゲッティ状態になっているWebフロントエンドをメンテナンスしやすくし、今後開発スピードを落とさないようにするという命題がありました。
まずは、UIをコンポーネント単位で構造化していくことを考え、Webフロントエンド向けのMVCのような構造化できるフレームワークを導入することを決定しました。2014年当時、Backbone.js、AngularJS、Reactのようなさまざまなフレームワークがしのぎを削っていましたが、その頃出現したVue.jsを導入することに決めました。
導入決定に至った理由は、Vue.jsが段階的に導入できるコンセプトであるプログレッシブフレームワークとして、どんな規模のWebアプリケーションにも導入しやすく柔軟性があったからです。既存のWebフロントエンドのjQueryといったJavaScriptのコードとも共存できて、新しく開発する部分はVue.jsでスピーディに開発することができました。Vue.jsがv1.0に向けて進化を重ねるのを実際に業務で使ううちに、Vue.jsと作者のEvan You氏に魅了されていきました。
Vue.jsといえばこれだ!という一番特徴的な機能として、SFC(Single file components:単一ファイルコンポーネント)というUIをコンポーネントとしてモジュール化する機能があります。
SFCはHTML・JavaScript・CSSをそれぞれファイル種別で分離するのではなく、UIにおいて機能や構造化された単位でHTML・JavaScript・CSSを疎結合な部品(コンポーネント)として分離するというモジュール化方法です。このコンポーネント機能を知ったときは、フロントエンドのソフトウェアモジュール設計における関心の分離について、これまでの考え方を大きく変えさせられました。
SFCで良いと思っているのは、既存のWeb標準であるHTML・CSS・JavaScriptのタグを使って実現している点です。このおかげで、SFCに対して認知負荷が発生せず、Webフロントエンドエンジニアだけでなく、JavaScriptに詳しくないデザイナーも一緒にコンポーネントを開発することができます。実際Vue.jsを導入した自分たちのチームではSFCについてすぐに理解し、その後の開発はスムーズでした。
当時Vue.jsを導入したときは、まだリリースされたばかりで機能が足りませんでした。特に私たちが提供していたプロダクトの要件としてフォームのバリデーションと国際化の対応は必須でしたが、Vue.jsにはありませんでした。そこで、ないなら作ってしまおう!という感じの勢いでvue-validatorとvue-i18nというVueプラグインを作りました。vue-validatorはEvan氏に相談しながら作り、Vue.js公式のバリデーターとして私の実装コードが採用されました。そしてこれらのVueプラグインをnpmとGitHubで公開し、これがきっかけで、以降自分もOSS開発者として活動していくことになったのです。
また、同時期に公式ドキュメントの翻訳も、会社で主催したミートアップに集まった有志で活動しました。その後、この集まりがきっかけでミートアップを開催しました。有志でワイワイしながら活動した翻訳やミートアップ、自分がスタッフとして活動したNode.jsカンファレンスのような感じで集まった人たちでVue.jsについて話すことができて楽しかったのを覚えています。そして本格的にコミュニティを立ち上げよう!という決心をし、Vue.js 日本ユーザグループを立ち上げて、以降コミュニティ活動もするようになりました。
Webフロントエンドの技術選定から始まって出会ったVue.js。この出会いによって、自分のソフトウェアエンジニアとして本格的にOSSにコミットメントしていく人生のターニングポイントとなったのです。
CTOを務めつつさらにOSSにのめり込む
こうしてVue.js周辺で自分がOSS活動をしているさなか、Evan氏がフルタイムOSS開発者に転身するタイミングでVue.jsチーム体制を立ち上げ、私をコアチームメンバーとして招待してくれました。このときは、本当にうれしかったです。これがきっかけになり、ますますOSS活動に拍車がかかりました。
一方で、会社ではテックリードとアーキテクトとして活動していましたが、会社の事業ピボットそして組織再編のタイミングで私がCTOを務めることになりました。CTOはキャリアとして一度経験したいと思っていたので、声がかかったときはうれしいと思う反面、収益を生む事業のプロダクトを技術責任者として築くというミッションの重圧がのしかかり、プレッシャーがありました。
そんな重圧を背負いながら、プロダクトのシステム設計、実装、そして開発プロジェクトのマネジメントだけでなく、会社の予算計画、プロダクトのプライシング設計、プロダクトの今後について徹底的に議論するオフサイト、といった感じで、会社のお金周り、ビジネス系の部分も活動していました。
Vue.js v2.0がリリースされてから人気が国内外で爆発し、OSS活動もさらに加速していきました。GitHubのVue.jsレポジトリに日々やってくるGitHub issuesのトリアージ、日本語公式ドキュメントのメンテナンス、自分がメンテナンスしているVueプラグインの開発量が増えていきました。Node学園祭といったいくつかのJavaScriptコミュニティのイベント登壇も増えました。

また、自分が運営するVue.jsコミュニティのイベント開催数も増え、2018年にはついに日本初のVue.jsカンファレンス「Vue Fes Japan」を開催しました。
CTOとして業務活動しつつ、業務とは別の時間でOSS活動するというダブルワーク、どちらとも楽しかったのでしばらくはうまく活動できていました。途中体がしんどいときは熱意でカバーしましたが、長くは持たず徐々にOSS活動、特に自分のOSSの開発時間は減っていきました。
ちょうどOSS活動の時間が減り始めた2018年、CTOとしての活動も2年半を過ぎた頃合いということもあり、これまでのCTOとしての自分の活動を振り返り、これからは自分の好きなOSSで活動していきたいと考えるようになりました。そして、OSS活動ができる会社に転職しようと決意しました。
やりたいOSS活動を主軸にして働くということ
OSS活動を業務としてできる会社を探していたら、幸いにもすぐに転職先を見つけることができました。Vue.jsコミュニティを立ち上げたときに一緒に活動していた野田陽平さんに自分の思いを伝えたところ、ちょうど自分のOSSのVueプラグインvue-i18nでプロダクトを国際化する必要があり、ぜひこちらへ来てやりたいことをしてください!という声をいただき、2019年4月にプレイドに入社しました。
入社したときの気持ちをまとめたブログ記事があるので紹介しておきます。
OSS活動で得たナレッジや経験を業務に価値として提供
プレイドに入社後、単にOSS活動だけをするのではなく、それで得た知識や経験を活かしてIC(Individual Contributor)的な立ち位置でプロダクトに価値提供し、プロダクトの開発業務において得たフィードバックを取り入れて必要なOSSを開発したり改善したりすることで、OSS活動と業務活動の双方にシナジーが出るよう意識して取り組みました。
入社してから、自分が初めに関わったプロダクトの「KARTE」の国際化対応では、Vueプラグインのvue-i18nで対応するのはもちろん、会社独自のローカライゼーションワークフローの構築で必要なソフトウェアを、国際化に特化した自分のOSSプロジェクトIntlify上でOSSとして開発して公開しました。
ローカライゼーションフローの構築詳細はブログ記事があるので紹介しておきます。
プロダクトの国際化対応を行う際、ESLintを使った静的解析で対応箇所を1,100以上もあるVueコンポーネントから機械的に抽出するときも、eslint-plugin-vue-i18nという国際化に特化したESLintプラグインで効率的にできるようにし、国際化対応漏れが発生しないようCIにも国際化に特化したリントを導入しました。また、この対応の際に、VueコンポーネントのテンプレートでPug(Jade)を使っていて、今後Pugを使い続けるのは技術負債を抱えてしまうリスクがあるので、PugからHTMLに変換するツールを作り、一気にマイグレーションしました。
このマイグレーションをしたときのブログ記事もあるので紹介しておきます。
また、「KARTE」の接客をノーコードでGUIで編集するエレメントビルダーというエディタのプロダクト開発にも途中参加し、Webフロントエンド関連のOSSで培ったノウハウを、SDKの開発やエディタで接客のプレビューの高速化に注ぎ込みました。
エレメントビルダー当時の開発チームのインタビュー記事を紹介しておきます。
ここ最近は、DXチームというプロダクトの開発体験をよくするチームに所属し、そこではWebフロントエンドの開発環境や、プロダクトで使っているデザインシステムの環境を整備していました。そのDXチームで一番大きな活動としては、KARTE Gatewayと呼ばれる新しい認証基盤システムの導入において、既存のExpressのミドルウェア構成をTypeScript / JavaScriptのパーサーを使って構文解析で生成したAST(Abstract syntax tree)をベースに静的解析を行い、ミドルウェアの構成情報や設定をYAMLにシリアライズするツールを作ったことです。
この頃は、OSS活動に携わる過程で、JavaScriptやTypeScriptのパーサーを使ってバンドラのプラグインや自分のOSSで考えたDSL(Domain Specific Language)などのコンパイラを作ったことがあったので、その経験を活かして貢献することができました。ツールを作るときは、他の人でも自分がいなくても引き続きメンテナンスはもちろん、言語処理の力を借りると今回のような大規模なマイグレーションも可能ということを理解してほしかったので、言語処理系の知識があまりない人でも理解しやすいようにコードを書いて引き継げるようにしました。
このときのインタビュー記事があるので紹介しておきます。
燃え尽き症候群に気をつける
プレイドに入社してからは、業務の時間を利用してOSS開発をしています。これにより、OSS開発に四六時中専念できるようになりますが、自分はあえてそうしていません。その理由は、がんばり過ぎると燃え尽き症候群(Burnout:バーンアウト)になってしまうからです。
GitHubは自社メディアサイトである「The ReadME Project」でOSS活動する人たちの裏側を伝えています。そこでは、Vue.jsの作者Evan氏が、OSS開発者に彼自身の経験を元にアドバイスしています。
また、Vue.js Amsterdam 2024のセッションで、Evan氏は実際に生の声で伝えています。
それらから、Evan氏は以下のアドバイスをしています。
OSS活動でがんばり(働き)過ぎないよう線引きする
OSS活動に取り組む人は明確な目標を持つ
これらのアドバイスは、業務で取り組むプロジェクトに対するシニアな経験者のアドバイスとほとんど同じなのでは?と感じた方がいるかと思いますが、そう、ほぼ同じです。そして、Evan氏自身、燃え尽き症候群を幾度も経験していて、その経験に基づいているのです。
OSSのプロジェクトは、何らかの課題を解決するものや作りたいものを趣味的な感覚でスタートするケースが多く、業務外のプライベートな時間を使って活動している人がほとんどです。GitHubはソフトウェア開発者向けのコードを通じたSNSであり、他の人とコラボレーションができます。近年のOSSプロジェクトはそれに興味がある人たちが集まってGitHub上で運営しています。
最初趣味的に始まったOSSプロジェクトが、GitHub Trendsやブログ記事、外部のSNSなどを通じて着目されて人気が出てくると、Evan氏のようにOSSプロジェクトにフルタイムで取り組むケースがあります。成り行きでフルタイムになった人が明確な目標を持たないままOSS活動していくと、取り組んでいる理由を見失った状態になりがちです。その状態のまま趣味の延長線上で日々OSS活動に取り組んでいくと、私生活とのワークライフバランスが取れなくなったり、健康を害したりするようにもなります。
OSSプロジェクトでの活動は常に楽しいことやうまくいくことばかりではなく、時にはネガティブなことやつらいことが起こったり、それに対して精神を病んだりすることがあります。そして、OSSプロジェクトは会社勤めの業務とは違い、悩みを打ち明ける相談相手があまりいないことが多く孤独になりがちです。こうした負の側面に度々遭遇して、しまいには燃え尽き症候群になってしまっているのがほとんどのケースです。
そうならないようにするためには、OSS活動は趣味の延長線上のようにがむしゃらにがんばるのではなく、ワークライフバランスが取れるよう活動の線引きをしたり、何のためにOSS活動するのか、それで何を成し遂げたいのかなどの目標を持ったりして、OSS活動していくのが重要だと私も考えています。
私のOSS活動の目標は複数ありますが、OSS開発者としては、Vue.jsの次の取り組みであるVaporを発展させ、Evan氏が最近立ち上げたVoidZeroを通してもっとWeb開発者がプロダクティブなものを作れるような環境を作っていきたい、そして国際化対応周りの課題を解決するものを自分のOSSプロジェクトで達成したいという目標があります。また、OSSコミュニティオーガナイザーとしては、Vue Fes Japanなどのコミュニティを運営していますが、近年Evan氏のViteをきっかけに、コミュニティを巻き込んで他のOSSプロジェクトとコラボレーションするエコシステムが広がってきているので、他のコミュニティが参加できるカンファレンスにする、という目標があります。それらの目標を持って現在活動しています。

最後に
この記事では、私がソフトウェアエンジニアになってから現在までを振り返りました。さまざまな経験をして今の自分のキャリアが形成されています。キャリアの形成の仕方は、それぞれ個人の環境が異なるので、自分自身で築く必要がありますが、これからソフトウェアエンジニアを目指す人、もしくは悩んでいる人に、私から最後に1つ伝えておきます。
遠回りしたことは無駄にはならない
私が好きな言葉に「遠回り」という言葉があります。この言葉は人によってはネガティブに解釈するかもしれませんが、私にとってはポジティブな言葉として勇気をくれるので好きな言葉です。
『ジョジョの奇妙な冒険』は人間讃歌が詰まっていて大好きな漫画です。第7部のスティール・ボール・ランでも、主人公の案内役的なジャイロがこの言葉を主人公のジョニーに向けて、最後に彼を成長させる言葉として贈っています。
「一番の近道は遠回りだった」「遠回りこそが俺の最短の道だった」
野球界のレジェンド、イチロー氏も2019年の引退会見でこの言葉を使って、自分の人生の生き方について話しています。
遠回りすることでしか本当の自分に出会えないというか、そんな気がしているので
イチロー氏の引退会見の動画がYouTubeに残っているのでその動画(25:45〜29:00の辺り)のURLを紹介しておきます。
自分が理想とするところへ進むのは、真っ直ぐに目指すべきではあります。ただ、直接理想のところにたどり着いて、そこでギャップがあり過ぎては何もできないし、その先を続けることができない。後退してでも、地道に積み重ねて少しずつ進むしかない。そうして限界を超えながら進んだ先が理想の自分になっていくんだ。イチロー氏はこのようなことを会見で語り、ジャイロはこうしたことをやってきたんだから今のジョニーならできる!ということを遠回りという言葉を使ってジョニーに伝えたんだと思っています。
これまでのキャリアを振り返ってみると、自分も遠回りして形成されたキャリアだと思っています。改めて自分のキャリアの遷移をまとめると以下になります。
新卒入社した会社で一通りシステム開発経験を経て、フルスタックなソフトウェアエンジニアとして活動できる力を身に付ける
中堅的立場としてマネジメント寄りのキャリアを迫られ、ソフトウェア開発のリードや統括することもやりたいと思いつつも、プレイヤーとして実際にコード書いてソフトウェア開発をしていたいと悩む
シリコンバレーツアーで自分が理想としているキャリアを経験できる環境があるということを知り、たまたま興味を持っていたWeb業界のほうに自分が望む環境があることを知り転職
転職先の開発プロジェクトは、技術スタックも開発プロセスも前職とはまったく異なり、Webサービスのシステム開発経験がない自分にとってキャリアはゼロから始まった
前職で身に付けたソフトウェア開発スキルやノウハウを転用させる形でWebサービスのシステム開発に順応し、開発業務を通してフルスタックで開発できるスキルを習得
その後、フリーランスを経て、フロントエンド、バックエンド両方を開発するフルスタックなソフトウェア開発者として、再びスタートアップな会社に正社員として復職し、テックリードを務める
テックリード経験後、アーキテクトも務め、会社の事業ピボットをタイミングにCTOを務めて開発プロジェクトのマネジメントだけでなく、ビジネスに関連する業務を経験することで、自分の目標キャリアを実現
最初の転職によってキャリアがリセットされるような遠回りをしていますが、過去のソフトウェア開発経験やノウハウがあったおかげで、その後は地道に積み重ねて、最後は目標としていたCTOを経験してキャリアを形成することができたと考えています。
今は、OSS活動を主軸にした、他の人と違うソフトウェアエンジニアライフを送っていますが、自分は特に後悔していません。現在はOSSを使ったシステムやSaaSのようなプロダクト開発は当たり前となってきており、OSSは社会に必要不可欠です。自分のようなニュータイプなソフトウェアエンジニアの人が出てこれるよう、今後も今のキャリアを続けていきたいと思っています。