2020年12月1日火曜日

マネージメントに必要なことは全てゲームから学んだ

この投稿は毎年恒例、pyspa Advent Calendar 2020の1日目の投稿になります。

どうもご無沙汰しております、akisuteです。すっかり年に1回アドベントカレンダーのときにだけ顔を見せる人になっておりますが、おかげさまで無事平穏に過ごしております。


さて突然ですが私はプログラマーを引退しました。


なぜなら今年で36歳だからです。プログラマーは35歳になったら定年ですね。

実際のところ、このぐらいの年になると、よほど何らかの意志が働かない限り、技術に対する情熱みたいなものが失われてくると思います。もちろん本当に技術とプログラミングが好きな人は間違いなく35歳なんかで情熱を失ったりはしないと断言しますが、残念ながら私はそうではなく、もはやiPhoneには大した興味が湧いておりませんし、最近はJavaだのGoだのTypescriptだのVue.jsだのといったものを必要に応じて細々と書いている程度に過ぎません。

さてプログラマーを引退してどうしたかといいますと、マネージャーになりました。といっても、正確にはマネージャーなんてエラソーな立場ではありません。スクラムチームのリーダーといった程度の役割です。昔っぽく言えば、係長でもないので、班長ぐらいでしょうか。上長の人からお前にならできると思うからぜひやってくれとお願いされて引き受けることにしました。ついでにお給料もちょっと増やしてもらったので満足です。このままモチベの上がらない技術者を続けるよりは未来もあるでしょう。

とはいえ、問題点もあります。なにせ、私は基本的に人間が大嫌いです。可能であれば常に一人でいるほうが嬉しいと言うのに、何が楽しくて他人のマネージメントなんてしなければならないのでしょうか。実は私の上長には人を見る目が無いんじゃないでしょうか。さらに、そもそも私は生まれてこの方マネージメントに関する勉強も教育も一切受けたことがございません。ズブのド素人にプログラマができないのと同じことで、全くの未経験者がマネージャなんてできるわけがないでしょう。

まぁ、それでもいいや、別に会社の業績がどうなろうが知ったことではないし、お給料くれるというならやってやろうじゃないかと思って一念発起、できるかどうかわからないまま快く引き受けてしまったのですが、いざやってみたら案外マネージメント業務ができちゃったので、今日は今年一年のマネージメント体験で得られたことをつらつら書いてみようかと思っております。


マネージメント業務を行う人間に必要な適正

古今東西、何の仕事でもそうなんですが、仕事には適正というやつがあります。

まず能力面での適正というやつは以下の通りだと思っています。

  • 論理的思考が人並み程度に可能
  • 人前でしゃべることができる
  • 恥ずかしがったり躊躇したりしない、慌てず騒がず堂々としている

たったのこれだけです。

次に考え方、思考面での適正というやつは以下の通りだと思っています。

  • 目的を達成するのが楽しいと思える
  • エンジニアの苦痛を理解できる、プログラマやエンジニアが何をされたら嬉しくて何をされたらクソムカつくかを心の底から共感できる
  • ボスとリーダーの違いを理解しており、ボスではなくリーダーになろうという意思がある
  • 一方で自らがチームで最も価値のない人間であるということを自覚することができる・・・マネージャーは別に何も生産しません。生産価値ゼロです。単に生産価値を生み出している他のチームメンバーの雑用奴隷をしているだけです。自分のほうが上だとか勘違いするのは思い上がりも甚だしいです。したがって成功は全てメンバーのおかげであり、失敗は自分が無能な判断をしたためか、サボったから、と考えるのが当然だと言えます。

この程度の要素があれば基本的に誰でもマネージメント業務は可能だと思います。別に人間が好きとか嫌いとかは必要な要素ではありません。もちろん、人によって方法論が異なるとは思いますが、少なくとも私にとっては必要ありませんでした。


マネージメントはゲームである

はい、ゲーム脳の私の考えることですが、マネージメントはゲームです。ゲーム機やコンピュータやゲーム盤を使うのか、現実世界で行うのかの違い程度しかありません。そもそもゲームというのは基本的にマネージメントそのものです。シムシティのようなゲームだってマネージメントですし、エイジオブエンパイアスタークラフトといったゲームもマネージメントですし、アクション要素以外のほぼすべての要素はマネージメントであると言えます。それどころか最近はチームで対戦するバトルロワイヤル系のゲームや対戦ゲームが増えてきました。これらのゲームで味方同士が協力して相手に打ち勝つというのはチームメイトのマネージメントそのものであると言えます。すなわち、ゲームをしている人なら、誰でも毎日マネージメントを実践していると言えるのではないでしょうか。


最低限の定石を覚える

古今東西いかなるゲームにも定石という概念は存在します。古くは将棋囲碁チェスにも存在しますし、リアルタイムストラテジーゲームでしたら初期オーダーと言う概念が存在しますし(HCCC→農民掴んで豚に送りつつ家1件建設・・・)最近流行りのバトルロワイヤルでも初手どこに降下するのが良いとか、どの武器が強いとか、何を確保すれば有利だとか、何のゲームにも必ず定石と呼ばれている概念が存在するわけです。

上達したいなら何のゲームでも必ず定石を学ばなければなりません。定石に当てはまらない動きができるのは定石を知っているからです。したがって、マネージメントもゲームですから、定石を学ぶ必要があります。

マネージメントにおける定石とは何かという話ですが、ありがたいことに世の中にはマネージメント論みたいな話があって、特にソフトウェアエンジニアリングのような知的労働をするチームをマネージメントするみたいな方法論だけでも沢山存在します。私の場合はスクラムという方法を学びました。まぁ、会社がカネ出してくれたので、専門の講座を受けに行っただけなのですが、おかげさまで最低限の定石は得られた気がしています。それにスクラムの元となっている経験主義という考え方は、答えのない決断を迫られることが多いマネージャーにとって必要不可欠な考え方ではないかと思いますし。


マネージメントという仕事はどういうゲームか考える

他の現実世界の事象と全て同じなのですが、ゲームと違い現実世界には明示的なクリア条件・達成条件・ゴールといったものがありません。またゲームと違いパラメータが明示的ではありません。全てのゲームは(アクションゲームですら)基本的に数字やフラグと行ったパラメータを適切に操作してゴールを達成するものですから、それらパラメータとゴールを適切に自分で設定してやる必要があります。


マネージメントのゴールを理解する

これは基本的に組織のゴールを達成することとほぼ等価になると思います。それとは別に、マネージメントに登場するパラメータの値をうまく調整してチームが破綻しないようにするというのも大事なゴールになります。すなわちパラメータを維持調整促進しつつ組織のゴールを達成するのを狙うことになるでしょう。

厄介なのは組織のゴールというやつが現実世界ではしばしば達成不可能な世迷い言だったり、達成するためにはチームメンバーやパラメータを犠牲にしなければならないようなものだったりする点です。そのため、現実世界においては俗に「調整」と呼ばれる、組織のゴールを達成するフリを上には見せつつ、自らの中では差し支えないゴールに置き換えておき、上に対してはフィルターを通して進捗を返すみたいな作法が必要になってきたりしますが、お察しの通り、そのような作法が必要な地点で大体何かが間違っています。人間のやることですから何かが間違うのは仕方のないことなのですが、せめて自らのチームの中ではそのような間違いと調整が起きないように最大限尽力するべきでしょう。


マネージメントするパラメータを理解する

というわけで次はパラメータを定義します。私が定義しているチームマネージメントのパラメータは以下のとおりです。
  • 士気
  • リスペクト
  • 発言力

これだけです。順番に見ていきます。


士気

極めて重要な値で、端的にいえばやる気です。他のゲームに例えるならライフポイントやヒットポイントとバフ・デバフ係数の両方を兼ねている最重要値です。この値を減らしたらゲームオーバーだと思ってください。あらゆる手段を用いて高める必要があります。Hearts of Ironという有名な第二次世界大戦シミュレーターゲームがあるのですが、あのゲームで戦闘が敗北するのは部隊の兵士が死ぬからではなく、士気がゼロになるからです。人はそうそうかんたんには死にませんが、やる気が無くなると死んだも同然の状態になります。そしてやる気はいともたやすく無くなります。

士気を上げる方法、下がってしまう要因などはいくつもあると思いますが、あまりにもたくさんありすぎるのと、余りにも重要な概念ゆえ、後ほど場を設けて述べさせていただきます。


リスペクト

GTAとかRed Dead RedemptionとかFalloutとか、そういう洋物のゲームによく出てくる概念ですが、日本語化が難しいのでそのままリスペクトとします。これは何かというと「アイツすげえな」「アイツは便利なやつだ、俺にとって使える」「アイツは有能だ」などといった他人からの正の評価を表す概念です。

あなたも自分の身の回りにリスペクトがある人が一人ぐらいはいるのではないでしょうか。そして想像してほしいのですが、そういうリスペクトがある人物からお願いされたり依頼されたことと、道端の他人にお願いされたり依頼されたこと、どちらのほうを聞いてあげたくなる、頼まれたくなるでしょうか。考えるまでもありませんね。

そう。マネージメントを行う上で極めて大事な要素です。コンピューターゲームの世界ではユニットを選択して右クリックしたら文句も言わずにその通りに動いてくれるものなのですが、現実世界ではそのような魔法は発生しません。あなたがお願いする内容が、あなた自身のリスペクトと比較して十分であれば、高い確率で(絶対ではなく確率で!)聞いてもらえるものなのだ、というふうに理解してください。したがってより無茶苦茶な内容を聞いてもらいたいのであれば、あなた自身にとんでもない量のリスペクトが必要になります。もし、リスペクトがない人物の依頼や命令が通っているのであれば、それは全く自然な状態ではなく、「上司の命令だから」「金をもらえるから」とかそういう別の動機によって発生している状態になります。これは極めてチームの運営上危険な状態であり、どんどんと歪みを生み出し最後には爆発してチーム自体が消し飛ぶことになります。

健全なチームは、上司の命令だからでもなければ、金をもらえるからでもなく、依頼を受けた側が自主的に自分もそうしたいと思っているから依頼を受けるか、または依頼主に十分なリスペクトがあるから成り立っているのです。

そんな大事なリスペクトですが、これは他人からの相対的な評価ですので、評価する側が何を大事にして何を大事にしないかによっても高め方が変わってきます。例えば評価する側の人が技術を最も大事にするタイプの人間であれば、その人からのリスペクトを高める方法は自分自身の技術力を高める以外にありません。逆に評価する人が人間性を求めている人なのであれば、あなた自身に人間的な魅力、ユーモアがあるとか、明るい性格をしているとか、そういう方法が必要になります。

ですがもっと簡単にリスペクトを高める方法があります。ゲームと同じです。他人のお願いを聞いてあげるだけです。どんなに簡単な内容でも構いませんから、対価を求めず相手のお願いをすべて聞いてあげてください。失敗しないようにね。すると「アイツは自分のお願いしたことを色々きちんとこなしてくれたいいやつだな」と思ってもらえるものです。私はもはや技術力がないアラフォーですから、チームのために様々な雑用をこなしてエンジニアの苦痛を取り除くことでリスペクトを稼ぐしかありません。


発言力

遥か大昔に初めてガンパレード・マーチというゲームをプレイしたときに度肝を抜かれたのがこの発言力というパラメータでした。要するにお金のようなもので、対人関係で他人にお願いをしたり、会議で発言する際に必要となり、勲章をもらったりすると増えます。当時はガンパレの独特で斬新すぎる仕組みを上手く理解できなかったり、最強の武器(NEP)を手に入れるための方法がカネで買うでも敵からのドロップでもなく発言力で取り寄せるという内容に正直何だこれはと思ったものなのですが、今なら言えます、このガンパレード・マーチというゲームほど対人関係や発言力の概念を上手く取り入れているゲームは今に至るまで他に存在しません。

発言力はリスペクトと直結しています。リスペクトの値が高ければ高いほど発言力は大きく生産されるようになり、自分の意見を通しやすくなりますが、発言力を浪費した結果成果が上がらなかったりすると、リスペクトが減少し、さらに発言が難しくなるという負の循環に陥ってしまいます。

ちょっとわかりにくいかも知れないので具体例を挙げますが、あなたの身の回りにいらっしゃるクソ無能認定している人間を一人思い浮かべて、そいつがエラそうに自分の参加する会議で何かクソ無能っぽい頓珍漢な世迷い言を発言しているさまを思い浮かべてみてください。どうでしょうか。口を閉ざして視界から失せろと思うに違いありません。そうして自分の士気が下がります。これが、リスペクトのない人間が、発言力を無駄遣いしてさらにリスペクトを落とし、他人の士気を落としてチーム全体にダメージを与える状態です。こういう状態を避ける必要があるわけです。簡単ですね。

発言力は基本的に何でも発言・・・すなわち自らの意思を表明すれば減り、発言しなければ自らのリスペクトに相当する値まで自動的に回復するようなものなのですが、面白いのは発言によってリスペクトを得ているタイプの人間が余りにも発言しなさすぎると価値がない人間だと思われてリスペクトが減少し結果として発言力も低下するとか、逆に十分なリスペクトがある人間が発言すると発言することによってさらにリスペクトが高まる結果話せば話すほど発言力が増えていくとか、ポジティブフィードバックを受けやすいパラメータに思えます。

増やす方法はリスペクトを増やすことですが、減ってきたときには不用意な発言を厳に慎み、ここぞという場面でのみ最も適切な意見を述べ、メンバーの信頼を再び勝ち取る必要があるでしょう。

エンジニアでよくあるのが、どれほどリスペクトのある技術力のある人でも、発言すれば発言するほど発言力は消費されてしまうということです。つまり、どれほどのド正論だったとしても、ああでもない、こうでもない、それは間違っているからこうしろ、と言い続けると発言力が低下してしまい、結果として本当に大事な場面で反対に合ってしまうことが往々にして発生します。残念ながら人類というのは完全に論理的な生き物ではなく、どれほどの正論でも、どれほど理論的に正しいことでも、自分がムカつくこと=すなわち相手ばかりが正論を発言して結果を得続けるという状況には容易に賛成してくれません。時には如何に相手が間違っていてもあえて無視し、自らの発言力を維持しより大事に備える必要がある、というケースも存在すると思っています。


チームメンバーの自主性の話

よくチームメンバーの自主性を重んじるとかなんとかそういう話がマネージメント論に登場してくると思います。ですが私に言わせれば「重んじる」なんてのはチャンチャラおかしい話で、まるでマネージャーの言うことに全てメンバーが同調して従い、たまに自主性のあることを言うからそれを聞いてあげるんだ、みたいなノリに聞こえます。

大間違いで、実際にはチームメンバーには自主性しかありません。すなわち、基本的には、自分のやりたいことを、やりたい通りにしかしません。マネージャーの話なんて聞いてくれるわけがない、というのが当然かつ自然な状態です。これは自虐でも何でも無く事実です。嘘だと思うなら今すぐLeague of LegendValorantといったチーム型対戦ゲームをインストールして、野良のランクマッチに入って、周りのみんなにああしろこうしろと命令してみては如何でしょうか、誰も話を聞いてくれませんので。

現実の仕事の場でこのような間違ったことがまかり通るのは、マネージャーという肩書があるから、上司という肩書があるから、または彼らが金をもらって仕事をしているからであって、それらの要素がなければ命令という概念は一切成り立ちません。

したがってまず私がチームで仕事をする際に考えるのは、大変逆説的なのですが、全て自力でなんとかするということです。なぜならチームメンバーは自分のやりたいことをやりたいようにしかしないのであって、私が何をしたいか、チームが何をしなければならないか、案件のゴールが何でそのためには何を達成しなければならないかなんて知ったこっちゃないというのが全く自然な状態であるためです。

しかしながら誰が考えても分かる通り、これでは仕事になりません。私一人でできることは何もありません。技術力も若いのに劣りますし、作業量も作業速度も劣ります。したがって目的を達成するには、勝利するためには、メンバーに協力してもらわなければならないのです。

そこで、先程書いたリスペクトの話が大事になってきます。まずはメンバーにあなた自身が彼らにとって有益で使える存在であるということを認識してもらわなければなりません。彼ら自身とて目的を持ってチームに存在しています、それはチームに与えられたゴールを達成したい、と少しぐらいは思っているからそのチームに居るわけです。ゲームなら勝ちたいであるし、仕事ならプロジェクトを成功させたいでも、コード書きたいでもなんでもいいです、とにかくそういうことです。その彼ら自身の目的をマネージャーたる者が手助けすることができる、という認識を持ってもらうところからが大事になります。


メンバーに自主性の範囲で何ができるのかを把握する

再びLoLの例になって恐縮ですが、例えばチームメンバーといっても彼ら自身の能力は一人一人異なってきます。例えばボトムレーンでラストヒットを取る程度なら何一つ指図しなくても自力でできるが、ジャングラーがGankに来ているのを自力で把握できないとか、敵のローテーションタイミングを把握できてないとか、正面のエズ君のスキルショットを回避できないとか。そのようなプレイヤーを完全に放任してボトムレーンを任せたらどうなるでしょうか?言うまでもありませんがズタボロに負けますし、結果対面のエズ君がクソ育ってクソ無双して我々はボッコボコにされて敗北して目的を達成できず最悪な気分になること間違いなしでしょう。

このような与えられた仕事を達成するのに必要なスキルを自主性を持って発揮できないようなケースの場合は、自主性を持って達成できる範囲のみ、すなわちラストヒットを取らせるところまでは完全に放任し、Gank警告は全てこちらが指示、逃げ方も全て指示、スキルショットは回避してくれないから代わりに全部自らが受けて盾になる(その結果自分が最悪死ぬかも知れないがそれは知らん)、というようなケアが必要になってきます。

逆に運良く自らのチームメンバーの中にブロンズ5のフリをしたプラチナダイヤプレイヤーが混じっており、彼らは自らの判断で一人で敵ジャングルを荒らし回ったり、Gankに行ったり、ドラゴンを支配したり、視界を取ったりといった極めて高度な判断と実行をこなすことができる場合もあります。またそこまで有能でなかったとしても、集団戦でUltを3人にぶち当てることに関しては右に出る者がない、みたいな一芸に秀でた人もいるかもしれません。

そのような幸運なケースの場合は彼らの自主性を重んじ、基本的に彼らの方針をリスペクトして受け入れ従ったほうが良いです。たとえそれが自らの経験と食い違ったり、明らかに間違っていそうだったとしても、まず彼らに自主性を発揮してもらうべきです。その代わり、彼らのために視界を取ってやるとか、ヒールを使ってやるとか、そういうサポートに徹してあげ、そして万一彼らが失敗しても非難するようなことをしてはなりません。そうすれば彼らからしてみれば、「あいつは俺のやりたいことをやりたいように任せてくれるし、面倒事は全部引き受けてくれるし、一緒にチームを組んでいてやりやすいな」と思ってもらえるわけです。こういう状態になれば自らがミスした場合に「全て任せてもらったのに失敗してしまったから申し訳ないな」「たしかにさっきは俺のミスだった」「次はアイツの話を聞いてやるか」という具合に心を開いてもらいやすい。

もちろん中には全て他人のせいにするクズもいますが、基本的にそのような人間と一緒に何かゴールを達成するのは不可能ですので、自己反省ができない人間に自主性を与える必要はないし、もっと言うなら同じチームに置いておく必要もないでしょう。コマとして切り捨てるのが良いと思います。先述のスタンスを採用していれば自然とそのようなクズが炙り出されますから、その点でも一石二鳥と言えます。ですから大事なことは、自分が見てアイツは出来る!と思ったチームメイトに関して言えば、全て任せて彼らの言うことを受け入れ、自分は支援してあげる、というスタンスをとることです。まず自分が相手をリスペクトするってことですね。そうすれば彼らから自分へのリスペクトも得られてお互いが得をすることになります。


チームの士気の話

先程チームの士気を高い状態で維持するのが極めて大事だと書きましたが、では具体的にどうすればよいのだろうか、という話をちょっと残しておきます。

私はチーム運営にはノリすなわち本能的な要素と、理性的で計画的な要素の両方が絶対に必要だと思っています。なぜならチームメンバーは人間であり、人間である以上本能的な好みを見逃すことはできないからです。しかしながらチームメンバーは目的を達成するために集まっているものですから、目的を達成するためには理論と計画が絶対に不可欠です。ノリだけでは何も達成できない大学のサークルになってしまいますし、理論だけでは士気の維持ができなくなるでしょう。

良い例えとしてRimworldの例を挙げたいと思います。Rimworldの世界において最も儲かる商売は何でしょうか、といいますと、臓器売買です。なにせ何もしないでも海賊やならず者、隣の蛮族どもが自分たちの街に武器持って大挙して押し寄せてくるわけですから、それを撃退し、息のあるものを牢屋に閉じ込めて、一人ずつ眼球・両手両足・胃腸・肝臓・腎臓・肺を取り除いてから心臓まで取って殺し、生皮を剥いで衣類にし、肉は家畜の餌に混ぜるなりすりつぶしてペーストにしてしまえばいいのです。材料代はタダ、墓場を掘る手間すら省けますし、臓器は非常にいい値段で売れます。人体解剖は医者のスキル上げにも役立ちます。これが理論的にはどう考えても最適解でしょう。ですがこのようなことをすると住人たちに凄まじい勢いで「捕虜を殺した」「捕虜の臓器を売り物にした」「人間を解体した」「人皮の服を着た」「人肉を食べた」といった感情デバフがついてしまい、あっというまに住人たちは精神崩壊を起こして街はめちゃくちゃになってしまいます。すなわち、理論的に最適だったとしても、人間の本能が耐えられないということを表していると思います。ちなみにRimworldにおいてはサイコパスという特性を持った人間がおり、サイコパスの人間であれば捕虜をどれだけ殺そうがバラバラにしようが臓器を取り除こうが一切の感情デバフを受けることがありません。すなわち現実世界のチームビルディングにおいてもサイコパスだけでチームを構成すればここで私が申しているような本能と理論のバランスを取るなんてことは不要でただひたすら理論最適解を追い求めることができるかと思いますが、現実味がないためここでは却下させていただきます。

さてここまで書いて何が申し上げたいかということなのですが、すなわちチームを運営するマネージャーたる者は、本能的な好みと理性的な計画の両方をチームメンバーに提供できなければならないということです。そうしなければチームの士気を上手く維持することはできないでしょう。理性的な計画の方に関してはまぁ私なんかより技術力があったりマネジメント論やチームビルディングをきちんと学んでいる皆様方のほうが得意でしょうから、それは置いておいて、ここではいくつか本能的な好みの話をしたいと思います。


別にノリを高めるために飲み会をする必要はない

まず最初に申し上げたいことです酒が嫌いな人も居ます。時間を拘束されるのが嫌な人も居ます。飯を食うことに執着がない人も居ます。完全に昭和の考えです。忘れましょう。そもそも私自身が体育会系のノリは嫌いですし、エンジニアでそういうノリが好きな人は少ないと私は思っていますから。もちろん、そういうのが好きな人だけが集まっているチームなら、思う存分やればよろしい。


チームメンバーに安心感を提供してあげる

私が推奨するのはこういう方法です。「安心感」というのは人間の本能の極めて根深いところに存在するものです。したがってメンバーは安心を求めます。こいつに任せておけば安心、こいつが間に立ってくれれば面倒な仕様は俺のところに降りてこないから安心、こいつがレビューしてくれればトラブルが起きない、こいつが起てるアイディアはだいたいうまくいくから楽ちん、そういったものです。


安心感と自主性の二律背反

人間は「考えること」「決定すること」に苦痛を覚えるようにできています。すなわち思考を放棄し、誰かに最適解を決めてもらえることができれば、これ以上無いほどの安心感と幸福に包まれるようになっているのです。

何を馬鹿げたことをとんでもない!と怒られるのは当然ですが、ですが考えてみてください、これまでにただの一度も今日の晩御飯を何にするか悩んだことはないでしょうか?転職先をどこにするか悩んだことは?iPhone 12を買うかiPhone 12 Proにするか悩んだことは?必ずあるはずです。基本的に、決定というのは、苦痛なのです。したがってこれを取り除いてあげるというのは極めてメンバーの士気を高めます。

しかしまるでそう言うと洗脳みたいに思われるかも知れません。実際そのとおりで、そもそも我々人間は考えるからこそ価値を生み出せるのであり、考えるからこそ成長するのです。全て決定して決めてしまうなどというのはありえないことですし、そもそも相手がそれを受け入れてくれるとも考えられません。

すなわち、メンバーに進んで考えてもらうべきものは、設計やアーキテクチャなどといった成果・成長に結びつく挑戦的にで面白い分野であり、逆に考えさせないほうがよいものは、「自転車置き場の屋根の色」的などうでもいい些細な問題、ないし正解のない決定などがあるでしょう。明日のミーティングの開催時間なんて時間帯が抑えられれば15時開始でも16時開始でも問題ありませんからマネージャーがさっさと決めて取ってしまえばいいのです。どっちがいい?なんて聞くだけ時間と思考の無駄です。それとかTrelloボードのタグの色なんてどっちが赤でどっちが黄色だろうが知ったこっちゃないでしょう。そういうのもちゃっちゃとあなたのセンスで決めてしまってください。苦手ならそういうのが好きな人に頼んでもいいです。

同様に、メンバーに対してお願いをするときは相手に考える余地や推測する余地を与えないぐらい些細に至るまで完璧に支持することを目指してください。間違っても主語や目的語を省略して話さないように。メンバーがそこを考えなければならないのは苦痛でしかありませんし、その結果マネージャー側の想定する結果と異なる解釈をしては悲劇です。メンバーの苦痛を取り除くための努力を惜しんではなりません。


アットホーム感とか人間味を出す

Trelloボードのタグの色の話が出たのでついでに書いてしまいますが、例えばTrelloボードの背景写真に何を選ぶかであなた自身のセンスや個性、人間味といった本能に訴えかけることができます。毎週毎週きれいな自然の写真を探してきてもいいですし、今週末行った観光地の写真でもいいですし、そういう一見どうでもいいけど人間味を感じる要素を大事にするというのが一つ有効なのではないかと思っています。私どものチームの例をあげますと、毎週のスプリントに名前をつけてみたりとか、スプリントレトロスペクティブの際にスプリント名に即したトリビアを用意するとか、そういうことをやっています。例えば11月16日~11月20日のスプリント名は「ウィリアム・テル」でした。11月18日が息子の頭のりんごを射抜いた日だから、とかそういう理由なのですが、そこから転じてその週のトリビアは運動会のときに流れる曲はウィリアム・テル序曲と言う、とか。私は知りませんでした。ちょっと面白いですよね。こういう人間味のある活動というのが大事なんじゃないのかなと。人間嫌いな私が言うのもどうかと思いますが。


会議での細かいテクニックあれこれの話

ここでは私が普段から気をつけている細かいテクの話をつらつら書いておこうかと思います。全て可能な限り明日からすぐに使えるテクとしたつもりでございます。


会議のゴールは何か

マネージメントというゲームのルールとほぼ一致しますが、会議の場合は以下の優先順位のとおりに実現させます。

  1. 会議自体のゴールを達成する。すなわち、何かを決定するだとか、結論を出すだとか、具体的なアクションを生み出す。失敗するとチームの士気が下がり、場合によってはあなたへのリスペクトが減ります。
  2. 士気を最大に稼ぐ。士気の低下は即ゲームオーバーです。絶対に避けてください。
  3. リスペクトを可能な限り稼ぐ。最悪減らないようにする。
  4. 発言力の消費を最小にする、できればプラスにする。まぁ、発言してゴールを導かなければならないので、多かれ少なかれ発言力は使います。プラスになったら御の字ですが、他のところで貯めましょう。


激流に身を任せ同化する

要するに「空気を読め」「流れを読め」というやつです。ほら来ましたよ、全エンジニアがクソ喰らえと思っている単語。クウキヲヨメ。私だって大嫌いですよ、そりゃ。しかし、事実です。空気を読むのは日本人だけだとか思っているあなた、それは嘘です。韓国人も中国人もベトナム人もアメリカ人もスペイン人もドイツ人もブラジル人も全世界共通で彼らは空気を読みます。ただし程度が違う、性質が違うだけです。残念ながら人と人が話を持つ上で空気を読む、流れを読むというのは極めて大事な要素と言わざるを得ません。
とはいえ実は簡単です。単にこう覚えておきましょう、「自分より発言したがる人間がいる場合は聞き役・守勢に周り、補助を行い、一人が独壇場を作らないように調整を行う」「自分より発言したがる人間が居ない場合は自分が喋り役・攻勢に周り、議論の流れを作り、たたき台を作って周りから発言を引き出す」、これだけです。柔道とかと同じですね。相手が前に出たら下がり、後ろに下がったら前に出る。そうすればお互いがぶつかることがなく、無駄に衝突することもなければ、お互いから何の発言も出なくなって手詰まりになることもありません。基本的にはこのように現在自分が攻勢に出て引っ張るべきか、守勢に入って気を伺うべきか、だけを判断すれば良いと思います。お互いの意見が意味もなく衝突すると敵対心が生まれる危険性があり、何も意見が出ないとチーム全体の士気が劇的に下がります。どちらも避けなければなりません。


流れを止めない

まずは自らが喋り役・攻勢に回る際の細かいテクからいくつかご紹介します。

会議において最も避けたいのは沈黙です。全員が考え込んでいる、というのは正しい状態にも思えますが、大抵の場合は考え込んでいるフリをしているだけで全員が混乱しているだけか、発言したいのだがためらっている状態かのどちらかです。この状態は時間の無駄であり、士気の低下を招きます。自らが喋り役に回っている際にはこの自体を絶対に避ける必要があり、逆に他人が喋り役に回っている際に沈黙が訪れたらこのときこそが発言のチャンスです。

私個人的には、5秒間の沈黙が発生したら必ず何か発言します。そのときによく使うテクニックが以下のものになります。


自ら殴られにいく、自らがたたき台となる

一番有用で且つ私がよく使うのがこれです。どんなデタラメなアイディアでも構わないから思いつきを出します。大事なのは、周りの誰かに「そりゃダメだろ」と突っ込んでもらうことです。最悪、デタラメなアイディアに決まってしまうよりも、なにも決まらないよりは圧倒的にマシです。その場合、デタラメなアイディアがうまくいくこともありますし、それが失敗したなら失敗した原因を掘り下げることで、次回は成功に近づくことができます。

場合によっては「わざと」メチャクチャなアイディアを出すこともあります。これはツッコミどころ満載のアイディアを思いつきで出したかのように振る舞いつつ、他のメンバーが釣られて「いやそれは間違ってる」「それじゃダメじゃないですか」と発言してくれることを期待してのことです。もちろんそこで、釣り宣言をしてやーい釣られたバーカバーカとか言い出さないように。相手の指摘が適切であることをすぐに認め、自らのアイディアがいまいちだったことを認め、指摘に感謝し(相手の士気が高まり次回以降の発言が活発になります)、可能であればどうしてその指摘が適切だったかを掘り下げるのが得策です。

「確かに、Aさんの仰るとおり、このアイディアだとXXXがダメで上手くいかないね。まてよ、であれば、XXXが満たされればいいわけで、それならXXXXXXならどうかな?」

などと掘り下げのたたき台にできれば完璧でしょう。


現状を振り返る

とはいえ私は一休さんではないので、毎回毎回デタラメなアイディアが思いつくとは限りません。その場合に有用なのはこれです。現状を振り返ってみます。可能な限り細かく砕いて振り返るのが大事です。

「えーと待てよ、今困ってるのは、XXXが、XXXXになっちゃってるからXXXXXができないんだけど、それを解決するためには隣のCチームがXXXXを直してくれないとどうしようもないんだよな。でもCチームはスケジュール的に来月まで動けないとか言ってる。どうしよう。」

これは何も問題を解決していませんが、全員に現状のヒントを与えることができますので、そこから誰かの発言が出てくることを期待することもできますし、現状を振り返ることで自らがネタを思いつくことも期待できます。

「ああ、それならCチームのタスクのXXを我々が引き取って変わりにXXXXを進めてもらえばいいんじゃないかな?そういうバーターはやったことないけど、試して見る価値あるかも」


質問を投げかける

これは問題の解決策を誰かが持っていることが期待できるが発言が出てこない場合に使う作戦です。質問を投げます。

「Yさん、XXXXについては以前あたりのコード調べてた気がするけど、そこなにか知らない?」

質問に対して直接回答が得られれば良いですし、得られなくても追加の質問が行える場合もあります。

「わからないかー、そこ調べてもらったときに誰がそういう仕様にしたか見てもらった気がするけど、誰に聞いたらその辺の経緯分かる?」


正しいか正しくないかではなく好きか嫌いかを問う

これはある事項を決定しなければならないのだが、複数の選択肢の間でみんなが迷っているときに非常に有効な手だと思っています。つまり、こういうことです。

「Aさんはプラン1とプラン2どっちが好きかな?別に良いとか悪いとかじゃなくて、自分が好きだなーって思う方を気軽に教えてほしいんだけど」

「これだけいろいろ考えたけど、どっちもメリデメあって一長一短あるし、どちらに決めても後悔はないと思うので、それだったらよりみんなが好きでやりたいと思うプランを実施したほうがいいからね」

この作戦を取るときに最も大事なのは先ず隗より始めよ、まず自らが絶対に最初に言い出す、という点です。チームメンバーに意見を押し付けてはなりません。

「俺はプラン2のほうが好きかなーなんとなくだけど。1も嫌いじゃないんだけどどっちやったほうが楽しそうかなって言ったら2かな!」

この作戦を取るときには理由なんていりません。理由が付けられないから好きか嫌いかで選ぶんですから、理由をつけず、頭悪く好きか嫌いかでモノを語ってください。これで決まることもあるし、逆にちょっと待ったコールが上がることもあります。そうしたらシメたもので、ちょっと待ったと声を上げてくれた人はなにか違和感があるから好き嫌いで選びたくないと思っているのですから、そこを掘り下げれば解決策がでてくるかも知れません。


最後は自分がやる

あらゆる手段を用いて流れが止まらないように尽力したにもかかわらず上手く議論が進まなかったり、解決策が導かれなかった場合の奥の手はこれしかありません。自分でやりましょう。自分がその箇所を触ったことがあるとか無いとか、使ったことがある言語ではないとか、そういうのは関係ありません。誰もやらない、できないなら、自分が突撃するより他に手がないのです。ひょっとしたらチームメンバーの中には解決策を持っているが、発言したら自らがタスクを引き取らなくてはならなくなるからあえて答えを出さないという人もいるかも知れません。それに対して非難するのは誰でもできますし理屈では正しい事かもしれませんが、それによってメンバーの士気がダダ下がりになってしまうのであればマネージメントのゴールの達成という意味では大失敗です。上手く成功すれば自分のリスペクトも増えますから、決して悪い手ではありません。

こういう最後の手段が使えるように、普段の自らのタスクはやや少なめに拾っておくことをオススメします。やはりマネージメントが最も活躍しなければならない場面というのは問題が発生したときですから。


相手の発言を細かく砕いて言い直す

次に自らが聞きに回っているとき、すなわち守勢にいるときに明日から使えるテクをいくつか並べてみます。

会議のときなど、時々誰かが余りにも省略しすぎた発言をすることがないでしょうか?これは非常にありがちなのですが、全ての人間がしゃべるのが得意というわけではありませんので、自分には分かっているけど人には分かっていない前提条件だとか、コンテキストだとか、そういうのをついつい省略して喋ってしまうことがあるのです。そのようなときに、あえて細かく質問を投げかける形で聞き直すようなテクがあります。

例えばこういう感じです・・・「えっとごめん、今XXXXって言ってたのは、要するにXXXがXXXXでXXXXXだからXXXXだって話ってことであってる?念の為に確認したいんだけど」

これは特に発言者の発言が不用意で分かりづらかったときほど効果を発揮します。自らが分からなかったので教えて欲しい、という立場を取ることで、発言者を責めたり悪い気持ちにさせることもなく、周りのチームメンバーとの認識のズレを正すという効果を発揮しつつ、リスペクトも得られるからです。さらにここから流れを自分側に引き寄せて自らが追加で意見を述べることもできます。余りにも一人の人物が喋りすぎて場が独壇場になりそうな場合の有効な切り返し策となりえます。

もちろんあまりにも頻繁に聞き直したら嫌われますし、あまりにも見当違いな聞き直しをしたらただの馬鹿だと思われますのでくれぐれもご注意を。


「他人を褒める時は大きな声で、けなす時はより大きな声で」

言わずと知れた某銀河帝国の提督様の家訓でありますが、少なくとも私にとってはこれほどしっくり来る人生哲学はありません。特に前半が極めて重要だと考えております。すなわち、人を褒めるときは大きな声で、すぐにその場で、どうして褒められるべきか理由を添えて、己の本心から褒める、これが最も大事です。正しい賞賛は味方の士気を大いに高め、モチベーションを作り、本人の成長と自立を促すことにつながります。

これも守勢のときに使える有効な作戦の一つです。

逆に後半部分ですが、これは敵に対して用いるべき方法で、チームメンバーの問題点を指摘する際には後から、人とは別の場所で、改善のための具体的な方法を添えて、私心を加えず指摘する、つまり褒めるときとはまるで逆のことをやるのが大事であると思います。


他人の表情を見る

自らが発言の主導権を持つときも、他人が主導権を持っていて聞き役に回るときも、どちらでも大事なことは、相手の表情を見ることです。今このご時世ですから会議はZoomでリモートでというのが当たり前だと思いますが、絶対に顔を出すようにしてください。少なくとも私は常に顔出し状態にしています。このほうが自らはきちんと会議に参加しているのだというリスペクトを得やすいです。裏で内職をしていないという証明みたいなものですね。それに自らが発言の主導権を持って進めているときに誰か他に発言したそうな状態の人を発見することもできますし、他の人が主導権を持って進めているときに相手に対して表情だけでも返事することができれば相手は進めやすく感じてくれるはずです。

これは会議に置けるマナーだとか言うつもりはないのですが、単純にそのような行動をするだけで他人から容易に一目置いてもらえるのに、カメラをOFFにしておく理由はないです。私に言わせればそれだけで大量のリスペクトを無駄にしています。

さらに他人が裏で内職をしている徴候をいち早く察することで、今の会議の状態を改める必要があることに素早く気づくことができます。内職をしている参加者は自らが参加している必要がないと思っているから裏で内職しているか、または他により大事なタスクがあったり締切に間に合わないから内職しているわけで、いずれの場合でも何かが上手く行っていない徴候です。会議の量を減らすとか、参加しなくていいものに呼ばないとか、タスクの割り振りが間違ってるとか、そういうマネージメントに必要な情報を得るのに相手の表情を見るのはとても適しています。


最後に一番大事なこと

チームリーダーだろうがマネージャーだろうが社長だろうがなんだろうが構いませんが、マネージメントのお仕事をしている人にとって最も大事なことは、先程までに述べた内容と矛盾しますが、実は自分の身を守ることではないかと考えています。要するに、もらっていない給料の分の仕事まで責任をとってはなりません。マネージャーは魔法使いでも神様でもチート能力を持った異世界転生主人公でもありませんので、無理な仕事は無理です。責任感があるのは素晴らしいことですが、できないことをできると言い張るのもそのためにチームを付き合わせるのも全てそれ以上に無責任なことです。とっとと逃げましょう。退職しましょう。あなた一人がチームから消えたところで人類全体の幸福にはほぼ何の影響もありません。むしろチームメンバーをそのような終わっているプロジェクトから守ってあげるために、さっさと退職させてあげたり、別の仕事を紹介してあげるほうが、人類のためになるのです。



長くなりましたが以上になります。何かしらの参考になれば幸いです。


明日はtokibitoが担当です。お楽しみに。


2019年12月7日土曜日

最近のクルマの話

こんにちわ、毎年恒例 pyspa Advent Calendar も今年は2019年となりました。12月7日担当のakisuteです。明日の担当は @rokujyouhitoma です。

さて皆さん突然ですが、クルマは持ってますでしょうか?

持ってない?当たり前ですね。馬鹿みたいに高い税金と車両代金と高速道路通行料を搾取されるだけで何一つメリットありませんから。

それでは皆さん、スマホはお持ちでしょうか?

持ってる?馬鹿にすんな?当たり前ですね。今どきスマホ無いと生活が困難ですね。10年ほど前はどうやって電車の車内で時間を潰していたのかすら、もはや思い出せそうもありません。

そういうわけで、私のブログをわざわざ見に来てくださっている方はIT業界、それもスマホアプリ関連の業界の方が大多数でしょうから、スマホについてはバリバリ詳しいけど、クルマなんて持ってないから何一つ知らないし興味もないよ、という方が多数派を占めてらっしゃるのではないでしょうか。本日はそういう多数派の方向けのお話をさせていただきたいと思います。

さて、皆さんがクルマに何の興味も知識もない前提でお話を進めさせていただこうと思うのですが、それでも平成以降に製造されたクルマにはカーナビとかいう地図とか表示するディスプレイが付いていたり、スマホをBluetoothで接続したりしてカーオーディオを聞いたりできるということぐらいはご存じの方が多い、と私は勝手に信じております。ところが今や元号も令和となりまして、どこもかしこもインフォメーションテクニック的なヤツが幅を利かせる世の中になっておりますゆえ、当然クルマに搭載されているカーナビですとかカーオーディオ的なやつもご多分に漏れず高機能化しています。おまけに最近は自動運転 (=カーナビの現在位置情報や道路情報を車両側が使用したい) ですとか、クルマの走行特性モードの設定 (=車両側の走行特性をUIから操作する必要がある) ですとか、クルマのハンドルについているスイッチからカーオーディオを直接操作したい (=車両側の入力をカーオーディオと連動させなければならない) ですとか、そういう昭和の時代では考えられないような高度な統合処理が必要な機能の搭載がクルマにとってもはや必須となっておりまして、昔のように後付で買ってきたカーナビやカーオーディオに配線すればOK、というわけにはいかなくなってきました。

そこで、ここ2年ほど以内に発売された新車の真ん中に鎮座するディスプレイはカーナビではなくマルチファンクションディスプレイとかディスプレイオーディオとか呼ばれるようになってきておりまして、タッチパネルを装備し、カーナビ、オーディオ、エアコン、車両の設定などを直接タッチ操作で行う高度なシステムに変貌しています。

それだけには留まらず、今年発売された新車に至っては4G接続用のSIMとアンテナが装備されており自立通信が可能で、電話は当然として緊急時の連絡サービスや、煽り運転されたときにボタンひとつで自動的に通報してくれるサービスもあり、カーナビの地図情報の自動更新やシステムアップデートもこなすことができます。なぜクルマにこのようなものが必要かといいますとこれまた将来的に重要になる自動運転が絡んできまして、最新の地図が常に使用されていないと自動運転は危険だからだとか、万一なにか問題があったときに自動運転中の車両を遠隔監視できていないと駄目だとかそういう理由があります。そこで先んじてこのような通信能力をクルマに持たせているというわけです (※おそらくは裏で匿名運転データの収集も行っているのではないかと推測していますが、そのへんは不明です) 。

さらには昨今のスマホ社会を反映し、各社自動車メーカーが用意したスマホアプリと車両が連動して、スマホアプリから現在の自分のクルマの位置を調べるだの、走行距離とガソリンの残量を調べるだの、カーナビに目的地を送信するだの、果ては走行前に社外からエアコンをONにしたりクルマのドアロックをスマホアプリから開けてしまうだのといったことまで可能になっているのです。

どうでしょう、まるでスマホみたいですね。
そのとおり、最近のクルマにはちゃんとしたOSがいます。

このクルマのOSは現在のところ基本的には各社自動車メーカーが内製で作っている (かまたは基本システムだけ買ってきて各社勝手にカスタマイズして使っている) ものが多いようで、iOSとAndroid以外のOSが事実上絶滅したスマホの世界とは異なり、どの会社からクルマを買うかによって大いに出来栄えと機能に差がある状態です。

中にはスマホ世代の我々にはひと目見ただけで開発者をコンクリ詰めにして東京湾に投げ捨ててやりたくなるようなひどい代物も多数存在します。それどころかタッチしてから0.5秒遅れで反応するUIなどといった、初代iPhoneどころかAndroid 1.5 Cupcake世代の産業廃棄物スマホにすら劣るレベルの実装すら、世の中のクルマに存在します。

ヤバいですね。何処のドイツでしょうか、そんなひどいブツを作るのは。実際に見てみたいと思いませんか?

・・・ここで、ちょっと話は変わるのですが。

メルセデスというクルマのブランドがあります。

あまりクルマに詳しくない人でも、ベンツといえば分かるでしょうか。そう、ドイツの高級車メーカーです。最近はメルセデスという名前で名乗っていますので、メルセデスと呼ぶことにします。

でそのメルセデスといえば、皆さん誰でもすぐに高級な外車で、金持ちが乗ってそうなイメージを浮かべると思います。当然、見た目も高級だし、内装も高級だし・・・

・・・車載OSの動作だって高級で高品質を期待します。当たり前ですよね。下手すると1000万円とか払うクルマなわけですから、iPhone 11 Proみたいにきれいな見た目で高速にちゃんと動作することを期待したいじゃないですか。iPhoneなんて10万円かそこらしかしないんですから。

じゃあ見てみましょうか。メルセデス。でもなぜだか知らないんですが日本仕様・右ハンドル・日本語表示のMBUX (Mercedes Benz User Experience) のUI、ネット上にほとんど落ちてないんですよね。しょうがないから実車の写真を撮ってきました。

ネットから拾ってこれた左ハンドルでの画像ですが、横一列につながった超ワイドなディスプレイ、一見なかなかカッコいいですね。高級感もあるし、これは期待できるのでは・・・

って思った?残念!半角カナちゃんです!

見ての通り、細部に至るまで半角カナです!

 こっちは半角カナじゃありませんがガソリンスタン...になっちゃってます。

幸いにしてタッチパネルの操作感度はまぁまぁ良好だし、タッチしてから1秒以上固まるみたいな絶望的な遅さは無いのですが、どう見ても初代iPhone 3Gとドッコイドッコイ程度の動作速度しかありません。そもそも走行中にカーナビを操作したくなったら、身を乗り出してこのタッチパネルを手で触れというのでしょうか?まことに素晴らしいUXだと思います。

引用元: https://www.elasticfeed.com/44db3e868b3b3bfe82835c65441ea3ca/

もちろんそのような危険なことをしないで済むように、こうして中央手元にMagic Trackpadもどきが付いているのですが、手触りはともかくこいつの反応が10年前のWindowsノートパソコンのほうがマシなのではという次元でして、自分のmacに触れた後にこいつに触ると引きちぎって車外に投げ飛ばしてやりたい気分に駆られること間違いありません。設定で感度を調整したりもできますがどう調整してもイライラするので、結局中央のタッチパネルを身を乗り出して触るほうがマシだったりします。

その他、ハンズフリー操作のために音声アシスタント、いわゆるSiriもどきがついてるのですが、社内での会話中にうっかり「メルセデス」という単語を口にした瞬間「なにか御用でしょうか」と起き上がってきて大変邪魔です。名前を呼んではいけないあの人扱いみたいになっています。しかも初代のSiriより頭が悪く、基本的に何お願いしてもマトモに対応してくれないので使えません。お願いだからOK Googleと席を変わってほしくなります。



極めつけはカーナビです。なんとこちら1年近く道路情報が更新されていないようで、設定画面から最新状態に更新しているにもかかわらず半年前に開通した道路が地図上に存在しません。当然カーナビはそこを迂回しようとします。全く使えません。メルセデスの人に聞いてみたところ、現在地図データを頑張って作ってるらしいです。頑張ってくださいね。

ちなみにこちら、お見せしましたのはAクラスといいます一番安物のメルセデスですが、実は2000万円以上するメルセデス・マイバッハと言われる最上位車種でも全く同様のMBUXが使用されています。それどころかAクラスは今年モデルチェンジされたため、下手するとそれらよりも最新のOSが搭載されています。要するに2000万円以上する超高級車でも1年前の道路しか存在しないカーナビを使わされるというわけです。まぁ、そんなクルマを買うような人は自分で運転なんかしないでしょうから、何の問題もないのかもしれませんね。

じゃあ、次はメルセデスのスマホアプリを見てみましょうか。

まぁ悪くはないですね。

なんかWebViewっぽい匂いがしますが・・・

一応ネイティブアプリのようです。FOSS (Free/OpenSource Softwares)をちゃんと列挙しているのは好感が持てますね。

一応機能は充実してますね。

見ての通りクルマのドアロックをこのアプリから開けることもできます。

カーナビ連動もありまして、この画面から目的地を検索してクルマのカーナビに飛ばすことも可能なのですが、

見ての通りこの程度の検索すらロクにできませんので使い物になりません。まぁよしんば目的地がクルマに送信されたところで1年前の日本地図に基づいてナビゲーションされてしまうので、どっちにしろ使い物にならないと思いますが。

いかがでしたでしょうか。まぁ、車載MBUXに比べると幾ばくかマシかもしれませんが、2000万円以上払った人専用アプリなんてものはございませんので、最廉価のAクラスユーザーでも最上位のVIPユーザーでもこのアプリを使わされることになります。もうちょっと頑張れよと思わないでも無い気がします。

一応、弁護させていただきますと英語版やドイツ語版は半角カナではないのでフォントはマシですし、多分ドイツにサーバがあるのでドイツで使ったほうがアプリの動きも多少はサクサクだと思いますし、ドイツ国内のカーナビは多分1年遅れで更新されるとか言うことも無いはずです。要するに日本版が飛び抜けてショボいだけかもしれません。あとクルマ自体は普通にとんでもなく良かったので、アプリとか気にしない人にとっては最高のクルマだと思います。

で。
また閑話休題で申し訳ないのですが。

テスラというクルマのブランドがあります。

最近話題になることが多い電気自動車のメーカーです。あのイーロン・マスクの会社というと我々IT業界人には通じやすいのではないでしょうか。何かやってくれそうな気がしませんか?

そのテスラなんですが、こんな感じなんです。

iPad Proより巨大なタブレットのようなサムシングが鎮座しています。

引用元: https://response.jp/article/2019/08/19/325526.html

見てください、これ。まるでiPadのアプリにしか見えません。このテスラ モデル3の社内にはハンドル周り以外に一切の物理ボタンが存在せず、ディスプレイもダッシュボードのメーターもありません。速度計の確認も、エアコンの操作も、ハンドルとアクセルとブレーキとギアの選択とウィンカー操作以外、何もかもすべてこのiPadで行うことになります。

普通にメチャクチャ綺麗です。カーナビに至ってはおそらくこれGoogle Mapsそのものです。当然、Google Mapsですから、1年前の日本地図が表示されることもなければ、パチンコガンダム駅が存在することもありません。完璧に最新最先端の地図が無料でいつでも使えます。素晴らしいですね。

では、テスラのアプリはいかがでしょうか?

当然のようにネイティブです。まぁReact NativeかもしれませんしFlutterかもしれませんが。




どうみても出来が良いです。半角カナなんて汚物は当然存在しません。

これで、テスラ モデル3の車両価格は最高でも717万円、最安値ですと511万円で収まります。

以上で大体私の申し上げたいことはなんとなく伝わってきたのではないかと思います。つまり、我々スマホ開発者界隈が買うべきなのはテスラってことです!さぁ、このテスラの新車を今すぐ予約してあなたも未来を体験しましょう!



・・・やっぱりメルセデスのほうがいいですね!メルセデス最高!



最後に余談になりますが、Apple CarPlayとAndroid Autoについてちょっと話します。この2つはスマホ開発者界隈の皆様も少しくらいは聞いたことがある名前ではないでしょうか。これまで見てきましたとおり、最近のクルマには車載OSが存在するのですが、Apple CarPlayやAndroid Autoは車載OSのアプリの一つとして動作します。要するに車載OSのナビアプリを開いたりオーディオアプリを開く感覚で、CarPlayアプリを開いて、その中でCarPlayのUIの中で更にiOSのアプリを操作する、みたいな作りになっています。

引用元: https://www.elasticfeed.com/44db3e868b3b3bfe82835c65441ea3ca/

そのせいで、見てのとおりに画面が狭いです。どうやらApple Carplayは7インチの画面を前提に作ってあるようで、10インチのワイド画面であるメルセデスのディスプレイオーディオにはフィットしません。しかしながらこの中は完全にiOSであり、マトモなGoogle Mapsが機能します。おまけにスマホと車体が連携しており、車体側から車載GPSやジャイロコンパスなどのより正確な情報を提供してもらえるため、スマホ上で使うGoogle Mapsより段違いに自車の現在位置精度が高くなります。

参考: https://developer.apple.com/documentation/carplay
参考: https://developer.apple.com/design/human-interface-guidelines/carplay/interaction/car-data/

なんかクルマ向けにアプリ作ってみてえなと言う人がいらっしゃいましたら今がチャンスかも知れませんのでぜひぜひやってみていただければと思います。まぁ、デバッグに実車が必要・・・かもしれませんけど・・・

最近は国産車でもトヨタ・カローラという昭和のジジイ以外だれも知らないようなオワコンカーがびっっっっっっっっっっくりするぐらいモダンで素晴らしいクルマに生まれ変わりまして、そちらの新型トヨタ・カローラには標準でカーナビがついておらず、Apple CarPlay / Andriod Autoやトヨタ独自のSDLという規格を利用してスマホをナビにすることを前提の作りになっています。まさに今のスマホ時代にふさわしい素晴らしい方針だと思います。

2019年9月24日火曜日

SwiftUI で ScrollView / Listの現在のスクロール位置 (UIKitにおけるcontentOffset) に相当する値を参照する/コード上から指定する方法は iOS SDK 13.0 地点では存在しない

タイトルの通りですが一応補足しておきます。

先日、奇しくもAppleのSwift UIを実際に手掛けている開発者に直接質問する機会に恵まれましたので以前から気になっていた内容を質問してみたのですが、やはり現段階のリリースではcontentOffsetに相当するものの変更タイミングを取得したり、またプログラム的にcontentOffsetを調整することもできないと明言されてしまいました。

ただしcontentOffsetの変化したタイミングを取得するだけであれば、以下の方法で擬似的に再現することができるとアドバイスを頂きました。


  1. ScrollView / List 上の特定の位置に、ダミーの隠しViewを配置する。
  2. 隠しViewのonAppear() / onDisappear() を利用する。


彼曰く、コミュニティの誰かが作ったサンプルのVideoPlayerアプリがこのテクを使って動画が画面内に入ってきたときに自動再生を開始する挙動を実現していると言っていたのですが、具体的にどのサンプルアプリなのかは教えてもらえなかったので発見できず。残念。

あとは例によっていつものごとく、機能追加が欲しい場合は https://developer.apple.com/bug-reporting/ 経由で要望を上げてくれると対応できるよと言っていましたので皆さんガンガン書けばいいと思います。