競合の解決

JOSMを使ってステキなデータを作成し、データをアップロードするときに、以下のようなメッセージが表示されることがあります。

conflict detected

あなたが編集を行う場合に、その地域のデータをダウンロードし、その中に例えば、ノードAというポイントデータがあったとします。あなたが編集作業を行っている間に、誰かが同様にノードAをダウンロードし、変更を加え、なおかつその内容をOpenStreetMapへ保存しました。その状態で、あなたもノードAを変更してアップロードしようとすると、OSM上にあるデータは2つの変更者によって異なる内容が編集されたことになります。そのため、JOSMはノードAについてどちらの情報が正しく保存されるべきか、判断がつかなくなります。

競合とは

状況によっては、JOSMは競合を内部で自動的に判定して処理し、以下のようなメッセージを表示させます:

resolved automatically

このメッセージは競合が発生した際にJOSMが自動的に処理を行った際に表示され、既に他のユーザによって対象のオブジェクトが削除されたために、あなたのローカルPC上に存在したデータがメインサーバへアップロードされなかった、ということを意味します。

ただしそうした自動的な処理が行えないようなデータの競合が発生した場合は、JOSM上で少々複雑な処理を行い、どちらの編集がよりよく現状をあらわしているか、ユーザが判断を行う必要があります。これはつまり、その競合についてどのように処理を行うかを、あなたが決める必要がある、ということを意味しています。

  • 競合が発生した場合、以下のような ダイアログリスト が表示されます: warning unresolved

  • このウィンドウは、あなたの行った編集になんらかの競合が含まれることを示唆しています。サーバ側の情報とあなたの編集内容を比較することで、そこで示唆されている編集の内容を修正することが可能となります:

check on server

  • このメッセージでは、あなたが削除したノードがまだ他のウェイによって使用されている(参照されている)ため、ほんとうに削除してしまってよいノードなのか、という確認を表示させています。この状況を解決するには、JOSMの操作をもう一度行うことで、データをアップロードする前に競合を解決させる必要があります:

still in use

競合の解決

競合を解決する方法は非常に簡単ですが、その表示をJOSMではじめて見る場合、とても理解しづらい内容であることは事実です。ただし、基本的にJOSMで表示されるひとつひとつの競合は、あなたの編集内容と、サーバ上の編集内容のどちらを2つの選択肢のどちらかを編集結果として残すかを選ぶことで解決することができます。

“僕の編集の方がよいに決まってる!”と意見ももっともですし、たぶん実際にそうかもしれないのですが、そのときはこの章の最初で説明した内容をもう一度思い出してみてください。あなたが多くの編集を行っている間、そこに含まれるデータの一部を、別のマッパーが詳細に編集している、ということもありえます。あなたの編集を彼らの編集よりも優先させる、ということは、彼らが追加したさまざまな情報を廃棄する、という意味でもあります。そのため、いったん彼らの編集を優先させる、あるいはあなたの編集内容と彼らの編集内容をマージさせる、ということはとても意味のあることです。

  • 競合ウィンドウが表示された場合、“ … のみを同期” を選択するのが最善です。競合の解決を複数のオブジェクトに対して行わなくてはいけない場合があるかもしれませんが、その場合もひとつずつ行ってゆくほうがよいです。

synchronize node

このボタンをクリックすると、競合に関する詳しい情報がポップアップ表示されます。エラーメッセージはパッと見た限りではとても難解に見えますが、実際の内容はたいへんシンプルです。実際にデータの競合が発生している部分は、赤い四角形のシンボルが上部のタブに表示されます。以下にあげている競合の例では、データが持っているプロパティについて、オブジェクトの位置情報や削除状態についてが競合しています。それぞれの競合状態が発生する理由は以下のとおりです。

競合の種類:

  • プロパティ: オブジェクトの緯度経度が変更された、あるいは削除された
  • タグ: 付与されているタグに整合性がない
  • ノード: お互いのウェイで、含まれるノードが異なっている
  • メンバー: お互いのリレーションで、含まれるメンバーが異なっている

properties with conflicts

競合が検知されるのは、内容が異なる2つの編集が検知された時だけです。3つ以上の競合が同時に検知された場合は、1つの競合を解決してアップロードしようとするその都度、競合の通知が行われます。そのため、競合の解決を1回行う毎に解決できるのは、3つ以上のオブジェクトの間で競合があった場合にも、そのうちの2つの間だけです。解決の際には、あなたの編集を適用してもかまいませんし、他のマッパーが編集した内容を適用したり、その2つをマージしてもかまいません。

  • 以下の例では、データのマージという選択肢はありません。あなたの行った編集のほうが正しいと思う場合はあなたのバージョン、あるいは最初のカラムをクリックします。別のマッパーが編集した内容のほうがより正しいと思う場合は、別マッパーのバージョンをクリックしてください。

conflicts resolved

  • より正しいと思われるデータを選択し終わったら、 “競合の解決”をクリックします。いくつかのポップアップメッセージが表示され、あなたの編集全体をアップロードすることが可能な状態になります。
  • さらにいくつかの編集を行ったら、 ‘アップロード’ をクリックしてください。以下のポップアップが表示されます:

command stack

  • 競合リストダイアログがウィンドウに表示されます。ウィンドウに表示されているのが、現在の競合の一覧です。まだ未解決状態の競合が、ウィンドウのヘッダ部分に表示されます。クリックを行うことで、それら競合を選択肢たり、解決したりすることができます。いちどに複数の競合が発生している場合に便利です。

one unresolved

  • すべての競合を解決するまで、アップロードを行うことはできません。

競合を回避するための方法

こまめなアップロード

競合の発生数や頻度を抑えるには、編集した内容をこまめにアップロードすることが大切です。競合は、ローカルサーバでなんらかの作業が行われ、その内容をアップロードしている最中にそのエリアを誰かが編集するときに発生しがちです。あなたが編集する地域をまずダウンロードし、編集を行い、すぐにアップロードするのが最善の方法です。ダウンロードしてからアップロードするまでに長い時間がかかってしまうと、その間にその地域を他のマッパーが編集してしまう可能性が高くなります。

データをダウンロードした地域だけを編集する

データの編集を、ダウンロードした地域だけを対象に行うことで競合のリスクを抑えることが可能です。なるべく、ダウンロードした領域から外にあるデータを編集しないようにしてください。JOSMを使っている場合、ダウンロードしていない領域は背景画像が暗い色の射線で色分けされるので、とても簡単に見分けることが可能です。

edit outside area

まとめ

JOSMで編集を行う場合、競合が発生する可能性は常にあります。競合が発生するのは、1つのオブジェクトを同時に2人以上のマッパーが編集した場合です。競合が発生する理由を理解することにより、発生した事象をどのように扱ったらよいかがわかるようになり、OpenStreetMapに対してよりよい編集内容を、きちんと理解しながら保存することができるようになります。