Pythonとの出会いとOSSのきっかけ
はじめまして、フリーランスエンジニアの服部(@hhatto)です。
現在は、ブロックチェーン関連のWebアプリケーション開発やフォント制作販売会社での研究開発・技術顧問をしています。
業務外では、OSSの開発を行っており、Python/PHP/C/Go/Rustで作成したライブラリをオープンソースとして公開しています。特にautopep8というPythonのコード整形ツールは3500以上のStarを集めました。
https://github.com/hhatto/autopep8
▲autopep8
今回は、OSSに打ち込む理由やメリットを中心に、OSSを起点にしたキャリア形成について紹介できればと思います。
Pythonとの出会い
私がPythonに触り始めたのは、大学時代、『How to Become a Hacker』というサイトを見て影響を受けたのがきっかけでした。この頃は、Pythonのユーザー数が少なく、日本語の技術書やWeb上の情報源もあまりなかったため、PythonJPのメーリングリストを主な情報源として学んでいました。
Pythonはプログラミング言語としては好きだったのですが、大学卒業後に入社したSESではC言語をメインで使っていたので、一時的にPythonからは離れていました。
OSSを始めたきっかけ
SES在籍中にOSSを始めたのですが、その理由は次の3つです。
- 業務で使っているC言語以外での開発経験を積みたかった
- OSSだと実践的なFBが得られる
- もともとOSSに対してのあこがれがあった
SESにいた当時、1つの言語の経験だけだと、エンジニアのキャリアとして成長が見込めないという焦りを感じていました。ただ、業務内で融通を利かせることは難しかったので、OSSなど業務外の活動の中で開発経験を積めないか、と考えたのがきっかけです。
また、言語について書籍でも一通り学ぶことはできますが、書籍をなぞるだけでは実践的な経験は得られないと感じていました。公開して世に問う、というと大げさな気もしますが、ユーザーに使われる中で実践的なFBを得ながら経験を積んでいく方が自分の力になると考えていました。
実際、OSSを通してPythonの実力だけでなく、プログラミング力全般が上がったと思います。
当時の時代背景も理由の1つです。当時は、Pythonの便利なOSSが使われるケースが徐々に出てきた時期だったのですが、そういったものに感化されて自分も作りたいと思ったことも、モチベーションとなっていました。
OSSと私 from Hattori Hideo
OSSで勉強して仕事にする
私は今でもOSS活動を行っていますが、先程のポイント以外に次のようなメリットを感じています。
- OSSが名刺代わりになる
- 実務未経験の言語でも実績を積む機会になる
まず、OSSでの活動は、自分で書いたコートがそのまま公開されて残っているので、どの分野に興味があるのかや、どのようなソースを書いているのかの証明になります。実際、転職の際にはOSSの実績が役に立ちました。
特にautopep8のように、ある程度認知を得られたOSSがあると、その傾向は強いと思います。
例えば、SESからベンチャー企業への転職では、実務経験はC言語しかほぼなかったのですが、autopep8含めPythonのアウトプットがOSSとして残っていました。そのため、Web系で同じ動的言語であるPHPをメインに使っていた企業への転職に繋がったと思います。
他にもPythonメインの会社への転職時には、Pythonやその他のアウトプットがあったので、(良いか悪いかは別として)通常はコーディング面接のようなものがあるのですが、私は無しで入れたりしました。
また、実務での使用実績のない言語・技術についても、実績として提示することができるというメリットがあります。
実務経験が無い言語を使った案件だと、フリーランスとしてはなかなか参画しにくいですが、OSSである程度の実績を積んでおくことで、クライアントから信用を得やすくなります。
直近だと、GoのツールをOSSとして公開しておき、Goの習熟度合いを評価してもらう、といったことがありました。
新しい言語を学ぶ際は、必ず書籍で学ぶだけでなく、OSSとして実績を残しながら学ぶようにしています。
フリーランスエンジニアにとって、新しい技術・言語を学習しながら、実績としても提示できるOSSは、案件獲得・キャリア形成の面でとても魅力的だと思います。
▲PyCon JPでの登壇時
OSSの始め方・進め方
OSSにはハードルを感じる方もいらっしゃると思うのですが、気軽に始めるのが良いと思います。実際のOSSの進め方について、アイデアの出し方と開発中に意識していることについてご紹介します。
アイデアの出し方
まずは、自分が欲しいツールはないかという視点で探しています。autopep8も、コードを自動で修正してくれるツールが無かったため、省力化のために開発しました。
OSSは他人に強制されることは無いので、他の人がどう思おうと関係ありません。(ユーザーが増えてきたら別ですが、、)
自分が便利だなと思い、同種のツールがまだ世の中に無ければ、まず手を動かしてどんな形でもいいので公開すると良いと思います。
あとは、単純に好奇心の向くままに開発することもあります。例えば、あるPerlのツールがあるのですが、処理に結構時間がかかっていて、それをGoで書いたらどれぐらい早くなるかな、という好奇心でツールを作ることもありました。
自分の欲しいツールのアイデアが湧かない、好奇心の向くテーマが無いという時は、既存のOSSの開発に参加すればいいと思います。
今は、OSSがごく一般的に使われています。GitHubに載っているIssueの中にはやろうと思えば簡単なIssueもあるので、実際にPullRequestを書いてみるとか、そういうところから始めればいいと思います。
設計について
autopep8の時は、PyPIというPythonのパッケージを登録するサイトを参考にしていました。Pythonで開発する場合に書いてはいけないもの、などのお作法について学べるので重宝します。
他言語の同様の実装を参考にすることもあります。例えば、Goで開発したgoclocの場合は、Rustで同様の実装が元々あったので、それを参考にしていました。
開発の際に意識していること
開発しているフェーズによると思うのですが、初期はユーザーがいないので、自分が使いたい機能や、実際に便利な機能を提案していただいた時には、ほぼ何も考えずに便利だから取り入れようという形でどんどん機能追加をしていました。
今のautopep8だと何年も開発が進み、あまり既存のものをバグらせないように開発しています。今の段階だと使っていただくユーザーの声が大切なので、上げてもらった要望をチェックした上で、違和感がない機能であれば、取り入れています。
ただ、やはりバグは絶対に発生してしまうので、バグが出た時はできるだけ早く修正することにしています。単純に上がってきたイシューを素早く解決したり、実際にコードを修正しないものでもしっかりと見てすぐに返せるものは返したり、といったことを意識しています。
まずは気軽に始めてみよう
今ではPythonのコード修正ツールの古株として紹介されることもあるautopep8ですが、最初は全然ユーザーがおらず、こんなに多くのユーザーに使ってもらえるとは思っていませんでした。
伸び始めたのは、次のようなきっかけがあったからだと思います。
- Hacker Newsへの掲載
- PyCon JPのLTでの紹介
大規模なOSSに参加することも面白いですが、開発が好きで開発自体を趣味でやれるような感覚の持ち主にとっては、開発したいものを自由に開発する、といったスタンスでまずは始めてみるのが良いと思います。
その上で、伸びたらいいなくらいの認識でいればいいのではないでしょうか。
継続的にOSSに取り組んでいることで、技術への興味があるということの証明にもなりますし、継続して取り組み続けているということ自体も評価されているため、継続的に関わるということが一番大切なことだと思っています。
フリーランスエンジニアにとってはキャリアアップにもスキルアップにもつながる良い取り組みだと思うので、OSSに親しみのある人が増えれば幸いです。