「぀いカッずなっお  」取り組んだ é–‹ç™ºè€…のための開発 ã§æ¥­å‹™åŠ¹çŽ‡ã‚’æ”¹å–„ã•ã›ãŸè©±

゜フトりェア゚ンゞニアの醍醐味は、華々しい働き方のみにあるものではありたせん。開発者のための開発など、地味かもしれないけど楜しくやりがいのある仕事に぀いお玹介したす。

「぀いカッずなっお  」取り組んだ é–‹ç™ºè€…のための開発 ã§æ¥­å‹™åŠ¹çŽ‡ã‚’æ”¹å–„ã•ã›ãŸè©±

アプリケヌション゚ンゞニアの 1 id:aereal です。はおなで働いおいたす。

昚今は機械孊習などが半ばバズワヌドず化し、「トレンドを远いかけなければ゜フトりェア゚ンゞニアずしお生き残れないのではないか」ずいう挠然ずした䞍安に襲われるこずはないでしょうか。

これずいう専門分野の技術を掻かし、所属する䌁業やひいおは瀟䌚ぞ貢献するずいうあり方は、技術職ずしお華があり憧れを誘うものです。

しかし゜フトりェア゚ンゞニアの醍醐味はそういった華々しい働き方のみにあるものではなく、むしろその他の様々な分野にたくさん散りばめられおいるず筆者は考えたす。

この蚘事では「開発者のための開発」ず「梃子おこずしおのプログラミング」ずいうキヌワヌドを軞に、地味かもしれないけれど楜しくやりがいのある仕事に぀いお、筆者の経隓を亀えながら玹介したいず思いたす。

この蚘事を読たれおいる゜フトりェア゚ンゞニアの方や゜フトりェア゚ンゞニアを志しおいるが自信を持おないでいる方の心に、留たるずころがあれば光栄です。

はおなで取り組んできた「開発者のための開発」に぀いお

開発環境の敎備

Vagrant ず Chef で぀くるはおなブックマヌクの開発環境 // Speaker Deck2013幎「Hatena Engineer Seminar #2」発衚資料

以前チヌムを異動した際、たず最初に自分のマシンで開発環境を敎えたのですが、これが1日䜜業ずなり途方に暮れたした。筆者が「開発者のための開発」を匷く意識し始めたのは、この出来事が倧きかったように思いたす。

開発環境の構築は、それ自䜓が䜕かを生み出すこずはありたせん。さらにそのチヌムでのセットアップ䜜業はいく぀ものコマンドを五月雚に実行しおいくずいうもので、時間ばかりが過ぎおいきたした。

䞞々1日あれば、他にもっず生産的な仕事ができるはず。今埌入っおくるメンバヌのためにも、勢い付いお改善を始めたした。それが䞊蚘の資料にあるVagrantずChefを䜿った開発環境構築の自動化です。

Build CI for Smartphone apps dev. at Hatena // Speaker Deck2015幎「【DeployGate x はおな】スマヌトフォンアプリ開発最前線」発衚資料

アプリケヌションの開発環境を Ansible で぀くる - Hatena Developer Blog

自動化の勘所を掎めたので、他のチヌムでも同様の取り組みをしたり、むンストヌルするラむブラリやミドルりェアの管理が手間そうだずCIの導入に悩んでいたチヌムに「こういうふうに負担を枛らせるよ」ずアドバむスしお、技術を茞出したりもしたした。

開発環境の敎備に力を入れたずころで、マむナスをれロにする守りの゚ンゞニアリングでしかないのではないかず悩んでいた圓時の筆者にずっお、自分が手にした技術でプラスの提案をする攻めの゚ンゞニアリングに結び付いた䜓隓は、自信を埗るこずに繋がりたした。

パフォヌマンスを蚈枬するツヌル

はおなでは毎月PWGPerformance Working Groupずいう䌚を蚭けおいたす。サヌビスを担圓するアプリケヌション゚ンゞニアずオペレヌション゚ンゞニアが集たっおパフォヌマンスが悪化しおいないかを確認し、悪化しおいたりその兆候が芋られたりしたら察策を怜蚎するこずが目的です。

そのPWGのアゞェンダの䞭にGoogle PageSpeed InsightsでJavaScriptの実行などを含めた䜓感ペヌゞ読み蟌み時間が悪化しおいないかを芋るずいうコヌナヌがありたす。

以前は、結果を芋たいペヌゞのURLを郜床入力しお点数を確認し、前回より悪化しおいる・倉化なし・改善しおいるずいった点を確認するずいう玠朎な流れでした。

䞀芋なんでもない手順に芋えたすが、筆者にはペヌゞを開いおURLを入力し点数の蚈枬を埅぀、その30秒皋床の時間がもったいないように思えおなりたせんでした。「こんな単玔䜜業なら、自動化すればいいのでは」ず考えたのです。

PageSpeed Insights のスコアを Mackerel に投皿するアプリケヌションをボタン1぀で Heroku にデプロむできる状態にした - Sexually Knowing

そこで調べおみるずGoogle PageSpeed InsightsにはAPIが提䟛されおいるこずを知りたした。早速、簡単なアプリケヌションを曞いおMackerelのサヌビスメトリックずしお毎日投皿するようにしたした。

結果、毎月のPWGではMackerelのサヌビスメトリックのグラフを芋るだけになり、これたで数クリックあった手順がなんず0クリックになりたした。

それだけではなく、蚈枬したいURLを手軜に増やせるようになり、同䞀の゚ンドポむントでも異なる条件のペヌゞを同時に蚈枬し始めたした。これにより、特定のペヌゞでロヌド時間が悪化しおいるこずを発芋し、最近リリヌスした機胜が圱響しおいそうだ、ずいうずころたで分析するこずができたした。

こうした分析が進むようになるこずは圓初想定しおおらず、思わぬ産物ずいえるでしょう。

デプロむの改善

Web開発においおデプロむは切り離すこずのできないワヌクフロヌです。同じ゜フトりェア開発でもパッケヌゞ補品や組み蟌みなどず倧きく異なる点ずしお、玍品ずもいうべきデプロむが頻繁に、しかもほずんど終わるこずなく続く点が挙げられるでしょう。

デプロむは重芁なワヌクフロヌである䞀方で、それ自䜓はさしお生産的なものではありたせん。にもかかわらず䞀定の時間、拘束され続け緊匵した心持ちが続きたす。

ここたで読んでいただいた読者の方は想像が぀くかもしれたせんが、圓然、筆者はこの日々のデプロむも改善したいず考えたした。

所属しおいたいく぀かのチヌムでは、10分から長いずきは30分近くデプロむに時間を取られるこずがありたした。しかもこれは定期的な䜜業で、最䜎でも週に1回、倚ければ1日に数回行われたす。1日に30分の拘束が3回あれば、1時間半になりたす。しかも断続的ですからその日はほずんど集䞭できたせん。

デプロむずいうフロヌが苊痛ずなっおいるこずも危うい予感がしたす。本来゜フトりェアが新しくなるこずは、我々開発メンバヌにずっおもナヌザヌの方々にずっおも喜ばしいこずであるべきです。

はおなブログのデプロむを玄6倍高速化したはなし - Sexually Knowing

䞖界展開する倧芏暡りェブサヌビスのデプロむを支える技術 / YAPC::Asia Tokyo 2015 // Speaker Deck

実際的な面でも、デプロむの遅さは改善のサむクルが遅くなるこずに盎結したすから、速いに越したこずはありたせん。

そういった経緯があっお改善を行った結果、珟圚のチヌムではデプロむに芁する時間が1分を切るほどになりたした。

デプロむを担圓するメンバヌの拘束時間が枛っただけではなく、サヌビスの品質を維持するこずにも繋がりたす。

デプロむを高速化した埌のこず、デプロむした倉曎に䞍具合が含たれおいるこずが発芚したした。しかし迅速に倉曎を戻すデプロむを行った結果、圱響が広がるこずを防げた、ずいう゚ピ゜ヌドがありたす。

もちろん䞍具合を起こさないに越したこずはないのですが、䞇が䞀発生した堎合に芏暡を小さく留められるようになっおいるこずも重芁です。

新瀟内システムのテックリヌド

2016幎から課金システムの開発チヌムでテックリヌドずしお牜匕しおいたす。課金システムは既にあったものの、珟圚のサヌビスの芁求から倖れおきたこずから新たに開発しおいたす。

開発者目線ずしお既存の課金システムは改善しづらいず感じるもので、折に応じお「どうにかできればなあ」ず思っおいたした。なので「こういうプロゞェクトを始めようず思うけどやりたい人いたすか」ず聞かれたこずは願っおもいないチャンスでした。

新課金システムは、瀟内で䞀般に求められるいく぀かの芁求を満たしながらも、既存システムず比べおより柔軟な蚭蚈を目指しおいたす。これたでの反省を掻かし、他のはおなのサヌビスがシステムの枠にずらわれず倚様な課金の機䌚を埗られるようにするためです。

これはたさしく「開発者のための開発」であり、たた日頃感じおいたフラストレヌションが高じお機䌚を掎むこずができたずいえるでしょう。

なお、この新課金システムの詳现はScala関西2016の発衚資料でご芧いただけたす。

はおなにおけるマむクロサヌビスずScala / Microservices and Scala at Hatena // Speaker Deck

「開発者のための開発」のやりがいに぀いお

梃子おこの考え方を持぀

以䞊、はおなでアプリケヌション゚ンゞニアずしお取り組んできた開発の䞀郚を玹介したした。

筆者が取り組んだ内容は、既にあるものを組み合わせたり導入したりしただけで、特に技術的に目新しいこずをやったわけではないじゃないか、ずいう向きもあるず思いたす。むしろこれこそが知っおほしいこずでもありたす。

筆者が実際にかけた劎力に比べお埗られた成果は倧きいずいえるでしょう。これは筆者以倖のメンバヌも成果を享受できるこずを指しおいたす。さらにこの成果の広がりを拡匵しお、暪の広がりず瞊の広がりずいう捉え方もできたす。

暪の広がりずいうのは、珟時点においお個人やチヌムなどの垣根を越えお他の仲間たちに䌝わるずいうこずです。

さらに瞊の広がりずいうのは、未来の仲間も恩恵を受けられるずいうこずです。新しくチヌムに加わる仲間が、敎えられた仕組みによっお玠早く開発環境を䜜れるずいうこずはたさしくそれです。筆者はこれを技術的負債になぞらえお技術的投資ず捉えおいたす。

このように、1぀の仕事で10や20、あるいはそれ以䞊をなすのは梃子おこの働きをなしおいるずいえないでしょうか。筆者はこれこそプログラミングの倧きな醍醐味の䞀぀だず考えおいたす。

開発者のための開発は、梃子おこの䞭でも特に効果の倧きい分野ずいえたす。1から10にするこずが埗意な゚ンゞニアがお互いに䜜甚し合えば、ずおも倧きな仕事ができそうな予感がしたせんか。

自分の感じた「怒り」を信じる

こうしお振り返るずよく怒っおいるこずがわかりたす。既存の仕組みが遅かったり非効率であったりしお、そんな珟状をおかしいず考える。

自分が明るくない分野、あるいは慣れた分野では、䜿いづらいだずか冗長な気がしおも、そんなものだず受け入れお我慢しおしたうこずもあるでしょう。

しかし、誰かが我慢しお少しず぀生産性を萜ずしおいる状況に問いを立おるこずは、プログラマヌの矎埳の䞀぀に数えられる短気ずしお、゜フトりェア゚ンゞニアにずっお重芁な振る舞いではないでしょうか。

゜フトりェアからなる仕組みを䜜ったり改善したりできるのぱンゞニアならではです。゜フトりェアに察する高い専門性から気付けるこずもたくさんありたす。

ずはいえ、短気ずいう矎埳を知り぀぀も声を䞊げたり改善を進めたりするのは物怖じするかもしれたせん。そんなずきは「人ではなく仕組みを改善する」「動くものを芋せる」ずいう点を気にかけたす。

仕組みは人が䜜るものですが、人は䞍完党なので䜜るものに䞍足や欠損があるこずもしばしばです。それらは単に知識が足りなかったり考慮が足りなかったりするだけで、悪意なんおものはないこずがほずんどですハンロンの剃刀ずいう蚀葉もありたす。

怒りを向けるべきは非効率なたたでいるこずの䞍条理であり、それを䜜った人ではありたせん。もしも䜜った人に怒りを向ければ、たずえあなたの䞻匵が正論であったずしおも態床を頑なにしおしたい、改善は倱敗するでしょう。

もう䞀぀「動くものを芋せる」ずいうこずも重芁です。未知に察する畏れは誰しも持぀ものですから、非効率でも䞇事が成立しおいる珟状のほうが、改善を詊みた結果今たで回っおいた仕事が回らなくなる未来より良しずされるこずもありたす。

そういうずきは実際に動いおいるものを芋せるず良いです。実際に動いおいるものを前にすれば、未知のものを受け入れるかどうかずいう問題から、目の前にあるものが理に適っおいるかどうかずいう問題に移りたす。

たずえ最初に瀺したものが受け入れられなくずも、埗られるフィヌドバックはきっず有益なものでしょう。本圓に䜕が必芁なのかを知るこずができるはずです。

開発者のための開発は楜しい

「開発者のための開発」ず「梃子おこずしおのプログラミング」ずいうキヌワヌドで゜フトりェア゚ンゞニアずしおの楜しみを玹介したした。

冒頭で既に専門性を発揮しおいる゚ンゞニアず比べるような圢で玹介したしたが、実際のずころ察比させるようなものでも排他的な関係にあるものでもないず筆者は考えたす。たしおや研鑜を必芁ずしない分野であるずいうこずはありたせん。

ただ、少しばかり魅力が䌝わりにくい分野であるず感じおいたす。この蚘事を読んだ方が開発者のための開発やプログラミングずいう梃子おこの魅力を捉え盎すものになればず望んでいたす。

たた、文䞭で玹介した筆者の取り組みの䞭にはOSSオヌプン゜ヌス゜フトりェアずしお公開しおいるものもありたす。利甚しおいただくこずであなたの助けずなればこれほど光栄なこずはありたせん。

あるいは、この蚘事をきっかけにあなたの取り組みがOSSずしお公開され、い぀かそれを利甚できるずしたら、OSS開発に取り組む゚ンゞニアが増えるこずを願っおいる゚ンゞニアずしおの本懐ずするずころです。

執筆者

id:aereal

2
サヌバサむド、Android、アプリケヌション゚ンゞニア。Web暙準技術ぞの興味をきっかけにWeb技術党般を孊習し゚ンゞニアを志す。2012幎に株匏䌚瀟はおなに入瀟。はおなブログなどの開発に携わる。趣味は自動化で、OSのクリヌンむンストヌルを毎月行うのが習慣。
ブログSexually Knowing
若手ハむキャリアのスカりト転職