ちなみに

火曜日の空は僕を押しつぶした。

アドベントカレンダーでふりかえる関西拠点

この記事は Money Forward 関西拠点 Advent Calendar 2021 - Adventar の25目の記事です。 株式会社マネーフォワード の 関西拠点 に所属するメンバーのテーマ自由なアドベントカレンダーです。 昨日は id:yuya333 さんのマネーフォワードで1年間インターンをしてみて - Engineering from Scratch でした。

こんにちは。マネーフォワード関西拠点の 西村 (id:Sixeight) です。

関西拠点は京都開発拠点と大阪開発拠点を合わせた名称です。 物理的にオフィスが2つありますが、同じ関西拠点のメンバーとして仕事をしています。

この記事ではマネーフォワード関西拠点 Advent Calendar 2021の全ての記事をふりかえってみます。 何度も記事を書かなくてもカレンダーがうまるほど人が増えたのは嬉しいですね。 全ての記事が当日中に公開される中、最後の最後のこの記事だけ25日中に投稿できませんでした。 大変反省しております。

1日目

blog.nishimu.land

私の記事です。なぜか少しバズってしまって見知らぬ人からブコメでお叱りを受ける洗礼を受けました。 最近のカジュアル面談でなんかキーボードの記事を読みましたって言われたりしたので届いて欲しい層にも届いたみたいで良かったです。

そんな私におすすめのキーボードは MONOKEI の Tomo と HIRO です。(注: 私の本名は友裕と書いてともひろです) monokei.co monokei.co

2日目

note.com

採用広報をしていただいている akaneppi さんの記事です。 関西拠点のソフトウェアエンジニア採用広報一人目としてチャレンジングな職種でしたが、たくさんイベントを開催するなど奮闘していただきました。 スラックと書いてしまうところなど、エンジニア文化じゃないところからの挑戦感が出ていていいですね。

そんな akaneppi さんにおすすめのキーボードは logicool の POP KEYS です。 キュートな見た目のメカニカルキーボードから入ってみるのはどうでしょうか。

www.logicool.co.jp

3日目

note.com

京都開発拠点長の umisora さんのシャワーヘッドの記事です。ざんねんながら社内起業の話は書けなかったようです。 シャワーヘッド、うちも導入してみたのですが、効果をあんまり感じられなくて本当に必要?ってことで戻してみたところ、デフォルトのシャワーヘッドだとしょぼすぎることに気付いて、シャワーヘッドやるやんとなったのでした。打たせ湯もぜひ挑戦してみたいと思います。

そんなぽかぽかした umisora さんにおすすめのキーボードは MEKANISK の Fjell です。 セパレート好きな umisora さんだからこそオーソドックスなロウスタッガードのキーボードの良さを知っていただきたいです。

Fjellmekanisk.com

4日目

note.com

広報担当の矢頭さんが京都開発拠点について書いていただいています。京都は本当にいいのでみんなおいでよ。 京都のパンは本当においしいのでおすすめです。実はまだ一度も直接お会いしていないので、来年はぜひ。

そんな矢頭さんにおすすめのキーボードは KBDfans の PHASE ONE 65 です。 シンプルな格好良さが矢頭さんらしい気がしました。WKL なイメージです。

Phase One 65 Gasket Mount Mechanical Keyboard DIY KITkbdfans.com

5日目

note.com

これまでの経験の差から人生の先輩感がある坂田さんの福利厚生についての記事です。 入社時の有給付与はたしかに嬉しくて、若い頃は無限に働けたのですが、いまや休みが必要になりました。 適度に休んで効率良く働いていきましょう!

そんな坂田さんにおすすめのキーボードはREALFORCE の TKL SA / R2TLSA-JP4-BK PFU Limited Edition です。 渋い感じが坂田さんにぴったりだと思います。

www.realforce.co.jp

6日目

note.com

待望の専任スクラムマスターの堺さんによる入社記事です。 関西拠点あんまり目立ってないですが、最近入っていただいたかたはカジュアル面談などで実際に会ってみると人の良さに惚れていただいたと言っていただけることが多くて嬉しい限りです。

そんな堺さんにおすすめのキーボードは Daily Craft Keyboard の bat43 です。 なんか完全にイメージで選びました。

kbd.dailycraft.jp

7日目

note.com

若手の期待の星ダンマツさんの入社2ヶ月目記事です。 マネーフォワードでは カルチャー をとても大事にしていて、採用でも一番重要視していますし、働く上でも行動指針になっています。入ってすぐのメンバーにも Respect を感じとってもらえているのは素直に嬉しいです。

そんなダンマツさんにおすすめのキーボードは ai03 さん (ai03 Design Studio) の LUNAR です。 コンパクトでシンプルなんだけれど、実は丁寧に作り込まれた造形がぴったりです。

ai03.com

8日目

note.com

SEからPOに転身して入社された坂口さんの記事です。違った職種、全くのゼロからのドメイン知識ということで全てが Give it a try を体言しているすごい人です。 実際にすごい勢いでキャッチアップされていて、すでに頼もしいプロダクトオーナーとなられつつあります。 僕も簿記2級をとらないといけないので坂口さんに負けないように勉強します。

そんな坂口さんにおすすめのキーボードは ぺかそ さんの Fortitude60 (オタクブラック) です。 強い耐久性が新しいことに果敢に挑戦する坂口さんにぴったりです。

Fortitude60shop.yushakobo.jp

9日目

y4suyuki.notion.site

入社してからチームにフロントエンドの知見をどんどん入れてくださっている上石さんの記事です。 混迷を極めていた React 周りのコードを整理したり、知識のインプットを進めたりと本当に頼りになります。 英語が得意で英語の書籍をがんがん読まれているのも尊敬です。

そんな上石さんにおすすめのキーボードは Keycult の No. 2/65 です。 気品の高さがぴったりだと思いました。

No. 2/65keycult.com

10日目

note.com

東京、福岡、京都と3拠点を経験している Daisuke Ito さんのウェルビーイングの記事です。 この記事をみて僕も Centered を試してみています。新しいものをどんどん取り込まれるので刺激をもらっています。

そんな Daisuke Ito さんにおすすめのキーボードは Angry Miao の AM HATSU です。 新しいもの好きの Daisuke Ito さんにぴったりだと思います。

www.angrymiao.com

11日目

note.com

髪と髭を伸ばすとジョンウィックにしか見えない辻さんのエンジニアらしい記事です。 もろもろ私も愛用しています。今回のアドベントカレンダーは非エンジニアっぽい記事が多いので新鮮ですね。

そんな辻さんにおすすめのキーボードは Godspeed75 Designed by fropsie & BlindAssassin111 です。 F1好きな辻さんにはFunctionキーは必要だと思うし、何より速そうなのがいいかなって。

geekhack.org

12日目

note.com

私の尊敬する上司であり、大阪開発拠点長のおーくらさんの育休の記事です。お子さん2人ともかわいい。 めちゃくちゃ忙しいおーくらさんでもしっかり休めるのは本当にいい会社だなと思います。 お子さんとの時間がしっかりとれるように仕事を巻き取っていくのが私の直近の使命だと思っています。

そんなおーくらさんにおすすめのキーボードは KBDfans の Echo 80% です。 業務感のある強そうな雰囲気とお洒落さが同居したたたずまいが似合いそうです。

Fully Assembled Epoch 80% Mechanical Keyboardkbdfans.com

13日目

note.com

カメラガチ勢のかわかみさんの天の川の撮影の様子です。 写真もいいのですが、その行動力がすごいと常々思っています。

そんなかわかみさんにおすすめのキーボードは Hello M0110 です。 いいものを大切に使いながらも新しいものも取り入れるかわかみさんに合うかなと。

geekhack.org

14日目

note.com

採用担当の田鍋さんの関西へのリロケーションを促す記事です。 田鍋さんにはいつもお世話になりっぱなしで頭が上がりません。 関西拠点にUIターンいただいた方にはなんとサポート費用として50万円が支給されるキャンペーン中です。 このご時世、別の場所に住んでみたいと思っていた人は今がチャンスです!

そんな田鍋さんにおすすめのキーボードは The Key Company の CandyBar R3 です。 コンパクトでかわいいな見た目にテンキーもついて配列はテキパキと仕事をこなす田鍋さんに合いそうです。

Candybar Premium Round 3 Complete Kitthekey.company

15日目

moneyforward.com

エンジニア広報のluccafortさんの社内にポエムを書きましょうという記事。 恥でもなんでもないと思うのでどんどん書いていきましょう。 あと長くて全部読めませんでした。ごめんなさい。

そんな luccafort さんにおすすめのキーボードは Kinesis の Advantage360 です。 大量の文章を書く必要のある lucca さんには体にいいキーボードを。

kinesis-ergo.com

16日目

note.com

筋肉は全てを解決する yuma_iwami さんの運動についての記事です。 たしかに運動することで良いことしかないのは分かっているのですがなかなか元気がでません。 彼の頭の回転の速さも運動によるものだとするとやはり筋肉は全てを解決すると言えるでしょう。

そんな yuma_iwami さんにおすすめのキーボードは サリチル酸さん の KeyFuda02メディアパッド です。 これなら走りながらでも使えるかなって。

salicylic-acid3.hatenablog.com

17日目

nbtk.hatenablog.com

私が入社時に面接をしてもらった id:nbtk39 さんの依存性注入の話です。 2本立てでDIについてしっかり学べるようになっています。

そんな nbtk39 さんにおすすめのキーボードは ECS.HIT の Hi-FINGER7.5 です。 ふだんは40%で攻めるけれど、守るべきところはしっかり守る。そんな配列が nbtk39 さんらしいです。

【GB】Hi-FINGER7.5eschit.com

18日目

note.com

いつもチームビルディングや会のファシリテーションなどチームが健全に活動出来るように気を回していただいている井上さんの記事です。 会計という経理部にいかないとなかなか関わることのないドメインを扱うシステムを開発するに当たって取り組んでいることについて紹介してくださっています。

そんな井上さんにおすすめのキーボードは Wilba.tech の Thermal です。 ファシリでの物腰の柔らかな様子からリーフスプリングの打鍵感を連想しました。

wilba.tech

19日目

note.com

再び登場 luccafort さんの技術広報を始めるにあたっての考え方や資料の紹介記事です。 技術広報という仕事は私もふんわりとしか理解出来ていなかったので参考になりました。 少しでもアウトプットを増やして貢献していきたです。

そんな luccafort さんにおすすめの2台目のキーボードは shuriyama さんの 社畜のキーボード「新入社員の同期」 です。 大量の情報に触れる技術広報という仕事のお供にマクロパッド的に使えるこちらはいかがでしょうか。

【委託】社畜のキーボード「新入社員の同期」shop.yushakobo.jp

20日

kami-kiri-tai.hatenablog.com

一乗寺仲間の id:hogehogeoooo さんの一乗寺紹介記事です。 一条寺本当にいいところなのでみんな引っ越してきましょう。 あの軽自動車が気になっていたのは自分だけじゃなかったのかと安心しました。

そんな hogehogeoooo さんにおすすめのキーボードは Drop の Preonic です。 京都が好きな人にはやっぱり碁盤の目を想起するオーソリニアを。

drop.com

21日目

note.com

社内異動制度のチャレンジシステムを使って関西拠点に来てくれて上野さんの記事です。 京都、大阪それぞれの開発拠点長にインタビューしてそれぞれの想いを書いてくれた熱い内容です。 拠点に興味をもっていただいた方はぜひ読んでみてください。

そんな上野さんにおすすめのキーボードは Mode Designs の SixtyFive です。 いつも周りを気遣ってくれる上野さんだからこそ、たまには自分が好きなパーツを組み合わせて自分好みの見た目を選んでみてください。

shop.modedesigns.com

22日目

note.com

我らがプロダクトオーナー、杉浦さんの記事です。杉浦さんがいないと開発している意味がなくなるくらいの私の中の信頼感があついPOです。 プロダクトマネジメントにおけるアウトカムを銭湯での「ととのう」を使って説明した良記事です。 アドベントカレンダー関係なく良い記事なので読んでください。

そんな杉浦さんにおすすめのキーボードは recompile keys の Nomu30 Limited Edition です。 ミニマルでストイックなところが杉浦さんにぴったりです。

keys.recompile.net

23日目

note.com

ふたたび登場のおーくらさんです。 私からみると大きすぎる背中なのですが、そんなおーくらさんも一人の人間として迷いながらも進んでこられたんだなということが分かるポエムです。

そんなおーくらさんにおすすめの2台目のキーボードは AxolStudio の Yeti です。 かわいい見た目の実用キーボードをお子さんの一台目としていかがですか。

axolstudio.ca

24日目

yuya333.hatenablog.com

インターンid:yuya333 さんの記事です。 私が入社したときにはすでに出来るインターンという印象だったので、最初のころの様子がイメージ出来ません。 どんなことをされてきたかを書いていただいているので、インターンに興味がある方はぜひ読んでみてください。

そんな yuya333 さんにおすすめのキーボードは SatT さんの Vison です。 Alice配列の40%でごりごりコードを書いて活躍していってください。

satt.booth.pm

来年に向けて

今回のアドベントカレンダーでは私もふくめて今年入社したメンバーが大半でした。 現在も積極的に採用を進めているので、来年は1枚では足りなさそうな気配がしています。

株式会社マネーフォワード 関西拠点ではまだまだ仲間を募集中です。 いまは転職を考えていないという人でも少しでも興味を持ってもらえたらカジュアル面談で実際にどういう感じなのかを紹介出来るので気軽に連絡ください。 来年はアドベントカレンダーを書く側になっていただけるのを心待ちにしています。


この記事は IKKI68 Aurora x PnC (Drop + Invyr Holy Panda / GMK Future Func) で書きました。

仕事 優先度 つけかた 無料

やっていることが変わるたびにやってくる仕事があふれる期が今回も訪れました。 これまでにやったことのない仕事が次から次に発生して優先度がつけられなくて、全てが平行してしかかりになっている状況。

いつものことなのでそのうち慣れると思うのですがなかなかつらい。 仕事ってどうやるんだっけとなる時期です。 しかかりが多いと認知負荷が増えてどんどんしんどくなるので、一個一個片付けた方がいいはずなんですよね。 フロー効率ってやつです。

知見をもらったのですが、これはありって気がしてきました。だいたいの仕事はそんなに優先度高くないので放置に限る。

近況

この記事は Rubyist近況 Advent Calendar 2021 の 12 月 20 日の記事です。前日は id:takkan_m さんの 2021 近況 でした。

仕事

今年の1月から 株式会社マネーフォワード でソフトウェアエンジニアとして働いています。 といっても最近はほとんどの時間を人と話すことに使っていて、コードはほとんど書けていません。 ICというワードが流行る中で、がっつりマネージャとして働いていてソフトウェアエンジニア35才定年説の実在を信じてしまいそうです。 明確なロールとしてマネージャになったのは初めてなので、やれるところまでやってみようと思っていますが、来年は今後の働き方の岐路になりそうです。

ところで、最後に Ruby っぽい仕事をしていたのは前々職までで、前職では5年ほど 株式会社はてなRuby とはほとんど関わらない仕事をしていました。 入社してしばらくは周りとの差に凹むばかりで、自分のソフトウェアエンジニアとしての実力の低さに打ちのめされていました。正直だいぶひどかったと思うのですが、同僚はみんな自分を対等に扱ってくれて、そんな同僚達を裏切ってはいけないとがむしゃらにやってきました。前半はいろんなプロダクトを転々としてWebからネイティブアプリまで本当にめまぐるしく働いて、後半ははてなブックマークの開発に腰を据えて関わることが出来ました。この5年の経験はソフトウェアエンジニアとして成長できただけでなくて、失敗も成功も全てがかけがえのない思い出です。

マネーフォワード全体だとこれまで経験したことのない人数になっているのですが、関西拠点だとまだまだ少人数です。 これからはこれまで以上に文化を作っていく側という意識をもって、自分のはてなでの5年のような濃い経験をみんなにしてもらえるようなそんな拠点を目指したいと思っています。

まあそこまで気負っているわけじゃなくて、楽しくやっていきたいだけなので、気を抜くとはいってしまう肩の力を抜いて働いていきます。

私生活

大きな変化としては3年前に結婚したことで、まさか自分があのタイミングで結婚するとは思ってなくて驚いています。 ゆかいに暮らすという点が一致しているのでまあまあ楽しくやっています。 妻は外に出ていきたい人なんだけれど、自分が引きこもりなのでそこは難しいところ。

ひきこもりの一因として強迫性障害(OCD)という病気をもっていて、いわゆる潔癖症なんですが一昨年くらいから悪化してしまっていました。 去年の暮れに久しぶりに病院にいって薬物による治療を開始して、少しマシになっているのですが、認知行動療法を進める勇気がなくてなかなか進展していません。 ただし、薬の影響なのか怒りの感情を抑えるのがうまくなっていて、とても穏やかにくらしているのが想定外の副作用でした。

趣味

これまで趣味といえるものがなかったのが、最近はコーヒーを淹れたり、キーボードを買ったりと趣味と言えるものが出来て人生が楽しくなっています。

これまでハンドドリップだとどうしてもうまく入れられなかったコーヒーですが、在宅勤務になったのでもう一度やってみるぞと少しずつ練習してきました。 辻和金網 手編みコーヒードリッパ― 銅 を買ったのが1つのエポックメイクで、相性がよかったのか納得いく味のコーヒーを淹れられるようになって急に楽しくなってきました。ネクストG を買ってから豆をひく手間もほぼなくなって快適コーヒー生活を送っています。

キーボードには無限にお金が溶けているので来年は自重したいのですが果たして。

コミュニティ

Kyoto.rb の運営側に戻りました。前回離れたときはがんばろうとして続かなかったのでいまはオンラインでゆるゆると雑談したりするのを月一ペースで開催しています。雑談が得意じゃないので得意な人が来てくれて盛りあがるとほっとしています。人の話を聞くのは大好きなのでみなさん雑談しにきてください。

コミュニケーション出来る人の数が限られているのか、最近友達と疎遠になっていたり、その他のコミュニティにはあんまり顔を出せていないので薄情な人になっていそう。


Rubyist近況 Advent Calendar 2021 、明日は id:Pocke さんです。Ruby Prize 2021 の Final Nominees おめでとうございます!


この記事は IKKI68 AURORA x PnC (Drop + Invyr Holy Panda / GMK Future Funk) で書きました

IKKI68 Aurora x PnC

id:Sixeight としては買わないとと思って in したのが届きました。

キーキャップも一緒に in したのだけれどそちらはまだ届いていないので、GMK Future Funk をここぞとばかりに使いました。 スイッチはHoly Panda。

サボってスタビライザーを潤滑していないので、ひどいノイズが鳴ってるけど見た目がいいのでヨシッ!

masawadaさんに感謝します

この記事は masawada Advent Calendar 2021 - Adventar の 9 日目の記事です。 昨日は id:mizdra さんでした。歯は大切ですね。

こんにちは。初参加の id:Sixeight です。 Twitterをみていると今日が空いているみたいだったので思い切って参加してみました。

毎年楽しく拝見している masawada Advent Calendar にまさか自分が参加することになるとは思ってもみませんでした。 このような機会を与えていただいてありがとうございます。

f:id:Sixeight:20211208230250g:plain

id:masawada さんには私がサマーインターンのメンターをしているときに、インターン生向けにAPIを実装いただいたときから頭が上がりません。 このLGTM画像は妻のやっている店にお越しいただいたときに記念に撮影して家宝にしたものです。 後ろの2人は 7日目の人 と、10日目の人 です。またみんなで飲みに行きたいですね。


masawada Advent Calendar 2021 - Adventar 、明日は id:hogashi さんです。 whywaita Advent Calendar 2021 と同日のエントリになっていますが、まさか同じ記事を使い回すはずはないですよね。2本同時に読めることをとても楽しみにしています。

CircleCIの小手先による高速化手法

この記事は Money Forward Engineering Advent Calendar 2021 - Adventar の6日目の記事です。 昨日は TONY (id:galepilot) さんによる「チームで実践したKPTのボリュームを増やすコツ」でした。 ふりかえり、なんとなくやってしまうと惰性になるのでちゃんとチームで意図を理解したうえで実施するのは大切ですね。

CIを速くする意味

CIを速くする意味はなんでしょうか。

DORA(DevOps Research and Assessment) 2021年の Accelerate State of DevOps Report によると、エリートチームのリードタイムは1時間以内ということだそうです。 本当かという感じの短さですね。デプロイ頻度は変わらずオンデマンドということなのですが、1時間以内にトランクにマージされるとすると、デプロイ回数もすごいことになっていそうです。

さて、デプロイするためにトランクにコードをマージしたとすると何が起きるでしょうか。 そう CI (Continuous Integration) の実行です。

例えば仮に1日に1回デプロイするとしても、年に240回デプロイしていることになります。このときトランクでのCIの実行に30分かかったとすると120時間もの時間がCIを待っている時間に使われてしまいます。デプロイ待ちだけでもこれくらいかかるのですが、トランクにマージしているないコードを合わせると途方もない時間をCI待ちに使っていることになります。

これではリードタイムが下がってしまいますし、結果デプロイ頻度も下がります。また当然不具合があったときに修正をいれようとしても同じだけ待つ必要です。

これがCIが速くあるべき理由のひとつです。

また1エンジニアの立場からみても、CIを待っている時間とても無駄ですね。 フィードバックが遅いということはそれだけ開発のテンポが遅いということです。

少しならいいのですが、これがずーっと続くと考えるとモチベーションが低下しませんか。 これが従業員エンゲージメントの低下を招きます。

Four keys metric についてはLeanとDevOpsの科学が詳しいのでぜひご覧ください。

anchor.fm

texta.fm のLeanとDevOpsの科学の回も非常におすすめです。

推測するな計測せよ

速くすると言っても闇雲に作業するだけでは楽しいだけで意味はありません。 ちゃんと計測して効きそうなところから手を入れていきましょう。

幸いなことに CircleCI には Insights があるので、それを眺めたりするだけでもけっこうな情報が得られます。 金で殴ると速くなったりもするのですが、その辺はバランスなのでちゃんとコストも眺めておきましょう。

逐次実行をやめる

ビルドしたあとにユニットテストとE2Eテストを実行してステージングにデプロイするようなワークフローを考えてみましょう。 ここでボトルネックになっているのはE2Eにかかる時間のようです。

以下のような workflow があるとすると unit_teste2e_test のジョブは逐次実行されます。 しかし、これらは独立して実行可能だとするとユニットテストと同時にE2Eテストを実行した方が効率が良さそうです。

build_and_deploy:
  jobs:
    - build
    - unit_test:
        requires:
          - build
    - e2e_test:
        requires:
          - unit_test
    - deploy:
        requires:
          - e2e_test

これはこのように ファンアウト/ファンイン することで解決します。

build_and_deploy:
  jobs:
    - build
    - unit_test:
        requires:
          - build
    - e2e_test:
        requires:
          - build
    - deploy:
        requires:
          - unit_test
          - e2e_test

ワークスペースの保存を最適化

さてこれでE2Eテストの影響で極端に遅くなるということがなくなったようです。しかし今度はビルドの時間が気になってきました。

いくつか改善ポイントがありそうですが、実行時間を眺めてみるとどうやら persist_to_workspace しているところが遅いことが分かりました。

よくみるとリポジトリ全体を保存しているようです。

- persist_to_workspace:
  root: .
  paths:
    - ./

persist_to_workspace は対象のファイルのtarボールを作ってgzipしたものをアップロードして、それを attach_workspace で展開しています。

つまり対象のファイルが増えれば増えるほどtarボールを作ってアップロードするのも、それをダウンロードして展開するのも遅くなります。

よって必要なファイルだけを保存するようにしましょう。

- persist_to_workspace:
  root: .
  paths:
    - file1
    - file2

こういう感じ。これで build ジョブだけじゃなくて、保存されたファイルを使っていた後続のジョブも速くなりました。

これはリポジトリが太れば太るほど効果が大きいので、長年開発しているプロダクトには特におすすめです。

チェックアウトを速くする

CircleCiには checkout という組み込みのステップがあります。

これを使うと気軽のリポジトリからファイルをチェックアウト出来るのですが、実はこのステップはあんまり賢くなくてリポジトリをまるごとチェックアウトしてきてしまうので、先ほどの話にあったとおりリポジトリが太ってくるとどんどん遅くなります。

1つの回避策として .git/ をキャッシュしておくという方法が紹介されているようですが、これは結局キャッシュの出し入れにかかる時間を考えるとほとんど意味がないと思います。

諦めて自前でチェックアウトする方が速いので以下のような コマンドを定義 しておくとべんりです。

shallow_checkout:
  steps:
    - run:
      name: Checkout repository
      command: |
        git init
        git remote add origin ${CIRCLE_REPOSITORY_URL}
        GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git fetch --depth=1 origin ${CIRCLE_SHA1}
        git checkout ${CIRCLE_SHA1}

これもある程度年数の経っているリポジトリには劇的に効くのでおすすめでです。

ふつうにキャッシュする

あとは割とふつうの話なのですが、次回の実行が速くなるようにインストールしたライブラリなどをキャッシュします。

キャシュを復元するときには複数キーを指定できて、前方一致してくれるので複数のキーを使って段階的なキャッシュになるようにしておくのがポイントです。

例えば npm の場合だと以下のようにすると使い勝手が良さそうです。( nodenv などを使っていて .node-version ファイルがある前提)

- save_cache:
  key: npm-cache-v1-{{ checksum ".node-version" }}-{{ checksum "package-lock.json" }}
  paths:
    - ~/.npm

キャッシュを戻すときに以下のようにキーを指定すると、まずは package-lock.json の内容が同じかどうか確認し、違っていれば .node-version の内容を確認する。 それも違った場合は npm-cache-v1- というキーでキャッシュを探すので、何も更新がなければ最新のキャッシュが使われて、そうでなくても同じ Node.js のバージョンのキャッシュが使われるなど出来る限り現状に近いキャッシュを選択できるので、無駄が少なくなります。

- restore_cache:
  keys:
    - npm-cache-v1-{{ checksum ".node-version" }}-{{ checksum "package-lock.json" }}
    - npm-cache-v1-{{ checksum ".node-version" }}-
    - npm-cache-v1-

ちなみに node_modules/ ではなくて ~/.npm をキャッシュしているのは npm ci を使って存性の解決をスキップする代わりに node_modules/ を毎回消しているからです。

これは前方一致なキャッシュキーを扱うときにありがちなミスだけど、npm-cache-v1 ではなく npm-cache-v1- (末尾にハイフンが付いている!)にしないと、例えば npm-cache-v10 に意図せず一致してしまうような問題がある。

id:r7kamura さんから指摘いただいて修正しました。

イメージの最適化

この辺りまでやってくると削るところが減ってくるので、Executor として使っているDockerイメージにボトルネックが移動している可能性があります。その場合は不要なものを含まない適切なイメージを選択するようにしてください。

ほとんどのケースでは CircleCi の ビルド済 Docker イメージ を使うといいでしょう。

ちなみにデータベースでのファイルへの永続化が必要ない場合はメモリストレージを使ってくれる -ram バリアントを使うのがおすすめです。

テストを分割する

これらの最適化で build ジョブはだいぶ速くなったと思うので次はテスト自体をもう少しどうにかしましょう。

もちろん根本的にテストを速くするというのが最も効果的だとは思うのですが、テストを安全に改善するのはなかなか難しく、その作業は困難を極める場合もあるでしょう。

安心してください。我々には金で殴るという方法が残されています。時間を金で買うのです。

CircleCIには テストの並列実行 をするための仕組みが用意されており。これを用いると複数のサーバーでテストを同時に実行することができます。

方法がとても簡単で、ジョブの parallelism キーを指定することで並列実行されるようになります。

jobs:
  unit_test:
    parallelism: 10
    steps:
      - ...

ここで重要なのは並列実行されるジョブのどこでどのテストを実行するかです。

ふつうにやるとちょっと難しそうですが、CircleCIではcircleci tests コマンドを使ってテストを適切に分割することができます。

TESTFILES=$(circleci tests glob 'spec/**/*_spec.rb' | circleci tests split --split-by=timings)

あとは $TESTFILES に格納されたテストファイルを実行するだけです。

--split-by=timings を使うと並列実行されるそれぞれのテストがだいたい同じくらいの時間で完了するように分割してくれます。

これには実行結果のデータが必要なので store_test_results のようにテスト結果を保存するのを忘れないでください。

- store_test_results:
  path: /path/to/test-results

あとはどのくらい分割すると効率良くテストを回せるかを実験しながら見つけましょう。当然ですが分割数を増やすほどの消費するクレジットの数も増えるのでお金がかかります。

最後に

小手先で出来る技を紹介してきましたが、なんとここに書かれたことの大半が公式のブログに掲載されています。 みなさん時間を無駄にしましたね。

circleci.com

まずは一次情報を当たりましょうという教訓を得られましたね。


Money Forward Engineering Advent Calendar 2021 - Adventar 、明日は maya akahane さんです。社のSlackにいるDeepLボットにはとてもお世話になっているので気になります。


この記事は Cornelius で書きました。

機材がなくてもなんとかなるキーボードの手抜き撮影

こんにちは。 id:Sixeight です。この記事は KEEB_PD Advent Calendar 2021 - Adventar の6日目の記事です。 昨日は たねやつ (id:ibuquicallig) さんによる「初めて作ったtada68とエピソード」でした。 最初の自作キーボードということでとてもエモいですね。

写真

KBDFans Mountain Ergo (C³ TANGERINE SWITCH / EnjoyPBT ModernJA)
KBDFans Mountain Ergo (C³ TANGERINE SWITCH / EnjoyPBT ModernJA)

別のアドベントカレンダー用に撮影した Mountain Ergo です。記事の中には出てこないキーボードとして撮影したこだわりの一枚。

blog.nishimu.land

ゆるふわ解説

KBDFans でGBをしていた Mountain Ergo。 シュッとした見た目と一体感のあるリストレストに一目惚れしたキーボードです。 残念なことに一体感のあるはずのリストレストは若干ズレていて、レンダリングほど一体感はなかったのですが、写真では中央が揃うように撮影したので手前をみるとズレているのが分かります。

薄い色のケースを買いがちな自分にしては珍しく黒のケースにしていたらしく、ちょうど買っていた EnjoyPBT ModernJA を乗っけてモノクロにしました。 かなり引き締まった感じになっていてこの構成は気に入っています。

スイッチは C³ TANGERINE SWITCH の Light Green stem を使っています。 このスイッチはキーボード沼にハマってからずっと欲しかったスイッチなのですが、手に入れて満足してしまってしまい込んでいたものを引っ張り出してきました。 潤滑はしていないのですがだいぶ滑らかな打鍵感でよいですね。思ったより軽かったのでもうちょっと重いと嬉しいんですが、Dark Green stem だと重すぎてもどかしい。

直前に macOS Monterey に上げた結果、うまくストレージとして認識してくれなくなってしまって、ファームの書き込みが普段の環境で出来なくてめんどくさい感じになってしまいました。 結果的にキーマップが納得いってなくて常用出来ていないので、そのうちちゃんとして使ってやりたいなと思っています。

撮影

機材は iPhone のみで、撮りっぱなしで現像もしていません。 もちろん、機材にこだわって撮影されていたり、現像をしっかりされた写真には敵わないものの、まあまあマシな感じにはなっているかなと自己満足しています。

ポイントは2点で、必ず自然光で撮影するのと、ポートレートモードを使うことです。

自然光で撮影することで iPhone でもだいぶマシな写真になるうえに、ポートレートモードで撮影することで良い感じボケてくれるのでそれっぽくなります。 ポートレートモードではずっと「離れてください」って出てますが無視して撮っています

もちろん三脚なんで使ってなくて手持ちです。

我が家で自然光が入る位置がベットになってしまうのですが、布がピシッとしてないので使ってないデスクマットを敷いてます。

ということで私がハードルを下げていくのでみなさんも気軽に撮っていきましょう。

参加履歴


KEEB_PD Advent Calendar 2021 - Adventar 明日は k4m1tsuki さんです。 「my best keyboard」ということでエンドゲームにたどり着かれた可能性に期待が止みません。

adventar.org


この記事は Cornelius で書きました。