開発部の8lukaです。
当社オフィスの開発部執務スペースでは、各自にパーティションつきの座席とデスクトップPCが割り当てられています。 2021年2月現在リモートワーク中心の業務体制が敷かれている状況ではオフィスの座席の物理的な位置の意味は薄いのですが、 出社時には従事している案件に応じて近い位置でやりとりができることが重要で、時々席替えが実施されます。
今回は、そんな席替えの効率化の試みについての簡単なレポートです。
席替えの段取り
席を移動するといっても、机ごと動かすことは稀で、大抵は機材や荷物を各メンバーが新しい席へ運んでいくことになります。 まずある人が荷物を移し、その空いた席へ別の人が入ってくる。この繰り返しです。 最初に動くのは誰なのか。どことどこは同時に移動できる、あるいは同時に移動しなければならないのか。スムーズな席替えのためには、段取りが欠かせません。
この画像例の規模ならプリントアウトを手描きで辿るなりで何とでもなるのですが、ある日の席替えでは数十人が一斉に移動することになり、段取りが複雑化してしまいました。席替えを主導する立場の方は多忙を極める中、まもなく開始時刻を迎えてしまいます。開発部のみんなが困ってしまう前に、計算機の力で助けになれないでしょうか?
Graphvizで段取りを可視化する
ここで、グラフを可視化するGraphvizのことを思い出しました。これを使えば 席替えをグラフで表現することで、段取りが可視化される かもしれません。
直前の小さな例で試してみましょう。席替えは次のようなグラフになります1。
% cat sekigae-small.dot
digraph sekigae { graph [rankdir = LR]; node [shape = box]; 1 2 3 4 5 6; node [shape = ellipse]; // before 1 -> 社員A 2 -> 社員B 3 -> 社員C 4 -> 社員D 5 -> 社員E // after 社員C -> 1 社員D -> 2 社員A -> 3 社員B -> 5 社員E -> 6 }
冒頭に書式設定が数行ありますが、そのあとは
- 移動前の座席については
席番号 -> 人
を - 移動後の座席については
人 -> 席番号
を
ひたすら書き並べるのみです。わかりやすいでしょ?
それでは Graphviz で可視化します。コマンドは dot
です。
% dot -Tpng sekigae-small.dot > sekigae-small.png
Eさんがまず動かなければならないことや、AさんとCさんはえいやっと入れ替わってもらわないといけなさそうなことなどが、一目瞭然ですね。
実際の席替えは、以下のようなグラフになりました。
% cat sekigae-large.dot
digraph sekigae { node [shape = box]; 96 97 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 121 125 12 14 15; node [shape = ellipse]; // before 12 -> 社員A 14 -> 社員B 96 -> 社員C 97 -> 社員D 99 -> 社員E 100 -> 社員F 101 -> 社員G 102 -> 社員H 103 -> 社員I 104 -> 社員J 105 -> 社員K 106 -> 社員L 107 -> 社員M 108 -> 社員N 109 -> 社員O 110 -> 社員P 111 -> 社員Q 112 -> 社員R 113 -> 社員S 114 -> 社員T 115 -> 社員U 116 -> 社員V 117 -> 社員W 121 -> 社員X 125 -> 社員Y // after 社員E -> 12 社員A -> 14 社員B -> 15 社員N -> 96 社員L -> 97 社員M -> 99 社員O -> 100 社員F -> 101 社員P -> 102 社員Q -> 103 社員C -> 104 社員D -> 105 社員S -> 106 社員U -> 107 社員V -> 108 社員W -> 109 社員T -> 110 社員I -> 111 社員J -> 112 社員K -> 113 社員H -> 115 社員G -> 116 社員R -> 117 社員Y -> 121 社員X -> 125 }
その可視化は次のとおりです。
Graphviz の サポートするレイアウトごとにコマンドが何種類かあります が、今回は neato
がいい感じでした。
% neato -Tpng < sekigae-large.dot > sekigae-large.png
1本の長いチェーンと4つのループがあります。 特に一番大きなループは、どこか空きスペースに荷物を退避する等の工夫が必要そうです。この中にいる人たち2、がんばってー!
まとめ
- 座席表を宣言的に記述することで、席替えを可視化できました。Graphvizすごい。
- タスクの依存関係として捉えると「Aさんが1番から3番へ移動する」ような記述が一見して最小単位に思われるかもしれませんが、今回は結果的に、それすらGraphvizが導出しています。
- コマンドラインで画像を生成するのも簡単ではあるのですが、技術者以外でも気軽に使えるように Viz.js 等でweb化するのも楽しそうです。
採用情報
朝日ネットでは新卒採用・キャリア採用を行っております。