miyasakura’s diary

日記です。

「It Doesn’t Have to Be Crazy at Work」を読んだのでメモと感想

「Remote」(強いチームはオフィスを捨てる)、「Rework」(小さなチーム大きな仕事)に続いてBasecamp創業者の二人が昨年出した書籍「It Doesn’t Have to Be Crazy at Work」を読みました。

It Doesn't Have to Be Crazy at Work (English Edition)

It Doesn't Have to Be Crazy at Work (English Edition)

久々に英語の書籍を通して読んだので読み終わるのに時間がかかってしまいました。英語自体は簡単で比較的読みやすかったです。

ざっくりどんな本か

スタートアップで大きな目標を目指してハードワークをして成功をつかむ、という近年のIT企業界隈の常識に疑問を投げかけている書籍です。

Basecampでは週40時間、夏は32時間の労働時間で3年に一度1ヶ月の休暇を取れる。そして十分に利益を出し、会社は成長できている。

そんな中で更にマーケットシェアを増やそうだとか世界を変えようだとかを目指して(経営者も社員も)人生をすり減らす必要はないでしょ、と主張しています。

この本では、短時間で最大限の成果を出しながら、そして快適に働ける環境を作るためにBasecampが試行錯誤してきた内容が紹介されています。常識と思われている内容と反対であるものもあって色々発見がありました。

経営側の目線で書かれた本なので社内制度まで踏み込めるような人でないとこの本の内容を実践するのは難しいですが、こういう環境で成果が出るんだみたいなものを知るという意味では一社員としてであっても読む価値が十分にある本だと思います。

メモ

Kindleのハイライトした部分を読み返しつつメモ。

  • 会社自体をプロダクト(ソフトウェア)のように捉える
    • バグがあったら直そうね、とか、ユーザー(社員)が理解できるものになってるか、使いやすいものか、とか、常にバージョンアップしてこうね、とか
  • 集中できる環境を作る
    • Basecampではコミュニケーションはリアルタイムではなく非同期でEventual Responseがあれば良いという文化
      • 集中して仕事をするためにチャットやメールを開いておくことはしない
    • カレンダーも共有しない
      • ミーティング開催のハードルを意図的に上げている
    • オフィスは用意している
      • 家で仕事が捗るかというと皆が皆そうではない
      • ただし、「図書館」のように利用するというルール
        • 話しかけたり騒音を作ったりで邪魔しない
    • コミュニケーションの不足については各人が「オフィスアワー」を用意
      • その時間は質問でもなんでもウェルカム
      • 毎日xx時だったり毎週xx曜のxx時だったり人それぞれ
    • 誰がどんな仕事をしているとか必要以上に共有しない
      • FOMO(The fear of missing out)ではなくJOMO(The joy of missing out)
      • 月1でチームのリードが"Heartbeat"として進捗などを共有する
  • 会社のカルチャー
    • 良い会社は「家族」ではなく、家族をサポートする「味方」
      • (「アットホームな会社です」は、やはりブラックな会社なんだなと
    • ワーカホリックは伝染病
      • 止められないし周りに移る
    • 個人間の"Trust Buttery"を見て不和や衝突がないようにしている
    • 不満とかは待ってても上がってこないので聞く。それも具体的に
      • ☓「この会社の改善点を教えて」
      • ◯「だれも話したがらないことってある?」「働く上で心配なことは?」「最近これができたら良かったのにと思ったことあった?」
    • 会社を売るつもりは無いのでストックオプションは出してないが、売ったらその金額の5%を社員に割り振るということにはしている
    • vacationは"facation"にならないように会社のアカウントから全てログアウト
  • 仕事の仕方
    • プレゼンをするのではなく資料を共有する
      • ReactionではなくConsidered Feedbackが欲しい
    • 金曜リリースをやめて月曜リリースにした
      • 土日のバグ修正がなくなり環境が改善。品質を上げる意識もできた
    • 合意形成をするのではなくコミットする
      • "I disagree, but let's commit."
    • 業界のベストプラクティスが自分の会社・仕事に当てはまると考えない
    • 3人チームがベスト(開発者2人、デザイナー1人)
      • 4人になるとmanageするための5人目が必要になることが多い
    • "No is easier to do, Yes is easier to say."
      • Noと言うことで無駄な仕事を増やさないようにする
  • ビジネス
    • 将来的な改善は約束しない
      • 「今年中に」のコミットがチームを苦しめた
    • Basecampはpay per userモデルではなくユーザー数にかかわらず同額
      • 大きい会社の意向に自分たちのビジネスが左右されたくない
    • バージョンアップでユーザーに移行させない
      • Basecampは1〜3までのバージョンをメンテナンスしている

感想

Basecampはもう既に十分稼いでるからこんなことできるんだろ、みたいなことも言えるといえば言えるんですが、チーム作り、会社作りに参考になるのではないかという部分が非常に多くありました。

特に、集中できる時間を増やすためのコミュニケーションのとり方はチーム単位でも実践できるんじゃないかなと思います。チャット・メールで即時性を求めない、オフィスを図書館のように考える、無駄な情報共有の会議などで時間を取らない、オフィスアワーを作る、などなど。

とはいえこういう変革は自分だけが主張してもなかなかわかってもらえないので、他の人にも読んでもらって共通言語ができた上でどうしようかみたいな話ができると良いので、ぜひ日本語版も出版してほしいなと思います。

Let's Encryptの自動更新がエラーになっていた

2017年頃から運用しているサーバーで、毎日cronで

certbot-auto renew

を実行していた。

しかし、今月に入ってLet's encryptから証明書の期限(2018-12-26)が近づいてきたというメールが届いた。

サーバーに入って確認してみると80番ポートが空いてないよーというエラーで止まっていた。

Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator apache, Installer apache
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for xxx
Cleaning up challenges
Attempting to renew cert (xxx) from /etc/letsencrypt/renewal/xxx.conf produced an unexpected error: Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.. Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/xxx/fullchain.pem (failure)

あれ、もともと空けてないし443だけで動かなかったっけと思って調べると、今年頭にTLS-SNI検証に脆弱性が発見されたという情報があった。

rms-digicert.ne.jp

この時点では新規取得が無効化されただけだったため特に影響は受けなかったが、どうやら最近のcertbotで更新時のTLS-SNI検証が効かなくなった可能性がある。

80番ポートを開ければ解決だが、重要度の低いサーバーについて取引先に質問を投げてやり取りが発生するのも面倒なのでひとまず一瞬だけポートを空けて更新して閉じることで取り急ぎ解決。

、、、というだけだと毎回同じ作業をすることになるのでもう少し調べてみる。

どうやら

certbot-auto renew --preferred-challenge tls-sni

というオプションで解決できそうだったことがわかったが(デフォルトが変更されただけ?)、いずれにせよ2019年2月13日にtls-sni-01は無効化されるとのこと。

community.letsencrypt.org

DNS-01かHTTP-01の検証方式に移行しましょうということだが、TLS-ALPN-01というのが気になる。

community.letsencrypt.org

上記にもあるようにtls-sni-01/02の問題を解決した手法ということで移行先としてはTLS-ALPNが正しそうだが推奨していないのはドラフトだからだろうか。

tls-sniはサーバーを共用している状況で問題が出たとのことだが新しいプロトコルでそれより酷い脆弱性は出ないだろうと楽観的に予想して、crontabのコマンドは

/opt/certbot-auto renew --preferred-challenges tls-alpn-01

と書き換えて次回の更新まで様子見してみることにした。

Philips Hueが電源投入時の動作を設定できるようになってた

元からあるスイッチで電源を切ってしまうと色と明るさが初期値に戻ってしまって不便だなと思っていたんですよね。まぁ直接切るなって話ではあるんですが。。

アップデートで電源がOFFになる直前の状態を覚えていてくれる設定が増えました。特定の色や明るさを指定するのはまだできません。

設定は最新版のアプリで「設定」→「電源投入時の動作」から。

北海道(札幌・余市・小樽)旅行に行ってきた

12/1(土)〜12/3(月)にかけて北海道へ行ってきたので感想をメモ。

(ブログこういう内容は特に需要ないのは知ってるけどあくまで日記として。)

北海道に行くのは多分5回目。ふっこう割とやらを利用して2名1組87,000円のANAパックの旅行代金が4万引で47,000円。

travel.rakuten.co.jp

飛行機はANAでホテルはそれなりに良いホテルが夕朝食付き。これでひとり23,500円ということで格安で素晴らしい。

とはいえ12月の北海道で何するかわからんというのもあってあまり予定を決めずに天気と雰囲気で行く場所を決めることに。

1日目

一番寒い日で最高気温が1℃とかだったので、札幌駅周辺をぶらぶらするくらいの日にすることに。

午前

  • 出発

7:30羽田出発。この日から20分前に保安検査場を抜けなければいけなくなったらしく、17分前くらいについたら素直に通ることができず。

横のカウンターに回されANAの担当の人が機長に確認とったりしながら通してもらえることに。

特に慌てはしなかったけどルール変更後に一番最初に引っかかった人だったんじゃないだろうか。

機内では新潟のビールが美味しかった。ANAの選ぶ酒はいつも美味しい。

高校のときの修学旅行のときに来ただけだったので久々に歩いてみる。やはり広い。

雪で景色がよく見えない状態だったので人もいなくて快適。見える範囲の近場を眺めつつカフェでゆっくりと作戦会議。

昼食

  • ウニ丼を食べた

www.uni-murakami.com

札幌にいた友人のおすすめだったので。ミョウバンを使ってないうにを大量に使ったウニ丼。

わざわざ歩いていって予約でうまってたら嫌だなと直前に電話したら、予約は埋まってるけど予約枠と当日枠があるらしく、30分くらい並べば入れるとのこと。

ということで開店3分前くらいについたら10組ほど並んでた。

大きい店だったのでそれでも開店直後の枠に入れ、ほぼ待たされなかった。

サッポロクラシックとウニ丼を頼んで一人5000円くらい。

うまかった。

午後

ビールの歴史を学びつつビールを飲むやつ。

プレミアムツアーという有料ツアーでしか飲めないビールがあるということでツアーに参加することに。

基本予約するやつだがちょうど2枠が次の枠で空いてたので無事参加できることに。

サッポロビールアサヒビールと同じ会社の時期があったという歴史に驚くなど。

ビールはやはりうまかったので良かった。

  • 夕食: TAKU 円山

nfd-taku.com

JCBプラチナのグルメ・ベネフィットを使えるところということでチョイスした店。

うまかった。グルメ・ベネフィットで1人分無料にしてもらったが、普通の価格でも1万ちょっとなのでコスパ的にもすごく良い店だと思う。

頼んだワインは奥尻ワイナリーのピノ・グリ6500円。今見てみると小売価格で3,000円くらいらしいのでワイン価格も良心的。

okushiri-winery.com

すすきのを歩いて観覧車に乗る。

バーにでも行けたらと思ったものの腹いっぱい&朝から飲み続けてたので疲れたということで素直に帰宅。

2日目

1日目の途中で予約しようと思ったらインターネットで3日前までとのことだったので電話。怒られつつも空いてた時間に予約成功。

10:30からのツアーに参加。

ツアーが11:15くらいまででそのあと試飲して、レストランで昼飯。

更に有料試飲をしていたら帰りに乗ろうと思ってた13:45の電車ギリギリになってしまい慌てて自宅用のウィスキー1本だけを買って戻る。

仕方ないがもう少し電車が出てると予定を柔軟にできるので嬉しかった。

  • 小樽

運河クルーズに行こうと思ったもののちょうど出発したタイミングだったので小樽ビールに行くことに。

小樽ビール | 小樽倉庫No.1

店のドイツっぽい雰囲気は良いけどビール含め味は普通かなぁ。

ここで小樽ビール3種類を飲んで再度クルーズ直前の時間に行ったら15分前集合ですとのことで結局乗らずにぶらぶらしながら戻ることに。

途中で北海道ワインの試飲をやってるところがあったのでそこで6種類ほど試飲をさせてもらう。

前日にTAKU 円山で飲んだワインがあってテンションが上がってしまった。

そこの人に札幌のおすすめの店を聞いたので夕食はそこに決定。

試飲した場所ではワインは発送しかしてないということで、近くのワインショップでワインを購入して札幌に戻る電車に。

  • 夕食: 北海道産酒BARかま田

dosankosyocyu.com

ワインの試飲をやってた人が知り合いがやってるということでおすすめしてた店のうちの一つ。

好みに合わせて北海道の日本酒を選んでくれる素敵な店。

食べ物も北海道産にこだわっていてどれも美味しい。

ホテルに戻って先程買ったワインを開けたものの、一日中飲み続けていたせいで半分しか飲めずそのまま就寝。

3日目

この日の予定は今回の北海道旅行で一番行きたかったこの場所。ぐだぐだと10時にホテルをチェックアウトして地下鉄&バスで向かう。

moerenumapark.jp

この前小豆島にいったときにイサム・ノグチの作品で作られたリラックススペースみたいなのがあってそこがすごく気に入ってしまった。更にそこにあったイサム・ノグチの書籍を読んだときのこのモエレ沼公園のストーリーが非常に印象に残っている。

ということで初日に行きたかったものの、初日は天気がひどかったのでこの日に。

そしたらメインぽいガラスのピラミッドは月曜休館、かつ電気設備工事の日だったらしく公園内のトイレ全て使えず。。。

こういう観光客がくる場所を月曜休みにするのやめようよ…と愚痴りつつ、トイレがないのであまり長居できずに2時間ほどだけ公園をぶらぶら。

最高気温は10℃くらいの日だったので歩いてたら暑いくらいだった。

そりを滑ってる親子や残ってる雪で雪だるまを家族がいたりして非常に和んだ。

公園にありがちな注意書きがほとんど無い公園でこういう自由さも設計のうちのひとつなのかなと思いを馳せたり。

素敵な公園だったので、また夏とかに北海道来る機会があれば行きたい。

栄町店に。

ホーム | 回転寿し トリトン

寿司は食いたかったもののあまりいい店に行くつもりもなかったし中途半端に良いところに行くくらいならと回転寿司に。

やはり北海道の回転寿司はネタがでかい。

  • 帰路

時間はあったのでもう少し観光できたものの全体的に酒飲み過ぎの疲れにより空港に早めに行って温泉に入ることに。

スーパーラウンジで割引券がもらえるという情報をネットで仕入れたので、空港についたらまずはラウンジに行ってこの旅行中に来ていた連絡に返信しつつ休憩。

www.new-chitose-airport.jp

その後ロイズでお土産を買って温泉に。

www.new-chitose-airport.jp

割引券を使うと一人1,100なので悪くない価格。

これで疲れをとって最後にフードコートで松尾ジンギスカンを食べつつ前日の夜残してしまったワインの残りを開けて飛行機に。

行きはギリギリになって迷惑をかけたということで出発25分前くらいに保安検査場を抜けたらもう搭乗開始していて全く早くは無かった。

全員乗るのが早かったようで予定時刻より10分以上早く出発してくれた。こんなこともあるんね。

羽田に早く着いて無事帰宅。

家返ってすぐ寝ました。

感想

やはり北海道は飯がうまい。

観光というよりも食べ飲みっぱなしの旅行だったがこれもまた良し。

家の電球をPhilips Hueに切り替え

f:id:miyasakura:20181130193659j:plain

カラーである必要はないわけですがなんとなく色付きのにしたくて悩んでいました。しかし3個入りで18,670円とちょっとお高い。

自宅のリビングのライトがなぜか8つのダウンライトなので全部切り替えると45,000円を超えてちゃいます。どうしようかなと悩んでいたんですが、amazon.comの方で4つで$119というセールをやっていたので買っちゃいました。

https://www.amazon.com/dp/B079ZDLJ62/

Refurbishedとある通り再生品なんですがまぁ大丈夫だろうということで2つ購入。送料込みで30,000円に収まりました。(それでも高い)

いつも通り一番安くて遅い便で頼んだので2週間ほど経った本日到着しました。予定だと12/3なので1営業日分早く届いた感じです。

セットアップを開始したんですが、8個中5つしかHue Bridgeから認識しない!

やっちゃったかなぁと思ったんですが、Hue Dimmerを使ってライトを初期化してみたら無事全部つながるように。

どうやらRefurbished版は以前使われたときの接続情報が残っている場合がある模様。Hue Dimmerが無かったら詰んでたやつです。

ということで無事切り替え完了。

「ねぇGoogle、電気を紫色にして」といったときの色が冒頭の写真の色です。色付きの電球を買ったものの、おそらく変な色はめったに使わないんじゃない気はしています。

というわけで無駄に3万もする買い物でしたが、2つのHue Bridgeと1つだけ用済みになった色付きじゃないHue電球をメルカリに出せば実質はもう少し安くなる。はず。。

高所恐怖症で絶叫系嫌いだけどバンジージャンプ飛んできた

経緯

  • 彼女とキンミヤホッピーを飲みながらひらがな推しのバンジー回を見返してたら勢い余って申し込み
    • あの回はおじさんの心に響く
    • 酔っぱらいおそろしい
  • 場所はメンバーが飛んだところと同じみなかみバンジー
    • 橋の高さ42メートルからのジャンプ

どのくらいの高所恐怖症?

  • 観覧車、ロープウェイ、ガラス張りエレベーター全部嫌い
    • 無理というほどではないけど足がすくむ感じ
    • こういうのに乗るとき必ず手すりに捕まってる
  • 絶叫系は基本乗らない
    • 上から下に落ちるのが特に無理
    • 乗ったことあるのはディズニーの乗り物のみ
      • センターオブジアースは乗れる
      • スプラッシュマウンテンは厳しい
      • タワーオブテラーは死ぬかと思ったのでもう一生乗らない

行ってきた

飛ぶまで

  • 鈍行で水上駅まで
  • 13時くらいについて昼食
    • 駅近くでサクッと食べようと思って入った店がかけそばが出てくるのに30分かかって予定のバスに乗れず
  • タクシーで移動
    • バスは1時間に1本だったので
      • それ以外にわくわく号というのがあったが歩くのと同じくらい時間がかかるやつだったので使えず
  • 受付
    • 体重計測してお金払ってハーネスつけて時間になったら移動
      • 手の甲にざっくり体重書かれる
    • 3000円追加で写真を撮ってくれる
      • 払ったほうが良い
        • 少なくとも飛ぶ人は他の人の写真を撮ってる余裕はなし
        • 飛ぶ瞬間の写真は外からではおそらく取りづらい
        • SNSとかに上げるつもりはなくても写真で自分のビビリ具合を見返すのは楽しかった
  • 同組になったのは自分たち以外に1人で合計3人

飛ぶとき

  • 彼女が先飛んで自分が次とか話してたけど選択の余地はなく一番最初に飛ぶことに
    • 心の準備できてなさすぎ
  • 体重はかって器具をつけて飛ぶ場所まで移動
    • そこまではすんなり行けた
    • 怖いけど普段から高いところ怖いから大して変わらなかった
    • 一緒に行った彼女は高所恐怖症ではないけど逆にビビってた
  • 飛ぶ場所に来た瞬間に「あ、これ無理じゃね」と思う
    • 思っていたよりもロープとか器具が支えてくれてる感じとかなくて本当に自分の素の状態で飛び出す感覚
    • 下を見ないようにというのだけ予習していったのでとにかく目線は上に
  • 腕を広げて体制をとったらいきなり「5, 4, 3, 2, 1, バンジー!!」のカウントダウンが始まる
    • 心の準備とかしてる余裕なし
    • もちろん飛べず
    • 3回コールがあったあと待ってと叫んで間をとった
  • 10秒ほど間をとって「お願いします!」と叫ぶ
    • 声出すの大事
  • これでだめならもう無理と思って死ぬ気で飛び込んだ
  • 落ちてる感覚は意外と大丈夫だった
    • 絶叫系が嫌なのは頭が上にある状態で落ちるときの感じが嫌なだけで、頭が下で飛び込むバンジーは大丈夫だった
    • 二回くらいはねたあと足の紐を引っ張って頭が上になるようにするといつもの嫌な感覚に
  • 橋の上からバンジーなので終わったあとは上に回収される
    • ここは高所恐怖症の本領発揮というところでめっちゃ怖かった
    • 紐から手を話してと言われるけど無理
    • 写真撮ってくれてるのでこっち見てとか言われるけどそれも無理
      • 逆に彼女はめっちゃ笑顔だった
  • 終わってから数分は膝がガクガク
  • 受付してから証明書発行してもらって全て完了まで40分くらいで終わった

終わったあと

  • バスで上毛高原駅まで行って新幹線に乗って帰宅
    • 行きは鈍行、帰りは新幹線というのが精神的にちょうど良かった

高所恐怖症とバンジージャンプについて

  • 終わったあと議論したけど高所恐怖症とバンジーの怖さは別だという結論に
    • 自分の場合は高所の怖さ10+バンジー100で110くらいの怖さで飛べた
    • 高所恐怖症の人は「自分だけこんなに怖いんだ」と思ってしまうと思うから辛いのでは
    • その怖さはみんなと同じだし意外と飛べるよ!ということを伝えたい
      • 高いところに来ただけで泣き叫ぶレベルの人はそもそもチャレンジしない…はず
    • ただし飛び終わったあとも回収されるまで数分高い場所にいるので、その状態を楽しいと思えるかどうかの差は大きい
      • 終わったあとの感想が「楽しかった〜」になるかどうかの差があると思う(自分はなれなかった)
  • 遊園地の絶叫系とは別の怖さ
    • 飛び出す瞬間の恐怖やばい
    • 高さが変わると更に怖さが別物になりそう
  • また飛びたいかと聞かれると積極的にYesとは言えないが、絶対無理というものではないかも
    • 絶叫系で上から下に落ちるときの感覚がまじで苦手だが、頭が下にある状態だとその感覚がなかったのが大きい
    • フジヤマとかタワーオブテラーのが絶対嫌

f:id:miyasakura:20181119114307j:plain

PuppeteerでWebフォントを含むページのPDF化をするとAdobe Readerで文字化けする

久しぶりにバグの共有エントリ。

Webフォントを使っているページを印刷するとAdobe Readerで読み込んだときだけエラーが出てしまう。ブラウザ上のPDFリーダーやMacのプレビューだと問題なく、Adobe ReaderAdobe AcrobatだとMac/Winどちらでもエラーが出る。

f:id:miyasakura:20181114193356p:plain

画像の右側部分のように文字化けしてしまう。

Webフォント(今回はNoto Sans)の読み込みの問題かと思いwaitかけてみたりWebフォントの読み込み方を変えたりしたものの一向に解決せず。

Cloud Functions上だったのでこれはデバッグ無理だなと思ってMacでもやってみたらやはり同様のエラーに。今度はPuppeteerのlaunch部分でMac上のChromeを指定したら問題なく印刷されるように。ということで原因はChromiumだった。

ChromeのバージョンにChromiumが追いつくまで待つのかなぁと思ったらChromiumの最新がv72に対してChromeはv70でChromiumの方がバージョンの進みが早い模様。Chromiumに手を入れてChromeにするから当たり前か。

ということでPuppeteerのバージョンを1.10.0から1.9.0に下げて利用するChromiumのバージョンを71にしたら無事解決。

別件でChromeで印刷してもらう仕組みを作ったことあるけどその時も印刷機能はアップデートで突如としてバグるので辛かったなという思い出。

ひとまずはこれで解決。

GoogleのCloud Functions上で実行していたのだが、Cloud FunctionsもWebフォントもあまり使わないので切り分けがうまくできず原因特定に時間がかかってしまった点は反省したい。

それはそれとしてこの件はChromiumにバグ報告すべきな気もするけどどうしようかな。