$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

今いるレポジトリのPR一覧をpecoで絞り込んでcheckoutする便利コマンド作った

OSS活動とか仕事をしてる時に、PRをチェックアウトするのだるいなと思っていた。そこで「今いるレポジトリのPR一覧をmodified順に出力し、pecoで選択したものをcheckout」出来たら便利だろうということで作った。

できたもの

f:id:shiba_yu36:20211018194017g:plain

やり方

まずhubとpecoをインストールしておく。

zshを使っているならこんな感じで定義し、

function peco-git-recent-pull-requests () {
    local selected_pr_number=$(hub pr list --limit 40 --sort updated --format "%pC%>(8)%i%Creset  %t (by @%au)%n" | peco | sed -r 's/^ +#([0-9]+).*$/\1/')
    if [ -n "$selected_pr_number" ]; then
        BUFFER="hub pr checkout ${selected_pr_number}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-git-recent-pull-requests

自分で好きなキーバインドをつける。僕は Ctrl-x B に割り当てた。

bindkey '^xB' peco-git-recent-pull-requests

これでレポジトリのディレクトリにいるときにCtrl-x Bを押すと、動画のようにPRの一覧が出て絞り込んで選択してEnterを押すとcheckoutできる。便利。

https://github.com/shibayu36/config-file/pull/1

Auth0を試した

自分でサービス作るときにもう認証を自前実装するのは嫌だよなあと思っていてAuth0が気になっていたので試してみた。

Auth0のコンソールでアプリケーションの新規作成をした後、とりあえず使えるようにするだけのコードは https://github.com/shibayu36/typescript-playground/pull/17 。正直これだけでひとまず認証が実装できてしまうのは便利すぎてビビる。さらにSNSでの認証などを追加したいならコンソールでぽちぽちするだけで行けそう。詳しい使い方はまだ全然分かってないが、ひとまず今後認証は自前でやるのではなくて任せていきたいなと思った。

参考

開発組織をスケールする方法を学びたい - 「ユニコーン企業のひみつ」を読んだ

開発組織が拡大しても、一人当たりの生産性を落とさずに、かつ顧客にとって本当に必要なものを作り続けるにはどうしたら良いのか考えている。その一環として「ユニコーン企業のひみつ」を読んだ。

スケールするための重要なポイントについて非常によく学べた。書いてあることを自分の中で咀嚼して、スケールするためのSpotify流の方法を自分の言葉でまとめてみるとこんな感じ。

  • スクワッド・トライブ・チャプター・ギルド
    • チームを、少人数の、職能横断で自律した、必要な権限を持った、自己組織化されたものにする
      • 開発からメンテナンスまで一気通貫し、学びを蓄積できるように
      • ミッションだけが設定されており、優先順位決めややり方は自分たちで決められる。長期的な視点にも立てる
      • 自律している = 目的が明確であり、意思決定や優先度決めが独立して行え(他との依存関係が少なく)、実行も独立して行える
        • 自律性を高めるために、分離されたアーキテクチャと、権限委譲が必要になる
      • ただし局所最適に陥りすぎない
    • ミッションが近いチームをトライブとしてまとめる
    • 専門性の高い横断仕事をうまく行えるように、トライブ内に横串で専門分野のグループを作る = チャプター
    • 学習機会を提供するために、組織を横断して専門分野についてのグループを作る = ギルド
  • 大量の小規模チームでも方向性を揃えられるようにするため、全社員で取り組むべき重要事項の優先順位付きリストを作る
    • OKRやカンパニーベット
    • フォーマットとしてDIBBを用いる?
  • 生産性向上に投資する
    • エンジニアリングチームの生産性向上を目的とするスクワッドを作る
    • 20%ルール、ハックデイなど、従業員に探索の余地を与える
      • ただしやったことはみんなの前で発表しよう
  • 全ての情報にアクセスできるようにする
    • あらゆるデータにアクセスできることで、1.優れた意思決定を促進、2.信頼しているシグナルの発信、3.物事を進めやすく速くする

読書ノート

* スタートアップがスピード以上に重視しているのが学習 4
    * 未知を明らかにすることを競っている。そのために計測、分析、テストの結果から得られた知見をプロダクトに何度も何度もフィードバックする
* スタートアップは従業員に権限を与えて信頼する 6
* プロダクト開発における成功とは「発見と学習」 12
* スタートアップはチームにミッションを与え、自律的に動いてもらう 23
    * ミッションとは = チームに与えられる抽象度が高めの目標。仕事の方向づけ、目的の提供、長期的な視野、どうやって果たすかはチームが決める
    * ミッションは、会社にとって重要で、そのチームで責任を果たせ(他への依存を少なく)、どうやって達成するかの計画はチームが協力して考えられるものに 30
* スクワッド = 少人数の、職能横断で自律した、必要な権限を持った、自己組織化されたチーム 33
    * 8名以下
    * 権限を持った小さな職能横断チームこそが、高速なプロダクト開発とイノベーションの基盤
* スクワッドとは何か
    * スクワッドは、経営リーダーからゴールだけが設定されているだけで、自ら到達手段を見出す必要がある 36
    * 自分たちで作ったものをメンテナンスし、学びを見出す
    * 自分たちで優先順位をつける
    * 自律すべきだが、局所最適になるべきではない。会社全体にとっての最善のための仕事をする
    * 計画よりもインパクト(=仕事の結果がなんらかの形で顧客の役に立ったという具体的な証拠)を重視
        * 気付き:KPIのブレークダウンになりそう
    * 準備ができたらすぐにリリースできる
    * 自律している
        * 長期的な視点に立てること + デリバリーにまつわる無数のトレードオフのバランスを取れる権限を持っていること ※
        * 気付き:目的が明確である + 意思決定や優先度ぎめがチーム内で完結する + ワークフローに依存が少ない、かな?
* チームが仕事をスクワッドのように進めていくためには2つの要素が必要 44 ※
    * 分離されたアーキテクチャでプロダクトを開発
        * 分離することで、1.複数チームが並行して同じプロダクトに取り組める、2.リリースを分離でき、3.メンテナンスとデバッグが容易になり、4.壊れる範囲を限定できる
    * 権限付与と信頼の文化を醸成
        * ミッションを与え、時間の余裕と探索範囲の余地を与え、解決策は編み出してもらう
        * チームに間違えてもらう
* 自律したチームでありながらスケールさせるには? 61
    * トライブ、チャプター、ギルド
    * トライブとは、担当するミッションが類似、関連しているスクワッドがまとまったもの 62
        * トライブも「フルスタック」。かつ他のトライブとの依存を最小限に
    * チャプターとは、トライブ内の同じ専門性を持つメンバーのグループ。チャプターリードがいる
        * そのトライブにとって横断の専門性の高い仕事をする。
        * 気付き:フルスタックな小規模スクワッドを作っていくと、どうしてもスクワッドの中には同じ専門性の人が1~2人となることがあるため、こういう組み合わせが必要なのかな
    * ギルドとは組織を横断して形成される、専門分野についてのグループ 65
        * 気付き:チャプターと違い、どちらかというと勉強会や情報交換会的なノリに見える
    * スクワッドは「何を」にフォーカスし、チャプターは「どうやって」を手助けする 70
* メンバーが転職せずに優れた仕事を続けてくれる可能性が高くなるのは、内容をよく理解した仕事を自分で選び、気に入った人たちと一緒に働いている場合 ※ 68
    * Facebookに入社してもチームには所属せず、複数のチームを渡り歩く
* スケールした組織で方向性を揃えるには? 74
    * 全社員で取り組むべき重要事項に優先順位をつけたリストを「カンパニーベット」として定める
        * 気付き:OKRの目的とほぼ同じに見える
    * フォーマットとしてDIBB(データ、インサイト、確信=Belief、ベット)を使うと良い
    * 大きなベットを2つ同時進行させると動かなくなってしまう。時期をずらす 84
* あらゆるデータにアクセスできる時、人は優れた意思決定をくだせる 96 ※
    * 給与や報酬のようなものを除いて全てレベルで
    * これにより -> 優れた意思決定、信頼しているシグナルの発信、物事を進めやすくはやくする
* 生産性向上には常に投資する。プロダクティビティスクワッドを編成する 101
    * プロダクトのリリースや開発を担当するメンバーの日々の仕事を楽にすることだけを目的としたチーム
* 20%ルール的なことをするなら、必ず自分の時間をどう使ったのかをみんなに示す場を用意する 104
    * 「リリースする責任」と「自分の行動への責任」を意識させるため
    * 20%ルールの目的は、従業員に探索の余地を与えること
* 文化をお実際に機能させるには、行動で裏打ちすること 141
    * リーダー自ら助けて欲しいと言うとか、失敗を認めるとか
    * 発言と行動が一致していない場合、みんなは行動を参考にする 163
* 優秀な人たちがどんな企業に魅力を感じ続けるのか 163
    * 自分で自分の仕事を決められる(自律)
    * やり方を改善できる(熟達)
    * やっていることに意味を見出せる(目的)
* この本で言いたいことは、「権限を与えること」と「信頼すること」だけ 164
    * この二つをどれだけ大きくできるか