Findy Engineer Lab

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

yoku0825さんがMySQLスペシャリストになるまでにやってきた勉強法を、私たちにすべて教えてください!

「日本国内でもトップレベルのスキルを持ったMySQLエキスパートは誰か?」

そう問われたときに、多くのエンジニアが名前を挙げる人物がいます。LINE株式会社のITサービスセンター データベース室 MySQL1チームでDBA(Database Administrator)として働くyoku0825さん*(@yoku0825)です。

日本人として3人目のMySQL分野のOracle ACEであり、2015年には「default_password_lifetime」の功績でMySQL 5.7 Community Contributor Awardに選出されたyoku0825さん。彼はひたむきに自己研鑽を続けるだけではなく、ブログ「日々の覚書」や技術イベントへの登壇などを通してMySQL関連の情報発信を行ってきました。

今回はそんなyoku0825さんに「これまでどのようなトレーニングをして、DBAとしてのスキルを磨いてきたか」についてインタビュー。ご自身のキャリアを複数のフェーズに分けて、それぞれの時期で取り組んできたことを解説していただきました。

*…本名は田中翼さんですが、エンジニアとして活動される際にyoku0825という名称を用いていること、そしてその名称の方がIT業界内で浸透していることから、記事内ではあえてyoku0825さん(または略称のyokuさん)の表記を使用しています。

フェーズ1 : ひたすらドキュメントを読んだ勉強期

――今回のインタビューでは、yokuさんのこれまでのキャリアを時代ごとに振り返っていただきます。まずは、MySQLの専門家としての道を歩み始めたばかりの頃から教えてください。

もともと私は非エンジニアとしてキャリアをスタートして、あるきっかけからプログラミングに興味を持つようになりました。未経験でもプログラミングに挑戦できる会社を探して転職し、某企業の保守窓口のチームで働いたんです。

この頃は、自分自身のキャリアの「前史」にあたる時期ですかね。MySQLの知識はほとんどなくて、何かトラブルが起きたときに原因の見当がつかず「MySQL 起動しない」などとGoogle検索するようなレベルでした。

この業務のなかでRDBの魅力を知り、MySQLを専門的に扱いたくなって、MySQLの代理店をしている企業に転職しました。この企業での私の仕事は顧客のMySQLの運用業務におけるサポートやコンサルティングです。改善のための方法を提案したり、何かトラブルが起きたときに原因を解析したりといったことに取り組みました。

お客さんを安心させ納得させるためにも、当たり前ですが相手以上に自分がMySQLに詳しくなければなりません。とはいえ、本格的にMySQL関連のキャリアを歩み始めてから日が浅かったので、まだまだ知識がなくて常にネットや公式ドキュメントなどで調べながら仕事をしていた時期でした。だからここは「勉強期」ですね。

――当時はどのような媒体から情報を得ていましたか?

よく読んでいたブログが3つあります。まず「SH2の日記」で、NTTコムウェア株式会社に所属する平塚貞夫さんが運営しているブログです。次に「漢(オトコ)のコンピュータ道」で、日本オラクル株式会社のMySQL Technical Analystとして働く奥野幹也さんが書いています。そして「かみぽわーる」。Ruby on Railsのコミッターとして有名なkamipoさんが運営しているブログです。

――これらのブログはどのような点が優れていましたか?

MySQLに関連するキーワードで検索した際に、これらのブログにたどり着きました。他の技術ブログなどと明らかに違っていたのは、MySQLの内部構造に相当詳しい人が書いている気配がしたことです。

さまざまな機能や各種の挙動について、なぜそうなるのかという理由をきちんと説明している。あるいは結論に至るまでの経過をすべて説明している。この3つのブログは本当に面白くて、過去に投稿されている記事をすべて読み尽くして勉強しました。

それから、この時期は日本語の公式ドキュメントである『MySQL 5.1 リファレンスマニュアル』を情報源にしていました。通勤に使っていた地下鉄の中で、ダウンロードしておいたこのドキュメントのPDFをずっと読み続けました。A4換算で1,700ページを超えるくらいの膨大な量のドキュメントでしたが、最初から最後まで累計で3回くらいは読み通しました。

――ブログも公式ドキュメントも「片っ端からすべての文章を読んでいく」という勉強法をしていたのですね。

とにかく情報を読み尽くしたことで、DBAとしての力が身につきました。めちゃくちゃ大変なので、万人にはおすすめできない勉強法ですけど(笑)。この頃の私はまだ英語が苦手で、基本的に日本語の記事やドキュメントから情報を得ていました。この頃の経験があるので、自分はなるべく日本語で情報発信していきたいという思いがあります。

余談として初出しのネタを話すと、その頃の『MySQL 5.1 リファレンスマニュアル』はMySQL ClusterとGIS(地理情報システム)に関する箇所が翻訳されておらず、日本語で読めませんでした。だからいまだに私は、その2つの領域がめっぽう弱いんですよ(笑)。

ブログ「日々の覚書」はいかにして生まれたか

――この時期にブログやドキュメントを徹底的に読んだことで、DBAとしてどのようなスキルが身についたと思いますか?

MySQLそのものを俯瞰できるようになったというか、何かの事象が発生した際に、それが何に起因するのかなんとなくわかるようになりました。たとえば他のエンジニアから「○○○が○○○のエラーになっているんですけど」などと相談されたときに、原因をポンポンと2~3個くらいは思いつく。MySQLに関連する知識の外堀を、広く薄く埋めていったような時期でした。

「勉強期」の後期からは、少し変わったトレーニングをするようになりました。Yahoo!知恵袋でデータベースのカテゴリの質問を探して、片っ端から解いていたんです。それから、TwitterでもMySQL関連のキーワードで検索して、困っていそうな人がいればその問題を解きました。さすがに今は、Yahoo!知恵袋やTwitterにある問題を解くことはなくなりましたけど。

――ブログ「日々の覚書」はどのような目的で書き始めたのですか?

初めは、世の中に自分の存在を知ってほしかったからですね。それは偽らざる事実で、初期の頃は自己ブランディングのための記事がとても多かったです。自分がMySQLに関して学んだことのなかから「他の人がこの記事を読んだら、すごいと思ってもらえるかもしれない」という情報をピックアップして書いていました。

ブログ「日々の覚書」

他には、MySQLの代理店で働くなかで、お客さんによく説明していることや質問されることなどを、ブログにメモするようにもなりました。「MySQL バージョンごとの機能覚書」などはその典型例ですね。

そうしてブログを書き続けるうちに、キャリアの転換期になる出来事が起こります。「 InnoDB buffer pool dumpで遊ぶ」という記事を、MySQLソリューションエンジニアの梶山隆輔さんに見つけてもらえたんですよ。これをきっかけに、MySQLコミュニティへの道が開けていきました。

そしてMySQLコミュニティに参加するようになると、自分のためだけではなく他の人たちが読んで役に立ちそうな記事をどんどん増やしていきましたね。検索したときにヒットしやすいように、エラーメッセージやクエリの情報などもよく載せるようになりました。あとは、MySQLの運営側の人たちが喜んでくれそうな、新しい機能を試してみた系の記事もよく書いていました。

フェーズ2 : 完全に理解した(理解していない)期

――勉強期を経て、DBAとしてのスキルが上がり次のフェーズへと進んだのですね。

徐々に英語力も向上して、Google検索した結果から日本語の情報よりも英語の情報をメインで参照するようになりました。そして、公式ドキュメントもすべて読んだので、その後は何か必要があった際に調べものをするくらいの用途になっていました。

そして、この頃から私のブラウザのブックマークバーにはMySQL各バージョンの「Server Option and Variable Reference」が常にブックマークされるようになり、my.cnfに記述する各種のパラメーターをよく調べるようになりました。時間のあるときなどに、このページをじーっと眺めて勉強するわけです。

またこの時期に職場を変え、GMOメディアで働くようになりました。当時の私は「MySQLを完全に理解した」と思っていたので、自分の知識を実運用に活かしたいと思ってGMOメディアに移ったんですよ。でも、たかだか1年くらいで「何もわからない期」に突入することになりました(笑)。

フェーズ3 : 何もわからない期

――それは、実運用のなかでご自身のスキル不足を知ったということですか?

そうです。スロークエリを改善しようと思って調べるけれど、見たこともないような事象に直面する。あるいは何かの対策をしても全く改善しないような事象に直面するわけです。それから、前職ではコンサルティングやサポート業務がメインなので、本番環境のSQLを書き換えたりテーブル構造を変えたりした経験が自分にはほとんどありませんでした。

実際の運用に携わらないとわからないことがたくさんあって、机上の知識だけでは通用しない。「自分は何も知らなかったんだな」と実感した時期でした。

この時期くらいから、MySQLコミュニティである「日本MySQLユーザ会」のイベントでの登壇をするようになりました。今も付き合いが続いている人たちとオフラインで会えるようになって、「仕事で○○という課題に直面して困っているんです」といった相談ができるようになったのはありがたかったです。イベントに参加して特にうれしかったのは、「SH2の日記」の筆者である平塚さんに会えたことですね。

――この時期に勉強内容の変化はありましたか?

この頃から、MySQL本体のソースコードを読むようになりました。たとえば、ある業務で「SHOW PROCESSLIST」を実行したときに、処理が重い特定クエリのプロセスのStateが「statistics」になっていたことがありました。これは何だろうと思ってソースコードを読んでみると、「statistics」は「SELECT文を受け付けたあとに、どの種類のインデックスを使うかをオプティマイザが判断している状態」だとわかったんです。

ならば、使用するインデックスをオプティマイザ自身が考えなくていいように、エンジニアが「USE INDEX」で指定してやればいい。つまりソースコードを読むようになったことで、なぜ各種の対策がうまくいかなかったのか、どうすれば改善できるのかを把握できるようになりました。フェーズ1の「勉強期」が外堀を埋めた時期だとすれば、この辺りは内側の知識を深めていくような時期でした。

――MySQLについての知見がない人は、そもそもソースコードのどの箇所を読めばいいのか見当がつかないと思います。何を起点に読み進めることをおすすめしますか?

まずは「どの箇所で処理しているか確実に把握できるもの」から読んでいくといいです。一番簡単なのは、エラーコードをもとに調べていくことですね。任意のエラーを起こし、そのエラーコードから発生箇所を特定したうえでデバッグしていく。この際にも、MySQLの公式ドキュメントなどから得た知識が、ソースコードを読み解く助けになってくれます。

余談ですが、この時期あたりからソースコードを読むだけではなく、必要があればパッチを出す活動にも取り組むようになりました。ただ、DBAが勉強のためにMySQL本体のソースコードを書くことは個人的にあまりおすすめしません。データベースエンジニアになりたいならば、いいんですけどね。

これは個人的な意見ですが、DBAはあくまで「データベースを運用するスペシャリスト」であり、データベースエンジニアは「データベースを作るスペシャリスト」です。前者のスキルを伸ばすうえで、パッチを書くことはあまり有効ではないんですよ。

また、この時期にはYahoo!知恵袋やTwitterの代わりに「MySQL Bugs」も活用するようになりました。このサイトに掲載されている各種のバグを手元の環境で再現させたり、その解決策を考えたりといった勉強に取り組んでいました。

フェーズ4 : 器用貧乏期

――そうした自己研鑽を続ける過程で、スキルが向上していったわけですね。

GMOメディアのキャリアのなかで、DBAチームの人数が最も少なかった頃には、私一人しか稼働できるDBAがいなかったこともあります。とにかく自分がやるしかないので、がむしゃらに勉強と仕事を続けました。

数えきれないくらいの課題を解き、気がつくと他の人たちより少しだけMySQLのことに詳しくなっていました。GMOメディアでのキャリア後半には、MySQL運用の効率化・自動化のための仕組みはあらかた作り終えていましたね。今度は自分のスキルや知識を世の中に還元していくために、外部に向けて情報発信したり、オープンソースのツールにしたり。座学としては一通り終えて、その知識の貯金で働いていたような時期でした。

yokuさんが自身の作ったツールを公開している「yoku0825/ytkit」リポジトリ。

当時、yokuさんが自身の運用ノウハウを発表して話題になった「MySQLを割と一人で300台管理する技術」。

この頃から、新入社員や部署に新しく参画した人には、自分のやっている作業を一緒に見てもらうようになりました。私が何を考えて仕事をしているのか、同じ目線で働いて知ってもらう。昔で言う、丁稚奉公のようなものかもしれません。特定領域のスキルが未熟な人が、その領域のエキスパートと一緒に働くのは効果的な勉強法だと思います。

余談ですが、LINEのMySQL1チームで私のボスである北川健太郎さんは、もともとGMOメディアで私の後輩だったんですよ。当時教えた私のやり方のクセが、今もそれなりに残っています。北川さんは2~3年ほどGMOメディアで働いてから、LINEに転職しました。

彼も私と同じように、チームのDBAの人数が足りていない状態になり「なんとかして自分がMySQL運用を支えなければ」という責任感を持ったそうです。やるしかない状態に追い込まれると、人間は成長するんでしょうね。

フェーズ5 : もう一度勉強期

――本気でMySQLに取り組む生活を何年も続けたことで、スペシャリストとしてのスキルを手に入れたのですね。

ここ数年はエラーメッセージなどの情報をGoogle検索することも、ほぼなくなりました。過去に導入された機能は一通り頭に入っているので、私が初めて見るようなエラーはGoogle検索では参考になる情報が出てこないことが多くなり、ソースコードを読んでエラーの前後の処理を調べるほうが効率的だからです。

かつてGoogle検索で「SH2の日記」に出会って、関連記事を読むことで平塚さんの知見を吸収したように、今はソースコードで目的の箇所を探すついでに、その周辺箇所の知識を得ています。リファレンスマニュアルのように「ソースコードを全部読むこと」はまだ実現できていないですが、それでも「色々なファイルを、少しずつ読んでいること」が、大きな力になっていると感じています。

――そして、2021年6月よりyokuさんはLINEに転職されます。

今の私は「難易度の高い、未知の謎を解くこと」が大きなモチベーションになっているんです。GMOメディアでのキャリアでは、社内にあるすべてのMySQLは、私が詳細まで把握している状態になっていました。もう謎がなくなってしまったんです。前職時代から副業でサイボウズやGMOペパボの仕事をするようになりましたが、それも私の知らない他所のMySQLを見にいくためでした。

そして、GMOメディアで数百台規模のMySQLインスタンス運用を経験したので、次は数千台に挑もうと思って、LINEに転職しました。今は毎日すごく楽しいですよ。これほど膨大な規模の台数を運用していると、今まで見たこともない謎がポコポコ出てきます。チームメイトたちも、みなMySQLを勉強する仲間です。10年前には一人で読んでいたリファレンスマニュアルを、今度は輪読会という形でみんなで読み直しています

それから、実現すべきことの難易度も高いので、これまで培ってきた知識を組み合わせて、新たな活用法を生み出すような仕事も多いです。「やっぱり、MySQLは面白いなー」と思いますよ。あ、そうだ。今回のインタビューの余談や裏話を、またブログに書いておかなければいけませんね。

取材・執筆:中薗昴
撮影:漆原未代
取材協力:LINE株式会社