Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

大切なのは外の世界とつながること。一人の少年がPythonスペシャリストになるまでの軌跡

はじめまして、岡野真也(@tokibito)です。私は現在、ソフトウェアエンジニアとして働いており、株式会社ObotAIの取締役CTOと株式会社オープンコレクターの取締役として2社に所属しています。

エンジニアとして私はDjangoフレームワークを長く使っており、これと併せてPythonも15年以上利用しています。今回、私自身のキャリアについて振り返る機会をいただきました。私がどのように今の立場に至ったのか、技術への取り組み方、キャリアについての考えなどを語りたいと思います。

アウトプットをしながら勉強することでスキルを磨く

私は幼い頃から、家族や周囲の環境、特に学生時代の体験によってプログラミングを勉強する道をたどってきました。プログラミングの勉強を本格的に始めてからは、作成したソフトウェアを公開するというアウトプットもするようになったのです。

プログラミングとの出会い

初めてプログラミングを体験したのはもう30年以上前、私が5歳頃のことです。父の膝の上に座ってキーボードを前にし、指示された通りにコンピューターに打ち込みました。 HelloWorld相当のプログラムでしたが、実行すると画面に文字が表示されたことを喜んでいるような子どもでした。この頃のパソコンはNECのPC-8801で、ハードウェアスイッチによってモードを切り替え、起動してからすぐにBASICのプログラムを打ち込んで実行する環境でした。

小学生の頃、父がパソコンを買い替えた際に、おさがりで初めてパソコンが与えられました。小学校の図書室にすがやみつる先生の『こんにちはマイコン』という書籍があり、これに載っていたBASICのプログラムをノートに書き写して帰って家で打ち込む、といったことをやるようになりました。打ち込んだプログラムにバグがあり、うまく動かないときに父に相談すると、すんなり解決してくれて「すごい!」と思ったのを覚えています。その後も父からのおさがりで、PC-9801(DOS)、Windowsマシンと概ね一世代型落ちのパソコンに触れてきました。

中学生の頃には、学校でPC-9801にてBASIC言語の簡単なプログラムを作成する授業があり、その時点ではすでに「プログラミングとはパソコンに命令セットを入力すること」だと認識していました。ただし、プログラミングを深く勉強する機会はまだありませんでした。書き写したプログラムを入力するだけのこと(いわゆる写経)をやっていて、IF文による分岐や繰り返し、ジャンプ処理があるくらいまでしか理解していませんでした。どのようにプログラムを作っていくのかを知らず、自分で作りたいものを作れるまでにはなっていません。そのため、徐々にプログラムを書く機会も減っていきました。

ソフトウェアを公開するということ

中学卒業後に進学した高専では、コンピューター室のパソコンにVisual Basicの開発環境がセットアップされており、機械工学科に進んだ私でも利用できる状態でした。他学科の授業で使っている教科書と同じVisual Basicの本を勢いで購入し、本に書いてある内容を入力して動かしてみる日々が再び始まりました。

Visual Basicの本を3冊勉強したところで、ようやくプログラムの作り方の感覚をつかめるようになってきました。そこで、Visual Basicで簡単なツールを作ってみることに。当時、友人とウェブサイト制作をして遊んでいたこともあり、HTMLを記述する際に利用するカラーピッカーを作りました。 Windows OSのパソコンで「フリーソフト」を便利に利用する、というのが一般的だった時代です。私が作ったソフトウェアも他の人のパソコンで動かせるので、「じゃあ配布でもしてみようかな」と考えました。

フリーソフトを入手するのによく使っていた、Vectorというソフトウェア配布サイトに作者登録し、誰かに使ってもらえるように作成したツールを登録・配布してみました。これはVisual Basicを勉強し始めてから4か月後くらいのことです。

Vectorでソフトウェアを公開し、配布するためには説明書を書く必要がありました。また、ライセンスについても明記する必要があり、自分が普段利用しているソフトウェアのREADME(最初にお読みくださいの文書)を読みあさって、参考にしながら自分のソフトウェアの説明書を書きました。このとき身についた文書作成と、ライセンスについての考え方、知識は今でも役に立っています。

この頃実際に配布したソフトウェアは、今でもダウンロードできます。 https://www.vector.co.jp/vpack/browse/person/an028567.html
メンテナンスはしておらず、当時を懐かしむためにそのまま残しています。

ソフトウェアを公開してから程なくして、パソコン雑誌の編集部から「あなたのソフトウェアを本誌で紹介し、付録CDに収録したい」との依頼がありました。フリーソフト全盛の時代で、「ソフトウェア100本紹介」のような雑誌が多く出版されていた頃の話です。収録した見本誌をいただけるとのことで快諾し、月に数冊程度雑誌を手にしていました。ソフトウェアを公開するといろいろな人が使ってくれたり、反応があったりするんだ、と知ることができました。

ライブラリ開発、そしてその反応

その後もVisual Basicで小さなツールを作って公開することを繰り返していましたが、Visual Basicではポインタを自由に扱えないこともあり、徐々に不便に感じる機会が増えていきました。友人にVisual Basicのポインタの扱いが不便であると話してみると、Delphiという便利な言語があり、学校のパソコンでも使えると教えてもらえました。Delphiの本を購入して勉強してみたところ、Visual Basicよりもコンポーネントが充実していたため、すぐに乗り換えを実施。自分でもカスタムコンポーネントの作成が簡単にできたので、使い回せる部品をコンポーネントライブラリとしてまとめて再利用するようになりました。

ライブラリ作成に慣れてきたところで、今度は自作ライブラリも配布してみることにしました。Delphiの無料のライブラリは、ソースコード付きで配布することが多く、配布のためにライセンスについて調べました。このとき初めてオープンソースソフトウェア(OSS)について知ることになります。いくつかのライセンスについて調べていくうち、自分がライセンスのあり方として最も共感できたのが修正BSDライセンス(※1)だったため、自作のライブラリにはBSDライセンスを採用しました。これ以降に作成したライブラリについても、ほとんど修正BSDライセンスかMITライセンス(※2)を採用しています。

ライブラリを公開して配布したところ、ソフトウェア開発者の方から不具合や利用報告の連絡をいただくようになりました。このとき公開したライブラリの1つは、利用者数がかなり多いソフトウェアにも採用されました。自分が普段利用しているソフトウェアの謝辞に自分の名前が載っていて、驚いたこともあります。このことは自分と同じソフトウェア開発者に役立つものを世に出し、感謝される、という貴重な経験となりました。

※1:Berkeley Software Distribution License|カリフォルニア大学バークリー校で作成されたOSSライセンスのこと
※2:MIT License|X11 License、X Licenseとも呼ばれる。マサチューセッツ工科大学(MIT)で作成されたOSSライセンスのこと

ウェブアプリケーション開発の世界へ

私がウェブアプリケーション開発の世界を知り、本格的に関わるきっかけとなったのは、自宅でのサーバー運用を始めたことでした。ウェブサイト制作の経験は以前からありましたが、あくまでHTMLとJavaScriptによってウェブページを作るまで。サーバーサイドのプログラム(当時はCGIが主流)にも興味はありましたが、仕組みを理解できず、勉強しようとして挫折することを繰り返していました。

便利さを求めて始めたサーバー運用

2003年ごろは徐々に世間のインターネット環境も高速化されていっており、ADSL回線や家庭用の光ファイバー回線のサービスが始まっていました。実家のインターネット環境は、ダイヤルアップ接続から光ファイバー回線に変わり、実効速度が1,000倍ほど速くなりました。私は寮生活をしていましたが、週末に実家に帰ることも多く、この頃から実家に置いているパソコンを遠隔で利用したい、と思うようになったのです。

パソコンを複数台所有するようになってから、LANケーブルとスイッチングハブで接続し、内部ネットワークを組むことはしていたので、これをインターネット越しに利用するにはどうすればいいのだろうか、という疑問からいろいろと調べて試していきました。こうして実家に設置したパソコン(サーバー)を遠隔利用できる状態にするなど、ネットワーク通信に関する知識を身につけていきました。

ウェブ開発の必要性を知る

サーバー運用を始めてから、自分のウェブサイトもサーバーでホスティングしてみたい、と思うようになりました。当時サーバーとして利用していたのはWindows OSをインストールしたパソコンでしたが、HTTPサーバーのソフトウェアをインストールすることで、ウェブのホスティングもできると知り、試していったのです。そしてHTTPサーバーを運用してみて、ようやくCGIといったサーバーサイドのプログラムの仕組みを理解できるようになりました。サーバー側でプログラムを動かすことにより、ウェブブラウザでアプリケーションを利用できる仕組みの便利さを知ったのです。自分でも試してみたくなり、DelphiでCGIプログラムを作り始めました。

この頃サーバーソフトウェアとしてBlackJumboDog を利用しており、このソフトはソースコードも配布されていました。当時、私はFTPプロトコルの拡張仕様を利用したくて、RFCを読みながらC++でコードを書いて改造して利用していました。BlackJumboDogの作者の方にも、のちに直接会う機会があり、感謝を伝えることができたのはうれしかったです。

Djangoフレームワークとの出会い

高専卒業後は大学に進学し、その際に学科を情報工学に変更。2006年ごろ、私が配属された大学の研究室ではウェブサイトの運用も行っていて、Pythonで作られたCMS(コンテンツ管理システム)であるPloneを利用していました。CMSが便利であることを知り、自宅のサーバーにもPloneをインストールして少し動かしてみたのですが、カスタマイズが難しく、また、サーバーの性能も低かったため、思うように使えません。

Python言語はこの頃から勉強し始めていたため、同じPythonで動かせる他のウェブアプリケーションを探していたところ、Djangoフレームワークで作られたブログアプリを見つけました。このブログアプリを試しに動かしてみたところ、簡単に動かせて、自由なカスタマイズも可能。ここからDjangoフレームワークを本格的に使うようになりました。

当時のDjangoフレームワークはまだバージョン0.95でしたが、有志の方々がドキュメントの日本語翻訳をしてくれていたこともあり、入門しやすかったです。それでも情報は足りず、Djangoフレームワークのソースコードを読むようになり、詳しくなっていきました。この頃利用していたブログアプリの作者の方にも、のちに直接会う機会があり、感謝を伝えることができたのはうれしかったです。

20歳の頃の写真。

就職、そしてコミュニティへの参加

私は学生の頃からプログラミングができ、ある程度ソフトウェアを開発できる能力を身につけていましたが、仕事で通用するのか、というとまだまだでした。就職して、社会人になってから得たことも多くありました。

最初の就職

高専から大学への編入学の際に学科を変更したことで単位数がぎりぎりになり、就職活動にあまり時間を使うことができなかったのですが、留年することもなく運良く札幌の小さなシステム開発会社に就職できました。それまでソフトウェアを開発、公開し、人に使ってもらうことには慣れていましたがあくまで無料でしたし、「プログラミングによりお金を稼ぐ」という経験は就職してからが初めてのことでした。これまで勉強してきた成果でお金を稼ぐことができ、うれしかったのを覚えています。

最初に就職した会社は、データセンターでのサーバーやネットワークインフラ構築、ソフトウェア開発を請け負うのが主な業務内容でした。私はソフトウェア開発の担当として採用されましたが、人が足りないときにはサーバー構築の作業にも駆り出されていました。自宅でサーバー運用をしていたので、まったくの未経験ではなかったのですが、業務では全然知識が足りず、先輩社員に教わりながら仕事をしていました。

2007年ごろは、ウェブアプリケーション開発がすでに活発に行われていた時期で、業務ではActive Server Pages(VBScript)、Java、Perl、PHPなどのプログラミング言語や技術が使われていました。私に与えられた業務も、PHP、Perl、VBScriptで作られたシステムのメンテナンスや、Ruby(Ruby on Rails)でアプリを開発すること。当時はまだRuby on Railsも1.2系で情報が少なく、今思い出しても拙いコードを書いてなんとか業務をこなしていました。

IT業界のコミュニティへの参加

最初に就職した札幌の会社ではOSSを積極的に利用していました。また、OSSコミュニティに積極的に参加している先輩社員もいて、「札幌でオープンソースカンファレンスというイベントがあるので参加してみてはどうか?」と提案してくれました。OSSコミュニティというものには興味があり、近くでイベントがあるならと、乗り気で参加。結果、いろいろな形でOSSに関わっている方々と交流でき、とても刺激を受けました。そして交流のためには情報発信も必要だと知り、この頃から積極的にブログを書くようになったのです。

また、その頃には札幌でのIT系の勉強会も増え始めていて、それらにも積極的に参加し、講演者として登壇するようになりました。そうしてエンジニアコミュニティのなかで、人とのつながりが増えていったのです。ブログで技術情報を書きながら仕事をし、オンラインのコミュニティにも参加していたところ、Pythonのコミュニティで温泉にて開発合宿をするイベントがあると知り、参加してみることにしました。当時の札幌ではPythonのユーザーはそれほどいなかったのですが、そのイベントにはPythonの話題で話せる人がたくさん参加していて、とても楽しい時間を過ごしました。

会社の業務ではスクラッチ開発でシステムを1人で作る機会が何度かあり、成功と失敗どちらもありつつ、経験を積んでいきました。そしてこの頃から、コミュニティでいろいろな人たちから話を聞く機会も増え、自分のキャリアについて考えるようになったのです。

転職、新しい働き方とキャリアの積み重ね

Pythonのコミュニティでつながった人から「Djangoフレームワークを使えるエンジニアを探している会社があるから紹介する」と言われ、開発合宿帰りに面接を受け、すぐにオファーをもらうことになりました。今ではDjangoフレームワークを採用する企業が増え、Djangoフレームワークに詳しいエンジニアも増えていますが、2008年当時はまだ国内にそのようなエンジニアはほとんどいません。私はPython、Djangoフレームワークを利用してアプリを作っていた経験があり、うまくつながったなあ、と思っています。この1回目の転職で、活動場所を北海道から東京に移しました。

社外へアウトプットしながら働く

転職先の会社は業務委託でのシステム開発(いわゆるSESや受託開発)を主な業務としていました。そして転職してからは、Djangoフレームワークを利用したシステム開発を主に行うことに。また、ウェブアプリケーションの開発でJavaScriptを使う機会も増えました。

この会社では、ブログ等で社外に技術情報を発信することを推奨していました。会社のメンバーでもブログで情報発信している人や、IT系の勉強会で登壇する人が多く、社内での雑談も技術に関することがかなり多かったのが印象に残っています。

顧客のプロジェクトに参加してシステムの開発に従事しつつ、開発中に欲しくなったライブラリを社内で開発してOSSとして社外にリリースすることもできました。また、会社名を背負って勉強会等のイベントに登壇する機会も増えていきました。

2009年の写真。自宅には何台もサーバー用のパソコンがありました。

スペシャリストでありジェネラリストでもあること

社内でPythonとDjangoフレームワークを使う案件をこなしていくと、いろいろな課題に直面しました。そのたびに同僚に相談し、自分でも調査し、試行錯誤しながら課題を解決していったのです。これにより、PythonやDjangoフレームワークに、さらに詳しくなりました。会社に持ち込まれる案件は、さまざまな業界のものであったため、幅広い分野の業務知識が身につくことにもつながりました。

また、小さな会社では社内の雑務を手伝うことも多く、「いかに効率よく業務できる環境を作るのか」を考えるきっかけにもなりました。Djangoフレームワークのスペシャリストとして仕事をしつつも、幅広いソフトウェアや業務の知識が身についたことで、ジェネラリストとしての役割もこなせるようになりました。

メンバーからリーダーへ

いくつものプロジェクトに参加し、経験を積み重ねてきた私は、徐々に任される業務の幅が広がっていきました。規模の小さいプロジェクトでは、見積りから納品までを1人でできるようになり、書類の事務作業以外のすべてを任されることが増えていったのです。複数人の開発チームでは、経験の多さから、リーダーの役割を担う機会が増えていきました。

リーダーになると、顧客・関係各所とのやりとりやチーム内の取りまとめ、どのように開発を進めていくのかを考えるなど、コードを書く以外の業務が増えました。大きな規模のソフトウェアを開発するためには必要な知識がまだまだ足りないと、リーダーになってみて強く実感することになったのです。

コードを書く前に設計書を作ったり、ドキュメントを作ったりすることは以前からやっていたことですが、チーム開発を率いることになってから、これらの作業はより重要だと痛感。そこから設計手法やドキュメンテーションのツールにも興味を持ち、勉強を進めていくきっかけにもなりました。

積み重ねたキャリアを活かして仕事をする

1回目の転職を通してさまざまな経験を積むことができ、スキルも身につけることができました。開発チームのリーダーとしてプロジェクトに参加することが多くなってきた頃、この先のキャリアをどうしたいか、考えるようになりました。入社当時よりも会社は規模が大きくなっていて、業務も安定しているなかで、仕事は余裕を持ってこなせているけれど自分の成長は少ないと感じていたのです。

何をしたいかよりも誰と働きたいか

所属している会社の待遇や業務の分野にさほど不満はなく、しかし自分の成長が少ないことに悶々とした気持ちを抱えるようになってしばらく、「次に働きたい場所はどこだろう?」と考えるようになりました。いろいろな勉強会やコミュニティに参加し、さまざまな企業の話を聞きました。そうして私が思ったのは、「有名なアプリやサービスの開発に関わりたいのではない」「自分と一緒に成長しながら事業を成す人や尊敬できる人と仕事をしてみたい」ということでした。

そんなとき、友人であり、今でも尊敬しているエンジニアの小泉守義(@moriyoshit)さんが、「一緒に働いてくれる人を探している」と話していたので、私はすぐに「じゃあ行くよ」と答え、株式会社オープンコレクターへの転職が決まりました。ちなみに、1回目の転職先の会社には8年ほど所属していました。長く所属したこの会社とは現在でもプロジェクトで一緒に仕事をすることがあり、仲良くさせていただいています。

株式会社オープンコレクターは、私が入社する以前は小泉さん1人だけの会社でしたが、私と同じタイミングで入社したもう1人と合わせて、3人体制の会社としてやっていくことになりました。業務内容は以前と変わらずでしたが、久しぶりの小さな会社では、自分で仕事を見つけてくる必要がありました。イベントに参加した際には「うちで何月からなら仕事を請けられますよ」といった営業トークもするようになり、そうしてまた私のスキルが広がることにもつながりました。エキスパートだけの会社では、自分がリードされる立場になる場面も多々あり、学ぶ機会が増えたのもよかったです。

小規模な会社のCTOという仕事

オープンコレクターへ入社したあとも、引き続きブログで技術情報の発信をしていたところ、株式会社ObotAIの代表である北見好拡(@hiromariana)さんからTwitter経由で声をかけてもらいました。最初は技術コンサルティングという形でObotAIの手伝いをしていたのですが、しばらくしたのち、CTOとして入社してほしいとの打診があったのです。オープンコレクターの代表である小泉さんとも相談し、オープンコレクターでは取締役として在籍しつつ、ObotAIで取締役CTOになる、という形になりました。

ObotAIは、私が手伝い始めたときは、エンジニアチームを作ってこれから製品開発に着手する段階でした。小規模な会社でのCTOは仕事の幅が広いです。社内の技術面に責任を持ち、技術的な相談に乗り、開発チームを作り、教育し、製品の開発もしなければなりません。多忙ですが、一つひとつの業務は、今まで経験したことがあるもので、これまでの積み重ねのおかげで仕事をこなせている、と実感しています。最近はCTOの役割とはどうあるべきかと考えながら、日々業務に取り組んでいます。

趣味のオートバイ。休日にはこれに乗って出かけています。

伝えたいこと

私が現在の役職や立場にいるのは、これまでのキャリアの積み重ねと、巡り合わせのどちらも良かったからだと思っています。キャリアを一つずつ積み重ねることは大切です。しかしそれだけではなかなか機会は巡ってきません。私はずっと前からさまざまな場所や方法でアウトプットすることを続けており、これが良い機会を得ることにつながったのだと考えています。機会をものにするためには日々の研鑽も必要です。これからもいろいろな経験を積み、アウトプットを続けていきたいと思います。

編集:中薗 昴

【アーカイブ動画】Findy Engineer Lab アフタートークイベント

KotlinとPythonのスペシャリストが語る、一つの言語を軸としたキャリア戦略とその後

KotlinとPythonのスペシャリストが語る、一つの言語を軸としたキャリア戦略とその後 -Findy Engineer Lab After Talk Vol.4-
・開催日時:2023/7/20(木)12:00~13:00
・アーカイブ視聴方法:こちらから
※視聴にはFindyへのログインが必要です。ご登録いただくと、Findy上でその他の人気イベントのアーカイブ視聴も可能となります。