私とコミュニティと生きる道 地方のソフトウェアエンジニアがコミュニティで成長してCTOになる話

はじめまして。そーだい@soudai1025です。
ソフトウェアエンジニアとして、地方の受託開発会社や「はてな」などを経て、今は都内でWeb系スタートアップ・株式会社オミカレのCTOをしています。

私は生まれも育ちも広島県、今日もカープのセ・リーグ優勝の余韻に浸りながらこの記事を書いています。ソフトウェアエンジニアになった経緯ですが、私も子供の頃からゲームが大好きで「人生で大切なことは格ゲーから学んだ」タイプですから、「自分もゲームを作るんだ!」と幼少期からソフトウェアエンジニアに憧れていました。

そんな私ですが、実は高校を卒業後、警察官として4年半ほど奉職していました。憧れだったソフトウェアエンジニアではなく、公務員だからという理由で警察官を選んだ私は常に後悔の気持ちと向き合うことになります。もちろん、警察官という仕事はやりがいもありましたが、それでもソフトウェアエンジニアの夢を諦めきれず、転職し、今に至ります。

とはいえ、転職できたのは良かったものの、LinuxどころかWindowsのコマンドラインもまともに使ったこともない私にとって、ソフトウェアエンジニアの道のりは、想像以上に険しいものでした。そんな山あり谷ありを歩んでこれたのは、コミュニティと共にあったからです。

そこで今回は、私がエンジニアコミュニティと共にどう歩んできたか? どうやって課題を乗り越えたか? 地方で、コミュニティを通して成長してきたエンジニアの話をしたいと思います。

登壇
エンジニアコミュニティで登壇する筆者(出典:TECH PLAY Magazine

僕とエンジニアコミュニティ

エンジニアコミュニティと言っても、多種多様です。少人数で定例の読書会を開くような小さな規模から、buildersconのような1,000人単位で集まるカンファレンスまであり、全国のエンジニアコミュニティの集合体とも言える「オープンソースカンファレンス」のようなコミュニティもあります。

今日お話するのは、中国地方で運営される小さな地方コミュニティの話と、もうひとつ世界規模で展開されるOSS・PostgreSQLの日本全体のコミュニティである日本PostgreSQLユーザ会(JPUG)についてです。

このまったく違う両極端なコミュニティとの関わりから、私が学んだいくつかのことを伝えていきます。

地方エンジニアコミュニティの現状

「地方のエンジニアコミュニティ」と言っても、千差万別です。「PHPカンファレンス」のように地方で開催しても100人以上集まる規模のものもありますが、だいたい10人集まれば御の字。そんな規模感なのが、地方のエンジニアコミュニティです。

地方コミュニティでは、参加者が集まらないため継続できないことも多々ありますし、コミュニティに参加しようというエンジニア全体の母数が少ないため、他のコミュニティに参加してもメンバーがいつも同じということも珍しくありません。そんな地方コミュニティでも、いやそんな小さなコミュニティだからこそ、飛び込むことで大きな意味につながることがあります。

運命的な出会い

私が初めて参加した勉強会は、2010年7月に開催された「第1回 オープンラボ備後」という小さな勉強会です。当時の上司に連れられて行ったその場所で、私の人生を左右する出会いがありました。

それは、大規模CodeReading手法「ひらメソッド」やLinuxカーネル界隈で有名な、平聡輔さん(ひらさん)との出会いです。この出会いは、当時Linuxをインストールして使うだけだった自分にとって、衝撃的でした。本当のhackerの存在、そしてそんなhackerの考え方、Codeとの接し方、そして技術というモノの考え方を大きく変える出会いでした。

この日の懇親会で、「そーだい君はまだ自分の柱を決めてないの? 僕が25歳のときには、もうLinuxカーネルで生きていくって決めてたよ」 という言葉がなければ、私もDBエンジニアとしてここまで生きてくることはなかったでしょう。あの出会いから、私の技術との向き合い方は変わりました。

アウトプット駆動学習

ひらさんの影響を受けて「技術を学ぼう!」と考えた私は、そのとき25歳と十分に若い年齢だったものの、既に妻子がおり、思い通りに学習できる時間も、技術書やPCを買う金銭的な余裕もない状態でした。また、私は意思が強い方ではないので、業務に関係ないような知識のインプットは、理由がなければなかなか進みません。

そんな中、自分自身で工夫して技術を学ぶにはどうすればいいか? その答えが「アウトプット駆動学習」でした。当時はそういう言葉はなかったかもしれませんが、自分に対して納期を作るために「登壇を納期として定めた」のがきっかけです。学びたいことを登壇テーマに設定し、やらざるを得ない状況にすれば必然と手を動かし、ドキュメントを読むだろうと考えた結果、初めての登壇は「Android 1.6のアプリをJRubyで書く話」だったのを覚えています。

そこで、予想外の出来事が起きました。初めての登壇は、当然ながら拙い内容でしたし、参加者からすると決して学びの多い内容ではありませんでした。それにもかかわらず玄人の参加者から、私がぶつかった問題点に対する回答や、Androidアプリ開発のノウハウなど、いろいろなインプットをもらうことができ、「1回のアウトプットが、より多くのインプットを呼び寄せる」という体験をしました。

これが大きな成功体験となり、ブログ・書籍・カンファレンス登壇とアウトプットが広がっていったのです。アウトプット駆動学習は今でも続けており、最低でも毎月1回は自分のブログを更新するようにしています。こうして続けた結果、文章を書く能力がつきましたし、多くの方に読んでいただくことが増えて、もちろんこの記事もそうですし、商用雑誌の連載を執筆する機会にもつながりました。

「量は質に変わる」とはよく言ったもので、多いときは月に何回も登壇することで慣れてきたのか、国内最大級のカンファレンスであるbuildersconやYAPC::Kansaiなどでベストスピーカーをいただくこともできました。しかしこれらも、アウトプットすることでより良い多くのインプットがもらえる「アウトプット駆動学習」の延長であり、その積み重ねが評価された結果だと考えています。

アウトプット駆動学習は、時間がなく、意思の弱い私が成長するために必要な学習手法なのです。

ベストスピーカー
builderscon 2017でベストスピーカーを獲得した筆者

コミュニティに参加する側からコミュニティを作る側へ

地方コミュニティで何度目の登壇だったでしょうか。ひらさんと出会ってから半年後の2010年12月、オープンラボ備後の主催者に推薦していただき、ひらさんが開く「第15回 オープンラボ岡山」で登壇したときのことです。Magic3というCMSを利用した話の中で「Oracle DBからPostgreSQLへの移行」について話しました。

このときは、ひらさんのアドバイスを受けて「DBを自分の軸に据えていく」と決めた後でしたから、タイトルこそCMSですが、メインはデータベースでした。当時の私は熱心なOracle DB信者で(今もですが)、PostgreSQLの機能不足について言及した場面がありました。

なんとその場に、PHPのPostgreSQLモジュールのメンテナで、JPUGの理事の大垣靖男@yohgaki)さんが居たのです。その後の懇親会で「PostgreSQLが機能不足なのは分かる。だけど、Oracle DBには自分でパッチを当てることすらままならないけれど、PostgreSQLはOSSだから、自分で機能を追加していいんだよ」という言葉をいただき、衝撃が走りました。

そう、OSSは自分で形を変えることができるのです。それまでミドルウェアの不満をSNSで垂れ流したり、フレームワークのバグに不満を言いながらモンキーパッチを当てたりしていた自分が恥ずかしくなりました。これを機に、僕もコミュニティ、そしてOSSを作る側に回ろう! そう決めてJPUGに参加しました。

その2年後、JPUGの理事となり、「中国地方DB勉強会」を主催するなど、今もPostgreSQLを中心としてDBコミュニティを作る側にいます。あのとき、PostgreSQLコミュニティに飛び込んだからこそ、全国の素晴らしいエンジニアの方々と交流を持つことができたし、世界規模のOSSに触れることができました。また、イベントの企画・運営を通して、マネージメント手法やコミュニケーションのテクニックなどを学ぶこともできました。

コミュニティに参加する側から作る側に回ったことで、取れる選択肢の幅が広がり、参加者のときとはまた違ったアウトプット駆動学習ができるようになったのです。

僕がコミュニティから学んだこと

このように、コミュニティは人との出会いと学びにあふれています。「環境は人を育てる」とよく言いますが、人との出会いも環境のひとつです。この記事には書き切れないほど、私は多くの人と出会い、多くの考え方に触れ、多くのことを学びました。

ビスマルクの言葉を借りると「愚者は経験から学び、賢者は歴史から学ぶ」と言います。昨今、インターネットは知見の集合体になり、「知の高速道路」が用意されています。しかし、ソフトウェアエンジニアとして歴史から学ぶことは確かに容易になったものの、自分だけでインプットできる限界を超えて、情報過多とも言える状況になっています。

だからこそ、情報の取捨選択と、他人の経験から学ぶことがとても大切なのです。ではどうやって学ぶか? 私にとっての答えのひとつがコミュニティの中にありました。

コミュニティに触れるということ

コミュニティには、仕事でプログラムに触れはじめた新卒の駆け出しエンジニアから、10代でもうプログラムを書いている人や、定年を過ぎても現役バリバリの上級者まで、多種多様な人がいます。そこにアウトプットの違いはあれども、優劣はありません。誰がどのコミュニティに所属してもよいし、去っていくのもまた自由なのです。

私が駆け出しのソフトウェアエンジニアから成長できたのは、間違いなくエンジニアコミュニティのおかげです。私はこれまでに、PostgreSQLだけではなく、MySQLのようなライバルDBMSのコミュニティであったり、PHPやJavaのような言語系であったり、さまざまなコミュニティに所属してきました。そして多くのコミュニティに触れ、そこでいろいろな考え方や文化を学びました。

地方の一企業で、手元のプログラムだけを読む生活をしていたら、そんな成長はなかったことでしょう。私に「外の世界」を教えてくれた場所が、コミュニティだったのです。そのコミュニティに触れることは、とてもとても簡単です。インターネットのグループであったり、オフラインの勉強会だったり、何でも構いません。そこに参加して、そしてそこで何らかのアウトプットを出すことです。

そのアウトプットに、コミュニティは反応してくれます。その反応を感じることができれば、それが「コミュニティに触れている」ということです。触れた先にあるコミュニティから伝わる熱量は、あなたに多くの体験をくれることでしょう。

コミュニティのその先に

コミュニティを通して、私は「アウトプット駆動学習」を身に付け、技術を磨くことができました。その結果、カンファレンスでベストスピーカーをいただいただけでなく、自分の技術スタックを広く知ってもらうことで、現職もそうですが、多くの職場から声をかけてもらうことができました。

今、CTOというポジションをやっていけているのも、エンジニアコミュニティで多くのコネクションを育んだ結果です。CTOとしての課題をアウトプットすると、インターネットを通して多くのフィードバックをもらえるようになりました。これは、コミュニティの中で自分の存在を知ってもらうことの大きなメリットですし、コミュニティを通してエンジニアとして成長した結果です。

そんなコミュニティと歩いてきた私の集大成が、2018年7月に開催された「真夏の大LT大会」です。この7月に起きた豪雨は、私の地元である中国地方を中心として西日本に大きな被害をもたらし、いまだに多くの爪痕が残っています。そんな西日本に私ができることがないか、そう考えて翌日から行動を起こし、開催にこぎつけたのがこのイベントです。ボランティアにも関わらず、豪華なスピーカー陣に、100名以上の参加者が集まりました。

これは、私がコミュニティを大好きな理由がすべて詰まっている、そんなイベントでした。このイベントは、私がコミュニティに関わっていなければ実現しなかったでしょう。コミュニティに対して真摯に向き合っていれば、コミュニティの人たちは応えてくれる。そう強く感じるイベントでした。私の大好きなコミュニティとは、損得勘定だけではない、人と人のつながりを感じることができる場所なのです。

真夏のLT大会集合写真
真夏のLT大会集合写真

恩返しと恩送り

このように、私自身は今も昔もコミュニティから多くの恩をもらいました。長くコミュニティに触れていれば触れているほど、コミュニティに恩返しをしたい気持ちが強くなりました。

それでは、どんなことがコミュニティへの恩返しになるのでしょうか?もちろん、素晴らしいプログラムを書き、多くの人を助けるライブラリを作ったり、今までのノウハウを共有するために登壇したり、ブログや本を書いたりするのは素晴らしい貢献です。

しかし、コミュニティに貢献する方法は、その他にも意外とあります。例えば、公式ドキュメントのtypoを見つけて報告したり、自分で直したりする、これも素晴らしい、分かりやすい貢献ですね。

自分が分からないことを、メーリングリストやコミュニティのSlackで質問する、これも大切な貢献です。なぜならば、あなたが分からないことは、きっと他にも分からない人がいるはずです。検索したり、ドキュメントを読んだりしても、分からないことは分からないのです。そのことをコミュニティに伝えることでそこに回答が付き、他の初心者の人が同じように悩んでいることへの道標を作ることができるのです。

このように、コミュニティへの貢献方法はひとつではありません。こうやって次の世代に技術を伝えたり、残したりすることは、恩送り(受けた恩をその人に返すのではなく、別の人に送ること)であり、新しい世代を育てることになるのです。それがまた、育ててくれた人々への恩返しでもあるのです。

私は、自分にできることをひとつひとつ恩送りしています。不思議なことに、これもまた自分の成長につながっています。

まとめ

今日は、私がコミュニティと歩んできた道のりについてお話しました。地方では、エンジニア同士の出会いに飢えている方もたくさんいますし、私自身もそうでした。だからこそ、コミュニティに参加してほしいし、コミュニティがないのであれば、ぜひ自分の手で作ってほしいのです。

その過程は、あなたにとってかけがえのない経験になることでしょう。そして、そこでの出会いは一生の財産になります。この言葉が、あなたがコミュニティに踏み出す一歩の背中を押すことになれば幸いです。コミュニティの現場でお会いできることを、楽しみにお待ちしています。

曽根 壮大(そね・たけとも) @soudai1025 / soudai

soudai

株式会社オミカレ副社長兼CTO。数々の業務システム、Webサービスなどの開発・運用を担当し、2017年に株式会社はてなでサービス監視サービス「Mackerel」のCRE(Customer Reliability Engineer)を経て現職。コミュニティでは、Microsoft MVPをはじめ、日本PostgreSQLユーザ会の理事として勉強会の開催を担当し、各地で登壇している。builderscon 2017、YAPC::Kansaiなどのイベントでベストスピーカーを受賞し、分かりやすく実践的な内容のトークに定評がある。他に、岡山Python勉強会を主催し、オープンラボ備後にも所属。『Software Design』誌で、データベースに関する連載「RDBアンチパターン」などを執筆。
ブログ:そーだいなるらくがき帳