$shibayu36->blog;

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

エンジニアと1on1をするときの事前面談シートテンプレート

はてなのチーム横断のエンジニアメンター制度 - Hatena Developer Blog で紹介していますが、はてなにはチーム横断のエンジニアメンター制度があります。僕も最近までメンターとして5~6人ほどのメンティーを持っていました(今は事情があってメンターをやっていないのですが)。

メンターとして1on1をする時には1on1ミーティングに備えるアンケート - しるろぐを参考にし、事前にメンティーに面談シートを書いてきてもらうという工夫をしていました。その面談シートは改善を少しずつ加えながら運用していたのですが、一度知見共有も兼ねて最近使っていた面談シートテンプレートを公開してみようと思います。

面談シートテンプレート

以下のようなフォーマットで書いてもらっています。1on1の前にメンティーに1on1用Google Docsに追記していってもらっています。1on1用Google Docsはメンターとメンティー二人ともが見れるようになっています。

## 困っていること・気になっていること
- 自分の困りごとや、チーム・会社・技術グループなどで気になっていることを相談
- 前回困りごと解決してなければどうぞ

## 最近やった中でうまくいったなと思ったタスク
- 小さなことでもなんでも良いです
- 面談で掘り下げていきましょう

## エンジニア目標振り返り
- 定期的に目標を振り返る

## 話したいことなんでも
- なんでも雑談

## 最近やったことリスト
- 自分の振り返りのためや、メンターがあとでみるために使います

## 1on1後にやるアクション
- 1on1中に何か決まったら、ここに書いていく

なぜこのようなテンプレートとなったか

はてなのエンジニアメンターの役割は3つあり、エンジニアとしての目標設定・1on1・評価を通して、これらの役割を満たす必要があります。

  • メンティーの問題の解決を支援する
  • メンティーの成長を支援する
  • メンティーの専門性を適切に評価する

この役割を効果的・効率的に満たせるように1on1のテンプレートを工夫しました。

困っていること・気になっていること

メンターをしていて、はてなのエンジニアは困りごとが無ければ自律的にめちゃくちゃいい感じにやってくれると感じていました。そのため1on1では特に「メンティーの問題の解決を支援する」ことを一番大事にしたいと思い、「困っていること・気になっていること」という項目を面談シートの一番上に配置しました。

「困っていること」ではなく「困っていること・気になっていること」にしているのは、より気軽に相談しやすくなるのではないかと考えたためです。実際に困っていることがないと話していた人でも、これ気になっているんですよね〜というちょっとした話題から実は困ってた!という風な流れになることもありました。「気になっていること」を追加するだけでも話しやすくなるのでおすすめです。

また「気になりごとありますか?」と聞くだけではなくて、「チーム内で気になりごとありますか?」 -> 「他のチームで気になりごとありますか?」 -> 「会社のことで気になりごとありますか?」のように少しずつ範囲を広げていくことで話題を出してくれるということがありました。このように本人を中心に範囲を広げていくのも効果的だなと感じています。

最近やった中でうまくいったなと思ったタスク

これは成長支援と専門性の適切な評価のために作った項目です。

昔は単純に「やったこと」という見出しで内容を書いてもらっていました。しかし1on1を一ヶ月に一度の頻度で行っていると、やったことの内容も多くなってしまい、結局どれを掘り下げたら良いものか...という気持ちになることが多くありました。

そこでメンティー自身が1ヶ月の中で「一番上手くできたな」と思ったことから掘り下げていくとどうかと考え、「最近やった中でうまくいったなと思ったタスク」という見出しにしてみました。

このような項目にして良かったなと感じたのは、うまく出来たタスクはメンティー本人が工夫したところを覚えていることが多く、非常に掘り下げやすかったことです。この利点を生かして様々な方向で掘り下げていくことで、成長支援や専門性の適切な評価に繋がるように工夫していました。

  • 工夫したところを言語化してもらうことで、今後も再現できるようにする(成長支援)
  • 逆にもっとうまく出来たなと思うところを聞いていくことで、次の改善につなげる(成長支援)
  • なぜそのように考えたのかを聞いていくことで、専門性や行動を評価する材料を集める(専門性の適切な評価)

エンジニア目標振り返り

期初にエンジニアとしての努力目標を決めているのですが、努力目標というのは振り返らないと得てして形骸化するので、1on1のタイミングで振り返るようにしています。目標を眺めながら、今どの程度進んでいるか・達成できそうか・状況変化があって目標変えたいことはないかといった会話をしています。


1on1での振り返りはシンプルですが、振り返り自体を楽にするために期初の目標設定面談の方を工夫しています。振り返りを容易にするために目標は具体的で測定可能にすることを意識し、定量的な指標を定めるか、具体的なアクションを羅列するかのどちらかをしてもらっています。

定量的な指標というのは、「目標: 社内だけでなく社外へのアウトプットを増やす」のときなら、「自分のブログで半年で10記事以上公開する」みたいなものです。

具体的なアクションを羅列するというのは、どのようにエンジニアの目標設定を行うか - $shibayu36->blog;にも書きましたが、例えば次のような目標が考えられます。

  • 目標: 半年後までにサーバーサイドからフロントエンドまで含めて一機能を作る経験をする
  • アクション1: 1か月後までに、使っているJSフレームワークのAngularJSの知識を付けるため、それについて書かれた書籍を最低1冊読む
  • アクション2: 2か月後までにAngularJSを使ってTODOアプリのような簡単なアプリケーションを一つ作る
  • アクション3: 上司にフロントエンドの技術を学んだことを伝え、大きめな一機能を上から下まで担当させてもらえるよう提案する
  • アクション4: 半年後までに、任された一機能をやり遂げる


このように具体的で測定可能にしておくと、「ここまでは出来ましたね」「この調子なら行けそうですね」みたいな会話がすぐにでき、振り返りがしやすくなります。

話したいことなんでも

シートとしてなんでも書けるフリースペースがあったほうが良いなと考え、「話したいことなんでも」という項目を作っています。上で上げた項目が終わって時間が余ったらこのあたりを会話しています。

最近やったことリスト

最後の評価時期に振り返りなどをやりやすくするために「やったことリスト」の項目も作っています。本人は別に大したことないと思ったことが意外とすごいことじゃんみたいな発見がたまにあったりします。この項目も時間があったら1on1中に会話し、なかったら1on1が終わった後に読んで専門性の適切な評価に役立てています。

1on1後にやるアクション

この項目は1on1の前に書いてきてもらうものではなく、1on1の最後に話してメモするために作りました。1on1をしている時に困りごとの解決のために「では僕の方でこれをやりますね」とか、「メンティー側でこういうことをやってみましょう」のように会話が進むことがあります。しかし、最後に確認していないとメンターとメンティー間でアクションについて合意が取れておらず、結局何するんだっけ?となることがあります。そのようなことが起こらないよう最後に二人で会話するようにしています。

今後の改善点

こういうテンプレートはずっと改善し続ける必要があると考えています。例えば今後改善するとしたら

  • 「困っていること・気になっていること」と「話したいことなんでも」は話題が被ることも多いので統合しても良さそう
  • 「1on1後にやるアクション」は項目で一番下にあると会話を忘れることもあるので、Google Docsで決まったところにハイライトしておくくらいでも良さそう

というものがありそうです。

まとめ

今回は僕がエンジニアと1on1をするときの事前面談シートテンプレートについて書いてみました。1on1の目的によって事前面談シートの内容は変えるべきと考えていますが、僕が工夫したテンプレートも参考になれば幸いです。

Karabinar-Elementsを使って特定のアプリケーションの時だけキーを入れ替える

IntelliJ IDEAを使っていて、バックスラッシュを入力したいのに円マークになって困っていた。また対応方法として、

あたりの記事も参考にしてみたが、これを有効にすると他のアプリケーションにまで波及してしまって、今度はEmacsでバックスラッシュが入力できなくなったりして困っていた*1


そんな時Karabinar-Elementsは特定のアプリケーションを起動時だけキーマップを変えられるという機能があることを発見した。これを使って解決してみたのでメモ。

Karabinar-Elements用のComplex Modifications用のjsonファイルを作成する

Karabinar-ElementsのComplex Modificationsを設定するには、定義を書いたjsonファイルを作成し、~/.config/karabiner/assets/complex_modifications/以下に配置すると良い。どのようにjsonファイルを書くかについてはhttps://pqrs.org/osx/karabiner/json.html が参考になる。また、https://github.com/pqrs-org/KE-complex_modifications/tree/master/docs/json あたりを参考にすると、いろんな参考例を探せて便利だった。

このjsonの設定でconditionsのfrontmost_application_ifという機能を利用することで、特定アプリケーションのときのみの変換ルールなどを書くことが出来る。

今回の場合IntelliJ IDEAでのみ円マークとバックスラッシュの入力を交換したかったので以下のような設定となった。


~/.config/karabiner/assets/complex_modifications/intellij-yen-mark.json

{
  "title": "Swap ¥ and \\ in IntelliJ IDEA on JIS Keyboards",
  "rules": [
    {
      "description": "Change ¥ to Alt+¥ in IntelliJ IDEA",
      "manipulators": [
        {
          "from": {
            "key_code": "international3"
          },
          "to": [
            {
              "key_code": "international3",
              "modifiers": [
                "option"
              ]
            }
          ],
          "type": "basic",
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.jetbrains\\.intellij\\.ce$"
              ]
            }
          ]
        }
      ]
    },
    {
      "description": "Change Alt+¥ to ¥ in IntelliJ IDEA",
      "manipulators": [
        {
          "from": {
            "key_code": "international3",
            "modifiers": {
              "mandatory": [
                "option"
              ]
            }
          },
          "to": [
            {
              "key_code": "international3"
            }
          ],
          "type": "basic",
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.jetbrains\\.intellij\\.ce$"
              ]
            }
          ]
        }
      ]
    }
  ]
}

Karabinar-Elementsで設定を有効にする

このようなjsonを正しく配置するとKarabinar-ElementsのComplex ModificationsのAdd rule内で定義したルールを使うことが出来るようになる。

f:id:shiba_yu36:20181212170147p:plain

あとはこの二つのルールをenableすればOK。これでIntelliJ IDEAでのみ円マークとバックスラッシュマークを入れ替えることが出来た。

より良い解決方法

やってみた後で気づいたのだけど、

  • 円マークとバックスラッシュの入れ替えはIME側で設定があり、それが有効になっていた
  • IntelliJ IDEAなどJetbrainのIDEでは、その設定が効かない

という話だったので、IME側の設定をオフにしKarabinarで全体を入れ替えで良いだけだった。まあKarabinar-Elementsで特定アプリケーションのみのキーバインド変更というテクニックが身についたので良いとする。

技術的Tips: 利用しているアプリケーションのBundle Identifierを調べるには

【OSX】利用しているアプリケーションのBundle Identifierを調べる - Qiita が参考になった。

まとめ

今回はKarabinar-Elementsを使って特定のアプリケーションの時だけキーを入れ替える方法についてメモをしてみた。最近のKarabinar-Elementsには他にもいろいろなカスタマイズ方法があるみたいなので試してみたい。

*1:いろいろ試した後になぜそうなっていたか気づき、より良い解決策はわかったけどその時は気づいてなかった

sbtでjava.lang.OutOfMemoryError: Metaspaceで死んだ時は

自分用の雑なメモ。正確性は不明。

原因

sbt -helpしてみると、sbtは-memのデフォルトが以下のように設定されている。

-mem    <integer>  set memory options (default: 1024, which is -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxMetaspaceSize=256m)

ので、プロジェクトが大きくなってきてデフォルトの256mを超えるだけMetaspaceを使うと、死んでしまう様子。

対処

対応としては

  • 1. sbtの起動時にsbt -memオプション付きで起動する
  • 2. globalなsbtoptsに-memオプションを記述しておく
  • 3. プロジェクトルートに.sbtoptsファイルを置いて、そこで設定する

などの手がありそう。1や2の方法だと同じチームの人も困るだろうし、3の方法で設定するのが良さそうだ。

例えばこんな感じで.sbtoptsは設定しておくと良さそう。

.sbtopts

-J-Xms1024m
-J-Xmx4096m
-J-XX:ReservedCodeCacheSize=512m
-J-XX:MaxMetaspaceSize=1024m