オープンな開発をできる仕事 @ クリアコード - 2022-07-08 - ククログ

ククログ

株式会社クリアコード > ククログ > オープンな開発をできる仕事 @ クリアコード

オープンな開発をできる仕事 @ クリアコード

クリアコードに入社して半年強ほど経過した福田です。

今回は、入社した経緯や、クリアコードで働いてみて思ったことをご紹介します。

いろいろお話ししたいことはありますが、やはり何と申しましてもクリアコードといえば「フリーソフトウェアで稼ぐ」という理念です。

この理念自体、斬新さ、面白さ、やりがい、等々多くのことを味わえるものですが、 「エンジニアとしてオープンな開発をできる」ということも非常に魅力的です。

現在一緒に働く人を募集しているので、少しでもクリアコードの仕事に興味のある方はぜひご覧ください!

入社のきっかけ

プログラミングは高校生の頃から好きでした。当時ちょうど話題だったHSP言語1でゲーム作りにハマったり、 Minecraft2にコンピュータやロボットを導入するmod3を入れて、木こりや畑作業などを自動化するプログラムを書いて楽しんだりしていました。

大学を卒業すると、ソフトウェアエンジニアとしてITメーカーに入社し、自社製品の開発に携わりました。 自分たちで製品を開発してそれを世の中で役立ててもらう、という仕事ができて、とても楽しい時間を過ごさせてもらいました。 ただ、次第に他の環境で他の開発も経験してみたいという気持ちも強くなり、最終的に転職を決断しました。 在職中は開発に集中したかったので、転職先は退職してから考えることにしました。

そうして転職先を考え出した頃、前職で関わりのあったクリアコードに声をかけて頂いて、まずはオンラインで面談をして頂きました。 そこで色々と話を聞いて、初めてフリーソフトウェアの仕事について詳しく知ることができました。

この時に、なんて面白そうな仕事なんだろう!と大きな衝撃を受けることになりました。

元々抱いていたイメージ

前職で関わりがあったので、未知の会社という訳ではありませんでした。 面談をしてもらって詳しく仕事の内容を聞くまでは、次のようにポジティブな印象とネガティブな印象の双方を持っていました。

ポジティブなイメージ

  • Rubyや「リーダブルコード」で有名な人(須藤社長)がいる
  • 少数精鋭の技術者集団

ネガティブなイメージ

  • 受託開発が多そうで、エンジニアとしての裁量が少なさそう
  • サポート業務もあり、じっくり開発する時間を取れないのでは
  • CやC++など比較的低水準な言語をメインにしていそう

ポジティブなイメージはとてもシンプルですね。 学生の頃に友人たちと一緒にバイブルだと言って読んでいた、「リーダブルコード」という本の解説を執筆している須藤社長への憧れはとても大きいです。

ネガティブなイメージには、当時の私の価値観に依る部分があります。 前職では、自社開発なのでじっくり開発に専念できて、モダンな高水準言語でスイスイ開発できる、という点を享受していました。 そのような当時の私からすると、上記のような点を懸念していたのです。

しかし、実際にフリーソフトウェアの仕事について話を聞くと、これらのことがどうでもよくなるくらいクリアコードで働いてみたくなりました!

フリーソフトウェアの仕事の衝撃

その時に受けた大きな衝撃とは、次の2つでした。

  • フリーソフトウェアで稼ぐという面白い理念
  • オープンな開発をできるということ

フリーソフトウェアで稼ぐという理念の面白さ

クリアコードは、フリーソフトウェアとビジネスの両立を理念としており、フリーソフトウェアの考え方を大事にし、推進している会社です。 この話を詳しく聞き、なんて面白いことをやっているんだ!と衝撃を受けました。

理念やフリーソフトウェアについて詳しくは次の記事をご覧ください。

当時は、ソフトウェア作りを楽しんで、そして作ったものが少しでも世の中で必要とされれば嬉しい、面白い、という曖昧な感覚で仕事をしていました。 しかし、そこに明確な理念のようなものは感じていませんでした。 だからこそ、ある程度納得のいく開発ができた時点で自己満足して、モチベを失ってしまう部分があったのだと感じています。

次は何を楽しみに仕事をしようかと迷っていた自分にとって、面白い理念に基づいて仕事をする、ということがとてもピッタリとハマりました。

この理念を知った時、自分の中でそれまで常識だった考え方が崩れ去りました。 それまでは、ソフトウェアのコードを隠蔽するのが普通のことで、そのことに何の疑いも持っていなかったのです。 フリーソフトウェアを扱うのは、利益の余っている強力な会社か、もしくは利益を求めない個人だと思っていました。 そして、「普通」のソフトウェアはコードを隠蔽して当然だと思っていたのです。

しかし、フリーソフトウェアの考え方では、コードを隠蔽し、フリー(自由)でなくしてしまうことは異常なことだと考えます。 自分たちの利用するソフトウェアなのですから、必要ならばその仕組みを知ることができ、かつそれを自分たちの力で改良できる、それこそが普通のことだと言うのです。 会社の経営者ならばともかく、単なるユーザーとしてなぜ今までこういった疑問を抱かなかったのかと、今では逆に不思議に思います。

「まあその方が良いのかもしれないけど、それじゃビジネスにならないじゃん」と思いますよね。 でもクリアコードは実際にそれをビジネスにしているのです。 詳しくはクリアコードとフリーソフトウェアとビジネスの記事をご覧ください。 私の感想としては、予想以上に普通にビジネスとして成り立っていてビックリしています。

例えばソフトウェアの機能が足りなくて困ることがあります。 フリーソフトウェアならば自分で改良すればお金はかかりませんが、技術力と労力はかかります。 我々はお金をもらってその価値を提供できるのです。 そして、我々の技術力と労力で可能であれば、世界中のフリーソフトウェアがビジネスチャンスになるのです。

フリーソフトウェアをビジネスにすることは、フリーソフトウェアの思想を推進することに繋がります。 フリーソフトウェアの思想がもっと広まれば、世界がより良くなります4。 クリアコードが今後もっと成功して、そのビジネスモデルを広められれば、、、そう思うとワクワクします。

オープンな開発をできるということ

クリアコードはフリーソフトウェアをビジネスにするので、基本的に開発をオープンに(公開して)行います。 具体的には、GitLabやGitHubの公開リポジトリ上で開発作業を進めます。これには次の2つの大きな魅力があります。

  • 自分の成果をオープンにできる
  • 会社の枠にとらわれず、世界中の人と一緒に開発できる

自分の成果をオープンにできる

困った時に、過去に自分が書いたコードや読み解いたコードが役に立つことがあります。 もしくは人に説明する時や自分の技術力をアピールする時も、そのようなコードはとても大事です。 自分が深く関わったソフトウェアのソースコードは、多くの意味において自分の大きな財産です。

しかし、そのソフトウェアのソースコードが公開されていない場合、エンジニアはその財産を容易に失ってしまいます。 私も前職を退職した際に、何年も愛情を持って関わってきたソフトウェアのソースコードを全く見れなくなり、とてもつらい思いをしました。

クリアコードでは、自分の書いたコードが自分の財産になります。 フリーソフトウェアの理念を掲げて仕事をするとなると、エンジニアはその分苦労をしているのではないか、代償を払っているのではないか、 とイメージされる方もいらっしゃるかもしれません。 しかし、実際はこの理念により、自然とエンジニア自身にとっても魅力的な労働環境になるのです。

会社の枠にとらわれず、世界中の人と一緒に開発できる

前職での自社製品の開発では、じっくり開発を進められるというメリットがありましたが、同時にデメリットもありました。 それはいつも同じメンバーで、閉じた環境の中で作業をするしかない、という点です。 最初は問題にならないのですが、何年も続けると環境から学べることが限られてきてしまい、次第に焦りになります。 実際にそのことが転職に至った理由の1つでした。

クリアコードでは、普段の作業は基本的にGitLabやGitHubの公開リポジトリ上で英語で行います。 もちろん社内でチームを組んで開発作業を行うので、社内の人と公開リポジトリ上で英語でやり取りしているだけのこともあるのですが、 そのやり取りに社外の海外のエンジニアも参加してきたり、リポジトリのメンテナー(多くの場合は海外のエンジニア)と修正の内容について相談したりします。 そもそもフリーソフトウェアを対象にするので、多くの場合改修するソースコードは海外のエンジニアが書いたコードだったりします。 自分の修正に海外のエンジニアから質問が来たり意見が来たりすることもあります。

このように、世界中の様々なフリーソフトウェアが仕事の対象となり、様々な世界中のエンジニアたちと関わって仕事をできます。 これも私にとって非常に魅力的なポイントでした。

また、今後の人生を豊かにするために英語のスキルを磨きたいと思っていたこともあり、日々の仕事で英語を使う機会が多いことも嬉しいです。 学生の頃は英語の試験には得意意識がありましたが、英作文や英会話は苦手でした。 今のうちに日常的に英語を使う環境に身を置かないといけないな、と漠然と思っていたのですが、クリアコードがそれにマッチしていました。

クリアコードに入社して、今まで読むばかりだった英語を自分で書くことがとても増えました。 最初は自然な表現が分からず、簡単なことを伝えるのにも苦労していましたが、半年ほど経った今ではスラスラ英語を書けるようになりました。 もちろん自動翻訳サービスも使いますが、それはイディオムや文章構造の参考として使うにとどめており、最後は必ず自分で英語を組み立てるようにしています。

まだ英会話の機会はありませんが、先輩はグローバルな発表の場で英語で発表したり質疑応答したりすることもあったようです。 非同期でできる英作文ならともかく、同期的な英会話となると本当に苦手な私ですが、いずれはそういったこともチャレンジしてみたいと思っています。

入社

以上のようなクリアコードの魅力を知って、とても自分にマッチする仕事環境だなあと感じていました。

当時他にも検討していた会社がありましたが、並行してクリアコードのパッチ採用プロセスを受けさせてもらいました。

パッチ採用プロセスでは、Fluentdのプラグインの機能拡張を行いました。 実際に社外の人が意見を下さったり開発に協力して下さったりもして、オープンな開発をするということが実際にどのような感じなのかを実感できました。 オープンだからこそ、このような採用プロセスもできるわけですね。オープンってすごい、とつくづく感じます。

そこで合格を頂き、最終的にクリアコードに入社することとなりました。

実際に働いてみて

働きだして半年強になりますが、期待通り楽しく働かせてもらっています。

クリアコードの魅力はここまでたくさん紹介した通りで、実際に働いてもまさにその通りだったので、これ以上言うことはあまりありません。 なので、今度はネガティブなことに焦点を当てて紹介します。

当時思っていたネガティブなイメージについて

  • 受託開発が多そうで、エンジニアとしての裁量が少なさそう
  • サポート業務もあり、じっくり開発する時間を取れないのでは
  • CやC++など比較的低水準な言語をメインにしていそう

受託開発が多そうで、エンジニアとしての裁量が少なさそう

前職が自社開発だったので、受託開発自体にネガティブなイメージがあり、心配していた点です。

実際にやってみると、エンジニアとしての裁量が少ないということは全然なかったです。

お客様から「このフリーソフトウェアにこの機能が足りなくて困っている」などのご依頼を頂き、その開発を行うということが多いです。 その際、そのメンテナーのエンジニアの方々とも必要に応じてコミュニケーションを取りながら、 どうすれば良い形で機能を拡張できるかを自分たちで考えて開発を進めます。

その過程で、このソフトウェアにこの改修を入れるべきだというポイントが見つかれば、その機能に直接関係なくても積極的に行います。 これはクリアコードが、フリーソフトウェアを推進するという理念に基づいて活動するからです。 逆に言えば、フリーソフトウェアの推進につながらないような開発依頼は基本的に受けません。

この会社の姿勢により、自然とエンジニアに裁量の大きい仕事が集まって来るように感じています。

サポート業務もあり、じっくり開発する時間を取れないのでは

皆何かしらのサポート業務を担当しています。私も担当しています。 確かにサポート業務がある分、プログラミングに集中できる時間が削れるという面はあります。 一方で良かったこととして、意外とサポート業務自体に意義を感じて取り組めています。 それには次の2つが大きいです。

  • ソースコードレベルでのサポートを行う
  • 皆でフリーソフトウェアを発展させる

「ソースコードレベルでのサポートを行う」というのは、お客様からの質問に対してドキュメントを読み漁って回答をする訳ではなく、 ソースコードまで把握した上で回答をする、ということです。 フリーソフトウェアを仕事にすると、詳しくないソフトウェアでもソースコードをすばやく読み解ける、という能力が大事になってきます。 サポート業務を通してその能力がどんどん鍛えられます。

「皆でフリーソフトウェアを発展させる」というのは、ユーザーの困っていることや要望を聞き、対応することが、フリーソフトウェアとして自然なことだということです。 サポート契約という形を取らなくても、フリーソフトウェアにおいては普段からGitLabやGitHubなどで開発者がユーザーとやりとりをするのが普通です。 そこには、ただサービスとして質問に答えるのではなく、皆でそのフリーソフトウェアを発展させていきたいという共通認識があります。 実際にそこで話し合うなかで良い修正案が出てきたり、実装に手を上げてくれる人が出てきたりもします。 サポート業務はその延長線上にあると感じています。

CやC++など比較的低水準な言語をメインにしていそう

これも人に依る部分が大きいですが、私はこういった言語は保守性に難があり、モダンな言語であれば悩む必要のないメモリリークなどの問題に悩まされるイメージがありました。 

現在私が業務で多く使うプログラミング言語は、C++とRubyです。 どのフリーソフトウェアの業務に携わるかで扱う言語や環境は全く変わりますが、クリアコードが扱うものとしてはやはりC、C++、Rubyが多いように感じます。 他にはPythonやLuaやC#なども見かけます。

CやC++については、難しいと日々感じつつも、既存のフリーソフトウェアの改修がメインであり、1から設計をすることは少ないので、 業務をこなしながら徐々にスキルを身に付けていくことができています。

Rubyについては、Pythonを少し触っていた自分には抵抗なく馴染めました。 一方で、こういった動的型付け言語で大規模なソースコードを保守することの難しさを感じています。 ダック・タイピングは悪いことじゃないの!?とか、そういった従来の価値観との葛藤もあったりして、とても刺激的な日々を過ごしています。

以上のように、当初の懸念どおり苦戦はしていますが、嫌な思いはしていません。 それは、慣れている得意言語でスイスイものづくりをする楽しさよりも、今まで述べてきたような楽しさが圧倒的に勝っているからです。 むしろ、自分のスキルの幅を広められる良いチャンスと感じて取り組んでいます。

その他のネガティブなことについて

フルリモート

これはむしろ良いことと感じる人も多いかもしれません。 しかし、私は会社の人ともっとコミュニケーションを取りたいので、フルのリモートワークにはやや苦痛を感じます。

幸い私は前職で一部の社内の人と面識があったのですが、それでも顔を合わせずに仕事をすることにやや不安を感じるため、 私と同じような感覚がある人にとっては苦痛があるかもしれません。

ただ、会社もこういった点に配慮をしており、定期的に雑談の時間を業務中に設けるなど工夫をしています。

裁量の多さによる焦りや不安

これまで述べてきたような仕事のため、やれることがとても多いです。

ちょっと詳しくなったフリーソフトウェアにもっと首をつっこんでみたり、issueでのやりとりに積極的に参加したり、 こういった記事を書いたり、フリーソフトウェア推進の様々な活動に参加したり。

これは私にとって嬉しいことなのですが、その反面あれもこれもやりたいのに時間がなくてやりきれない、という状態にもなりがちです。 先輩方がものすごい速度でいろいろなことをこなす中、なかなかそれに追いつけずに焦りや不安、自分の力不足を感じることもあります。

一方で、分からないことや困ったことはすぐに聞こう、という文化もあり、いつも丁寧に教えてもらえます。 1つ1つ要領よくこなせるようになって、早く先輩たちと同じようなペースで仕事をこなせるようになりたいなと思っています。

まとめ

クリアコードで働くことになった経緯などを通して、クリアコードやフリーソフトウェアに関わる仕事の魅力などをご紹介しました。

クリアコードでの仕事や、フリーソフトウェアに関する仕事に興味のある方に、少しでも参考になれば幸いです。

クリアコードでの仕事に興味のある方は、ぜひ会社説明に申し込んでみてください!

  1. Hot Soup Processor: https://hsp.tv/ 。BASIC言語風らしいですが、私はBASIC言語は分かりません。

  2. Minecraft: https://www.minecraft.net/ja-jp 。シンプルで自由度の高いサンドボックスゲーム。

  3. ComputerCraft: https://www.computercraft.info/ 。Lua言語でプログラムしたロボットをMinecraft上で動かせます。

  4. 意見の分かれる余地があるかもしれませんが、少なくとも一般的に認知されていなさすぎると感じます(自分がそうだったように)。コードが隠蔽されたソフトウェアばかりの世界にならないように、もっとフリーソフトウェアの考え方を推進する必要があると感じています。