Gitを使ったデザイナーとプログラマの協業について話してきた #P4D #phpcon2013

常連プログラマがほぼ Rubyist しかいないP4Dなのですが、なぜかPHPカンファレンスで枠をいただいたとのことで、デザイナーとGitについて話し合ってみようという企画に参加してきました。

「生煮えぷるり」をプログラマとデザイナーの間で行ったり来たりさせる話


Pull Request 4 Designers - GitHubを使ったプログラマとデザイナーのイテレーティブな開発フロー// Speaker Deck
GitHubを使った、実際のプログラマとデザイナーの協業の様子を見てもらおうということで、私がお手伝いさせていただいている、[https://forkwell.com:title=Forkwell] と [https://jobs.forkwell.com:title=Forkwell Jobs] での開発の様子を例にお話させていただきました。

補足とか
  • 「生煮えぷるり」という表現、多分最初にうちのチームで言い出したのは @a_matsuda 氏です。また人の発言をパクってスライドにしました。
  • 「FIXYOU」というコミットコメントについて。FIXMEを修正した時に @_tbaba 氏が入れるコメント。これは、コードが「FIXME! (ぼくを直して!)」って言ってるってことなので、「お前を直してやったぞー」という意味での「FIXYOU」なのだそうです。なんかかわいい。Forkwell チーム、基本、コミットコメントは英語なんですが、絵文字使ったり、お茶目英語表現使ったりして、かわいいコメントを書く人が多くて、開発中にちょっと和んだりする。もちろん、意図が伝わることは前提として、かわいみあるコミットコメントは円滑なチーム開発にとって大事よね〜。という話になった。
  • 「気持ち悪い状態」が続くこと、について。これは、少なくともデプロイ時には、ユーザーにとってはこのデザインが完成形であるように見える形になっていないといけない。ただ、デザイナーとしてもう少しここを良くするとグッと良くなるよねっていう状態はわかっていつつも、先にマージやデプロイをしてしまって後から直すっていうことがままあるという感じのことです。デザイナーじゃないと一見違いがよくわからない(けど、全体として受ける印象を結構変える感じのデザイン変更)が多いです。デザイン的にあんまりクリティカルな欠点を残したままマージ / デプロイするという事はまずないと思います。プログラマにとってのリファクタリングに似たところあると思います。
  • デザインカンプをきれいに完璧に作りこんできたようなデザイナーさんは、上記のような段階的プロセスに拒否感を感じそうだという意見いただいて、私もそうだと思う。どっちが良い悪いではなく、これは受け入れられる人とそうでない人がいるだろうなあと思う。(自分もちょっとつらみを感じる時はある)。
  • デザインラフについて、これはプロジェクトマネージャーが作る場合もあるが、その場合も一度デザイナー側で検討して必要があれば変更したりする。基本、要件をテキストベースでもらえれば、それをもとにラフやワイヤーフレームを書くような感じの流れになってます。ラフはプログラマが描く時もありますね。
  • 開発はリモートか?という質問について。基本、オフィスに集まって開発をしますが、リモートでも可能な体制になってます。私を含め、フリーランスの業務委託でフルタイムではない勤務体制の開発者も数名いて、自己都合で外から対応させてもらう日があったり、自分の勤務日ではない日や深夜などにおもむろにPushしたり、ぷるりにコードレビュー書いてたりとかはよくある。
  • push -f すると、ぷるりのコードレビューコメントがふっとぶ問題について。これについては、完全に消えるわけではなく、Show outdated diff をクリックするとみれるし、大体 rebase する時にはレビューで言及された問題は解決されていることが多いので、さして気にしないでもよいのでは、というのが私の個人的な見解デス。まあ、そのまま残ってた方がより良いかもなあとは思うのですが、それよりも rebase + push -f の利点の方が大きそうな感じがしてます。

前半で、上のスライドを発表させていただき、後半は、デザイナーとGit について、デザイナー数名でパネルディスカッションをしました。濃い話できて良かったし、その後デザイナー4人でずっと飲んでいて、続きの話をずっとしてて、結局 Git は「デザイナー」にとっていいものなのか、ちょっと嫌なものなのかは、実はよくわかんないねっていう話に落ち着いたのが面白かった。私自身はGit & GitHubラブなんですが、確かにピュアな「デザイン」にとって、Gitを使った開発フローは向いてない面もあるのかもって思う時はちょいちょいあって、しかし1人のWeb開発者としてGitは好きだしその思想にも共感できるので、そのジレンマは常に感じているのが正直なところ。

Git って本当にデザイナーを幸せにするの?

従来、純粋な「デザイン」とされてきたものって、伽藍とバザール(古い!)でいうところの「伽藍」的な側面が強く、一方Gitは分散型の「バザール」的な思想だ。そのデザインをいかにバザール的なプロセスでやっていうかというところが、おそらくGitを使うデザイナーの根本的なジレンマの原因なのではないかと思っている。そもそも、頻繁に cherry-pick を使わなければいけないのもちょっと無理矢理感があるのだが、現状それよりベターな解決策が見つからないし、そこも伽藍を無理やりバザール的なプロセスに合わせてるゆえなのかなあという感じがある。
また、Git や GitHub が基本プログラマフレンドリーに作られてるため、そのプロセスにがっつり乗っかると、どうしても自分もプログラマ的思考に引っ張られることになる。その中で、デザイナーとしての役割分担を常に意識しながらチームプレイしていくというのは意外と負荷が高い感じもしてる。
あと、純粋な「デザイン」にかける時間はやはり相対的に減ってしまう。とはいえ、「これは自分の仕事ではないからやらない」という切り分け方を個人的にはできるだけしたくない。しかし、デザインにかけるリソースが減ってしまうことで、プロジェクト全体の利益が少なくなるならそれはよくないこと。意識して、「デザイン」にかける時間を捻出するようにしないといけない。
そんな感じで、Git が本当にデザイナーを幸せにしているのかは、正直なところよくわからないのです。ただ、「デザイン」がどうであれ、Webサービス開発的な視点では、やはりイテレーティブなプロセスは正しいのではと感じる。自分のスタンスとしては、デザインの大切さをちゃんと自覚しながら、デザインをどうやってうまくエンジニアリング的なプロセスに乗っけていくのか、というところでこれからもしばらく悩んでいくべきなんだろうなあという感じ。まだまだ、答え出なさそう…。

個々のプレイヤーにとってアンコントローラブルな状況がなくなるのが Git の一番の素晴らしさでは?

会の後、デザイナー数名で飲みながら話してて、P4Dに来るようなデザイナーは、本来、何かを人に任せておいて分業するのを比較的好まない、全部自分一人でやりたくなっちゃうようなタイプのデザイナーなのに、なんでGitを使うとチームプレイをすごく大事に思うようになるのか、すごく不思議だという話をしてて、これは本当にそう思う。みんな自分1人の小宇宙を作って、そこで自分のやりたいデザインやWebサービスを実現させたくてプログラミングやりたいなーって思うようになったのに、Git以降は、誰かと一緒に作る良さをすごく感じるようになった。不思議だ。
これおそらく、Gitのお陰で、自分にとってアンコントローラブルなブラックボックスがだいぶ少なくなり、何かを変えたいと思えば自分自身の手で変えられる状況が常に手元にあるというのが大きそうだ。この意思決定プロセスの民主化を思わせる設計思想が、自分が一番 Gitを素晴らしいと感じる点。みんなで一緒に作っていながら、全体が個々の意思に沿わない流れになってしまうことが(少なくともコードの中で起きていることにおいては)、GitやGitHubというツールを有効に使うことによってだいぶ減るのだと思う。

もう少しきちんとデザインと向き合わないとな

長年デザイナーをやってるわけですが、デザインは楽しい反面本当にしんどい。自分のレベルも伸びしろも見えてきて、何かちょっと努力しただけで目に見える成長をするのが難しいような状況があり、反面プログラミングっぽい分野は、自分にとって異分野なので、大したない事でも、ちょっと成長しただけで、すごく達成感を感じる事ができる。周りにも、デザイナーなのにすごいねって褒めてもらえる。大したことないのに。あー、こういうのって楽な方に実は逃げてるよね。安易だしズルいよね。っていう話をした。そうなんです。RPGでもレベル低いうちはヘボい敵でレベル上がって嬉しいんですね。こうやってるうちに、デザインがおろそかになり、結果的にどっちも中途半端な人になる(なってる!)のを避けないとまずいなっていうのはすごく思う。
自分や周りのP4Dで会った仲良いデザイナーたちは、プログラマになりたくてコードを書いてるわけじゃなくて、自分のやりたいデザインをやりたいから、自分のデザインでぼくの考えた最強のWebサービスが作りたいからコードを書くようになっただけで、おそらく普通にデザインがやりたいからコードを書くようになっただけなのだよなー(というかプログラミングっぽいことやればやるほど自分にはガチのプログラマは無理だろって思えてくる…)。
そんなわけで、もうちょっとちゃんとデザインをやろうと思ったのが、一番のこの日の成果でした。
Git は素晴らしい!