「学習する組織」を読んでいる

まじでこれはいい本だ

読み始めたきっかけは、クラウドワークスエンジニアブログにあったtmknomさんの 「無人化システム」を駆逐する組織マネジメントとエンジニアリング の記事だ。組織論の話なのかな?と思わせるタイトルだが、「システム思考」などの理論を説明している部分が主だ。

(まだ全部読み切ってない段階でこんな記事書くなよ!って感じだけど、とりあえず書くw)

自分は、↑「なぜあの人の解決策はいつもうまくいくのか?」を読んでから、学習する組織を読み始めている。いきなり学習する組織を読むと、かなり面喰らうんじゃないだろうか。どちらの本も似たようなことを書いてるんだけど、「なぜあの人の・・・」のほうが具体例が身近でわかりやすい。

読んでいて感じたこと

国語力が皆無な自分ながらも、感じたことをいくつか書いておく。

スナップショットで判断するのではなく、時間をかけてシステム理解をする

暫定対処を重ねたうちに、本当にやりたいことをやりづらくなり、身動きがとれなくなった。

みたいなことはまれによくある。

  • 動きがよくわからないコードをベースとする機能改修で「とりあえずコピペ」してリリースした。
  • しばらくしたらバグったので、if文を追加して今回の機能改修部分だけを特別扱いした。
  • しばらくして別の機能を追加するときに・・・(以下略

ソフトウェア開発を仕事でやっていると、よほど意識が高い集団でもない限り、こういう現場を目にすることは多い。

この問題は多くの場合、要件をあらためて理解して、合理的な設計部分を少しずつ増やしていき、啓蒙を重ねていくことで解決に向かう。しかしながら、多くの現場ではそれがされないまま、コピペプログラミングとif文追加による複雑化という悪循環が10周20周と繰り返される。

本には色々書いてあったが、まず問題が複雑化するという1循環を認識できているかが1つ大きなポイントなのかなと思った。

たとえば、設計に無関心でも、とにかく動いてテストが通ればリリースができる某スマホメーカーのようなやりかたでは、なんとなく期を重ねるごとに開発効率が落ちているという感触は得ることができても、それに対する問題認識ができないだろう。

根本原因の本対処と暫定対処はセットで考える

自分がこれまで8年くらいソフトウェア開発をしていて、どうしても時間的制約などから暫定対処を考えないといけないことは多かった。そのときに、経験したのはだいたい以下のどちらかだ

  • 実は時間的制約はあまりなく、暫定対処をやめて最初から本対処した
  • 本対処を後回しにした結果、暫定対処のコードで3年以上運用されることになってしまった

「暫定対処したあと、後になって本対処をした」ということは、残念ながら数えるくらいしか無い。

本には書いてあるが、暫定対処は本対処に対する副作用を持っている。ソフトウェア開発であれば「暫定対処で乗り切った」→「本対処をし直す・・?まじで?」という心理的な障壁が、些細なものではなく割と大きい。つまり、暫定対処からの本対処という線形的な流れになることは非常にまれで、暫定対処と本対処の"二者択一" となってしまうケースが圧倒的に多い。

課題が認識できていて、本対処と暫定対処の両方が明確である場合にはまだいい。

問題は、「原因があまり認識できていないまま、本対処もよくわからないまま、暫定対処で乗り切る」というケースなのかなと。自分はわりと場当たり的な対応をしてしまうことが多いので、今後気をつけていかなければ、と改めて感じた。

進捗だめです...

f:id:YusukeIwaki:20201227154157p:plain

なかなかのボリュームゆえ、まだ27%

お正月休み中に読み終われるかな...

3年遅れで12インチMacbookに惚れた

ちょっとした物欲で、12インチMacbookをメルカリで5万でポチった。

2017年モデルの Core m3のやつなので、Dockerを動かして開発するとかには多分向いていないのは承知の上で購入。

こいつが、思いの外めちゃくちゃ自分には重宝しそうだ。

なぜ惚れた?

キーボードがおもったよりもマシ

12インチMacbookは、キーボードがあの悪名高きバタフライキーボード。

使い心地については最悪に近いものだけど、それでも2016のMacbook Proに比べると多少はマシ。会社のMacbook Proの最悪のキーボードに慣れてしまった身として、12インチMacbookのキーボードは「思ったよりもマシ」だ。

想像以上に(物理的に)軽いし、サッと開けてパッとつかえる

ASUSの軽いChromebookを使ってた時期もあるので、1kgを切る軽いPCというだけではあまり驚かないのだけど、実物を実際に持ち歩くと、体感的にはChromebookよりもだいぶいい。

ASUSChromebookよりもひとまわり薄くて軽い。さらに、開けるときのヒンジの硬さがChromebookでは(タブレットとしても使える、みたいな構造ゆえ)かなり力が必要だったのに対し、12インチMacbookはラップトップでしかないのでヒンジが軽い。

片手で取り出して、サッと開いて膝の上にのっけてブラウザひらいて、ググって調べたら閉じて、くらいはエレベータ待ちの間に容易にできるのが地味に嬉しい。(こういうスキマ時間の有効活用が個人的に好きなだけだが)

iPadよりも12インチMacbookのほうが自分の用途にあってる

これが最大のポイント。12インチMacbookを使うようになると間違いなく使わなくなるのがiPadだ。

iPadOSはキーボードをつかうとほぼPCの操作感にはなるものの、やはりmacOSには遠く及ばない。特に自分の場合は、karabiner-elementsを入れてキーカスタマイズしてたりもするので、Appleのデフォルトのキーを強制されるiPadOSは論外だ。

iPadApple Pencilと組み合わせたら最高のメモツールじゃないか!」

・・・そう思った時期が私にもありました。

自分は特段に絵心があるわけでもないし、 思考整理だったらiPadの手書きメモじゃなくてSketch使ったほうがいいと、すぐに気づいた わけです。

最近は、puppeteer-rubyを熱心に開発していたりもするので、まじでiPadじゃなくて軽いPCのほうがコードもVSCodeで難なく書けるし最高。

iPadはメルカリで売ることにしたw

Silicon macが登場しても、12インチ Macbookの価値は健在

エンジニアとしていろいろあるBigSurだが、モバイル用途では実は結構いい。

Wifiの接続がものすごく速い(気がする)のは特筆すべき点と思う。

iPhoneとのテザリングが、iPadであればWifi設定開いて "YusukeIwakiのiPhone" が出るまで30秒くらい待って、10秒くらいかけて接続するので、ゆうに1分弱かかる。

12インチMacbookだと、ブラウザを開いて起動を待っている間にWifiをタスクトレイから開いて接続。長くても10秒程度あれば iPhoneとのテザリングができてブラウジングが開始できる。

今回のシリコンマックの発表ではPro/Airしか出てこなかったこともあり、12インチMacbookはモバイル用途では最適だ。

puppeteer-rubyくらいなら12インチMacbookでも開発できるー!

Dockerを使わず、普通にネイティブでRubyRSpecを動かしてブラウザ自動操作するくらいなら、12インチMacbookで十分。

f:id:YusukeIwaki:20201112011849p:plain

スキマ時間にpuppeteer-rubyのspecをちょっとずつ書いていくぞ〜〜

mac OS Big Sur beta6にした結果

macOS Big Sur betaは初期から使ってみてたんだけど、beta6にしたらDockerまで使えなくなってしまったので、衝動的に

こんなTweetしたら思いの外リツイートされまくってしまった。 事実ベースで情報を知りたい人向け に、自分のマシンで起きてることを、雑ではありますがまとめておきます。

(2020/09/18 14:00追記: beta7にするとDocker使えるようになっていました

動作環境

2019のMacbook Pro 15インチ。Mojave→Catalina→Big Surとアプデしてきた。

今は、Big Surの beta6 20A5364e

f:id:YusukeIwaki:20200918095620p:plain

このブログを書いているときに、beta7が降ってきていたので、もしかしたら事象は改善されているかもしれないけど、とりあえず今回はbeta6で起きたことのまとめです。

Homebrewが動かない?→いえ、動きます。が・・・

Homebrewは全然動かないわけじゃないんです。

Xcodeコマンドラインツールは ここ から取ってきていました。たしか 12 GM Seedっていうバージョンの。

(今あらためて見たら 12の正式版がリリースされていたので、状況は変わっているかも)

んでもって、いつもどおりDartをアプデしようかなーとおもったら

$ brew install dart
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
Updated 26 formulae.
==> Updated Casks
adoptopenjdk        datagrip            goland              loom                pycharm-ce          tagspaces
ajour               difffork            hookshot            manictime           qt-creator          ubersicht
amazon-workspaces   diskcatalogmaker    icollections        marvin              razorsql            uu-booster
appcode             djay-pro            iexplorer           megasync            screen              vassal
blueharvest         epic-games          juicebar            navicat-premium     sitebulb            visual-studio-code
cellprofiler        expressvpn          lando               parallels-client    sqleditor           vitamin-r
cleanmymac          feed-the-beast      lastpass            pgadmin4            stack               vrew
clion               gemini              lens                pppc-utility        swifty              whatroute
dashlane            geneious-prime      loaf                pycharm             tableplus

Warning: You are using macOS 11.0.
We do not provide support for this pre-release version.
You will encounter build failures with some formulae.
Please create pull requests instead of asking for help on Homebrew's GitHub,
Discourse, Twitter or IRC. You are responsible for resolving any issues you
experience while you are running this pre-release version.

==> Installing dart from dart-lang/dart
==> Downloading https://storage.googleapis.com/dart-archive/channels/stable/release/2.9.3/sdk/dartsdk-macos-x64-release.
Already downloaded: /Users/yusuke-iwaki/Library/Caches/Homebrew/downloads/641b698f2a5f7f1e1b1feda13fc26c1fdf653af04cfc89928365888186c9044e--dartsdk-macos-x64-release.zip
Error: Your Xcode does not support macOS 11.0.
It is either outdated or was modified.
Please update your Xcode or delete it if no updates are available.

こんな感じのことを言われます。XcodemacOS 11.0をサポートしていない?(え??まじ??)って感じのエラーがでます。 xcode-selectXcode 12 GMを指定しても、コマンドラインツールを指定しても同様のエラーです。

ただ、全部が全部こういうエラーになるわけじゃなくて、正常にインストールできるものもあります。

$ brew uninstall imagemagick@6
Uninstalling /usr/local/Cellar/imagemagick@6/6.9.11-29... (1,478 files, 24.5MB)
HW-1997:~ yusuke-iwaki $ brew install imagemagick@6
Updating Homebrew...
Warning: You are using macOS 11.0.
We do not provide support for this pre-release version.
You will encounter build failures with some formulae.
Please create pull requests instead of asking for help on Homebrew's GitHub,
Discourse, Twitter or IRC. You are responsible for resolving any issues you
experience while you are running this pre-release version.

==> Downloading https://homebrew.bintray.com/bottles/imagemagick%406-6.9.11-29.catalina.bottle.tar.gz
Already downloaded: /Users/yusuke-iwaki/Library/Caches/Homebrew/downloads/124dabc19195df8d21fe14fc9dfb6f675da2f61107b66fef885baafe8d29c981--imagemagick@6-6.9.11-29.catalina.bottle.tar.gz
==> Pouring imagemagick@6-6.9.11-29.catalina.bottle.tar.gz
==> Caveats
imagemagick@6 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have imagemagick@6 first in your PATH run:
  echo 'export PATH="/usr/local/opt/imagemagick@6/bin:$PATH"' >> /Users/yusuke-iwaki/.bash_profile

For compilers to find imagemagick@6 you may need to set:
  export LDFLAGS="-L/usr/local/opt/imagemagick@6/lib"
  export CPPFLAGS="-I/usr/local/opt/imagemagick@6/include"

For pkg-config to find imagemagick@6 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/imagemagick@6/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/imagemagick@6/6.9.11-29: 1,478 files, 24.5MB

Homebrewの中身はそんなに詳しくないので、違いまではわかりません・・・

(2020.10.18追記: Xcode Command Line Toolを12.2まで上げるといけるらしい → Error: Your Xcode does not support macOS 11.0.が出た時の対処方法)

Androidエミュレータ →使えません

Android StudioはCanaryではないけど最新の状態です。

f:id:YusukeIwaki:20200918093816p:plain

エミュレータの作成まではできます。

f:id:YusukeIwaki:20200918093911p:plain

しかし起動しません。

f:id:YusukeIwaki:20200918093920p:plain

エミュレータが固まっているだけ、という感じではなくて、Android Studioごと完全にフリーズしています。Android Studioを強制終了しないと復帰できません。

Genymotionも使えない

アンインストールしちゃったのでスクショはとれませんが、VirtualBoxがエラーを吐いて起動しませんでした。

VirtualBox →使えません

もうアンインストールしちゃったのでスクショはとれませんが、VMが起動しませんでした。

Docker →使えません

私は仕事でRailsアプリケーション書いているので、これが最強にやばい。beta5までは使えていたのに、beta6にしたらです。

docker-compose run xxx した瞬間に OSごとクラッシュ します。

「シューーー!、パッチーン!」って電源が切れるので、結構迫力ありますw

f:id:YusukeIwaki:20200918094616p:plain

issueが上がっているっぽいんですが、まぁなんともドライな回答w

2020/09/18 14:00追記: beta7にするとDocker使えるようになっていました!!

$ docker-compose run --rm firefox bash
Creating puppeteer-ruby_firefox_run ... done

circleci@d35ed6acf206:/puppeteer-ruby$ 

頑張って仕事するには?

総じて色々使えないので、業務に支障は出ましたw

こんなところで頑張りたくはないんですが、仕事しないと怒られるので仕事する方法も少し書いておきます。

VMWare Fusionを使う

f:id:YusukeIwaki:20200918094903p:plain

Dockerが使えないところは、これである程度カバーできます。ただ、VMWareにもバグがのこっていて、 1CPU 2GBの構成から変更しようとするとVMWareがクラッシュしましたw

Tweetは表記ミスです、ごめんなさい)

DockerはLinuxで使うと軽いので、1CPU 2GBでもRailsアプリケーション動かすくらいなら余裕です。ただ、ボリューム共有がDocker for Macnfs使わないやつ)並に遅いので、そこだけ我慢しましょう。

Androidは実機でデバッグ

ADBは使えるので、実機でデバッグはできます。

まとめ

まだBig Surではいろいろ動かないので、エンジニアの皆さん一緒に頑張りましょう。