昨今の IT エンジニア募集企業では『開発 PC を選べる』というのが一つの潮流にある気がしています。永和システムマネジメント (以下 ESM) でも自分のパフォーマンスが最も出せる PC を選ぶといった制度が古くからあり、今回はそれにまつわるストーリーを書いてみます。
- Apple の法人購入するときには、キーボードの選択に気をつけよう
- 法人契約で間違えて購入したとき
- 16コア、64GBは正義。コアとメモリは積めるだけ積め
以上のショートショート3本立てです。
Apple の法人購入で気をつけること
ESM では定期的に買い替えのタイミングを設けており、これはそんな MacBook Pro を買い換えるときのとある日の出来事です。
ESM で MacBook Pro を購入する際には Apple で法人契約購入するのですが、先日弊社メンバーで立て続けに起きた、ちょっとした注意点を共有しておきます。
舞台は以下のツイートです。
[悲報] US 配列で購入したと思った MBP が JIS 配列だった
— Koichi ITO (@koic) 2021年2月3日
数日後、同僚にもまさかの同じことが起きました。
注文したM1 MacBook Proの発送のお知らせメールが来てウキウキしてたらキーボードがJISキーボードになってしまっていたのに気がついた、やっちまった。。。
— Masahiko Murakami (@fossamagna) 2021年2月9日
言い訳じみた原因としては、法人での購入画面への注意力散漫といったものだったと思われます。
MacBook Pro の構成をカスタマイズするときに、デフォルトで『日本語 (JIS) 』キーボードが選択されていたので、US 配列が良い場合は『英語 (米国) 』を選択し直す必要があります。
(注: 以下は US 配列キーボード「選択後」の画面です)
CPU やメモリのカスタマイズと異なり、購入金額が変わるわけではないので、会社の予算に気を取られて見落とさないよう気をつけると良いです。
Apple の法人購入で間違えて購入した場合
一定期間の間であれば、交換してもらえます。私も諦めかけていたところ、バックオフィスのメンバーから交換の流れを教えてもらって US キーボードへの転身をとげました。 とりわけ Apple 社に迷惑を掛けてしまったあたり反省しかないのですが、おかげで満足なキーボードで生活できています。
あきらめる前に、お勤めの会社で交換可能か確認をとってみましょう。
16コア、64GBは正義。コアとメモリは積めるだけ積め
「買い替えてどうなったの?」というところで、OSS での開発を例に挙げると、RuboCop のフルビルドにかかる所要時間がおおよそ半分程度になりました。
RuboCop では test-queue を使ったテストの並列化をしているため、コア/ハイパースレッディングとメモリが増えればそれだけビルドの待ち時間が減るという公式です。
アクティビティモニタでみるとこんな感じで、すべてのコアが働いていることが確認できます。
PC スペックとフルビルドの Before / After を並べてみます。
⏳ Before (1:54.53)
- プロセッサ: 2.7 GHz クアッドコアIntel Core i7
- メモリ: 16 GB 2133 MHz LPDDR3
% time bundle exec rake Files: 567 Modules: 88 ( 13 undocumented) Classes: 529 ( 2 undocumented) Constants: 882 ( 869 undocumented) Attributes: 31 ( 0 undocumented) Methods: 990 ( 867 undocumented) 30.52% documented Starting test-queue master (/tmp/test_queue_1738_17060.sock) ==> Summary (8 workers in 42.8440s) [ 1] 1960 examples, 0 failures, 4 pending 80 suites in 24.9043s (pid 1774 exit 0 ) [ 2] 2626 examples, 0 failures, 6 pending 87 suites in 24.9056s (pid 1775 exit 0 ) [ 3] 117 examples, 0 failures 1 suites in 42.8359s (pid 1776 exit 0 ) [ 4] 2309 examples, 0 failures 81 suites in 42.8358s (pid 1777 exit 0 ) [ 5] 2996 examples, 0 failures 87 suites in 42.8372s (pid 1778 exit 0 ) [ 6] 1436 examples, 0 failures, 1 pending 78 suites in 42.8379s (pid 1779 exit 0 ) [ 7] 637 examples, 0 failures 53 suites in 42.8379s (pid 1780 exit 0 ) [ 8] 3490 examples, 0 failures 85 suites in 42.8312s (pid 1781 exit 0 ) Starting test-queue master (/tmp/test_queue_1738_18680.sock) ==> Summary (8 workers in 41.1013s) [ 1] 117 examples, 0 failures 1 suites in 41.0932s (pid 1860 exit 0 ) [ 2] 1518 examples, 0 failures 78 suites in 41.0933s (pid 1861 exit 0 ) [ 3] 2480 examples, 0 failures 86 suites in 41.0947s (pid 1862 exit 0 ) [ 4] 2259 examples, 0 failures 86 suites in 41.0952s (pid 1863 exit 0 ) [ 5] 2786 examples, 0 failures, 5 pending 87 suites in 41.0958s (pid 1864 exit 0 ) [ 6] 2066 examples, 0 failures 79 suites in 41.0960s (pid 1865 exit 0 ) [ 7] 591 examples, 0 failures 46 suites in 41.0957s (pid 1866 exit 0 ) [ 8] 3754 examples, 0 failures, 6 pending 89 suites in 41.0892s (pid 1867 exit 0 ) Running RuboCop... Inspecting 1261 files ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. 1261 files inspected, no offenses detected bundle exec rake 515.00s user 34.02s system 479% cpu 1:54.53 total
⏳ After (1:11.55)
- プロセッサ: 2.4 GHz 8コアIntel Core i9
- メモリ: 64 GB 2667 MHz DDR4
% time bundle exec rake Files: 567 Modules: 88 ( 13 undocumented) Classes: 529 ( 2 undocumented) Constants: 882 ( 869 undocumented) Attributes: 31 ( 0 undocumented) Methods: 990 ( 867 undocumented) 30.52% documented Starting test-queue master (/tmp/test_queue_27867_17060.sock) ==> Summary (16 workers in 26.9534s) [ 1] 111 examples, 0 failures 1 suites in 12.8340s (pid 27900 exit 0 ) [ 2] 1527 examples, 0 failures 43 suites in 12.8344s (pid 27901 exit 0 ) [ 3] 117 examples, 0 failures 1 suites in 26.9430s (pid 27902 exit 0 ) [ 4] 1029 examples, 0 failures, 4 pending 47 suites in 26.9427s (pid 27903 exit 0 ) [ 5] 1529 examples, 0 failures 51 suites in 26.9428s (pid 27904 exit 0 ) [ 6] 1699 examples, 0 failures 48 suites in 26.9439s (pid 27905 exit 0 ) [ 7] 959 examples, 0 failures 46 suites in 26.9438s (pid 27906 exit 0 ) [ 8] 68 examples, 0 failures 1 suites in 26.9437s (pid 27907 exit 0 ) [ 9] 1470 examples, 0 failures 50 suites in 26.9435s (pid 27908 exit 0 ) [10] 269 examples, 0 failures 21 suites in 26.9434s (pid 27909 exit 0 ) [11] 34 examples, 0 failures 1 suites in 26.9432s (pid 27910 exit 0 ) [12] 920 examples, 0 failures 45 suites in 26.9430s (pid 27911 exit 0 ) [13] 1473 examples, 0 failures 49 suites in 26.9428s (pid 27912 exit 0 ) [14] 1171 examples, 0 failures, 1 pending 50 suites in 26.9431s (pid 27913 exit 0 ) [15] 1630 examples, 0 failures, 1 pending 49 suites in 26.9428s (pid 27914 exit 0 ) [16] 1565 examples, 0 failures, 5 pending 49 suites in 26.9414s (pid 27915 exit 0 ) Starting test-queue master (/tmp/test_queue_27867_18680.sock) ==> Summary (16 workers in 28.2100s) [ 1] 111 examples, 0 failures 1 suites in 13.5583s (pid 27954 exit 0 ) [ 2] 1590 examples, 0 failures 48 suites in 13.5583s (pid 27955 exit 0 ) [ 3] 1316 examples, 0 failures 46 suites in 13.5583s (pid 27956 exit 0 ) [ 4] 1231 examples, 0 failures, 5 pending 50 suites in 13.5582s (pid 27957 exit 0 ) [ 5] 68 examples, 0 failures 1 suites in 13.5581s (pid 27958 exit 0 ) [ 6] 256 examples, 0 failures 21 suites in 13.5578s (pid 27959 exit 0 ) [ 7] 895 examples, 0 failures 47 suites in 13.5578s (pid 27960 exit 0 ) [ 8] 931 examples, 0 failures 44 suites in 13.5579s (pid 27961 exit 0 ) [ 9] 1565 examples, 0 failures 48 suites in 13.5578s (pid 27962 exit 0 ) [10] 1595 examples, 0 failures, 4 pending 45 suites in 13.5578s (pid 27963 exit 0 ) [11] 117 examples, 0 failures 1 suites in 28.2005s (pid 27964 exit 0 ) [12] 34 examples, 0 failures 1 suites in 28.2004s (pid 27965 exit 0 ) [13] 1153 examples, 0 failures, 1 pending 49 suites in 28.2002s (pid 27966 exit 0 ) [14] 1596 examples, 0 failures 50 suites in 28.2003s (pid 27967 exit 0 ) [15] 1613 examples, 0 failures 50 suites in 28.2000s (pid 27968 exit 0 ) [16] 1500 examples, 0 failures, 1 pending 50 suites in 28.2001s (pid 27969 exit 0 ) Running RuboCop... Inspecting 1261 files ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. 1261 files inspected, no offenses detected bundle exec rake 447.86s user 30.88s system 669% cpu 1:11.55 total
16 コア、64GB の開発環境は正義。金の弾丸が効いたことがわかります。
余談ですが、会社としては (業務がまわれば) Linux や WSL という選択肢もある中、私が MacBook を選んでいる理由は、Rails アプリケーション開発が仕事のベースにあるため、Rails の作者である DHH が選択している MacBook を使うことにしています。
これは『開発 PC を選べる』の根底にある「自分のパフォーマンスが最も出せる PC を選ぶ」への観点として、開発環境の構築にハマらないように、もしハマった時は The Rails Doctrine にある「数は安全性を生む」による解決が働きやすいことへの期待があるためです。
以上、金の弾丸によって開発効率を上げた一例の紹介でした。
もっとコアがあれば開発効率の向上に活かせるのに予算が足りないよ、、、ということであれば組織の予算をハックすることを検討できるかもしれません。PC の必要経費は年々上がっているので、時代背景とあっているか上長と掛け合ってみましょう。人件費に比べれば PC は安いもので、何より開発者にとって快適な開発環境はすこぶる良いものです (健闘を祈る!) 。
最後にいつものです。